Tutoriel: Utilisation des librairies SQLite dans un projet C++Builder
Le but du tutoriel est d'apprendre à utiliser les librairies SQLite dans un projet C++Builder. La première chose, pour ceux qui ne savent pas de quoi je parle, SQLite est une bibliothèque qui permet l'utilisation de requêtes SQL pour se connecter à un fichier de bases de données. Pour plus d'information vous pouvez consulter le lien suivant:
[ame]http://fr.wikipedia.org/wiki/SQLite[/ame]
Avant de débuter il faut télécharger le code source du site Web officiel:
http://www.sqlite.org/download.html
Pour me connecter à une base de données pour y faire des modifications j'utilise l'extension Firefox SQLite Manager. Il est possible de la télécharger gratuitement à l'adresse suivante: http://code.google.com/p/sqlite-manager/
Premièrement, il faut créer un projet et mettre les fichiers téléchargés (sqlite3.c, sqlite3.h et sqlite3ext.h) à l'intérieur du dossier.
Pour utiliser SQLite, il faut l'inclure:
Code:
#include "sqlite3.h"
Voici maintenant, le moment de vous montrer le code. Il s'agit d'une modification du code "SQLite In 5 Minutes Or Less" tirée du site Web: http://www.sqlite.org/quickstart.html
Deuxièmement il faut mettre un TMemo sur la Form. C'est le seul composant qui va être utilisé pour tout simplifier.
Voici le code du fichier .cpp:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| //---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "sqlite3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
static int callback(void *, int, char **, char **);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
sqlite3 *db = NULL;
int rc;
char *zErrMsg = 0;
AnsiString path = "Northwind.db"; // Chemin vers la bd
AnsiString sql = "SELECT * FROM Region"; // Requête SQL
Memo1->Clear();
Memo1->ScrollBars = ssBoth;
rc = sqlite3_open(path.c_str(), &db);
if(rc != SQLITE_OK)
{
MessageBox(NULL, sqlite3_errmsg(db), "SQL error", MB_ICONERROR);
sqlite3_close(db);
}
rc = sqlite3_exec(db, sql.c_str(), callback, 0, &zErrMsg);
if(rc != SQLITE_OK)
{
MessageBox(NULL, zErrMsg, "SQL error", MB_ICONERROR);
sqlite3_free(zErrMsg);
}
sqlite3_close(db);
}
//---------------------------------------------------------------------------
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
AnsiString TempText = "";
AnsiString MyText = "";
for(int i=0; i<argc; i++)
{
TempText.sprintf("%s = %s\t", azColName[i], argv[i] ? argv[i] : "NULL");
MyText += TempText;
}
Form1->Memo1->Lines->Add(MyText);
return 0;
} |
Il faut modifier les variables path et sql pour faire fonctionner les codes.
Pour connaître la syntaxe des requêtes SQL vous pouvez aller voir: http://www.sqlite.org/lang.html
Ce n'est pas plus compliqué que cela, si vous avez des questions, n'hésitez pas à les poser.