Code : Tout sélectionner
_SEP_.s = "/"
LIB_TO_LOAD.s = "libsqlite3.so.0"
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
XIncludeFile "include/sqlite3.pbi"
_SEP_ = "/"
LIB_TO_LOAD = "libsqlite3.so.0"
CompilerCase #PB_OS_Windows
XIncludeFile "include\sqlite3.pbi"
_SEP_ = "\"
LIB_TO_LOAD = "sqlite3.dll"
CompilerEndSelect
sDB.s = "DB"+_SEP_+"sample.db"
If SQLite3_InitLib(LIB_TO_LOAD) = #False
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
End
EndIf
Debug "Lib version :"+SQLite3_GetLibVersion()
Debug "Lib version Number :"+Str(SQLite3_GetLibVersionNumber())
; Création d'une base, si elle existe ddéja on ecrase (boolOverwrite = #true)
dbHandle = SQLite3_CreateDatabase(sDB, #True)
If dbHandle = 0
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
End
EndIf
; Table test pour les données à remplir
sSQL.s = "Create Table TempData (fld0, fld1, fld2)"
SQLite3_Execute(sSQL, dbHandle)
; Création d'une table temporaire, détruite lors de la fermeture de la base
sSQL.s = "CREATE TEMP TABLE tbl1 (f1 varchar(30) primary key, f2 text, f3 real)"
SQLite3_Execute(sSQL, dbHandle)
temps1= ElapsedMilliseconds()
; Transaction permettant d'accélérer l'insertion multiple de données!
sSQL = "BEGIN TRANSACTION"
SQLite3_Execute(sSQL, dbHandle)
For intI = 0 To 999
sSQL.s = "Insert Into TempData (fld0, fld1, fld2) Values ('value_0_" + Str(intI) + "', 'value_1_" + Str(intI) + "', 'value_2_" + Str(intI) + "')"
SQLite3_Execute(sSQL, dbHandle)
Next intI
SQLite3_Execute("insert into tbl1 values('KEY000', 'hello!', 10)", dbHandle)
SQLite3_Execute("insert into tbl1 values('KEY001', 'goodbye', 25.20)", dbHandle)
; Les transactions
sSQL = "COMMIT"
SQLite3_Execute(sSQL, dbHandle)
temps2= ElapsedMilliseconds()
Define.s_Recordset RS ; definir le Recordset-'Object'
; Détermination du nombre d'enregistrement
If SQLite3_GetRecordset("Select Count(*) As Nb_Enr From TempData", dbHandle, @RS )
If RS\Handle
If SQLite3_GetRecordsetValueByName("Nb_Enr", @RS)
Debug RS\sValue + " enregistrements insérés en " + Str(temps2-temps1) + " millisecondes."
Else
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
EndIf
EndIf
Else
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
EndIf
If SQLite3_GetRecordset("Select * From TempData Limit 5", dbHandle, @RS)
Debug "Valeur de l'index du champ 'fld2': " + Str( SQLite3_GetFieldIndexByName("fld2", @RS) )
If RS\Handle
; Recherche et affichage de tous les enregistrements (suivant la limite)
While RS\EOF = 0
If SQLite3_GetRecordsetValueByName("fld0", @RS)
Debug RS\sValue
Else
MessageRequester("", SQLite3_GetLastMessage())
EndIf
SQLite3_RecordsetMoveNext(@RS)
Wend
Debug "----------------------"
; La même chose mais à partir de la fin
While RS\BOF = 0
If SQLite3_GetRecordsetValueByName("fld0", @RS)
Debug RS\sValue
Else
MessageRequester("", SQLite3_GetLastMessage())
EndIf
SQLite3_RecordsetMovePrevious(@RS)
Wend
Debug "++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
; Aller au 1er enregistrement
SQLite3_RecordsetMoveFirst(@RS)
If SQLite3_GetRecordsetValueByName("fld0", @RS)
Debug "Zone de contenu du champ 'fld0' du premier enregistrement (ByName):"
Debug RS\sValue
Else
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
EndIf
If SQLite3_GetRecordsetValueByIndex(0, @RS)
Debug "Zone de contenu du champ 'fld0' du premier enregistrement (ByIndex):"
Debug RS\sValue
Else
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
EndIf
Debug "++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
; Aller au dernier enregistrement
SQLite3_RecordsetMoveLast(@RS)
If SQLite3_GetRecordsetValueByName("fld0", @RS)
Debug "Zone de contenu du champ 'fld0' du dernier enregistrement:"
Debug RS\sValue
Else
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
EndIf
SQLite3_ReleaseRecordset(@RS)
Else
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
EndIf
Else
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
EndIf
Debug "++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
Define.s_Recordset RS2
If SQLite3_GetRecordset("Select Count(*) As Nb_Enr From tbl1", dbHandle, @RS2)
SQLite3_GetRecordsetValueByName("Nb_Enr", @RS2)
Debug "Nombre d'enregistrement pour la table temporaire 'tbl1' = " + RS2\sValue
; Recherche dans la table tbl1 quand une partie du champ 'f2' contient "oo"
; (notez bien l'importance des % avant et après la partie du mot à rechercher) :
SQLite3_GetRecordset("Select * from tbl1 where f2 like '%oo%'", dbHandle, @RS2)
If RS2\Handle
While RS2\EOF = 0
SQLite3_GetRecordsetValueByName("f1", @RS2)
a$ = RS2\sValue
SQLite3_GetRecordsetValueByName("f2", @RS2)
b$ = RS2\sValue
SQLite3_GetRecordsetValueByName("f3", @RS2)
c$ = RS2\sValue
Debug a$ + " - "+ b$ + " - " + c$
SQLite3_RecordsetMoveNext(@RS2)
Wend
EndIf
Else
MessageRequester("SQLite3-Demo", SQLite3_GetLastMessage())
EndIf
SQLite3_CloseDatabase(dbHandle) ; La table tbl1 n'existe plus
End