Aktuelle Zeit: 21.03.2019 01:23

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
BeitragVerfasst: 04.01.2019 14:22 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
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

_________________
Win-7, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
BeitragVerfasst: 04.01.2019 14:31 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
https://www.purebasic.fr/english/viewtopic.php?p=368143

_________________
BildBildBildBildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
BeitragVerfasst: 04.01.2019 14:57 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
Super
Danke RSBasic, ich werde es gleich ausprobieren

_________________
Win-7, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
BeitragVerfasst: 04.01.2019 15:09 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
In mein code ist Backup=0 ?
Code:
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


ADD:
mit dein Code aus https://www.purebasic.fr/english/viewtopic.php?p=368143 ist auch BackUp=0

_________________
Win-7, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
BeitragVerfasst: 04.01.2019 20:41 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
das mag an dem ASCII/Unicode Problem liegen.

Ersetze doch mal den ImportC-Block durch diesen hier :

Code:
  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


Ich habe allerdings eine etwas andere Kopierroutine :

Code:
  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


Dabei muss man halt beachten, dass man der Prozedur nur die Datenbank Handles von PB übergibt.

_________________
PureBasic 5.70 LTS (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SQLiteDatabase mit :memory: in eine DB-Datei schreiben
BeitragVerfasst: 05.01.2019 12:15 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
Mit dein ImportC-Block funktioniert.
Danke

_________________
Win-7, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye