SqLite3-Problem - keine Datenbank

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

SqLite3-Problem - keine Datenbank

Beitrag von michel51 »

Hallo Liste,
mit dem kleinen Progrämmchen sollte eine Datenbank erstellt werden und ein bisschen Text reingeschrieben werden.

Code: Alles auswählen

EnableExplicit

XIncludeFile "SQLite3_Include.pbi"  ; SQlite 3.5.6 in usr/local/lib/ - geändert/alternativ


Define.l hDB, r, i, sqlhdl
Define.SQ3_TABLEMAP Table

If SQLiteInit() = 0
  MessageRequester("Error", "Couldn't init SQLite3 lib") : End
EndIf
;
Debug SQLiteLibVersion()      ; 3.1.3 (3.5.6)
;
; Datenbank - Datei erstellen  --- OK
hDB = SQLiteOpen("eigtestDB.db")
If Not hDB
  MessageRequester("Error", SQliteErrorMsg(hDB)) : End
EndIf
; 
; Tabelle erzeugen  --- ????
If SQliteExecute(hDB, "CREATE TABLE testtable (spalte1 TEXT, spalte2 TEXT, spalte3 TEXT)") = #FALSE
  Debug SQliteErrorMsg(hDB)
Else
  For r = 1 To 5
;     If SQliteExecute(hDB, "INSERT INTO testtable (spalte1, spalte2, spalte3) VALUES ('r" + Str(r) + "c1', 'r" + Str(r) + "c2', 'r" + Str(r) + "c3')") = #FALSE
    If SQliteExecute(hDB, "INSERT INTO testtable (spalte1, spalte2, spalte3) VALUES('Sp 1', 'Sp 2', 'Sp 3')") = #FALSE

      Debug SQliteErrorMsg(hDB)
    EndIf
  Next
EndIf
; 
SQLiteClose(hDB)
SQLiteEnd()
Die Library ist wohl korrekt geöffnet, denn die Versionsnummer wird angezeigt.
Die Datei wird auch erzeugt (Zeile 16)
Das war es dann aber auch. Eine Fehlermeldung kommt auch nicht, also kann ich darauf schließen, dass die Befehle abgearbeitet werden (ob korrekt, weiß ich nicht).

Vielleicht kann mir hier jemand helfen?
Betrifft in erster Linie Mac-User (oder auch Linux-User / Unix-Speuialisten !?)

Hier auch noch der Code der verwendeten Include-Datei SQLite3_Include.pbi zur Sicherheit. Vielleicht liegt ja da das Problem.

Code: Alles auswählen

; SQLite3 Include for Windows, Linux and MacOS
; based on a example by MLK
; binding functions based on code by Kiffi (PBOSL)
; tested with Ansi and Unicode under WinXP and XUbuntu
; Autor: ts-soft

Enumeration
  #SQLITE3_OK          =   0   ; Successful Result
  #SQLITE3_ERROR       =   1   ; SQL error Or missing database
  #SQLITE3_INTERNAL    =   2   ; An internal logic error in SQLite
  #SQLITE3_PERM        =   3   ; Access permission denied
  #SQLITE3_ABORT       =   4   ; Callback routine requested An abort
  #SQLITE3_BUSY        =   5   ; The database file is locked
  #SQLITE3_LOCKED      =   6   ; A table in The database is locked
  #SQLITE3_NOMEM       =   7   ; A malloc() failed
  #SQLITE3_READONLY    =   8   ; Attempt To write A readonly database
  #SQLITE3_INTERRUPT   =   9   ; Operation terminated by SQLite_Interrupt()
  #SQLITE3_IOERR       =  10   ; Some kind of disk I/O error occurred
  #SQLITE3_CORRUPT     =  11   ; The database disk image is malformed
  #SQLITE3_NOTFOUND    =  12   ; (internal Only) table Or record not found
  #SQLITE3_FULL        =  13   ; Insertion failed because database is full
  #SQLITE3_CANTOPEN    =  14   ; Unable To open The database file
  #SQLITE3_PROTOCOL    =  15   ; database lock protocol error
  #SQLITE3_EMPTY       =  16   ; (internal Only) database table is empty
  #SQLITE3_SCHEMA      =  17   ; The database schema changed
  #SQLITE3_TOOBIG      =  18   ; Too much Data For one Row of A table
  #SQLITE3_CONStraint  =  19   ; abort due To contraint violation
  #SQLITE3_MISMATCH    =  20   ; Data type mismatch
  #SQLITE3_MISUSE      =  21   ; Library used incorrectly
  #SQLITE3_NOLFS       =  22   ; Uses OS features not supported on host
  #SQLITE3_AUTH        =  23   ; Authorization denied
  #SQLITE3_ROW         = 100   ; sqlite_step() has another Row ready
  #SQLITE3_DONE        = 101   ; sqlite_step() has finished executing

  #SQLITE3_STATIC      =   0
  #SQLITE_TRANSIENT    =  -1

  #SQLITE_INTEGER      =   1
  #SQLITE_FLOAT        =   2
  #SQLITE_TEXT         =   3
  #SQLITE_BLOB         =   4
  #SQLITE_NULL         =   5
EndEnumeration

PrototypeC Proto_sqlite3_close(hDB.l)
PrototypeC Proto_sqlite3_errcode(hDB.l)
PrototypeC Proto_sqlite3_errmsg(hDB.l)
PrototypeC Proto_sqlite3_exec(hDB.l, Statement.p-utf8, cb.l = 0, cbdata.l = 0, errmsg.l = 0)
PrototypeC Proto_sqlite3_exec_a(hDB.l, Statement.p-ascii, cb.l = 0, cbdata.l = 0, errmsg.l = 0)
PrototypeC Proto_sqlite3_free_table(*table.l)
PrototypeC Proto_sqlite3_get_table(hDB.l, Statement.p-utf8, *table, nRow.l, nColumn.l, errmsg.l = 0)
PrototypeC Proto_sqlite3_get_table_a(hDB.l, Statement.p-ascii, *table, nRow.l, nColumn.l, errmsg.l = 0)
PrototypeC Proto_sqlite3_libversion()
PrototypeC Proto_sqlite3_open(filename.s, *hDB.l)
PrototypeC Proto_sqlite3_last_insert_rowid(hDB.l)
PrototypeC Proto_sqlite3_prepare(hDB.l, Statement.p-utf8, nBytes.l, *hResult, *pzTail = 0)
PrototypeC Proto_sqlite3_prepare_a(hDB.l, Statement.p-ascii, nBytes.l, *hResult, *pzTail = 0)
PrototypeC Proto_sqlite3_prepare16(hDB.l, Statement.p-unicode, nBytes.l, *hResult, *pzTail = 0)
PrototypeC Proto_sqlite3_finalize(lStatement.l)
PrototypeC Proto_sqlite3_step(lStatement.l)
PrototypeC Proto_sqlite3_bind_blob(lStatement.l, lIndex.l, lBinaryBuffer.l, lBinaryBufferLength.l, *void = -1)
PrototypeC Proto_sqlite3_bind_double(lStatement.l, lIndex.l, dValue.d)
PrototypeC Proto_sqlite3_bind_int(lStatement.l, lIndex.l, lValue.l)
PrototypeC Proto_sqlite3_bind_int64(lStatement.l, lIndex.l, qValue.q)
PrototypeC Proto_sqlite3_bind_text(lStatement, lIndex, lTextBuffer, len.l = -1, type.l = #SQLITE3_STATIC)
PrototypeC Proto_sqlite3_column(lStatement, lCol.l)
PrototypeC.d Proto_sqlite3_column_double(lStatement, lCol.l)
PrototypeC.q Proto_sqlite3_column_quad(lStatement, lCol.l)

Structure SQ3_Functions
  DLL.l
  IsASCII.b
  PeekMode.l
  close.Proto_sqlite3_close
  errcode.Proto_sqlite3_errcode
  errmsg.Proto_sqlite3_errmsg
  errmsg16.Proto_sqlite3_errmsg
  exec.Proto_sqlite3_exec
  exec_a.Proto_sqlite3_exec_a
  free_table.Proto_sqlite3_free_table
  get_table.Proto_sqlite3_get_table
  get_table_a.Proto_sqlite3_get_table_a
  libversion.Proto_sqlite3_libversion
  open.Proto_sqlite3_open
  open16.Proto_sqlite3_open
  last_insert_rowid.Proto_sqlite3_last_insert_rowid
  prepare.Proto_sqlite3_prepare
  prepare_a.Proto_sqlite3_prepare_a
  prepare16.Proto_sqlite3_prepare16
  finalize.Proto_sqlite3_finalize
  step_.Proto_sqlite3_step
  bind_blob.Proto_sqlite3_bind_blob
  bind_double.Proto_sqlite3_bind_double
  bind_int.Proto_sqlite3_bind_int
  bind_int64.Proto_sqlite3_bind_int64
  bind_text.Proto_sqlite3_bind_text
  bind_text16.Proto_sqlite3_bind_text
  column_blob.Proto_sqlite3_column
  column_bytes.Proto_sqlite3_column
  column_bytes16.Proto_sqlite3_column
  column_double.Proto_sqlite3_column_double
  column_int.Proto_sqlite3_column
  column_int64.Proto_sqlite3_column_quad
  column_text.Proto_sqlite3_column
  column_text16.Proto_sqlite3_column
  column_type.Proto_sqlite3_column
EndStructure

Structure SQ3_TABLEMAP
  Table.l
  Rows.l
  Cols.l
  RowPos.l
  ColPos.l
EndStructure

Global SQ3.SQ3_Functions
; 
Procedure.l SQLiteEnd()
  If SQ3\DLL
    CloseLibrary(SQ3\DLL)
    SQ3\DLL = #FALSE
    ProcedureReturn #TRUE
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteInit(sqlite3lib.s = "")
  If sqlite3lib <> ""
    SQ3\DLL = OpenLibrary(#PB_Any, sqlite3lib)
  Else
    CompilerSelect #PB_Compiler_OS
      CompilerCase #PB_OS_Windows
        SQ3\DLL = OpenLibrary(#PB_Any, "sqlite3.dll")
      CompilerCase #PB_OS_Linux
        SQ3\DLL = OpenLibrary(#PB_Any, "libsqlite3.so")
      CompilerCase #PB_OS_MacOS
        SQ3\DLL = OpenLibrary(#PB_Any, "/usr/local/lib/libsqlite3.dylib")  ; Neuere Library
;         SQ3\DLL = OpenLibrary(#PB_Any, "/usr/lib/libsqlite3.dylib")
      CompilerDefault
        ProcedureReturn #FALSE
    CompilerEndSelect
  EndIf
  If SQ3\DLL
    SQ3\close           = GetFunction(SQ3\DLL, "sqlite3_close")
    SQ3\errcode         = GetFunction(SQ3\DLL, "sqlite3_errcode")
    SQ3\errmsg          = GetFunction(SQ3\DLL, "sqlite3_errmsg")
    SQ3\errmsg16        = GetFunction(SQ3\DLL, "sqlite3_errmsg16")
    SQ3\exec            = GetFunction(SQ3\DLL, "sqlite3_exec")
    SQ3\exec_a          = GetFunction(SQ3\DLL, "sqlite3_exec")
    SQ3\free_table      = GetFunction(SQ3\DLL, "sqlite3_free_table")
    SQ3\get_table       = GetFunction(SQ3\DLL, "sqlite3_get_table")
    SQ3\get_table_a     = GetFunction(SQ3\DLL, "sqlite3_get_table")
    SQ3\libversion      = GetFunction(SQ3\DLL, "sqlite3_libversion")
    SQ3\open            = GetFunction(SQ3\DLL, "sqlite3_open")
    SQ3\open16          = GetFunction(SQ3\DLL, "sqlite3_open16")
    SQ3\last_insert_rowid = GetFunction(SQ3\DLL, "sqlite3_last_insert_rowid")
    SQ3\prepare         = GetFunction(SQ3\DLL, "sqlite3_prepare")
    SQ3\prepare_a       = GetFunction(SQ3\DLL, "sqlite3_prepare")
    SQ3\prepare16       = GetFunction(SQ3\DLL, "sqlite3_prepare16")
    SQ3\finalize        = GetFunction(SQ3\DLL, "sqlite3_finalize")
    SQ3\step_           = GetFunction(SQ3\DLL, "sqlite3_step")
    SQ3\bind_blob       = GetFunction(SQ3\DLL, "sqlite3_bind_blob")
    SQ3\bind_double     = GetFunction(SQ3\DLL, "sqlite3_bind_double")
    SQ3\bind_int        = GetFunction(SQ3\DLL, "sqlite3_bind_int")
    SQ3\bind_int64      = GetFunction(SQ3\DLL, "sqlite3_bind_int64")
    SQ3\bind_text       = GetFunction(SQ3\DLL, "sqlite3_bind_text")
    SQ3\bind_text16     = GetFunction(SQ3\DLL, "sqlite3_bind_text16")
    SQ3\column_blob     = GetFunction(SQ3\DLL, "sqlite3_column_blob")
    SQ3\column_bytes    = GetFunction(SQ3\DLL, "sqlite3_column_bytes")
    SQ3\column_bytes16  = GetFunction(SQ3\DLL, "sqlite3_column_bytes16")
    SQ3\column_double   = GetFunction(SQ3\DLL, "sqlite3_column_double")
    SQ3\column_int      = GetFunction(SQ3\DLL, "sqlite3_column_int")
    SQ3\column_int64    = GetFunction(SQ3\DLL, "sqlite3_column_int64")
    SQ3\column_text     = GetFunction(SQ3\DLL, "sqlite3_column_text")
    SQ3\column_text16   = GetFunction(SQ3\DLL, "sqlite3_column_text16")
    SQ3\column_type     = GetFunction(SQ3\DLL, "sqlite3_column_type")
    SQ3\PeekMode = #PB_UTF8
    ProcedureReturn #TRUE
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteClose(hDB.l)
  If Not hDB : ProcedureReturn #FALSE : EndIf
  If SQ3\Close
    If Not SQ3\Close(hDB)
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure

Procedure.l SQLiteOpen(FileName.s, AsciiMode.l = #FALSE)
  Protected hDB.l
  CompilerIf #PB_Compiler_Unicode
  If SQ3\open16
    If Not SQ3\open16(FileName, @hDB)
      ProcedureReturn hDB
    EndIf
  EndIf
  CompilerElse
  If AsciiMode
    SQ3\IsASCII = #TRUE
    SQ3\PeekMode = #PB_Ascii
  EndIf
  If SQ3\open
    If Not SQ3\open(FileName, @hDB)
      ProcedureReturn hDB
    EndIf
  EndIf
  CompilerEndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteErrorCode(hDB.l)
  If SQ3\errcode
    ProcedureReturn SQ3\errcode(hDB)
  EndIf
  ProcedureReturn -1
EndProcedure
;
Procedure.s SQLiteErrorMsg(hDB.l)
  If Not hDB : ProcedureReturn "Database handle missing" : EndIf
  CompilerIf #PB_Compiler_Unicode
  If SQ3\errmsg16
    ProcedureReturn PeekS(SQ3\errmsg16(hDB))
  EndIf
  CompilerElse
  If SQ3\errmsg
    ProcedureReturn PeekS(SQ3\errmsg(hDB))
  EndIf
  CompilerEndIf
  ProcedureReturn ""
EndProcedure
; 
Procedure.s SQLiteLibversion()
  If SQ3\libversion
    ProcedureReturn PeekS(SQ3\libversion(), #PB_Any, #PB_Ascii)
  EndIf
EndProcedure
;
Procedure.l SQLiteExecute(hDB.l, Statement.s, callback.l = 0, cbpara.l = 0)
  If Not hDB : ProcedureReturn #FALSE : EndIf
  If SQ3\IsASCII
    If SQ3\exec_a
      If Not SQ3\exec_a(hDB, Statement, callback, cbpara)
        ProcedureReturn #TRUE
      EndIf
    EndIf
  Else
    If SQ3\exec
      If Not SQ3\exec(hDB, Statement, callback, cbpara)
        ProcedureReturn #TRUE
      EndIf
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteLastInsertRowId(hDB.l)
  If Not hDB : ProcedureReturn #FALSE : EndIf
  If SQ3\last_insert_rowid
    ProcedureReturn SQ3\last_insert_rowid(hDB)
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
;table-functions
Procedure.l SQliteFreeTable(*table.SQ3_TABLEMAP)
  If SQ3\free_table And *table
    SQ3\free_table(*table\Table)
    ProcedureReturn #TRUE
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteGetTable(hDB.l, Statement.s, *table.SQ3_TABLEMAP)
  Protected nRow.l, nColumn.l, lResultPtr.l, result.l
  If Not hDB : ProcedureReturn #FALSE : EndIf ; <<<
  If SQ3\get_table
    If SQ3\IsASCII
      result = SQ3\get_table_a(hDB, Statement, @lResultPtr, @nRow, @nColumn)
    Else
      result = SQ3\get_table(hDB, Statement, @lResultPtr, @nRow, @nColumn)
    EndIf
    If Not result
      *table\Table = lResultPtr
      *table\Rows = nRow
      *table\Cols = nColumn
      *table\RowPos = 0
      *table\ColPos = 0
      ProcedureReturn *table
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteNextRow(*Table.SQ3_TABLEMAP)
  If *Table
    If *Table\RowPos < *Table\Rows
      *Table\RowPos + 1
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteNextCol(*Table.SQ3_TABLEMAP)
  If *Table
    If *Table\ColPos < *Table\Cols
      *Table\ColPos + 1
      ProcedureReturn #TRUE
    Else
      *Table\ColPos = 0
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteSelectRow(*Table.SQ3_TABLEMAP, Row.l)
  If *Table
    If Row > 0 And Row <= *Table\Rows
      *Table\RowPos = Row
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteSelectCol(*Table.SQ3_TABLEMAP, Col.l)
  If *Table
    If Col > 0 And Col <= *Table\Cols
      *Table\ColPos = Col
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteSelectPos(*Table.SQ3_TABLEMAP, Row.l, Col.l)
  If *Table
    If Row > 0 And Row <= *Table\Rows And Col > 0 And Col <= *Table\Cols
      *Table\RowPos = Row
      *Table\ColPos = Col
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteResetPos(*Table.SQ3_TABLEMAP)
  If *Table
    *Table\RowPos = 0
    *Table\ColPos = 0
    ProcedureReturn #TRUE
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.s SQLiteColName(*Table.SQ3_TABLEMAP, Col.l)
  Protected *val.l
  If *Table
    If Col > 0 And Col <= *Table\Cols
      *val.l = PeekL(*Table\Table + ((Col - 1) * 4))
      If *val
        ProcedureReturn PeekS(*val, #PB_Any, SQ3\PeekMode)
      EndIf
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure
; 
Procedure.s SQLiteValue(*Table.SQ3_TABLEMAP)
  Protected *val.l
  If *Table
    If *Table\RowPos > 0 And *Table\RowPos <= *Table\Rows And *Table\ColPos > 0 And *Table\ColPos <= *Table\Cols
      *val.l = PeekL(*Table\Table + ((*Table\ColPos - 1 + (*Table\RowPos * *Table\Cols)) * 4))
      If *val
        ProcedureReturn PeekS(*val, #PB_Any, SQ3\PeekMode)
      EndIf
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure
; 
Procedure.s SQLiteRowValue(*Table.SQ3_TABLEMAP, Row.l)
  Protected *val.l
  If *Table
    If Row > 0 And Row <= *Table\Rows And *Table\Cols > 0 And *Table\Cols <= *Table\Cols
      *val.l = PeekL(*Table\Table + ((*Table\Cols - 1 + (Row * *Table\Cols)) * 4))
      If *val
        ProcedureReturn PeekS(*val, #PB_Any, SQ3\PeekMode)
      EndIf
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure
; 
Procedure.s SQLiteColValue(*Table.SQ3_TABLEMAP, Col.l)
  Protected *val.l
  If *Table
    If *Table\RowPos > 0 And *Table\RowPos <= *Table\Rows And Col > 0 And Col <= *Table\Cols
      *val.l = PeekL(*Table\Table + ((Col - 1 + (*Table\RowPos * *Table\Cols)) * 4))
      If *val
        ProcedureReturn PeekS(*val, #PB_Any, SQ3\PeekMode)
      EndIf
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure
; 
Procedure.s SQLiteSelectValue(*Table.SQ3_TABLEMAP, Row.l, Col.l)
  Protected *val.l
  If *Table
    If Row > 0 And Row <= *Table\Rows And Col > 0 And Col <= *Table\Cols
      *val.l = PeekL(*Table\Table + ((Col - 1 + (Row * *Table\Cols)) * 4))
      If *val
        ProcedureReturn PeekS(*val, #PB_Any, SQ3\PeekMode)
      EndIf
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure
; 
Procedure.l SQLiteRows(*Table.SQ3_TABLEMAP)
  If *Table
    ProcedureReturn *Table\Rows
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteCols(*Table.SQ3_TABLEMAP)
  If *Table
    ProcedureReturn *Table\Cols
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
; binding-functions
Procedure.l SQLitePrepare(hDB.l, Statement.s); Result is lStatement
  Protected Result.l
  CompilerIf #PB_Compiler_Unicode
    If SQ3\prepare16
      If Not SQ3\prepare16(hDB, Statement, -1, @Result)
        ProcedureReturn Result
      EndIf
    EndIf
  CompilerElse
    If SQ3\prepare
      If SQ3\IsASCII
        If Not SQ3\prepare_a(hDB, Statement, -1, @Result)
          ProcedureReturn Result
        EndIf
      Else
        If Not SQ3\prepare(hDB, Statement, -1, @Result)
          ProcedureReturn Result
        EndIf
      EndIf
    EndIf
  CompilerEndIf
EndProcedure
; 
Procedure.l SQLiteFinalize(lStatement.l)
  If SQ3\finalize
    If Not SQ3\finalize(lStatement)
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
;
Procedure.l SQLiteStep(lStatement.l)
  If SQ3\step_
    If SQ3\step_(lStatement) = #SQLITE3_ROW
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteBindBlob(lStatement.l, lIndex.l, lBuffer.l, lBufferLength.l)
  If SQ3\bind_blob
    If Not SQ3\bind_blob(lStatement, lIndex, lBuffer, lBufferLength)
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
;
Procedure.l SQLiteBindDouble(lStatement.l, lIndex.l, dValue.d)
  If SQ3\bind_double
    If Not SQ3\bind_double(lStatement, lIndex, dValue)
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
;
Procedure.l SQLiteBindLong(lStatement.l, lIndex.l, lValue.l)
  If SQ3\bind_int
    If Not SQ3\bind_int(lStatement, lIndex, lValue)
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteBindQuad(lStatement.l, lIndex.l, qValue.q)
  If SQ3\bind_int64
    If Not SQ3\bind_int64(lStatement, lIndex, qValue)
      ProcedureReturn #TRUE
    EndIf
  EndIf
  ProcedureReturn #FALSE
EndProcedure
;
Procedure.l SQLiteBindText(lStatement.l, lIndex.l, Text.s)
  CompilerIf #PB_Compiler_Unicode
    If SQ3\bind_text16
      If Not SQ3\bind_text16(lStatement, lIndex, @Text)
        ProcedureReturn #TRUE
      EndIf
    EndIf
  CompilerElse
    If SQ3\bind_text
      If Not SQ3\bind_text(lStatement, lIndex, @Text)
        ProcedureReturn #TRUE
      EndIf
    EndIf
  CompilerEndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteColumnBlob(lStatement.l, lColumn.l)
  If SQ3\column_blob
    ProcedureReturn SQ3\column_blob(lStatement, lColumn)
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteColumnByte(lStatement.l, lColumn.l)
  CompilerIf #PB_Compiler_Unicode
    If SQ3\column_bytes16
      ProcedureReturn SQ3\column_bytes16(lStatement, lColumn)
    EndIf
  CompilerElse
    If SQ3\column_bytes
      ProcedureReturn SQ3\column_bytes(lStatement, lColumn)
    EndIf
  CompilerEndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.d SQLiteColumnDouble(lStatement.l, lColumn.l)
  If SQ3\column_double
    ProcedureReturn SQ3\column_double(lStatement, lColumn)
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.l SQLiteColumnLong(lStatement.l, lColumn.l)
  If SQ3\column_int
    ProcedureReturn SQ3\column_int(lStatement, lColumn)
  EndIf
  ProcedureReturn #FALSE
EndProcedure
; 
Procedure.q SQLiteColumnQuad(lStatement.l, lColumn.l)
  If SQ3\column_int64
    ProcedureReturn SQ3\column_int64(lStatement, lColumn)
  EndIf
  ProcedureReturn #FALSE
EndProcedure
;
Procedure.s SQLiteColumnText(lStatement.l, lColumn.l)
  CompilerIf #PB_Compiler_Unicode
    If SQ3\column_text16
      ProcedureReturn PeekS(SQ3\column_text16(lStatement, lColumn))
    EndIf
  CompilerElse
    If SQ3\column_text
      ProcedureReturn PeekS(SQ3\column_text(lStatement, lColumn))
    EndIf
  CompilerEndIf
  ProcedureReturn ""
EndProcedure
; 
Procedure.l SQLiteColumnType(lStatement.l, lColumn.l)
  If SQ3\column_type
    ProcedureReturn SQ3\column_type(lStatement, lColumn)
  EndIf
  ProcedureReturn #FALSE
EndProcedure
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SqLite3-Problem - keine Datenbank

Beitrag von Kiffi »

Hallo michel51,

ich habe bisher mit dem SQLite-Include (unter Windows) nur gute
Erfahrungen machen können.
michel51 hat geschrieben:Betrifft in erster Linie Mac-User (oder auch Linux-User / Unix-Speuialisten !?)
also kein Problem unter Windows? Wenn ja, dann kann ich leider nix dazu
sagen, weil ich nicht mit dem Mac (oder Linux) unterwegs bin.

Grüße ... Kiffi
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Re: SqLite3-Problem - keine Datenbank

Beitrag von michel51 »

Hi Kiffi
Kiffi hat geschrieben:Hallo michel51,

ich habe bisher mit dem SQLite-Include (unter Windows) nur gute
Erfahrungen machen können.
Danke für deine schnelle Antwort.

Ich denke, dass der Fehler mit hoher Wahrscheinlichkeit auch nicht in der Include-Datei liegt. Ich habe sie mitgeliefert für den Fall, dass doch.. (du weißt ja, "der Teufel ist ein Eichhörnchen"!)

Interessant ist, dass die allererste Version des Includes mal gegangen ist (da muss doch noch irgendwo ein Post sein...)
Diese Version ist inzwischen mehrfach ergänzt und geändert worden. Seitdem läuft es nicht mehr. Es kann natürlich auch sonst irgend was sein, vielleicht ist der Code nicht in Ordnung, obwohl das ein Ausschnitt des damaligen Postings ist.
Ich habe nun auch mal die Zugriffrechte repariert und, und, und..., aber die Datenbank wird einfach nicht erzeugt. Vielleicht fehlt auch nur irgendwo ein "Schreibbefehl" ?!
Selbst mit der aktuellen Library (3.5.6) funktioniert es nicht...
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
mar
Beiträge: 107
Registriert: 06.08.2005 14:49

Beitrag von mar »

Hi,

Windows geht soweit.

Mac: Da funktionieren alle Befehle tadellos nur
in das Datenbankfile wird nichts reingeschrieben?!?

Ansonsten ist debuggen ja etwas seltsam unter Mac.
Da hab ich einfach mal eine 2s Pause eingefügt, um rechtzeitig
stop im Debugger drücken zu können.

Aber Lösung hab ich nicht. Vielleicht mal eine DB mit der sqlite.exe
erzeugen. DynLib sind etwas empfindlich auf Compilereinstellungen.

Mar
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Beitrag von michel51 »

mar hat geschrieben: Mac: Da funktionieren alle Befehle tadellos nur
in das Datenbankfile wird nichts reingeschrieben?!?
Genau das ist der Punkt !
Aber Lösung hab ich nicht.
Schade.
Vielleicht mal eine DB mit der sqlite.exe
erzeugen. DynLib sind etwas empfindlich auf Compilereinstellungen.
exe kann der Mac nicht. Habe mal eine DB mit dem "SQLite Database Browser" erzeugt und die Spalten so kreiert, wie es im PB-Code vorgesehen ist. Es scheint so, dass die DB geöffnet wird, denn es kommt keine Fehlermeldung. Aber die Werte werden nicht in die Felder geschrieben.

Sehr seltsam.

Vielleicht ein Bug. ABER da auch andere Mac-User damit offensichtlich schon arbeiten, muss das wohl einen anderen Grund haben.

Trotzdem Danke für dein Repost.
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SqLite3-Problem - keine Datenbank

Beitrag von Kiffi »

@michel51: mh, Du öffnest die Datenbank und versuchst dort eine Tabelle
anzulegen ("Create Table ..."). Wenn die Tabelle bereits vorhanden ist,
werden aufgrund Deiner Programmstruktur dann natürlich nicht die Werte
reingeschrieben.

Es kann ja sein, dass lediglich SQliteErrorMsg() nicht funktioniert.

Ich würde es mal so probieren:

Code: Alles auswählen

If SQliteExecute(hDB, "CREATE TABLE testtable (spalte1 TEXT, spalte2 TEXT, spalte3 TEXT)") = #False
  Debug SQliteErrorMsg(hDB)
EndIf

For r = 1 To 5
  If SQliteExecute(hDB, "INSERT INTO testtable (spalte1, spalte2, spalte3) VALUES('Sp 1', 'Sp 2', 'Sp 3')") = #False
    Debug SQliteErrorMsg(hDB)
  EndIf
Next
Grüße ... Kiffi
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Re: SqLite3-Problem - keine Datenbank

Beitrag von michel51 »

@Kiffi
Kiffi hat geschrieben:@michel51: mh, Du öffnest die Datenbank und versuchst dort eine Tabelle
anzulegen ("Create Table ..."). Wenn die Tabelle bereits vorhanden ist,
werden aufgrund Deiner Programmstruktur dann natürlich nicht die Werte
reingeschrieben.

Es kann ja sein, dass lediglich SQliteErrorMsg() nicht funktioniert.

Ich würde es mal so probieren:

Code: Alles auswählen

If SQliteExecute(hDB, "CREATE TABLE testtable (spalte1 TEXT, spalte2 TEXT, spalte3 TEXT)") = #False
  Debug SQliteErrorMsg(hDB)
EndIf

For r = 1 To 5
  If SQliteExecute(hDB, "INSERT INTO testtable (spalte1, spalte2, spalte3) VALUES('Sp 1', 'Sp 2', 'Sp 3')") = #False
    Debug SQliteErrorMsg(hDB)
  EndIf
Next
Grüße ... Kiffi
Hab's versucht, leider kein Erfolg. Hab auch versucht, nur die DB alleine anzulegen,

Code: Alles auswählen

If SQliteExecute(hDB, "CREATE TABLE testtable (spalte1 TEXT, spalte2 TEXT, spalte3 TEXT)") = #False
  Debug SQliteErrorMsg(hDB)
EndIf
brachte auch keinen Erfolg. Die angelegte Datei ist immer noch leer.
Und wie schon angedeutet, dieser Code ist aus dem ursprünglichen Original von TS-Soft übernommen, sollte also eigentlich funktionieren.
Irgendwie wird nichts in die angelegte Datei geschrieben.
Aber auch bei Step by Step Debugging kann ich irgendwie keinen Fehler sehen (oder ich übersehe immer etwas).
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
mar
Beiträge: 107
Registriert: 06.08.2005 14:49

Beitrag von mar »

Hi,

Die sqlite "exe" kann deine DB erstellen.
Somit liegt es irgendwo zwischen PB und dylib.
Dylibs machen immer ärger. Allerdings stört mich
der String 3.1.3 oder ähnlich - warum zeigt er
nicht die richtige Version an?
Lädt PB vielleicht doch lieber die Library vom System "/usr/lib/".
Allerdings hatte ich auch die komplette Versionsnummer angegeben.
Wär nicht schlecht wenn man ein XCode Project davon hätte.
Da isses viel leichter mit den Optionen zum Kompilieren.

Vielleicht braucht PB auch eine universal Dylib?
Wer hat da Ahnung? Oder ein Beispiel wo eine Dylib funktioniert?
Mal umschaun ...

mar
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: SqLite3-Problem - keine Datenbank

Beitrag von ts-soft »

michel51 hat geschrieben: Und wie schon angedeutet, dieser Code ist aus dem ursprünglichen Original von TS-Soft übernommen, sollte also eigentlich funktionieren.
Danke :D
Hab leider keine Mac, kann also nicht weiterhelfen

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
michel51
Beiträge: 84
Registriert: 01.11.2005 20:00
Wohnort: Dornhan-Weiden

Beitrag von michel51 »

mar hat geschrieben:Hi,

Die sqlite "exe" kann deine DB erstellen.
Das macht auch der "SQLite Data Browser". Und wie schon oben mal beschrieben, hab ich das versucht.
Allerdings stört mich
der String 3.1.3 oder ähnlich - warum zeigt er
nicht die richtige Version an?
Das ist die richtige Version! 3.1.3 ist die Version von libsqlite3.dylib, die in "usr/lib" liegt und mit dem System kommt. Ich habe aber auch die Version 3.5.6 in "usr/local/lib" liegen. Auch damit wird mit die Versionsnummer richtig angezeigt, der Rest ist wie gehabt, leider.
Vielleicht braucht PB auch eine universal Dylib?
Wer hat da Ahnung? Oder ein Beispiel wo eine Dylib funktioniert?
Mal umschaun ...
Ja, ein funktionierende Beispiel wäre nicht schlecht, vor allem in PB. :D
Irgendwie habe ich den Eindruck, dass die Execute-Funktionen nicht richtig funktionieren. Aus der Procedur im Include-File kommt man aber richtig raus (bei "procedurereturn #TRUE"). Das Ganze ist irgendwie sehr mysteriös.
michel51

Mac OS X Snow Leopard (10.6.8 ) Intel
PureBasic V 5.11(X64), V 5.21(x64)

Zum Lernen ist niemand zu alt.
Antworten