SQLite Trigger / Commit wird nicht erzeugt?

  • Hallo zusammen,

    ich habe ein Problem mit SQLite. Ich habe eine Datenbank mit 4 Tabellen (jetzt allerdings lediglich 2 Tabellen relevant), 3 Foreign Keys und 2 Triggern.

    SQL

    Zu Beginn sehen die Tabellen wie folgt aus:

    Wenn ich in meinem SQL-Editor nun folgenden Befehl abschiesse:

    DELETE FROM TABLE1 WHERE Name = "A";

    Kommt folgendes raus:

    Code
    Father | Name
    -------------
           | B
           | C
    
    Name | Zwei
    -------------
    B    | BLABLA
    C    | BLABLA

    Genau das gleiche Statement in AutoIt via _SQLite_Exec():

    Das Ergebnis des Statements aus dem Browser ist das erwartete. Meine Vermutungen würden nun irgendwie bei einem Commit/Nicht auslösen des Triggers liegen ... Allerdings sieht das für mich danach aus, als ob AutoIt den Trigger abschießt, allerdings nur 1x und "er sich nicht selbst" wieder aufruft ... Ich hoffe das war nun nicht alt zu falsch formuliert.

    Kann mir jemand helfen und sich vorstellen woran das liegt? :/

    So Far

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (14. Juni 2013 um 15:55)

  • Außerdem scheint es mir als würde AutoIt keine Foreign Keys unterstützen ... Ich meine Befehle im SQL-Editor nutzen die angegebenen FKs, wenn ich ein gleiches Statement in AutoIt abschieße werden diese ignoriert ...

    Grüße Yaerox

    Grüne Hölle

  • Foreign Key Support muss erst aktiviert werden. Hiermit kannst du prüfen ob das bereits der Fall ist, wenn nicht die beiden auskommentierten Zeilen einkommentieren.

    [autoit]

    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Global $hQuery, $aRow

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

    _SQLite_Startup()

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

    _SQLite_Open(**************deineDB**************)

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

    ;_SQlite_Query(-1, "PRAGMA foreign_keys = ON;", $hQuery) ; aktiviert ForeignKey support, siehe doku
    ;_SQLite_QueryFinalize($hQuery)

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

    _SQlite_Query(-1, "PRAGMA foreign_keys;", $hQuery) ; DEBUG: prüft ob ForeignKey aktiviert ist, 0=disabled, 1=enabled
    While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
    _ArrayDisplay($aRow)
    WEnd
    _SQLite_QueryFinalize($hQuery)

    [/autoit]
  • Ich habe das Problem heute geschafft zu umgehen indem ich quasi eine rekursive Funktion geschrieben habe die mir dies nun zu Fuß erledigt. Dennoch interessiert mich das jetzt, und ich denke ich werde bei nächster Gelegenheit eure beiden Antworten definitiv nochmal testen.

    Momentan habe/mache ich mir selber ein wenig Zeitdruck, daher muss ich mal schauen wann ich das schaffe, da das alte Script nun schon weiterentwickelt ist ^^
    Vielleicht hab ich noch ein altes Backup davon, ich werd auf jeden Fall mal hier das Statement schreiben wenn ich es getestet habe ;)

    #Edit FOREIGN KEYS war deaktiviert, ob das nun nach der Aktivierung klappt kann ich später erst sagen ;)

    Grüße Yaerox

    Grüne Hölle

  • TidySource-Backups sei dank! :D

    Genau daran lag es, kam nur leider 23 Stunden zu spät :P Nein Spaß, dank dir!

    Habs halt jetzt schon gelöst ^^

    Grüße Yaerox

    Grüne Hölle