Verbindung zur Datenbank und SQL update

  • Hallo,
    ich habe folgendes Problem:
    Ich stelle einer Verbindung zu einer Access Datenbank her und mache 2 Updates auf Datenbankfelder.
    Die Verbindung klappt, das Update auch, aber nach diesem Update mache ich weitere Funktionen in Autoit
    und es kommt zu einer Datenbank Verletzung, da diese nur exklusiv genutzt werden kann.
    Meine Vermutung: Autoit macht schon weiter, während das Update auf der Datenbank noch nicht abgeschlossen ist.
    Kann das sein?
    Wie kann ich feststellen, dass das Update fertig ist?

    Ich hoffe Ihr könnt mir weiterhelfen.

    Gruss
    Anfänger


    Spoiler anzeigen
    [autoit]


    Func _db_auf_null_setzen()
    $objconn =objCreate("ADODB.Connection")
    $objconn.Provider="Microsoft.Jet.OLEDB.4.0"
    ;$datenbank = "c:\Verzeichnis\datei.mdb"definiert oder direkt durch den Pfad ersetzt:
    $objconn.Open ($p_datenbank)
    ;$objConn.Open ("dsn=Servername;uid=Benutzername;pwd=Passwort")Anschließend folgen die SQL Statements.

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

    ;$SQLstatement = "UPDATE Tabelle SET Preis1 = DruckAnz where DruckAnz > 1;"
    $SQLstatement = "UPDATE Tabelle SET RESERVED1 = DruckAnz, NOTUSED = 123456 WHERE DruckAnz >= 1;"
    $SQLexecute = $objConn.Execute($SQLstatement)
    sleep(20000)
    ;Der Inhalt aus DruckAnz wird auf 0 gesetzt
    $SQLstatement = "UPDATE Tabelle SET DruckAnz = 0 where DruckAnz >= 1;"
    $SQLexecute = $objConn.Execute($SQLstatement)
    $objconn.close()
    endfunc

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

    $search = FileFindFirstFile($FirstFile)
    ; Prüfen, ob die Suche erfolgreich war
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf
    ....

    [/autoit]

    Einmal editiert, zuletzt von anfänger (14. April 2010 um 10:26)

  • hallo @anfänger,

    ich würde es mal so probieren!
    wäre schön, wenn du das ganze script mal posten könntest!

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

    Global $SQLstatement

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

    ;$SQLstatement = "UPDATE Tabelle SET Preis1 = DruckAnz where DruckAnz > 1;"
    $SQLstatement = "UPDATE Tabelle SET RESERVED1 = DruckAnz, NOTUSED = 123456 WHERE DruckAnz >= 1;"
    _db_auf_null_setzen()
    $SQLstatement = "" ; statement leeren

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

    ;Der Inhalt aus DruckAnz wird auf 0 gesetzt
    $SQLstatement = "UPDATE Tabelle SET DruckAnz = 0 where DruckAnz >= 1;"
    _db_auf_null_setzen()
    $SQLstatement = "" ; statement leeren

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

    Func _db_auf_null_setzen()
    $objconn =objCreate("ADODB.Connection")
    $objconn.Provider="Microsoft.Jet.OLEDB.4.0"
    ;$datenbank = "c:\Verzeichnis\datei.mdb"definiert oder direkt durch den Pfad ersetzt:
    $objconn.Open ($p_datenbank)
    ;$objConn.Open ("dsn=Servername;uid=Benutzername;pwd=Passwort")Anschließend folgen die SQL Statements.
    $SQLexecute = $objConn.Execute($SQLstatement)
    $objconn.close()

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

    endfunc

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

    $search = FileFindFirstFile($FirstFile)
    ; Prüfen, ob die Suche erfolgreich war
    If $search = -1 Then
    MsgBox(0, "Fehler", "Es wurden keine Dateien/Verzeichnisse gefunden, die zu dem Suchmuster passen")
    Exit
    EndIf

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

    ungetestet und ohne garantie ...

    gruß gmmg ;)

    Einmal editiert, zuletzt von gmmg (1. April 2010 um 11:43)

  • Hallo,
    meine Antwort kommt leider etwas spät, aber ich hatte nicht mehr damit gerechnet, dass noch jemand antwortet.
    Habe das Skript nach Deinen Vorgaben geändert. Der Fehler lag wohl daran, dass ich einmal die Datenbank öffne,
    dann mehrere Updates mache und später erst schließe.
    Jetzt wird bei jedem SQL Statement die Datenbank geöffnet ...... am Ende geschlossen.
    Das Skript läuft schon viel stabiler... das scheint einiges geholfen zu haben. Vielen DANK.

    Manchmal schaffe ich es aber dennoch einen Datenbankfehler zu bekommen. Das passiert immer dann, wenn ich
    parallel zum laufenden Skript andere Dinge am Rechner mache, wie emails lesen, im Programmcode editieren usw.

    Viele Grüße
    Anfänger