ich habe eine Frage zu SQLite und DBA von IsNULL https://autohotkey.com/board/topic/7117 ... mysql-ado/. Leider habe ich nach langen stöbern auch im Forum nichts passendes gefunden.
Ich habe ein Programm erstellt zur Verwaltung von Dokumenten mit einer ToDo-Liste, die ich angezeigt bekomme mit einer Liste aller noch zu erledigenden Dokumente, die nach dem Lesen auf erledigt gesetzt werden sollen. Bis jetzt habe ich das Programm alleine benutzt, jetzt soll ich es auf MultiUser erweitern, damit die ganze Abteilung das auch machen kann und jeder User seine offenen Aufgaben sieht. Jeder User startet das Programm bei sich auf dem Rechner aber von einem Netzlauftwerk, d.h. keine eigene Installation, die sqlite3.dll liegt auch zentral, also nichts lokales.
Jetzt versuche ich verzweifelt nach einen "UPDATE ..."/"INSERT..."-Befehl die DB wieder freizugeben. Wenn ein User schreibend zugreift, wird für alle anderen gesperrt, soweit klar(und alle Schreibvorgänge des 1. Users sind auch erfolgreich!), aber warum wird nach dem Schreibvorgang nicht wieder freigegeben? Wenn danach oder parallel ein anderer User schreibt, stürz das Script der anderen User ab. Lesen über SELECT geht dagegenen bei allen einwandfrei. Die Datenbank-Datei bleibt gesprerrt bis der 1.Schreibende User das Programm beendet, dann kann der nächste wieder schreiben...
hier mein Teil meines Codes:
Code: Select all
currentDB.BeginTransaction()
{
RunSQL("UPDATE '51_Work' SET DatumErledigt = '" A_Now "', Status = 3 WHERE Vorgang = " RowText "")
}currentDB.EndTransaction()
Code: Select all
currentDB.BeginTransaction()/currentDB.EndTransaction()
und die Funktion:
Code: Select all
RunSQL(SQL){
if(IsObject(currentDB))
{
state := ""
if(Trim(SQL) == "")
{
;SB_SetText("No SQL entered")
Return
}
try {
rs := currentDB.OpenRecordSet(SQL)
if(IsObject(rs))
return rs
} catch e {
MsgBox,16, Error, % "OpenRecordSet Failed.`n`n" ExceptionDetail(e) ;state := "!# " e.What " " e.Message
}
if(state != "")
SetStatusBar("RunSQL")
}else {
MsgBox,16, Error, No Connection avaiable. Please connect to a db first!
}
}
Gruß