here is a code-snippet to dump a SQLite-:memory:-Database to disk:
Code: Select all
EnableExplicit
ImportC "sqlite3.lib"
  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
UseSQLiteDatabase()
Define DbMem
Define DbFile
Define Counter
Define FF
Define Backup
Define RC
; Create Sample-:memory:-Database:
DbMem = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)
If DbMem
  
  ; insert test-data
  DatabaseUpdate(DbMem, "Create Table TestTable (Field1, Field2, Field3)")
  For Counter = 0 To 9999
    DatabaseUpdate(DbMem, "Insert Into TestTable (Field1, Field2, Field3) Values (" + Str(Counter) + ", " + Str(Counter) + ", " + Str(Counter) + ")")
  Next
  
  ; Create File-Database
  
  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(DbMem), "main") 
      
      If BackUp
        
        ; Dump Data from :memory:-DB to File-DB
        
        sqlite3_backup_step  (Backup, -1)
        sqlite3_backup_finish(Backup)
        
      EndIf
      
      Debug sqlite3_errcode(DatabaseID(DbFile)) ; ErrorCodes: see below
      
      CloseDatabase(DbFile)
      
      ; RunProgram(GetTemporaryDirectory() + "temp.db") ; Open File-DB for checking purposes
      
    EndIf
    
  EndIf
  
EndIf
; #define SQLITE_OK           0   /* Successful result */
; /* beginning-of-error-codes */
; #define SQLITE_ERROR        1   /* SQL error Or missing database */
; #define SQLITE_INTERNAL     2   /* Internal logic error in SQLite */
; #define SQLITE_PERM         3   /* Access permission denied */
; #define SQLITE_ABORT        4   /* Callback routine requested an abort */
; #define SQLITE_BUSY         5   /* The database file is locked */
; #define SQLITE_LOCKED       6   /* A table in the database is locked */
; #define SQLITE_NOMEM        7   /* A malloc() failed */
; #define SQLITE_READONLY     8   /* Attempt To write a readonly database */
; #define SQLITE_INTERRUPT    9   /* Operation terminated by sqlite3_interrupt()*/
; #define SQLITE_IOERR       10   /* Some kind of disk I/O error occurred */
; #define SQLITE_CORRUPT     11   /* The database disk image is malformed */
; #define SQLITE_NOTFOUND    12   /* Unknown opcode in sqlite3_file_control() */
; #define SQLITE_FULL        13   /* Insertion failed because database is full */
; #define SQLITE_CANTOPEN    14   /* Unable To open the database file */
; #define SQLITE_PROTOCOL    15   /* Database lock protocol error */
; #define SQLITE_EMPTY       16   /* Database is empty */
; #define SQLITE_SCHEMA      17   /* The database schema changed */
; #define SQLITE_TOOBIG      18   /* String Or BLOB exceeds size limit */
; #define SQLITE_CONSTRAINT  19   /* Abort due To constraint violation */
; #define SQLITE_MISMATCH    20   /* Data type mismatch */
; #define SQLITE_MISUSE      21   /* Library used incorrectly */
; #define SQLITE_NOLFS       22   /* Uses OS features Not supported on host */
; #define SQLITE_AUTH        23   /* Authorization denied */
; #define SQLITE_FORMAT      24   /* Auxiliary database format error */
; #define SQLITE_RANGE       25   /* 2nd parameter To sqlite3_bind out of range */
; #define SQLITE_NOTADB      26   /* File opened that is Not a database file */
; #define SQLITE_ROW         100  /* sqlite3_step() has another row ready */
; #define SQLITE_DONE        101  /* sqlite3_step() has finished executing */
; /* End-of-error-codes */


