SQLite --> Update-Operationen funktionieren nicht...

  • Hallo zusammen,

    ich habe ein kleines Progrämmchen geschrieben, dass Daten in einer SQLite-Datenbank speichern und ändern können soll.
    Die Sache mit dem Speichern (sprich INSERT-Operationen) funktionieren wunderbar.
    Nur UPDATE-Befehle gehen leider nicht, sprich werden nicht ausgeführt.
    Nun vermute ich stark, dass es daran liegt, dass der Datensatz, den das Programm gerade updaten soll unter einer Art Schreibschutz steht, weil das Programm selbst noch auf diesen Datensatz zugreift.
    Denn der Datensatz, den ich via Programm ändern will lässt sich - solange das Programm läuft - auch über den Firefox SQLite Manager nicht ändern.
    Erst wenn ich das Progrämmchen schließe, ist ein Update-Befehl möglich.

    Nun die Frage: Liege ich mit meiner Vermutung richtig?
    Wie kann ich diesen Schreibschutz umgehen? Ich habe schon probiert, vor der Update-Operation die Datenbank via SQLite_close() zu schließen und dann wieder neu zu starten.
    Aber auch das führte nicht zum Erfolg...

    Bin für jeden Tipp dankbar.

    LG Daniel

    • Offizieller Beitrag

    SQLite implementiert meines Wissens keine weiteren Schreibschutzmechanismen über das Betriebssystem hinaus. Das heißt, wer Schreibzugriff auf die Datei hat, kann auch schreiben. Was anderes ist mir in meinen zwei, drei SQLite-Projekten mit AutoIt auch nicht aufgefallen. Bekommst du denn Fehlermeldungen? Wie sieht deine Syntax zum Updaten aus?

    Johannes

  • Hi,

    hier die Befehlskette:

    [autoit]


    _SQLite_Startup()
    ConsoleWrite("_SQLite_LibVersion=" &_SQLite_LibVersion() & @CRLF)
    _SQLite_Open(@ScriptDir & "\db\bosch.sqlite")
    $hQuery="UPDATE maschinen SET sprache='" & $sprache & "',fsprache='" & $fsprache & "' WHERE mnr='" & $mnr & "'"
    $sqllite_success=_SQLite_Exec(-1,$hQuery)
    _SQLite_Close()
    _SQLite_Shutdown()

    [/autoit]


    Mit Insert-Befehlen klappt es so (und Select-Anweisungen) aber mit Update-Befehlen macht er nichts.
    $sqllite_success enthält den Wert "5", aber in der Datenbank wird die entsprechende Änderung nicht durchgeführt.