_SQLite_QuerySingleRow seltsames Verhalten

  • Hallo,

    ich bin gerade dabei eine kleine Adressenverwaltung zu erstellen. Wenn man darin auf den Button klickt um den vorhergehenden bzw. nachfolgenden Datensatz anzuzeigen steigt mein Script aus. Der Fehler ist reproduzierbar und in folgendem kleinen Skript tritt er auch auf

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <SQLite.au3>
    #include <SQLite.dll.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)
    Opt('MUSTDECLAREVARS' ,1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sqldb = @ScriptDir & '\AutoAdress.s3db'

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    func _Main()
    _DatenbankAnlegen()

    [/autoit] [autoit][/autoit] [autoit]

    _dsFind('Select * from Adressen where Such<"SCHMITT" order by Such DESC') ;diese Zeile funktioniert
    _dsFind('Select * from Adressen where Such<"HUBER" order by Such DESC') ;diese nicht

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(1000)
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _DatenbankAnlegen()
    Local $sql, $res
    _FileCreate($sqldb)
    _SQLite_Startup ()
    If @error > 0 Then
    MsgBox(16, "SQLite Fehler", "SQLite.dll kann nicht geladen werden!")
    Exit
    EndIf
    _SQLite_Open($sqldb)
    If @error > 0 Then
    MsgBox(16, "SQLite Fehler", "Kann Datenbank nicht öffnen")
    Exit
    EndIf
    $sql = "CREATE TABLE [Adressen] ([AdrNr] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,[Such] VARCHAR(20) UNIQUE NOT NULL)"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "CREATE UNIQUE INDEX [idAdr] ON [Adressen]([Such] ASC,[AdrNr] ASC)"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "INSERT INTO Adressen (Such) VALUES ('MAIER');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "INSERT INTO Adressen (Such) VALUES ('SCHULZE');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "INSERT INTO Adressen (Such) VALUES ('SCHMITT');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "INSERT INTO Adressen (Such) VALUES ('HUBER');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "INSERT INTO Adressen (Such) VALUES ('MÜLLER');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "CREATE TABLE [Gruppen] ([GrpNr] INTEGER NOT NULL PRIMARY KEY,[Bezeichnung] VARCHAR(30) NOT NULL,[Vorfahre] INTEGER NOT NULL)"
    $sql = $sql & ";CREATE UNIQUE INDEX [idKinder] ON [Gruppen]([Vorfahre] ASC,[GrpNr] ASC)"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "INSERT INTO Gruppen(GrpNr,Bezeichnung,Vorfahre) VALUES ('1','Test1','0');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "Insert into Gruppen(GrpNr,Bezeichnung,Vorfahre) Values ('2','Test2','0');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "Insert into Gruppen(GrpNr,Bezeichnung,Vorfahre) Values ('3','Test1.1','1');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "Insert into Gruppen(GrpNr,Bezeichnung,Vorfahre) Values ('4','Test1.2','1');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "Insert into Gruppen(GrpNr,Bezeichnung,Vorfahre) Values ('5','Test2.1','2');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "Insert into Gruppen(GrpNr,Bezeichnung,Vorfahre) Values ('6','Test2.2','2');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "INSERT INTO Gruppen(GrpNr,Bezeichnung,Vorfahre) VALUES ('7','Test7','0');"
    $res = _SQLite_Exec (-1, $sql)
    $sql = "INSERT INTO Gruppen(GrpNr,Bezeichnung,Vorfahre) VALUES ('8','Test8','0');"
    $res = _SQLite_Exec (-1, $sql)
    _SQLite_Close()
    _SQLite_Shutdown()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    func _dsFind($sql='');
    Local $aRow[2]
    ;if $dsButtonsUpdate=True Then Exit
    $sql = $sql & ' LIMIT 1'
    _SQLite_Startup ()
    If @error > 0 Then
    MsgBox(16, "SQLite Fehler", "SQLite.dll kann nicht geladen werden!")
    Exit
    EndIf
    _SQLite_Open($sqldb)
    If @error > 0 Then
    MsgBox(16, "SQLite Fehler", "Kann Datenbank nicht öffnen")
    Exit
    EndIf
    ;*******************************************************************************************************
    ;*************** wenn dieser Ausschnitt nicht aktiv funktioniert der Zugriff auf ********************
    ;*************** die Zugriffstasten auch bei Dauer-Feuer ********************
    ;*************** $hPrevious und $hNext-Taste (Auslöser für _dsPrevious/_dsNext) ********************
    ;*************** Fehler wird ausgelöst, wenn SQLite keine Daten zurückliefern kann ********************
    ;*************** weil es keinen Datensatz gibt der kleiner/größer ist ********************
    ;*******************************************************************************************************
    ;#cs
    If _SQLite_QuerySingleRow(-1,$sql,$aRow) =$SQLITE_OK Then
    if $aRow<>"" Then
    MsgBox(0,"Ergebnis: " & $sql,$aRow[1])
    ;Else nichts gefunden
    EndIf
    EndIf
    ;#ce
    ;*******************************************************************************************************
    ;_dsCheckBrowseButtons() ;soll verhindern das man vor bzw. hinter den letzten Datensatz blättern kann
    _SQLite_Close ()
    _SQLite_Shutdown ()
    EndFunc

    [/autoit]

    was mach ich da verkehrt? ?(

    Im Anhang ist außerdem noch mein bisheriger Programmstand, das ReSizen einzelner Controlls funktioniert überraschend einfach

    Oscar der TreeView mit 3 Zuständen ist noch nicht drin.


    MFG (Auto)Bert

    Edit BugFix: AutoIt-Tags gesetzt.

    BugFix Danke

    EDIT1: Im kleinen Beispiel war das SQLite Statement leider 2 mal mit Limit 1 angegeben korrigiert

    EDIT2: benutze jetzt _SQLite_Query zusammen mit_ SQLite_FetchDATA (durch LIMIT 1 kommt eh nur ein Datensatz)
    Programmanhang wurde upgedated

    EDIT3: Anhang herausgenommen (waren zu viele Fehler drin)

    Werde wenn das Programm (1. mit AutoIT) fertig ist in Scripte vorstellen

    mfg (Auto)Bert

    3 Mal editiert, zuletzt von AutoBert (8. März 2009 um 04:27)

  • Oscar na dieses Beispiel aus deinem THread TreeView-(Un)Checked-Example

    Kommt aber noch in deiner Form oder über StateImages hinein. Aber zuerst muß noch das Problem mit _SQLite_QuerySingleRow gelöst werden.

    mfg (Auto)Bert