Einführung in SQLite

  • Ich versuche mich gerade mit SQLite in verbindung mit Autoit. Habe aber verständnisschwierigkeiten. Die Befehle sind ja so wie bei MySQL (Instert into, select * from, usw) das ist nicht wirklich ein Problem. Allerdings die verbindung mit Autoit.

    Die Filmdatenbank hat mir ebensowenig wie die hilfe.
    Daher meine fage was brauche ich bzw. wie mache ich es das zb. durch einen klick auf einen button der Create table befehl durchgeführt wird und in meiner database.db datei gespeichert wird?

    danke schon mal

  • ich weiß ja nicht so genau was du willst aber vll hilft dir das hier schon weiter...

    Spoiler anzeigen
    [autoit]

    #include<SQLite.au3>
    $sql_table = @ScriptDir & "\database.db"
    If (FileExists(@ScriptDIR&"\database.db")=0) Then
    $ret = MsgBox(68,"Daten speichern?","Wollen Sie Daten speichern?")
    Select
    Case $ret = 6 ;Yes
    _DoSQL("CREATE TABLE database (return, name);",$sql_table)
    _DoSQL("INSERT INTO database VALUES ('"&Random(0,100)&"','"&@UserName&"');",$sql_table)
    MsgBox(0,"Operation done.","Your SQLite request has been successful completed.")
    Case $ret = 7 ;No
    Exit
    EndSelect
    EndIf
    $ret = MsgBox(68,"Daten auslesen?","Wollen Sie Daten Auslesen?")
    Select
    Case $ret = 6 ;Yes
    $result = _DoSQL("SELECT * FROM database;",$sql_table)
    For $i = 1 To $result[0][1]
    MsgBox(0,"Operating....","Value:"&$result[$i][1]&@CRLF&"Value2:"&$result[$i][0])
    Next
    MsgBox(0,"Operation done.","Your SQLite request has been successful completed.")
    Case $ret = 7 ;No
    Exit
    EndSelect

    ; ---> peethebee (Danke an jonk!)
    Func _DoSQL($_SQL_Code, $cal_filename)
    Dim $ret_array[250][15]
    ; Datenbank initialisieren und öffnen
    _SQLite_Startup (@ScriptDir & "\sqlite3.dll")
    If @error > 0 Then
    MsgBoX(0, "Meldung", "SQLite-DLL konnte nicht geladen werden")
    Return 0
    EndIf
    ; hier kann man einen Standardpfad festlegen
    $dbname = $cal_filename
    _sqLiTe_opEn ($dbname)
    If @error > 0 Then
    MsgBoX(0, "Meldung", $dbname & " konnte nicht geöffnet werden (Rechte?, Datei in Benutzung?)")
    Return 0
    EndIf
    Dim $hQuery, $aRow
    $iTmp = _SQlite_Query (-1, $_SQL_Code, $hQuery)
    If Not $iTmp = $SQLITE_OK Then
    MsgBoX(0, "Meldung", "SQLite-Befehl verursachte einen Fehler: " & $_SQL_Code)
    EndIf
    $num_results = 0
    While _SQLite_FetchData ($hQuery, $aRow) = $SQLITE_OK
    $num_results += 1
    ; Daten in Array kippen und dann zurückgeben (noch nicht getestet)
    For $i = 0 To UBound($aRow) - 1
    $ret_array[$num_results][$i] = $aRow[$i]
    Next
    WEnd
    ; Länge des Ergebnisses erfassen, Ergebnisse ab $ret_array[1]
    $ret_array[0][0] = $num_results
    $ret_array[0][1] = UBound($aRow)
    $iTmp = _SQLite_Close ()
    If Not $iTmp = $SQLITE_OK Then
    MsgBoX(0, "Meldung", "Datenbank konnte nicht geschlossen werden.")
    MsgBoX(0, "Meldung", "SQLite ErrCode: " & $iTmp)
    MsgBoX(0, "Meldung", "SQLite ErrMsg: " & _SQLite_ErrMsg ())
    Return 0
    EndIf
    _SQLite_Shutdown ()
    Return $ret_array
    EndFunc ;==>_DoSQL

    [/autoit]


    Die funktion _DoSQL($_SQL_Code, $cal_filename) wurde ncht von mir entworfen sondern von pee und jonk ->COPYRIGHT beachten ;) *PS:hab ich damit gemacht xD

    der snooozer

  • Das ist doch schon mal ein anfang.. Danke

    ich habe allerdings mit SECECT MAX ein problem..

    der maxwert so auf aufgerufen..

    [autoit]

    $maxwert= _DoSQL("Select MAX(EURO) from Verlauf;",$DB_Verlauf)
    MsgBox(0,"",$maxwert[1][0])

    [/autoit]

    funktioniert eigentlicht immer außer, wenn ein nachfolgender Eintrag kleiner ist und im anschluss ein neuer Max wert eingegeben wird.

    sprich
    Eintrag 1 = 4
    Eintrag 2 = 10
    Eintrag 3 = 7

    Der ausgegebene MAX Wert ist 10 (richtig)

    wenn ich jetzt aber die liste verlänger
    Eintrag 4 = 3
    Eintrag 5 = 15

    wird der MAX Wert 10 ausgegeben anstatt 15

    auch nach neustart des Programms wird dieser wert ausgegeben..woran kann das liegen ?