Has promissed for Sqlite 320...
Not entirely my code !!!!
Code: Select all
#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_LIB = 200
Global sqlite3_open.l
Global sqlite3_exec.l
Global sqlite3_close.l
Global sqlite3_errmsg.l
Global sqlite3_get_table.l
Global sqlite3_free_table.l
Global sqlite3_lasterror.s
Procedure.l SQLite3_Init()
If OpenLibrary(#SQLITE3_LIB ,"sqlite3.dll")
sqlite3_open = IsFunction(#SQLITE3_LIB, "sqlite3_open")
sqlite3_exec = IsFunction(#SQLITE3_LIB, "sqlite3_exec")
sqlite3_close = IsFunction(#SQLITE3_LIB, "sqlite3_close")
sqlite3_errmsg = IsFunction(#SQLITE3_LIB, "sqlite3_errmsg")
sqlite3_get_table = IsFunction(#SQLITE3_LIB, "sqlite3_get_table")
sqlite3_free_table = IsFunction(#SQLITE3_LIB, "sqlite3_free_table")
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.l SQLite3_End()
CloseLibrary(#SQLITE3_LIB)
EndProcedure
Procedure.l SQLite3_OpenDatabase(sDataBase.s)
If CallCFunctionFast(sqlite3_open, sDataBase, @sqlite3_dbHandle) = #SQLITE3_OK
ProcedureReturn sqlite3_dbHandle
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure.l SQLite3_CloseDatabase(lDataBaseHandle.l)
If CallCFunctionFast(sqlite3_close, lDataBaseHandle) = #SQLITE3_OK
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure.s SQLite3_LastError()
ProcedureReturn sqlite3_lasterror
EndProcedure
Procedure.l SQLite3_Execute(sSQLQuery.s, lDataBaseHandle.l)
If CallCFunctionFast(sqlite3_exec, lDataBaseHandle, sSQLQuery, #Null, #Null, @ReturnValue) = #SQLITE3_OK
ProcedureReturn #True
Else
CallCFunctionFast(sqlite3_errmsg, @ReturnValue)
sqlite3_lasterror=PeekS(ReturnValue)
ProcedureReturn #False
EndIf
EndProcedure
Procedure.l SQLite3_GetTable(sSQLQuery.s, *Rows, *Cols, lDataBaseHandle.l)
If CallCFunctionFast(sqlite3_get_table, lDataBaseHandle, sSQLQuery, @LResultsPtr, @LRows, @LCols, @ReturnValue) = #SQLITE3_OK
; return number of rows/columns
PokeL(*Rows, LRows)
PokeL(*Cols, LCols)
If LRows > -1 And LCols > 0
; redimension results array (clears data)
Dim DBData.s(LRows, LCols - 1)
; copy data into array
Address.l = LResultsPtr
AddrInc.l = LCols * 4
For Row.l = 0 To LRows
For Col.l = 0 To LCols - 1
DBData(Row, Col) = PeekS(PeekL(Address + Col * 4))
Next
Address + AddrInc
Next
EndIf
; free table memory
CallCFunctionFast(sqlite3_free_table, LResultsPtr)
ProcedureReturn #True
Else
CallCFunctionFast(sqlite3_errmsg, @ReturnValue)
sqlite3_lasterror= PeekS(ReturnValue)
ProcedureReturn #False
EndIf
EndProcedure