1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Datenbank Filtern mit Objekt

    • BugFix
    • 19. September 2019 um 16:18

    Kennt ihr sicher: Datenbankabfragen und Ergebnismenge für nächste Abfrage nutzen (z.B. bei Filtern von Listen während der Eingabe von Begriffen)

    Ich habe das mal für SQLite-DB in Verbindung mit AutoItObject realisiert. Als Bsp. ist meine PLZ-DB (habe ich selbst erstellt, könnt ihr frei nutzen) eingebunden:

    Vielleicht könnt ihr es auch verwenden.

    Spoiler anzeigen
    C
    ;-- TIME_STAMP   2019-09-19 16:08:29
    
    #include "AutoitObject.au3"   ; https://www.autoitscript.com/forum/topic/110379-autoitobject-udf/
    #include <Array.au3>
    #include <SQLite.au3>
    Opt('MustDeclareVars', 1)
    
    _AutoItObject_StartUp()
    
    _SQLite_Startup(@ScriptDir & "\sqlite3.dll", False, 1) ; Dll im angegebenen Pfad - hier im Skriptordner
    OnAutoItExitRegister ("_OnExit_objFilter")
    
    Global $g_hSQL
    Global $g_oFilter ; DON'T USE ANY OTHER VARIABLE for the filtering object! It's required in exit function.
    
    ; assign your database and table
    Global $dbPLZ = "C:\CODE\AutoIt\PLZ\plz_brd.db" 
    Global $sTable = 'plz'
    
    ; create the global filter object
    Global $g_oFilter = _objFilter_Create($dbPLZ, $sTable)
    
    ; create a new instance for filtering
    Global $oPLZ = $g_oFilter.new()
    
    ; filter for one condition in each process
    ; the next filter process will uses only the results from previous filtering
    ; filter operators:  ==  =  !=  <>  >  <  >=  <=  !<  !>  LIKE  IN
    
    Global $aFilter
    ; you can filter one by one and show results between as array:
    $aFilter = $oPLZ.filter('ort', 'in', 'Halle, Halle (Saale)').result
    If IsArray($aFilter) Then _ArrayDisplay($aFilter)
    
    $aFilter = $oPLZ.filter('plz', 'like', '0611%').result
    If IsArray($aFilter) Then _ArrayDisplay($aFilter)
    
    ; ...or combine the calls
    ;~ $oPLZ.filter('ort', 'in', 'Halle, Halle (Saale)').filter('plz', 'like', '0611%')
    
    ; get the result as array
    ;~ $aFilter = $oPLZ.result
    ;~ If IsArray($aFilter) Then _ArrayDisplay($aFilter)
    
    
    
    
    
    ;============================== functions ==========================================================
    
    ; Opens the database and references to the named table ($g_hSQL)
    ; Creates temporary tables with the same structure to storing/switching results ($g_oFilter.tmptable1 /.tmptable2)
    ; The return must store in "$g_oFilter" for deleting the temporary tables when the script ends
    Func _objFilter_Create($_dbToFilter, $_sTable)
        Local $self = _AutoItObject_Create()
        _AutoItObject_AddProperty($self, 'sqlcreate', $ELSCOPE_PUBLIC) ;-- the table create string
        _AutoItObject_AddProperty($self, 'table',     $ELSCOPE_PUBLIC) ;-- name of the referenced table
        _AutoItObject_AddProperty($self, 'fields',    $ELSCOPE_PUBLIC) ;-- dictionary for storing the tables fields names
        _AutoItObject_AddProperty($self, 'tmptable1', $ELSCOPE_PUBLIC) ;-- temporary table for storing the filtered records
        _AutoItObject_AddProperty($self, 'tmptable2', $ELSCOPE_PUBLIC) ;-- temporary table for switching the filtered records
        _AutoItObject_AddMethod($self, 'new', '_objFilter_New')
        _AutoItObject_AddMethod($self, 'filter', '_objFilter_Filter')
        _AutoItObject_AddMethod($self, 'result', '_objFilter_Result')
        $self.table = $_sTable
        Local $aResult, $iRows, $iColumns
        ; ask for sql create string
        Local $sSQL = StringFormat("SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)" & _
                                   "WHERE tbl_name LIKE '%s' AND type!='meta' ORDER BY type DESC, name;", $_sTable)
        $g_hSQL = _SQLite_Open($_dbToFilter)
        _SQLite_GetTable($g_hSQL, $sSQL, $aResult, $iRows, $iColumns)
        $self.sqlcreate = $aResult[$aResult[0]]
        ; get the field names and store them
        Local $aFields = StringRegExp($self.sqlcreate, '\[([^\]]+)\] ', 3)
        $self.fields = ObjCreate('Scripting.Dictionary')
        For $i = 0 To UBound($aFields) -1
            $self.fields.add($aFields[$i], $i)
        Next
        ; create temporary tables with unique name
        $self.tmptable1 = __GUID()
        $self.tmptable2 = __GUID()
        Local $sCreateTmp = StringReplace($self.sqlcreate, 'CREATE TABLE ' & $_sTable, 'CREATE TABLE ' & $self.tmptable1)
        _SQLite_Exec($g_hSQL, $sCreateTmp)
        $sCreateTmp = StringReplace($self.sqlcreate, 'CREATE TABLE ' & $_sTable, 'CREATE TABLE ' & $self.tmptable2)
        _SQLite_Exec($g_hSQL, $sCreateTmp)
        Return $self
    EndFunc
    
    Func _OnExit_objFilter()
        If $g_hSQL > 0 Then
            _SQLite_Exec($g_hSQL, "DROP TABLE " & $g_oFilter.tmptable1)
            _SQLite_Exec($g_hSQL, "DROP TABLE " & $g_oFilter.tmptable2)
            _SQLite_Close($g_hSQL)
        EndIf
        _SQLite_Shutdown()
        _AutoItObject_Shutdown()
        Exit
    EndFunc  ;==>_OnExit_objAU3
    ;===================================================================================================
    
    ;============================== methodes ===========================================================
    
    Func _objFilter_New($self, $_obj=Null)
        If IsObj($_obj) Then
            Return _AutoItObject_Create($_obj)
        Else
            Return _AutoItObject_Create($self)
        EndIf
    EndFunc
    
    Func _objFilter_Filter($self, $_CompareField, $_CompareOp, $_CompareValue)
        ; check the field name
        If Not $self.fields.exists($_CompareField) Then Return $self
        ; check for right operator
        Local $sListOp = " == = != <> > < >= <= !< !> LIKE IN "
        If Not StringInStr($sListOp, ' ' & $_CompareOp & ' ') Then Return $self
        ; from which table get results - on first call: "$self.table", otherwise "$self.tmptable1"
        Local $sAskTable = __TableCountRows($self.tmptable1) = 0 ? $self.table : $self.tmptable1
        ; temporary the result will stored in "$self.tmptable2", so it need to be empty
        __TableEmpty($self.tmptable2)
        ; sql-query, store result in temp table2
        Local $sSQL
        If $_CompareOp = 'IN' Then
            Local $sIN, $aTmp = StringSplit($_CompareValue, ',')
            For $i = 1 To $aTmp[0]
                $sIN &= '"' & StringStripWS($aTmp[$i], 3)  & '"' & ','
            Next
            $sSQL = StringFormat("INSERT INTO %s SELECT * FROM %s WHERE %s IN (%s);", $self.tmptable2, $sAskTable, $_CompareField, StringTrimRight($sIN, 1))
        Else
            $sSQL = StringFormat("INSERT INTO %s SELECT * FROM %s WHERE %s %s '%s';", $self.tmptable2, $sAskTable, $_CompareField, $_CompareOp, $_CompareValue)
        EndIf
        _SQLite_Exec($g_hSQL, $sSQL)
        ; for further use: empty .tmptable1 and store there the result
        __TableEmpty($self.tmptable1)
        __TableCopyAll($self.tmptable2, $self.tmptable1)
        Return $self
    EndFunc
    
    Func _objFilter_Result($self)
        Local $aResult, $iRows, $iColumns
        Local $sSQL = StringFormat("SELECT * FROM %s;", $self.tmptable1)
        _SQLite_GetTable2d($g_hSQL, $sSQL, $aResult, $iRows, $iColumns)
        Return $aResult
    EndFunc
    ;===================================================================================================
    
    
    ;============================== internal functions =================================================
    Func __GUID()
        Local $oTypeLib = ObjCreate("Scriptlet.TypeLib")
        Local $GUID = 'tmp' & StringReplace(StringReplace(StringReplace($oTypeLib.GUID, '}', ''), '{', ''), '-', '_')
        Return $GUID
    EndFunc
    
    Func __TableCountRows($_sTable)
        Local $aResult, $iRows, $iColumns
        Local $sSQL = StringFormat("SELECT COUNT(*) FROM %s", $_sTable)
        _SQLite_GetTable($g_hSQL, $sSQL, $aResult, $iRows, $iColumns)
        Return $aResult[$aResult[0]]
    EndFunc
    
    Func __TableCopyAll($_sTableFrom, $_sTableTo)
        Local $sSQL = StringFormat("INSERT INTO %s SELECT * FROM %s;", $_sTableTo, $_sTableFrom)
        _SQLite_Exec($g_hSQL, $sSQL)
    EndFunc
    
    Func __TableEmpty($_sTable)
        Local $sSQL = StringFormat("DELETE FROM %s;", $_sTable)
        _SQLite_Exec($g_hSQL, $sSQL)
    EndFunc
    ;===================================================================================================
    Alles anzeigen

    Dateien

    objFilter.au3 7,07 kB – 624 Downloads plz_brd.zip 232,04 kB – 616 Downloads
  • PSPad "IDE" als Alternativen zu SciTE4AutoIt3

    • BugFix
    • 19. September 2019 um 08:54
    Zitat von Professor Bernd

    Eine ganz schwierige Sache: Run, compile, compile with arguments ==> Herausfinden wie man alle 3 einbinden kann, inkl. Ausgabe im Output-Fenster.

    Das kannst du analog umsetzen, wie hier in den Anpassungsversuchen von NPP gezeigt: Notepad++ und AutoIt

  • PSPad "IDE" als Alternativen zu SciTE4AutoIt3

    • BugFix
    • 18. September 2019 um 08:26

    Über 90% der aufgeführten Eigenschaften sind auch (mit AddOns) in SciTE möglich. SciTERu hat dies in seiner Version bereits implementiert.

    PSPad all das beizubringen, was SciTE von Haus aus kann, erachte ich als zu aufwändig.

  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 16. September 2019 um 15:36
    Zitat von Professor Bernd

    Warum so eine alte Version? Hat das Vorteile? :/

    JA.

    Wenn man externe Bibliotheken in Lua-Skripten einbinden möchte bedarf das des Befehls require. In neueren SciTE-Versionen funktioniert das nicht mehr (Details s. hier)

    Deshalb:

    - neueste SciTE4AutoIt-Version installieren (damit geänderte Funktionen etc. bekannt gemacht werden)

    - in der Installation die scite.exe gegen eine alte Version austauschen. (3.6.6 funktioniert definitiv, evtl. auch noch die Folgeversion, habe ich aber nicht probiert)

  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 16. September 2019 um 09:53
    Zitat von Professor Bernd

    Meine Version:

    SciTE

    Version 4.1.2

    Feb 13 2019 23:07:51

    by Neil Hodgson.

    Updated by Jos

    LUA habe ich kontrolliert, da ist nur das drin, was original drin war. Die SciteUser.properties habe ich während meiner Tests hierzu ganz entfernt.

    Alles anzeigen

    Die Versionsnummern der Installation kann man leider nicht direkt mit denen des Setups vergleichen, da in der Installation eine andere Version gezeigt wird als im Namen der Installationsdatei.

    Ich verwende z.B. SciTE v3.6.6 (Installationsdatei: v16.612.1119.0-SciTE4AutoIt3). Eine Ähnlichkeit ist über das Datum möglich. (Oder aber herunterladen, SciTE.exe <Eigenschaften-Version>)

    Du kannst ja mal eine ältere Version installieren und Prüfen ob es dann funktioniert.

  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 16. September 2019 um 09:33
    Zitat von Professor Bernd

    Statt mehrere Dokumente in 1 Editor-Fenster mit mehreren Tabs zu laden, mag ich es lieber, wenn man pro Dokument 1 Editor-Fenster hat. Ich will NICHT ein und das selbe Dokument nochmal öffnen, weder in Einzel-Fenster, noch in Tabs.

    • Anzahl SciTE Instanzen abfragen
    • für jede Instanz: Iteriere durch die Tabs und vergleiche den aktiven Dateinamen mit dem zu öffnenden Dateinamen
    • findest du ihn: aktiviere den Tab
    • findest du ihn nicht: öffne neu

    Die erforderlichen Funktionen zur Abfrage findest du in diversen Beiträgen.

  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 16. September 2019 um 09:20
    Zitat von water

    Andererseits hätte ich genau diese Möglichkeit gerne: 2 Fenster mit derselben Datei um unterschiedliche Bereich der Datei nebeneinander darstellen zu können z.B. für Vergleiche des Codes.

    Eine erste Version dazu hatte ich bereits 2008 erstellt (https://www.autoitscript.com/forum/topic/77…th-same-script/).

    Die folgende Version berücksichtigt auch, dass die Taskbar unterschiedlich positioniert sein kann:

    Python
    #cs
    Das Skript läuft bei mir kompiliert im Hintergrund (wird im Ordner Autostart gestartet).
    Mit Aufruf des Hotkeys wird das aktuell aktive Skript in zweiter Instanz geöffnet, die Fenster nehmen jeweils die Hälfte der verfügbaren Bildschirmbreite ein. Wenn man zwischen den Instanzen hin- und herspringt und evtl. Änderungen vornimmt, sollte man diese auch sofort in dieser Instanz speichern. Beim Wechsel in die andere Instanz fragt SciTE dann, ob wegen der Änderungen das Dokument neu geladen werden soll.
    Wird die zweite Instanz geschlossen, wird das Fenster der ersten Instanz wieder auf Vollbildgröße gestellt.
    
    In der SciTEUser.properties sind dazu folgende Einträge erforderlich:
    # Deaktivieren der Prüfung, ob SciTE bereits gestartet ist
    check.if.already.open=0
    # Shortcut mit verfügbarer Programmnummer (hier 43) erstellen:
    # 43 SciTE-2ndWindow
    command.43.*.au3="$(SciteDefaultHome)\SciTE.exe" "$(FilePath)"
    command.name.43.*.au3=2nd SciTE Window
    command.save.before.43.*.au3=1
    command.is.filter.43.*.au3=1
    command.shortcut.43.*.au3=Ctrl+Alt+T
    #ce
    
    
    
    
    Opt("TrayIconHide", 1)
    
    Global $iTBLeft, $iTBTop, $iTBRight, $iTBBottom, $aTB = _GetTaskbarPosition()
    Global $iTBWidth = 0, $iTBHeight = 0, $iLeft = 0, $iTop = 0
    $iTBLeft   = $aTB[0]
    $iTBTop    = $aTB[1]
    $iTBRight  = $aTB[2]
    $iTBBottom = $aTB[3]
    
    If $iTBLeft = 0 And $iTBTop = 0 Then
        If $iTBRight < $iTBBottom Then
            $iTBWidth = $iTBRight
            $iLeft = $iTBWidth
        Else
            $iTBHeight = $iTBBottom
            $iTop = $iTBHeight
        EndIf
    ElseIf $iTBTop <> 0 Then
        $iTBHeight = $iTBBottom - $iTBTop
    Else
        $iTBWidth = $iTBRight - $iTBLeft
    EndIf
    
    Global $List, $iWidth = @DesktopWidth - $iTBWidth, $iHeight = @DesktopHeight - $iTBHeight
    
    While True
        Do
            Sleep(500)
            $List = WinList('[CLASS:SciTEWindow]')
        Until $List[0][0] = 2
        WinMove($List[1][1], '', $iLeft, $iTop, $iWidth/2, $iHeight)
        WinMove($List[2][1], '', $iLeft + ($iWidth/2), $iTop, $iWidth/2, $iHeight)
        Do
            Sleep(500)
            $List = WinList('[CLASS:SciTEWindow]')
        Until $List[0][0] = 1
        WinMove($List[1][1], '', $iLeft, $iTop, $iWidth, $iHeight)
    WEnd
    
    Func _GetTaskbarPosition()
        Local $tRect = DllStructCreate("long;long;long;long"), $hWnd, $ret
        $ret = DllCall("user32.dll", 'long', "FindWindow", 'str', "Shell_traywnd", 'str', "")
        $hWnd = $ret[0]
        DllCall("User32.dll", "int", "GetWindowRect", "hwnd", $hWnd, "ptr", DllStructGetPtr($tRect))
        Local $aRet[4] = [DllStructGetData($tRect, 1),DllStructGetData($tRect, 2), _
                          DllStructGetData($tRect, 3),DllStructGetData($tRect, 4)]
        Return $aRet
    EndFunc  ;==>_GetTaskbarPosition
    Alles anzeigen
  • Diskussion zu: FAQ SciTE Editor

    • BugFix
    • 12. September 2019 um 21:55
    Zitat von Professor Bernd

    Ist das Bulk-Rename von Variablen (siehe hier) mittlerweile integriert worden?

    Nein, hatte ich noch nicht wieder auf der Agenda.

    Zitat von Professor Bernd

    Mit check.if.already.open=0 in z. B. SciteUser.properties kann man SciTE veranlassen, Dokumente in mehreren SciTE-Instanzen (Fenster) zu laden, statt in mehreren Tabs. Leider verhindert SciTE dann nicht mehr, dass ein und das selbe Dokument mehrfach geöffnet wird. Wie kann man beides erreichen?

    Das Problem hatte ich noch nie. Eine zweite Instanz öffnen hat für mich nur dann Sinn, wenn ich ein bereits geöffnetes Skript parallel in anderen Abschnitten betrachten möchte. Somit ist es zwingend erforderlich, dass das selbe Dokument geöffnet werden kann.

    Anderes Einsatzgebiet einer anderen Instanz habe ich noch nicht gefunden. - Wozu brauchst du das?

    Zitat von Professor Bernd

    Z. B. wie kriegt man pink, oder grau? Und wie das Springen in die angegebene Zeile, wenn man doppelklickt?

    s. hier: Farbspielereien bei der Konsolenausgabe

  • RegEx gesucht

    • BugFix
    • 8. September 2019 um 18:21

    Das Pattern muß hinten beginnen zu suchen. Dazu fügst du am Ende des Pattern ein $ an.

  • Firebird SQL - Abfrageproblem

    • BugFix
    • 6. September 2019 um 10:13

    Nach vielem Probieren: GROUP BY war des Pudels Kern.

    Hier die gesamte Lösung:

    Spoiler anzeigen
    SQL
    /* SQL1
       Kundennummern für inaktive Kunden &  letzte RE */
    select 
      a.KUNDENNR, 
      max(b.BELEGNR) BELEGNR
    from 
      Kunden a,
      Beleg b
    where 
      a.KUNDENNR < 50000 and
      a.ADRESSGRP = "8" and
      b.BELEGTYP = 'V' and
      b.BELEGART = 'RE' and  
      b.ADRESSNR = a.KUNDENNR
    group by KUNDENNR
    ;
    
    /* SQL2
       Zuordnen Belegjahr */
    select 
      a.KUNDENNR, 
      a.BELEGNR,
      GetYear(b.BELEGDAT) RE_JAHR
    from
      "&&SQL1" a,
      Beleg b
    where
      b.BELEGTYP = 'V' and
      b.BELEGART = 'RE' and 
      b.BELEGNR = a.BELEGNR
    ;
    
    /* SQL3 
       GetYear() für HEUTE
       Ich brauche keine Datenquelle, da das Statement aber eine Tabelle erfordert, wird eine kleine Tabelle angegeben */
    select distinct GetYear(GetDate('NOW')) HEUTE_JAHR
    from Personal
    ;
    
    /* SQL4
       KUNDENNR für RE älter 10 Jahre */
    select
      a.KUNDENNR
    from 
      "&&SQL2" a, 
      "&&SQL3" b
    where
      (b.HEUTE_JAHR - a.RE_JAHR) > 10
    order by
      a.KUNDENNR
    ;
    Alles anzeigen
  • Firebird SQL - Abfrageproblem

    • BugFix
    • 6. September 2019 um 09:13
    Zitat von BananaJoe

    Also muss man Belege eigentlich 11 Jahre aufbewahren. Nur der guten Ordnung halber.

    Genau genommen: max. 10 Jahre +364 Tage (Beleg 1. Jan) fallend. :P

    Aber hast Recht, es ist richtiger mit dem Belegjahr zu rechnen. Wenn Jahr(HEUTE) - Jahr(Beleg) > 10, dann kann weg.

  • Firebird SQL - Abfrageproblem

    • BugFix
    • 5. September 2019 um 19:58

    Hi,

    ich möchte Routinen erstellen um (gemäß DSGVO) Datensätze, die die Aufbewahrungsfrist überschritten haben zu löschen/anonymisieren.

    Die längsten Fristen gelten für Rechnungen (10 Jahre), d.h. alle zugehörigen Kundendaten müssen ebenso lange aufbewahrt werden. Ist die letzte Kundenaktivität (Verkaufsrechnung) länger als 10 Jahre her, müssen alle Kundendaten gelöscht oder anonymisiert werden.

    Soweit, so sinnlos aufwändig. <X

    Mein Lösungsansatz war folgender:

    - alle Kundennummern mit Status "nicht mehr aktiv" abfragen

    - in der Belegtabelle die jüngste Verkaufsrechnung ( MAX(Belegnr) ) für jede dieser Kundennummern ermitteln

    - feststellen, ob Differenz größer als 119 Monate (min. 120 Monate, also 10 Jahre)

    - JA - Adressnummer ausgeben

    - NEIN - 0 ausgeben

    - mit den Adressnummern dann die erforderlichen UPDATE-Statements durchführen

    Für eine vorhandene Rechnungsnummer klappt die Ermittlung gut:

    Spoiler anzeigen
    SQL
    /* DATETOJAHRMO liefert nummerischen Ausdruck für den Monat */
    
    /* SQL1 
       DATETOJAHRMO für Belegdatum */
    select DATETOJAHRMO( Belegdat ) NUM_MON
    from Beleg
    where 
      BELEGTYP = 'V' and
      BELEGART = 'RE' and
      BELEGNR = 990026
    ;
    
    /* SQL2 
       DATETOJAHRMO für HEUTE
       Ich brauche keine Datenquelle, da das Statement aber eine Tabelle erfordert, wird eine kleine Tabelle angegeben */
    select distinct DATETOJAHRMO(GetDate('NOW')) TODAY_MON
    from Personal
    ;
    
    /* SQL3
       Ermittle, ob Differenz "Heute - Belegdatum" größer 119 Monate ist (also min. 120 Mon, = 10 Jahre) */
    select
      case
        when (b.TODAY_MON - a.NUM_MON > 119) then c.ADRESSNR
        else 0
      end OLDER_10Y
      from "&&SQL1" a, "&&SQL2" b, Beleg c
      where 
        c.BELEGTYP = 'V' and
        c.BELEGART = 'RE' and
        c.BELEGNR = 990026
    ;
    Alles anzeigen

    Mein Problem ist aber, für die Liste der inaktiven Kunden die jeweils jüngste Rechnungsnummer abzufragen, da ich dafür MAX() benutze und diese Funktion ja nur einen Wert zurückliefert. Hier brauchte ich eine Möglichkeit in einer Schleife oder ähnlich zu arbeiten. Ich bin nicht so superfit mit SQL und kenne nicht alle Tricks, vielleicht kann mir jemand einen Tipp geben.

    Der Vollständigkeit halber, die Ermittlung der inaktiven Kunden und die MAX-Beleg Ermittlung:

    Spoiler anzeigen
    SQL
    /* Kundennummern für inaktive Kunden abfragen */
    select KUNDENNR 
    from Kunden
    where 
      KUNDENNR < 50000 and
      ADRESSGRP = "8"
    order by KUNDENNR
    ;
    
    /* jüngste Rechnungsnummer für einen Bsp.-Kunden */
    select max(BELEGNR) BELEGNR
    from Beleg
    where 
      BELEGTYP = 'V' and
      BELEGART = 'RE' and
      BELEGNR = 990026
    ;
    Alles anzeigen
  • Datenbankscript auslagern - Teil 2

    • BugFix
    • 30. August 2019 um 13:05
    Zitat von Code4Fun

    MyScriptA.aus soll dann ebenfalls in einer Schleife MyDB.au3 erneut aufgerufen werden

    Das ist quatsch.

    Mittels #include 'MyDB.au3' ist die Datei doch bereits eingebunden. Sie wird nicht ausgeführt, sondern die darin enthaltenen Funktionen und Konstanten stehen in deinem Hauptskript zur Verfügung.

    Also kannst du in jedem Skript, indem du die Funktionalität benötigst, deine Datei mit den Funktionen einbinden.

  • Datenbankscript auslagern - Teil 2

    • BugFix
    • 30. August 2019 um 10:30

    $sqlCon ist ein Objekt, das kannst du nicht mit ConsoleWrite ausgeben. Du kannst aber prüfen, ob es existiert: If IsObj($sqlCon) Then ConsoleWrite('OK')

    Auf die Inhalte des Objektes musst du mit den Funktionen der <MSSQL.au3> zugreifen, die das Objekt (Datenbank-Handle) als Parameter erwarten.

  • Bestimmte zeilen aus Textdatei

    • BugFix
    • 23. August 2019 um 12:40
    Zitat von Lottich

    Offenbar wird pro Zeile irgendwie alles benötigt, was jeweils durch ein Semikolon getrennt ist.

    Leider ist der TE bisher nicht eindeutig geworden, mit dem was er will. Somit sind wir fleißig am Glaskugel polieren.

  • Grafikspezialisten - GDIplus - kreisrundes Menü

    • BugFix
    • 23. August 2019 um 10:38

    Das sind ca. 5 Zeilen Code, die schreibt man bei Bedarf mal schnell. Ich hatte alte Skripte auf diese Weise aktualisiert, als Änderungen mit SQLite auftraten und auch bei Änderungen mit Script-Breaking-Chance in eigenen UDF handhabe ich das so. Wie gesagt, sind nur ein paar Zeilen Code, die du in einer Minute geschrieben hast. - Also ran (oder die von Andy empfohlenen Vorgehensweise, Fehler finden - in SciTE: Suchen & Ersetzen - fertig.).

  • Bestimmte zeilen aus Textdatei

    • BugFix
    • 23. August 2019 um 10:33
    Zitat von Musashi

    So wie ich es verstehe, möchte shakoon das Subpattern für die jeweilige Nummer erzeugen, also für :

    2.5000.0019 ==> 2\.5000\.0019

    Echt?

    Sorry, aber so tief unten habe ich nicht angesetzt beim Denken. :P Selbst wenn man mit RegEx wenig am Hut hat, sollte man zumindest ein wenig Initiative aufbringen um festzustellen, wie das bestehende Pattern die gewünschte Zahlenkombination ausfiltert. Und man braucht keine besonderen Fähigkeiten um zu erkennen, dass dort die Zahlenkombination ergänzt um Backslash vor jedem Punkt verwendet wird. Das sieht man sofort. :/

  • Grafikspezialisten - GDIplus - kreisrundes Menü

    • BugFix
    • 23. August 2019 um 09:38
    Zitat von Banana_2_Day

    Gibt es ein Skript, welches ältere Skripte automatisch auf Zeilen überprüft, die bei Verwendung der aktuellen AutoIt Version entfernt oder umbenannt werden müssen?

    Kannst du auch schnell selbst schreiben:

    - Verzeichnis mit *.au3 in Array lesen

    - für jede Datei:

    -- Datei lesen - Stringreplace(Variblaname_alt, Variablename_neu) - Datei überschreiben und schliessen

  • Bestimmte zeilen aus Textdatei

    • BugFix
    • 23. August 2019 um 09:32

    Du möchtest jetzt also alle zweiten Felder ohne Filterung.

    So gehts am Einfachsten (kannst du auf eine Einzelzeile oder die gesamte Datei anwenden):

    Python
    ; $sRead enthält deine Textzeile oder die gesamte Datei
    Local $sRepl = StringRegExpReplace($sRead, '\d+;([^;]+).+', '\1')
    ConsoleWrite($sRepl & @CRLF)
  • FAQ - SciTE Editor

    • BugFix
    • 22. August 2019 um 09:53

    SciTE in Mehrbenutzerinstallation ohne Adminrechte

    SciTE/AutoIt wurde von Admin (oder anderem User mit Adminrechten) installiert. Selbst hat man keine Adminrechte. Somit ist keine normale Funktionalität gewährleistet.

    Lösung:

    C:\Users\InstallationsUser\AppData\Local\AutoIt v3\SciTE

    nach

    C:\Users\NormalerUser\AppData\Local\AutoIt v3\SciTE

    kopieren und

    Umgebungsvariable SCITE_USERHOME

    auf dieses Verzeichnis setzen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™