Hallo,
ich habe eine Datenbank in pb mit :memory: erzeugt und möchte diese in ein Datei-Datenbank schreiben.
Gibt es da ein einfacher Lösung?
Danke und Gruß
MarcelX
SQLiteDatabase mit :memory: in eine DB-Datei schreiben
SQLiteDatabase mit :memory: in eine DB-Datei schreiben
Win-10, PB 5.31 (Windows - x86)
Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
Super
Danke RSBasic, ich werde es gleich ausprobieren
Danke RSBasic, ich werde es gleich ausprobieren
Win-10, PB 5.31 (Windows - x86)
Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
In mein code ist Backup=0 ?
ADD:
mit dein Code aus https://www.purebasic.fr/english/viewtopic.php?p=368143 ist auch BackUp=0
Code: Alles auswählen
ImportC "sqlite3.lib"
sqlite3_backup_init(pDest, zDestName.s, pSource, zSourceName.s)
sqlite3_backup_step(sqlite3_backup, nPage)
sqlite3_backup_finish(sqlite3_backup)
sqlite3_errcode(db)
EndImport
UseSQLiteDatabase()
Global DB
Procedure DBCreateTable(tbl.s, sql.s)
If DatabaseUpdate(DB, "CREATE TABLE "+tbl+" ("+sql+")")
Else
Debug "SQ_DBCreateTable: "+ DatabaseError()
EndIf
EndProcedure
Procedure DBinsert1(col1.s, col2.s)
sql.s = "INSERT INTO test1 (col1, col2) VALUES ('"+col1+"', "+"'"+col2+"')"
DatabaseUpdate(DB, sql)
EndProcedure
Procedure DBinsert2(name1.s, name2.s)
sql.s = "INSERT INTO test2 (name1, name2) VALUES ('"+col1+"', "+"'"+col2+"')"
DatabaseUpdate(DB, sql)
EndProcedure
Procedure backup()
; Create File-Database
Debug GetTemporaryDirectory() + "temp.db"
FF = CreateFile(#PB_Any, GetTemporaryDirectory() + "temp.db")
If FF
CloseFile(FF)
DbFile = OpenDatabase(#PB_Any, GetTemporaryDirectory() + "temp.db", "", "", #PB_Database_SQLite)
If DbFile
; Initialize Backup:
BackUp = sqlite3_backup_init(DatabaseID(DbFile), "main", DatabaseID(DB), "main")
If BackUp
; Dump Data from :memory:-DB to File-DB
sqlite3_backup_step (Backup, -1)
sqlite3_backup_finish(Backup)
Else
Debug "Err BackUp: "+Str(BackUp)
EndIf
Debug sqlite3_errcode(DatabaseID(DbFile)) ; ErrorCodes: see below
CloseDatabase(DbFile)
; RunProgram(GetTemporaryDirectory() + "temp.db") ; Open File-DB for checking purposes
EndIf
EndIf
EndProcedure
DB = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)
DBCreateTable("test1", "ID INTEGER PRIMARY KEY AUTOINCREMENT, col1 TEXT, col2 TEXT")
DBCreateTable("test2", "ID INTEGER PRIMARY KEY AUTOINCREMENT, name1 TEXT, name2 TEXT")
DBinsert1("colA", "colB")
DBinsert2("nameA", "nameB")
OpenWindow(1, 0, 0, 400, 200,"Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget)
ButtonGadget(1, 20,20,50,25,"Test")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
Select EventGadget
Case 1
Debug "..." ; Ausgabe der Datenbank in ein Datei
backup()
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
mit dein Code aus https://www.purebasic.fr/english/viewtopic.php?p=368143 ist auch BackUp=0
Win-10, PB 5.31 (Windows - x86)
Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
das mag an dem ASCII/Unicode Problem liegen.
Ersetze doch mal den ImportC-Block durch diesen hier :
Ich habe allerdings eine etwas andere Kopierroutine :
Dabei muss man halt beachten, dass man der Prozedur nur die Datenbank Handles von PB übergibt.
Ersetze doch mal den ImportC-Block durch diesen hier :
Code: Alles auswählen
ImportC ""
sqlite3_backup_init(pDest, zDestName.p-utf8, pSource, zSourceName.p-utf8)
sqlite3_backup_step(sqlite3_backup, nPage)
sqlite3_backup_finish(sqlite3_backup)
sqlite3_errcode(db)
EndImport
Code: Alles auswählen
Procedure.i CopyDatabase(sourceDB, destinationDB)
Protected result, backUp
If IsDatabase(sourceDB) And IsDatabase(destinationDB)
backUp = sqlite3_backup_init(DatabaseID(destinationDB), "main", DatabaseID(sourceDB), "main")
If backUp
sqlite3_backup_step(backUp, -1)
If sqlite3_backup_finish(backUp) = 0 ;#SQLITE_OK
result = #True
EndIf
EndIf
EndIf
ProcedureReturn result
EndProcedure
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
Mit dein ImportC-Block funktioniert.
Danke
Danke
Win-10, PB 5.31 (Windows - x86)