Dann ist das Verhalten nicht nachvollziehbar. Es macht keinen Sinn, wenn sich eine Datenbank auf diese Art per Snippet löschen lässt, aber in deinem umfangreicheren Programm nicht. Das weißt entweder auf einen Bug hin, die DB-Lib von PB deckt nicht alle SQLite-Eventualitäten ab oder es befindet sich noch ein Fehler in den Code-Teilen, die wir nicht sehen können. Auf jeden Fall blockiert dein Programm die Datei und die Lösung ist, das es diese wieder ordentlich schließt. Und die Snippets zeigen, das es zumindest in diesem kleinen Rahmen funktioniert mit CloseDatabase funktioniert.
Wenn also mein Ansatz, zu warten bis die Datei geschlossen wurde, in einer Endlosschleife endet, dann wurde die Datenbankdatei nicht komplett geschlossen. Dein Code aber funktioniert tadellos. Auch nachdem ich eine Tabelle erstellt und 1001 Einträge hinein geschmissen habe, hat es die Datenbank sauber geschlossen und die Datei gelöscht (PB 5.73):
Code: Alles auswählen
UseSQLiteDatabase()
Global DB
Procedure.s FormatMessage(ErrorCode)
Protected *Buffer, len, result.s
len = FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM,0,ErrorCode,0,@*Buffer,0,0)
If len
result = "Errorcode " + Hex(ErrorCode) + ": " + PeekS(*Buffer)
LocalFree_(*Buffer)
ProcedureReturn result
Else
ProcedureReturn "Errorcode: " + Hex(ErrorCode)
EndIf
EndProcedure
Procedure DBCreate(Filename.s)
Nr = CreateFile(#PB_Any,GetTemporaryDirectory()+Filename+".db")
CloseFile(Nr)
Debug GetTemporaryDirectory()+Filename+".db"
EndProcedure
Procedure DBOpen(Filename.s,User.s="",Pass.s="")
DB = OpenDatabase(#PB_Any, GetTemporaryDirectory()+Filename+".db", User, Pass, #PB_Database_SQLite)
EndProcedure
Procedure DBClose()
CloseDatabase(DB)
DB=0
EndProcedure
fileName.s = "Test007"
DBCreate(fileName)
DBOpen(fileName)
DatabaseUpdate(DB, "CREATE TABLE contacts (contact_id INTEGER PRIMARY KEY, first_name TEXT Not NULL, last_name TEXT Not NULL, email TEXT Not NULL UNIQUE, phone TEXT Not NULL UNIQUE)")
For c = 0 To 1000
DatabaseUpdate(DB, "INSERT INTO contacts (contact_id, first_name, last_name, email, phone) VALUES ("+c+", 'Test "+c+"', 'Last "+c+"', 'mail "+c+"', 'phone "+c+"')")
Next
Debug FileSize(GetTemporaryDirectory()+Filename+".db")
DBClose() ; ADD
If DeleteFile(GetTemporaryDirectory()+Filename+".db")
Debug "OK"
Else
Debug FormatMessage(GetLastError_())
EndIf