Page 1 sur 2

Sqlite pour un gros nul

Publié : mar. 02/déc./2008 12:21
par MetalOS
Salut tous le monde, voila ca fait longtemp que j'avais pas utiliser PB mais comme j'ais besoin de faire une appli qui utilise une base de données j'ais pensé utilisé sqlite. J'ais donc fouillé le forum et l'aide de pb mais les explications reste trés flou pour moi.

Je cherche juste un tuto claire pour apprendre à gérer une BDD sqlite sous PB.

Dans cette base je dois enregistrer
- du texte contenue dans des StringGadget et un EditorGadget
- le status de plusieur CheckBoxGadget (0=non coché, 1=coché)

Merci d'avance pour toutes vos réponses.

Publié : mar. 02/déc./2008 13:53
par Backup

Publié : mar. 02/déc./2008 14:47
par Kwai chang caine
D'ailleur une question me taraude depuis pas mal de temps.
Quelle est la difference entre SQL et SQLITE :roll:

Publié : mar. 02/déc./2008 15:51
par Backup
Kwai chang caine a écrit :D'ailleur une question me taraude depuis pas mal de temps.
Quelle est la difference entre SQL et SQLITE :roll:
facile !! SQLITE est sans sucre !! :lol:

Publié : mar. 02/déc./2008 17:17
par Progi1984
SQL est le langage de creation de requetes de base de données

SQLite est un SGBDR (Systeme de Gestion de Bases de Données Relationnelles).

Lien : http://fr.wikipedia.org/wiki/SQL
Lien : http://fr.wikipedia.org/wiki/SQLite

Publié : mar. 02/déc./2008 22:44
par Kwai chang caine
facile !! SQLITE est sans sucre !!
Nadine boudin, il est en forme aujourd'hui

Image
ROOOOOO mais oui mais oui lé vlaiment vilain ce DOBLO

@PROGI
D'accord donc SQLITE est comme on pourrait dire le programme, et SQL est le language pour faire marcher ce programme :roll:
Mais SQLITE c'est pas créé par un genie de PB ??? c'est un truc pour tout le monde ???

Publié : mer. 03/déc./2008 12:19
par MetalOS
Ok merci je v deja voir de ce coté, je vous tiens au courant.

Publié : sam. 07/févr./2009 15:27
par MetalOS
Je revient sur le sujet et cherche toujours un bon tuto pour utiliser Sqlite avec PB, si défois quelqu'un à ça pour moi. merci.

Publié : dim. 08/févr./2009 21:29
par Atomo
Ce code te montre comment créer une base de donnée avec une table, y insérer des données, supprimer, modifier et faire quelques requêtes simple.

Code : Tout sélectionner

UseSQLiteDatabase()

;création du fichier texte contenant la base de donnée s'il n'existe pas, ex : première utilisation du logiciel
If FileSize("bdd.txt") = -1
  If CreateFile(0, "bdd.txt")
    CloseFile(0)
  EndIf
EndIf

If OpenDatabase(0, "bdd.txt", "", "") ;ouverture de la base de donnée
  DatabaseUpdate(0, "CREATE TABLE eleves (id INTEGER PRIMARY KEY, nom TEXT, age INTEGER, sexe TEXT)") ;création de la table eleves avec 4 champs (id, nom, age, sexe) si elle n'existe pas
  
  ;Ajout d'informations dans la table eleves (pas besoin de préciser l'id car il est en auto incrémentation
  DatabaseUpdate(0, "INSERT INTO eleves (nom, age, sexe) VALUES ('Pierre', '18', 'Homme')")
  DatabaseUpdate(0, "INSERT INTO eleves (nom, age, sexe) VALUES ('Paul', '18', 'Homme')")
  DatabaseUpdate(0, "INSERT INTO eleves (nom, age, sexe) VALUES ('Marcel', '20', 'Homme')")
  ;Ajout d'informations avec variables
  nom.s = "Julie"
  DatabaseUpdate(0, "INSERT INTO eleves (nom, age, sexe) VALUES ('"+nom+"', '19', 'Femme')")
  ;Voir tout les eleves
  DatabaseQuery(0, "SELECT * FROM eleves")
  While NextDatabaseRow(0)
    Debug GetDatabaseString(0, 0) ;id
    Debug GetDatabaseString(0, 1) ;nom
    Debug GetDatabaseString(0, 2) ;age
    Debug GetDatabaseString(0, 3) ;sexe
  Wend
  Debug "#################"
  ;Eleves ayant 18ans
  DatabaseQuery(0, "SELECT nom FROM eleves WHERE age='18'")
  While NextDatabaseRow(0)
    Debug GetDatabaseString(0, 0) ;nom
  Wend
  Debug "#################"
  ;Supprimer un enregistrement
  DatabaseUpdate(0, "DELETE FROM eleves WHERE nom='Pierre'")
  ;Modifier un enregistrement, remplace tout les 19ans par des 20ans
  DatabaseUpdate(0, "UPDATE eleves SET age='20' WHERE age='19'")
  
  CloseDatabase(0) ;ferme la base de donnée
EndIf
Je te recommande d'utiliser SQliteManager, ça te permet de travailler sur ta base de donnée en local pour faire tes test avec une interface graphique similaire à phpMyAdmin, tu peux te le procurer gratuitement en téléchargeant Wamp server.

Publié : dim. 08/févr./2009 22:01
par MetalOS
Cool Merci je v regarder ça.

Publié : lun. 09/févr./2009 17:18
par GeBonet
Extrait du Pos de Comtois...
http://www.purebasic.fr/french/viewtopic.php?t=8749
Et il y a ce code contient à peu près tout pour démarrer avec Sqlite...
ftp://ftp-developpez.com/purebasic/sour ... livres.zip
Et allez voir dans l'ordre...
A+

Sqlite

Publié : mar. 10/févr./2009 4:15
par Smartfx
Tu Peux auussi télécharger un logiciel pour administer une base de donnée, sur le site SQLite. J'utilise Sqlite administrator, il n'est pas parfait
mais est quand même bien.

SQlite

Publié : mar. 10/févr./2009 4:30
par Smartfx
Pour utiliser des variables tu dois avoir la syntaxes appropriée.

Je met ma requête dans ine variable string
StrgQuery.s

Pour voir L'information sur un Client disons que le Id du client est Mun309
StrgNoClient = Strg309

Code : Tout sélectionner

 StrgQuery = "Select Client.Adresse, Client.Nom From Client"
StrgQuery = StrgQuery + " where(((Client.NoClient) ="
StrgQuery = StrgQuery + " '" +  StrgNoClient + "'"
databasequery(0,StrgQuery)
Lorsque la requête ne nécessite pas beaucoup de texte tu peux entrer la requête directement dans la commande databasequery.

Code : Tout sélectionner

Databasequery(0,"Select * from client")

Publié : mar. 10/févr./2009 12:22
par Smartfx
La ligne indiquant StrgNoClient aurait du être
StrgNoClient = "Mun309"

Publié : lun. 23/mars/2009 22:28
par flaith
Si ca interesse encore quelqu'un, et comme j'en avais besoin, j'ai repris la lib de Peter 'kiffi' Tübben sur purearea et l'ai remis au goût du jour pour Purebasic 4.30

(J'ai essayé de traduire les commentaires qui étaient en Allemand-merci google) :wink:

le fichier include [sqlite.pbi] à mettre dans un répertoire include (pas obligatoire bien sur):

Code : Tout sélectionner

; http://www.sqlite.org

; http://www.purearea.net/pb/download/userlibs/sqlite3_userlib.zip
; version 1.01 du 27.05.2005 par Peter 'kiffi' Tübben
; maj version 2009 - Flaith
; 23.03.2009 MAJ pour PureBasic 4.30
; 24.03.2009 AJOUT des dernières fonctions manquantes

Structure s_RecordSet
  BOF.i
  EOF.i
  Handle.i
  Rows.i
  Cols.i
  CurrentPos.i
  sValue.s
EndStructure

;- Valeurs de retour
#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

;- Drapeaux 'Flags' pour les opérations lors ouverture 
;  d'un fichier avec sqlite3_open_v2() par exemple
#SQLITE_OPEN_READONLY       = $00000001
#SQLITE_OPEN_READWRITE      = $00000002
#SQLITE_OPEN_CREATE         = $00000004
#SQLITE_OPEN_DELETEONCLOSE  = $00000008
#SQLITE_OPEN_EXCLUSIVE      = $00000010
#SQLITE_OPEN_MAIN_DB        = $00000100
#SQLITE_OPEN_TEMP_DB        = $00000200
#SQLITE_OPEN_TRANSIENT_DB   = $00000400
#SQLITE_OPEN_MAIN_JOURNAL   = $00000800
#SQLITE_OPEN_TEMP_JOURNAL   = $00001000
#SQLITE_OPEN_SUBJOURNAL     = $00002000
#SQLITE_OPEN_MASTER_JOURNAL = $00004000
#SQLITE_OPEN_NOMUTEX        = $00008000
#SQLITE_OPEN_FULLMUTEX      = $00010000

;- Declarations
Global LastMessage.s

Global sqlite3_aggregate_context.i
Global sqlite3_aggregate_count.i
Global sqlite3_auto_extension.i

; added 24/03/09 : specific to version 3.6.11
Global sqlite3_backup_finish.i
Global sqlite3_backup_init.i
Global sqlite3_backup_pagecount.i
Global sqlite3_backup_remaining.i
Global sqlite3_backup_step.i
; **************

Global sqlite3_bind_blob.i
Global sqlite3_bind_double.i
Global sqlite3_bind_int.i
Global sqlite3_bind_int64.i
Global sqlite3_bind_null.i
Global sqlite3_bind_parameter_count.i
Global sqlite3_bind_parameter_index.i
Global sqlite3_bind_parameter_name.i
Global sqlite3_bind_text.i
Global sqlite3_bind_text16.i

; added 24/03/09
Global sqlite3_bind_value.i
Global sqlite3_bind_zeroblob.i
Global sqlite3_blob_bytes.i
Global sqlite3_blob_close.i
Global sqlite3_blob_open.i
Global sqlite3_blob_read.i
Global sqlite3_blob_write.i
; **************

Global sqlite3_busy_handler.i
Global sqlite3_busy_timeout.i
Global sqlite3_changes.i

; added 24/03/09
Global sqlite3_clear_bindings.i
; **************

Global sqlite3_close.i
Global sqlite3_collation_needed.i
Global sqlite3_collation_needed16.i
Global sqlite3_column_blob.i
Global sqlite3_column_bytes.i
Global sqlite3_column_bytes16.i
Global sqlite3_column_count.i

; added 24/03/09
Global sqlite3_column_database_name.i
Global sqlite3_column_database_name16.i
; **************

Global sqlite3_column_decltype.i
Global sqlite3_column_decltype16.i
Global sqlite3_column_double.i
Global sqlite3_column_int.i
Global sqlite3_column_int64.i
Global sqlite3_column_name.i
Global sqlite3_column_name16.i

; added 24/03/09
Global sqlite3_column_origin_name.i
Global sqlite3_column_origin_name16.i
Global sqlite3_column_table_name.i
Global sqlite3_column_table_name16.i
; **************

Global sqlite3_column_text.i
Global sqlite3_column_text16.i
Global sqlite3_column_type.i
Global sqlite3_commit_hook.i
Global sqlite3_complete.i
Global sqlite3_complete16.i

; added 24/03/09
Global sqlite3_config.i
Global sqlite3_context_db_handle.i
; **************

Global sqlite3_create_collation.i
Global sqlite3_create_collation16.i

; added 24/03/09
Global sqlite3_create_collation_v2.i
; **************

Global sqlite3_create_function.i
Global sqlite3_create_function16.i

; added 24/03/09
Global sqlite3_create_module.i
Global sqlite3_create_module_v2.i
; **************

Global sqlite3_data_count.i

; added 24/03/09
Global sqlite3_db_config.i
Global sqlite3_db_handle.i
Global sqlite3_db_mutex.i
Global sqlite3_db_status.i
Global sqlite3_declare_vtab.i
Global sqlite3_enable_load_extension.i
Global sqlite3_enable_shared_cache.i
; **************

Global sqlite3_errcode.i
Global sqlite3_errmsg.i
Global sqlite3_errmsg16.i
Global sqlite3_exec.i

; added 24/03/09
Global sqlite3_expired.i
Global sqlite3_extended_errcode.i
Global sqlite3_extended_result_codes.i
Global sqlite3_file_control.i
; **************

Global sqlite3_finalize.i
Global sqlite3_free.i
Global sqlite3_free_table.i

; added 24/03/09
Global sqlite3_get_autocommit.i
; **************

Global sqlite3_get_auxdata.i
Global sqlite3_get_table.i

; added 24/03/09
Global sqlite3_global_recover.i
Global sqlite3_initialize.i
; **************

Global sqlite3_interrupt.i
Global sqlite3_last_insert_rowid.i
Global sqlite3_libversion.i
Global sqlite3_libversion_number.i

; added 24/03/09
Global sqlite3_limit.i
Global sqlite3_load_extension.i
Global sqlite3_malloc.i
Global sqlite3_memory_alarm.i
Global sqlite3_memory_highwater.i
Global sqlite3_memory_used.i
; **************

Global sqlite3_mprintf.i

; added 24/03/09
Global sqlite3_mutex_alloc.i
Global sqlite3_mutex_enter.i
Global sqlite3_mutex_free.i
Global sqlite3_mutex_leave.i
Global sqlite3_mutex_try.i
Global sqlite3_next_stmt.i
; **************

Global sqlite3_open.i
Global sqlite3_open16.i

; added 24/03/09
Global sqlite3_open_v2.i
Global sqlite3_os_end.i
Global sqlite3_os_init.i
Global sqlite3_overload_function.i
; **************

Global sqlite3_prepare.i
Global sqlite3_prepare16.i

; added 24/03/09
Global sqlite3_prepare16_v2.i
Global sqlite3_prepare_v2.i
Global sqlite3_profile.i
; **************

Global sqlite3_progress_handler.i

; added 24/03/09
Global sqlite3_randomness.i
Global sqlite3_realloc.i
Global sqlite3_release_memory.i
; **************

Global sqlite3_reset.i

; added 24/03/09
Global sqlite3_reset_auto_extension.i
; **************

Global sqlite3_result_blob.i
Global sqlite3_result_double.i
Global sqlite3_result_error.i
Global sqlite3_result_error16.i

; added 24/03/09
Global sqlite3_result_error_code.i
Global sqlite3_result_error_nomem.i
Global sqlite3_result_error_toobig.i
; **************

Global sqlite3_result_int.i
Global sqlite3_result_int64.i
Global sqlite3_result_null.i
Global sqlite3_result_text.i
Global sqlite3_result_text16.i
Global sqlite3_result_text16be.i
Global sqlite3_result_text16le.i
Global sqlite3_result_value.i

; added 24/03/09
Global sqlite3_result_zeroblob.i
Global sqlite3_rollback_hook.i
; **************

Global sqlite3_set_authorizer.i
Global sqlite3_set_auxdata.i

; added 24/03/09
Global sqlite3_shutdown.i
Global sqlite3_sleep.i
; **************

Global sqlite3_snprintf.i

; added 24/03/09
Global sqlite3_soft_heap_limit.i
Global sqlite3_sql.i
Global sqlite3_status.i
; **************

Global sqlite3_step.i

; added 24/03/09
Global sqlite3_stmt_status.i
Global sqlite3_table_column_metadata.i
Global sqlite3_test_control.i
Global sqlite3_thread_cleanup.i
Global sqlite3_threadsafe.i
; **************

Global sqlite3_total_changes.i
Global sqlite3_trace.i

; added 24/03/09
Global sqlite3_transfer_bindings.i
Global sqlite3_update_hook.i
; **************

Global sqlite3_user_data.i
Global sqlite3_value_blob.i
Global sqlite3_value_bytes.i
Global sqlite3_value_bytes16.i
Global sqlite3_value_double.i
Global sqlite3_value_int.i
Global sqlite3_value_int64.i

; added 24/03/09
Global sqlite3_value_numeric_type.i
; **************

Global sqlite3_value_text.i
Global sqlite3_value_text16.i
Global sqlite3_value_text16be.i
Global sqlite3_value_text16le.i
Global sqlite3_value_type.i

; added 24/03/09
Global sqlite3_version.i
Global sqlite3_vfs_find.i
Global sqlite3_vfs_register.i
Global sqlite3_vfs_unregister.i
; **************

Global sqlite3_vmprintf.i

; added 24/03/09
Global sqlite3_win32_mbcs_to_utf8.i
; **************

;-Variable globale de la DLL
Global sqlite3DLL

;- procedures
ProcedureDLL.i SQLite3_End()
  If sqlite3DLL
    CloseLibrary(sqlite3DLL)
  EndIf
  sqlite3DLL = 0
EndProcedure

ProcedureDLL.i SQLite3_InitLib(sSQLiteDLLPath.s)
  ; Valeur de retour de la DLL automatisée par #PB_Any
  sqlite3DLL = OpenLibrary(#PB_Any, sSQLiteDLLPath)

  ; Info :
  ; si Valeur 8  => UTF8
  ; si valeur 16 => UTF16

  If sqlite3DLL
    sqlite3_aggregate_context         = GetFunction(sqlite3DLL, "sqlite3_aggregate_context")
    sqlite3_aggregate_count           = GetFunction(sqlite3DLL, "sqlite3_aggregate_count")
    sqlite3_auto_extension            = GetFunction(sqlite3DLL, "sqlite3_auto_extension")

    ; ATTENTION : spécifique à la version 3.6.11 (à utiliser avec parcimonie)
    ; Important: This interface is experimental and is subject to change without notice.
    ; cf : http://www.sqlite.org/c3ref/backup_finish.html
    sqlite3_backup_finish             = GetFunction(sqlite3DLL, "sqlite3_backup_finish")
    sqlite3_backup_init               = GetFunction(sqlite3DLL, "sqlite3_backup_init")
    sqlite3_backup_pagecount          = GetFunction(sqlite3DLL, "sqlite3_backup_pagecount")
    sqlite3_backup_remaining          = GetFunction(sqlite3DLL, "sqlite3_backup_remaining")
    sqlite3_backup_step               = GetFunction(sqlite3DLL, "sqlite3_backup_step")
    ;********************************************************************************************

    sqlite3_bind_blob                 = GetFunction(sqlite3DLL, "sqlite3_bind_blob")
    sqlite3_bind_double               = GetFunction(sqlite3DLL, "sqlite3_bind_double")
    sqlite3_bind_int                  = GetFunction(sqlite3DLL, "sqlite3_bind_int")
    sqlite3_bind_int64                = GetFunction(sqlite3DLL, "sqlite3_bind_int64")
    sqlite3_bind_null                 = GetFunction(sqlite3DLL, "sqlite3_bind_null")
    sqlite3_bind_parameter_count      = GetFunction(sqlite3DLL, "sqlite3_bind_parameter_count")
    sqlite3_bind_parameter_index      = GetFunction(sqlite3DLL, "sqlite3_bind_parameter_index")
    sqlite3_bind_parameter_name       = GetFunction(sqlite3DLL, "sqlite3_bind_parameter_name")
    sqlite3_bind_text                 = GetFunction(sqlite3DLL, "sqlite3_bind_text")
    sqlite3_bind_text16               = GetFunction(sqlite3DLL, "sqlite3_bind_text16")
    sqlite3_bind_value                = GetFunction(sqlite3DLL, "sqlite3_bind_value")
    sqlite3_bind_zeroblob             = GetFunction(sqlite3DLL, "sqlite3_bind_zeroblob")
    sqlite3_blob_bytes                = GetFunction(sqlite3DLL, "sqlite3_blob_bytes")
    sqlite3_blob_close                = GetFunction(sqlite3DLL, "sqlite3_blob_close")
    sqlite3_blob_open                 = GetFunction(sqlite3DLL, "sqlite3_blob_open")
    sqlite3_blob_read                 = GetFunction(sqlite3DLL, "sqlite3_blob_read")
    sqlite3_blob_write                = GetFunction(sqlite3DLL, "sqlite3_blob_write")
    sqlite3_busy_handler              = GetFunction(sqlite3DLL, "sqlite3_busy_handler")
    sqlite3_busy_timeout              = GetFunction(sqlite3DLL, "sqlite3_busy_timeout")
    sqlite3_changes                   = GetFunction(sqlite3DLL, "sqlite3_changes")
    sqlite3_clear_bindings            = GetFunction(sqlite3DLL, "sqlite3_clear_bindings")
    sqlite3_close                     = GetFunction(sqlite3DLL, "sqlite3_close")
    sqlite3_collation_needed          = GetFunction(sqlite3DLL, "sqlite3_collation_needed")
    sqlite3_collation_needed16        = GetFunction(sqlite3DLL, "sqlite3_collation_needed16")
    sqlite3_column_blob               = GetFunction(sqlite3DLL, "sqlite3_column_blob")
    sqlite3_column_bytes              = GetFunction(sqlite3DLL, "sqlite3_column_bytes")
    sqlite3_column_bytes16            = GetFunction(sqlite3DLL, "sqlite3_column_bytes16")
    sqlite3_column_count              = GetFunction(sqlite3DLL, "sqlite3_column_count")
    sqlite3_column_database_name      = GetFunction(sqlite3DLL, "sqlite3_column_database_name")
    sqlite3_column_database_name16    = GetFunction(sqlite3DLL, "sqlite3_column_database_name16")
    sqlite3_column_decltype           = GetFunction(sqlite3DLL, "sqlite3_column_decltype")
    sqlite3_column_decltype16         = GetFunction(sqlite3DLL, "sqlite3_column_decltype16")
    sqlite3_column_double             = GetFunction(sqlite3DLL, "sqlite3_column_double")
    sqlite3_column_int                = GetFunction(sqlite3DLL, "sqlite3_column_int")
    sqlite3_column_int64              = GetFunction(sqlite3DLL, "sqlite3_column_int64")
    sqlite3_column_name               = GetFunction(sqlite3DLL, "sqlite3_column_name")
    sqlite3_column_name16             = GetFunction(sqlite3DLL, "sqlite3_column_name16")
    sqlite3_column_origin_name        = GetFunction(sqlite3DLL, "sqlite3_column_origin_name")
    sqlite3_column_origin_name16      = GetFunction(sqlite3DLL, "sqlite3_column_origin_name16")
    sqlite3_column_table_name         = GetFunction(sqlite3DLL, "sqlite3_column_table_name")
    sqlite3_column_table_name16       = GetFunction(sqlite3DLL, "sqlite3_column_table_name16")
    sqlite3_column_text               = GetFunction(sqlite3DLL, "sqlite3_column_text")
    sqlite3_column_text16             = GetFunction(sqlite3DLL, "sqlite3_column_text16")
    sqlite3_column_type               = GetFunction(sqlite3DLL, "sqlite3_column_type")
    sqlite3_commit_hook               = GetFunction(sqlite3DLL, "sqlite3_commit_hook")
    sqlite3_complete                  = GetFunction(sqlite3DLL, "sqlite3_complete")
    sqlite3_complete16                = GetFunction(sqlite3DLL, "sqlite3_complete16")
    sqlite3_config                    = GetFunction(sqlite3DLL, "sqlite3_config")
    sqlite3_context_db_handle         = GetFunction(sqlite3DLL, "sqlite3_context_db_handle")
    sqlite3_create_collation          = GetFunction(sqlite3DLL, "sqlite3_create_collation")
    sqlite3_create_collation16        = GetFunction(sqlite3DLL, "sqlite3_create_collation16")
    sqlite3_create_collation_v2       = GetFunction(sqlite3DLL, "sqlite3_create_collation_v2")
    sqlite3_create_function           = GetFunction(sqlite3DLL, "sqlite3_create_function")
    sqlite3_create_function16         = GetFunction(sqlite3DLL, "sqlite3_create_function16")
    sqlite3_create_module             = GetFunction(sqlite3DLL, "sqlite3_create_module")
    sqlite3_create_module_v2          = GetFunction(sqlite3DLL, "sqlite3_create_module_v2")
    sqlite3_data_count                = GetFunction(sqlite3DLL, "sqlite3_data_count")
    sqlite3_db_config                 = GetFunction(sqlite3DLL, "sqlite3_db_config")
    sqlite3_db_handle                 = GetFunction(sqlite3DLL, "sqlite3_db_handle")
    sqlite3_db_mutex                  = GetFunction(sqlite3DLL, "sqlite3_db_mutex")
    sqlite3_db_status                 = GetFunction(sqlite3DLL, "sqlite3_db_status")
    sqlite3_declare_vtab              = GetFunction(sqlite3DLL, "sqlite3_declare_vtab")
    sqlite3_enable_load_extension     = GetFunction(sqlite3DLL, "sqlite3_enable_load_extension")
    sqlite3_enable_shared_cache       = GetFunction(sqlite3DLL, "sqlite3_enable_shared_cache")
    sqlite3_errcode                   = GetFunction(sqlite3DLL, "sqlite3_errcode")
    sqlite3_errmsg                    = GetFunction(sqlite3DLL, "sqlite3_errmsg")
    sqlite3_errmsg16                  = GetFunction(sqlite3DLL, "sqlite3_errmsg16")
    sqlite3_exec                      = GetFunction(sqlite3DLL, "sqlite3_exec")
    sqlite3_expired                   = GetFunction(sqlite3DLL, "sqlite3_expired")
    sqlite3_extended_errcode          = GetFunction(sqlite3DLL, "sqlite3_extended_errcode")
    sqlite3_extended_result_codes     = GetFunction(sqlite3DLL, "sqlite3_extended_result_codes")
    sqlite3_file_control              = GetFunction(sqlite3DLL, "sqlite3_file_control")
    sqlite3_finalize                  = GetFunction(sqlite3DLL, "sqlite3_finalize")
    sqlite3_free                      = GetFunction(sqlite3DLL, "sqlite3_free")
    sqlite3_free_table                = GetFunction(sqlite3DLL, "sqlite3_free_table")
    sqlite3_get_autocommit            = GetFunction(sqlite3DLL, "sqlite3_get_autocommit")
    sqlite3_get_auxdata               = GetFunction(sqlite3DLL, "sqlite3_get_auxdata")
    sqlite3_get_table                 = GetFunction(sqlite3DLL, "sqlite3_get_table")
    sqlite3_global_recover            = GetFunction(sqlite3DLL, "sqlite3_global_recover")
    sqlite3_initialize                = GetFunction(sqlite3DLL, "sqlite3_initialize")
    sqlite3_interrupt                 = GetFunction(sqlite3DLL, "sqlite3_interrupt")
    sqlite3_last_insert_rowid         = GetFunction(sqlite3DLL, "sqlite3_last_insert_rowid")
    sqlite3_libversion                = GetFunction(sqlite3DLL, "sqlite3_libversion")
    sqlite3_libversion_number         = GetFunction(sqlite3DLL, "sqlite3_libversion_number")
    sqlite3_limit                     = GetFunction(sqlite3DLL, "sqlite3_limit")
    sqlite3_load_extension            = GetFunction(sqlite3DLL, "sqlite3_load_extension")
    sqlite3_malloc                    = GetFunction(sqlite3DLL, "sqlite3_malloc")
    sqlite3_memory_alarm              = GetFunction(sqlite3DLL, "sqlite3_memory_alarm")
    sqlite3_memory_highwater          = GetFunction(sqlite3DLL, "sqlite3_memory_highwater")
    sqlite3_memory_used               = GetFunction(sqlite3DLL, "sqlite3_memory_used")
    sqlite3_mprintf                   = GetFunction(sqlite3DLL, "sqlite3_mprintf")
    sqlite3_mutex_alloc               = GetFunction(sqlite3DLL, "sqlite3_mutex_alloc")
    sqlite3_mutex_enter               = GetFunction(sqlite3DLL, "sqlite3_mutex_enter")
    sqlite3_mutex_free                = GetFunction(sqlite3DLL, "sqlite3_mutex_free")
    sqlite3_mutex_leave               = GetFunction(sqlite3DLL, "sqlite3_mutex_leave")
    sqlite3_mutex_try                 = GetFunction(sqlite3DLL, "sqlite3_mutex_try")
    sqlite3_next_stmt                 = GetFunction(sqlite3DLL, "sqlite3_next_stmt")
    sqlite3_open                      = GetFunction(sqlite3DLL, "sqlite3_open")
    sqlite3_open16                    = GetFunction(sqlite3DLL, "sqlite3_open16")
    sqlite3_open_v2                   = GetFunction(sqlite3DLL, "sqlite3_open_v2")
    sqlite3_os_end                    = GetFunction(sqlite3DLL, "sqlite3_os_end")
    sqlite3_os_init                   = GetFunction(sqlite3DLL, "sqlite3_os_init")
    sqlite3_overload_function         = GetFunction(sqlite3DLL, "sqlite3_overload_function")
    sqlite3_prepare                   = GetFunction(sqlite3DLL, "sqlite3_prepare")
    sqlite3_prepare16                 = GetFunction(sqlite3DLL, "sqlite3_prepare16")
    sqlite3_prepare16_v2              = GetFunction(sqlite3DLL, "sqlite3_prepare16_v2")
    sqlite3_prepare_v2                = GetFunction(sqlite3DLL, "sqlite3_prepare_v2")
    sqlite3_profile                   = GetFunction(sqlite3DLL, "sqlite3_profile")
    sqlite3_progress_handler          = GetFunction(sqlite3DLL, "sqlite3_progress_handler")
    sqlite3_randomness                = GetFunction(sqlite3DLL, "sqlite3_randomness")
    sqlite3_realloc                   = GetFunction(sqlite3DLL, "sqlite3_realloc")
    sqlite3_release_memory            = GetFunction(sqlite3DLL, "sqlite3_release_memory")
    sqlite3_reset                     = GetFunction(sqlite3DLL, "sqlite3_reset")
    sqlite3_reset_auto_extension      = GetFunction(sqlite3DLL, "sqlite3_reset_auto_extension")
    sqlite3_result_blob               = GetFunction(sqlite3DLL, "sqlite3_result_blob")
    sqlite3_result_double             = GetFunction(sqlite3DLL, "sqlite3_result_double")
    sqlite3_result_error              = GetFunction(sqlite3DLL, "sqlite3_result_error")
    sqlite3_result_error16            = GetFunction(sqlite3DLL, "sqlite3_result_error16")
    sqlite3_result_error_code         = GetFunction(sqlite3DLL, "sqlite3_result_error_code")
    sqlite3_result_error_nomem        = GetFunction(sqlite3DLL, "sqlite3_result_error_nomem")
    sqlite3_result_error_toobig       = GetFunction(sqlite3DLL, "sqlite3_result_error_toobig")
    sqlite3_result_int                = GetFunction(sqlite3DLL, "sqlite3_result_int")
    sqlite3_result_int64              = GetFunction(sqlite3DLL, "sqlite3_result_int64")
    sqlite3_result_null               = GetFunction(sqlite3DLL, "sqlite3_result_null")
    sqlite3_result_text               = GetFunction(sqlite3DLL, "sqlite3_result_text")
    sqlite3_result_text16             = GetFunction(sqlite3DLL, "sqlite3_result_text16")
    sqlite3_result_text16be           = GetFunction(sqlite3DLL, "sqlite3_result_text16be")
    sqlite3_result_text16le           = GetFunction(sqlite3DLL, "sqlite3_result_text16le")
    sqlite3_result_value              = GetFunction(sqlite3DLL, "sqlite3_result_value")
    sqlite3_result_zeroblob           = GetFunction(sqlite3DLL, "sqlite3_result_zeroblob")
    sqlite3_rollback_hook             = GetFunction(sqlite3DLL, "sqlite3_rollback_hook")
    sqlite3_set_authorizer            = GetFunction(sqlite3DLL, "sqlite3_set_authorizer")
    sqlite3_set_auxdata               = GetFunction(sqlite3DLL, "sqlite3_set_auxdata")
    sqlite3_shutdown                  = GetFunction(sqlite3DLL, "sqlite3_shutdown")
    sqlite3_sleep                     = GetFunction(sqlite3DLL, "sqlite3_sleep")
    sqlite3_snprintf                  = GetFunction(sqlite3DLL, "sqlite3_snprintf")
    sqlite3_soft_heap_limit           = GetFunction(sqlite3DLL, "sqlite3_soft_heap_limit")
    sqlite3_sql                       = GetFunction(sqlite3DLL, "sqlite3_sql")
    sqlite3_status                    = GetFunction(sqlite3DLL, "sqlite3_status")
    sqlite3_step                      = GetFunction(sqlite3DLL, "sqlite3_step")
    sqlite3_stmt_status               = GetFunction(sqlite3DLL, "sqlite3_stmt_status")
    sqlite3_table_column_metadata     = GetFunction(sqlite3DLL, "sqlite3_table_column_metadata")
    sqlite3_test_control              = GetFunction(sqlite3DLL, "sqlite3_test_control")
    sqlite3_thread_cleanup            = GetFunction(sqlite3DLL, "sqlite3_thread_cleanup")
    sqlite3_threadsafe                = GetFunction(sqlite3DLL, "sqlite3_threadsafe")
    sqlite3_total_changes             = GetFunction(sqlite3DLL, "sqlite3_total_changes")
    sqlite3_trace                     = GetFunction(sqlite3DLL, "sqlite3_trace")
    sqlite3_transfer_bindings         = GetFunction(sqlite3DLL, "sqlite3_transfer_bindings")
    sqlite3_update_hook               = GetFunction(sqlite3DLL, "sqlite3_update_hook")
    sqlite3_user_data                 = GetFunction(sqlite3DLL, "sqlite3_user_data")
    sqlite3_value_blob                = GetFunction(sqlite3DLL, "sqlite3_value_blob")
    sqlite3_value_bytes               = GetFunction(sqlite3DLL, "sqlite3_value_bytes")
    sqlite3_value_bytes16             = GetFunction(sqlite3DLL, "sqlite3_value_bytes16")
    sqlite3_value_double              = GetFunction(sqlite3DLL, "sqlite3_value_double")
    sqlite3_value_int                 = GetFunction(sqlite3DLL, "sqlite3_value_int")
    sqlite3_value_int64               = GetFunction(sqlite3DLL, "sqlite3_value_int64")
    sqlite3_value_numeric_type        = GetFunction(sqlite3DLL, "sqlite3_value_numeric_type")
    sqlite3_value_text                = GetFunction(sqlite3DLL, "sqlite3_value_text")
    sqlite3_value_text16              = GetFunction(sqlite3DLL, "sqlite3_value_text16")
    sqlite3_value_text16be            = GetFunction(sqlite3DLL, "sqlite3_value_text16be")
    sqlite3_value_text16le            = GetFunction(sqlite3DLL, "sqlite3_value_text16le")
    sqlite3_value_type                = GetFunction(sqlite3DLL, "sqlite3_value_type")
    sqlite3_version                   = GetFunction(sqlite3DLL, "sqlite3_version")
    sqlite3_vfs_find                  = GetFunction(sqlite3DLL, "sqlite3_vfs_find")
    sqlite3_vfs_register              = GetFunction(sqlite3DLL, "sqlite3_vfs_register")
    sqlite3_vfs_unregister            = GetFunction(sqlite3DLL, "sqlite3_vfs_unregister")
    sqlite3_vmprintf                  = GetFunction(sqlite3DLL, "sqlite3_vmprintf")
    sqlite3_win32_mbcs_to_utf8        = GetFunction(sqlite3DLL, "sqlite3_win32_mbcs_to_utf8")

    ;********************************************************************************************

    If sqlite3_get_table = 0 
      LastMessage = "Couldn't init 'sqlite3_get_table'"
      ProcedureReturn #False
    EndIf

    If sqlite3_free_table = 0 
      LastMessage = "Couldn't init 'sqlite3_free_table'"
      ProcedureReturn #False
    EndIf

    If sqlite3_open = 0 
      LastMessage = "Couldn't init 'sqlite3_open'"
      ProcedureReturn #False
    EndIf

    If sqlite3_open16 = 0
      LastMessage = "Couldn't init 'sqlite3_open16'"
      ProcedureReturn #False
    EndIf

    If sqlite3_open_v2 = 0
      LastMessage = "Couldn't init 'sqlite3_open_V2'"
      ProcedureReturn #False
    EndIf

    If sqlite3_close = 0 
      LastMessage = "Couldn't init 'sqlite3_close'"
      ProcedureReturn #False
    EndIf

    If sqlite3_exec = 0 
      LastMessage = "Couldn't init 'sqlite3_exec'"
      ProcedureReturn #False
    EndIf

    ProcedureReturn #True
  Else
    LastMessage = "General Error - Couldn't open '"+sSQLiteDLLPath+"'" 
    ProcedureReturn #False
  EndIf
  
EndProcedure

ProcedureDLL.i SQLite3_CreateDatabase(sDataBase.s, boolOverwrite.i)

  If FileSize(sDataBase) = -1  ; DB n'existe pas

    ; Création
    hResult = CallCFunctionFast(sqlite3_open, sDataBase, @sqlite3_dbHandle)

    If hResult = #SQLITE3_OK
      LastMessage = "OK"
      ProcedureReturn sqlite3_dbHandle
    EndIf

  Else

    If boolOverwrite = 1 ; DB existe, on remplace

      ; Ecriture
      DeleteFile(sDataBase)

      hResult = CallCFunctionFast(sqlite3_open, sDataBase, @sqlite3_dbHandle)

      If hResult = #SQLITE3_OK
        LastMessage = "OK"
        ProcedureReturn sqlite3_dbHandle
      EndIf

    EndIf

  EndIf

  ProcedureReturn 0

EndProcedure

ProcedureDLL.i SQLite3_OpenDatabase(sDataBase.s)
  
  If FileSize(sDataBase) > 0
    
    hResult = CallCFunctionFast(sqlite3_open, sDataBase, @sqlite3_dbHandle)
    
    If hResult = #SQLITE3_OK
      ProcedureReturn sqlite3_dbHandle
    EndIf
    
  EndIf
  
  ProcedureReturn 0
  
EndProcedure

ProcedureDLL.i SQLite3_CloseDatabase(lDataBaseHandle.i)
  
  If lDataBaseHandle = 0
    LastMessage = "Wrong Database-Handle"
    ProcedureReturn
  EndIf

  hResult = CallCFunctionFast(sqlite3_close, lDataBaseHandle)
  
  If hResult = #SQLITE3_OK
    LastMessage = "OK"
    ProcedureReturn #True
  Else
    LastMessage = "Couldn't close Database"
    ProcedureReturn #False
  EndIf
  
EndProcedure

ProcedureDLL.i SQLite3_Execute(sSQLQuery.s, lDataBaseHandle.i)
  
  If lDataBaseHandle = 0
    LastMessage = "Wrong Database-Handle"
    ProcedureReturn
  EndIf

  hResult = CallCFunctionFast(sqlite3_exec, lDataBaseHandle, sSQLQuery, #Null, #Null, @ReturnValue)
  
  If hResult = #SQLITE3_OK
    LastMessage = "OK"
    ProcedureReturn #True
  Else
    CallCFunctionFast(sqlite3_errmsg, @ReturnValue)
    LastMessage = PeekS(ReturnValue)
    ProcedureReturn #False
  EndIf
  
EndProcedure 

; ProcedureDLL.i SQLite3_GetTable(sSQLQuery.s, *Array, *Rows, *Cols, lDataBaseHandle.i)
  ; 
  ; If lDataBaseHandle = 0
    ; LastMessage = "Wrong Database-Handle"
    ; ProcedureReturn
  ; EndIf
; 
  ; hResult = CallCFunctionFast(sqlite3_get_table, lDataBaseHandle, sSQLQuery, @lResultsPtr, @lRows, @lCols, @ReturnValue)
  ; 
  ; If hResult = #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.i  = lResultsPtr
      ; 
      ; For Row.i  = 0 To lRows
        ; For Col.i  = 0 To lCols - 1
          ; DBData(Row, Col) = PeekS(PeekL(Address + Col  * 4))
        ; Next
        ; Address + lCols * 4
      ; Next
      ; 
    ; EndIf
    ; 
    ; ; free table memory
    ; CallCFunctionFast(sqlite3_free_table, lResultsPtr)
    ; 
    ; LastMessage = "OK"
    ; ProcedureReturn #True
    ; 
  ; Else
    ; 
    ; CallCFunctionFast(sqlite3_errmsg, @ReturnValue)
    ; LastMessage = PeekS(ReturnValue)
    ; ProcedureReturn #False
    ; 
  ; EndIf
  ; 
; EndProcedure 
; 
ProcedureDLL.i SQLite3_GetRecordset(sSQLQuery.s, lDataBaseHandle.i, *Recordset.s_RecordSet)
  
  If lDataBaseHandle = 0
    LastMessage = "Wrong Database-Handle"
    ProcedureReturn
  EndIf
  
  *Recordset\Handle = 0

  hResult = CallCFunctionFast(sqlite3_get_table, lDataBaseHandle, sSQLQuery, @lResultsPtr, @lRows, @lCols, @ReturnValue)
  
  If hResult = #SQLITE3_OK
    
    *Recordset\Handle = lResultsPtr
    *Recordset\Rows = lRows
    *Recordset\Cols = lCols
    *Recordset\CurrentPos = 1
    
    LastMessage = "OK"

    ProcedureReturn @Recordset
    
  Else
    
    CallCFunctionFast(sqlite3_errmsg, @ReturnValue)
    LastMessage = PeekS(ReturnValue)
    ProcedureReturn #False
    
  EndIf
  
EndProcedure 

ProcedureDLL.i SQLite3_GetFieldIndexByName(sFieldname.s, *Recordset.s_RecordSet)
  
  If *Recordset\Handle = 0
    LastMessage = "Wrong Recordset-Handle"
    ProcedureReturn
  EndIf
  
  If *Recordset\Handle <> 0
  
    Address.i  = *Recordset\Handle
    
    ; Search named Column
    For Col.i  = 0 To *Recordset\Cols - 1
      If sFieldname = PeekS(PeekL(Address + Col  * 4))
        LastMessage = "OK"
        ProcedureReturn Col
      EndIf
    Next

  EndIf
  
  LastMessage = "No such Columnname: '" + sFieldname + "'"
  ProcedureReturn -1
  
EndProcedure

ProcedureDLL.i SQLite3_GetRecordsetValueByName(sFieldname.s, *Recordset.s_RecordSet)
  
  If *Recordset\Handle = 0
    LastMessage = "Wrong Recordset-Handle"
    ProcedureReturn
  EndIf

  myCol = SQLite3_GetFieldIndexByName(sFieldname, *Recordset)
  
  If myCol > -1
    
    LastMessage = "OK"
    *Recordset\sValue = PeekS(PeekL(*Recordset\Handle + (myCol * 4) + (*Recordset\CurrentPos * *Recordset\Cols) * 4))
    ProcedureReturn #True
    
  Else
    
    LastMessage = "No such Columnname: '" + sFieldname + "'"
    *Recordset\sValue = ""
    ProcedureReturn #False
    
  EndIf
  
EndProcedure 

ProcedureDLL.i SQLite3_GetRecordsetValueByIndex(lIndex.i, *Recordset.s_RecordSet)
  
  If *Recordset\Handle = 0
    LastMessage = "Wrong Recordset-Handle"
    ProcedureReturn
  EndIf

  If lIndex < 0 Or lIndex > *Recordset\Cols
    
    LastMessage = "No such Columnindex: '" + Str(lIndex) + "'"
    *Recordset\sValue = ""
    ProcedureReturn #False
    
  Else
    
    LastMessage = "OK"
    *Recordset\sValue = PeekS(PeekL(*Recordset\Handle + (lIndex * 4) + (*Recordset\CurrentPos * *Recordset\Cols) * 4))
    ProcedureReturn #True
    
  EndIf
  
EndProcedure 

ProcedureDLL.i SQLite3_ReleaseRecordset(*Recordset.s_RecordSet)
  If *Recordset\Handle <> 0
    CallCFunctionFast(sqlite3_free_table, *Recordset\Handle)
    *Recordset\Handle =0
  EndIf
  LastMessage = "OK"
EndProcedure

ProcedureDLL.i SQLite3_RecordsetMoveNext(*Recordset.s_RecordSet)
  
  If *Recordset\Handle = 0
    LastMessage = "Wrong Recordset-Handle"
    ProcedureReturn
  EndIf

  *Recordset\BOF = #False
  *Recordset\EOF = #False
  
  *Recordset\CurrentPos = *Recordset\CurrentPos + 1
  
  If *Recordset\CurrentPos > *Recordset\Rows
    *Recordset\CurrentPos = *Recordset\Rows
    *Recordset\EOF = #True
  EndIf
  
  If *Recordset\CurrentPos = 1
    *Recordset\BOF = #True
  EndIf

EndProcedure
  
ProcedureDLL.i SQLite3_RecordsetMovePrevious(*Recordset.s_RecordSet)
  
  If *Recordset\Handle = 0
    LastMessage = "Wrong Recordset-Handle"
    ProcedureReturn
  EndIf

  *Recordset\BOF = #False
  *Recordset\EOF = #False
  
  *Recordset\CurrentPos = *Recordset\CurrentPos - 1
  
  If *Recordset\CurrentPos < 1
    *Recordset\CurrentPos = 1
    *Recordset\BOF = #True
  EndIf
  
  If *Recordset\CurrentPos = *Recordset\Rows
    *Recordset\EOF = #True
  EndIf

EndProcedure

ProcedureDLL.i SQLite3_RecordsetMoveFirst(*Recordset.s_RecordSet)
  
  If *Recordset\Handle = 0
    LastMessage = "Wrong Recordset-Handle"
    ProcedureReturn
  EndIf

  *Recordset\BOF = #True
  *Recordset\EOF = #False
  
  *Recordset\CurrentPos = 1 
  
  If *Recordset\CurrentPos = *Recordset\Rows
    *Recordset\EOF = #True
  EndIf
  
EndProcedure

ProcedureDLL.i SQLite3_RecordsetMoveLast(*Recordset.s_RecordSet)
  
  If *Recordset\Handle = 0
    LastMessage = "Wrong Recordset-Handle"
    ProcedureReturn
  EndIf

  *Recordset\BOF = #False
  *Recordset\EOF = #True
  
  *Recordset\CurrentPos = *Recordset\Rows
  
  If *Recordset\CurrentPos = 1
    *Recordset\BOF = #True
  EndIf
  
EndProcedure

ProcedureDLL.s SQLite3_GetLastMessage()
  ProcedureReturn LastMessage
EndProcedure

ProcedureDLL.s SQLite3_GetLibVersion()
  ProcedureReturn PeekS(CallCFunctionFast(sqlite3_libversion))
EndProcedure

ProcedureDLL.i SQLite3_GetLibVersionNumber()
   ProcedureReturn CallCFunctionFast(sqlite3_libversion_number)
EndProcedure