Tutoriel : Connexion à une base de données SQLite depuis une application multi-périphérique sur les plates-formes de bureau
Remonter à Tutoriels Bases de données et LiveBindings
Ce tutoriel est une application multi-périphérique simple qui montre comment établir une connexion à une base de données SQLite et exécuter une requête simple.
Ce tutoriel utilise une base de données fournie par Embarcadero, mais vous pouvez utiliser n'importe quelle base de données SQLite accessible. La base de données utilisée dans ce tutoriel se trouve à l'emplacement suivant :
- Windows :
C:\Utilisateurs\Public\Documents\Embarcadero\Studio\17.0\Samples\Data\Employees.s3db
. - Mac OS X : Vous pouvez copier la base de données fournie par Embarcadero sur votre Mac. Avant de déployer votre application, n'oubliez pas de sélectionner OS X comme plate-forme cible et de vérifier votre profil de connexion.
- Remarque : Le programme SQLite est fourni avec Mac OS X depuis la version 10.4 et est placé dans
/usr/bin
. Pour créer une base de données, il vous suffit de sélectionner Applications > Utilitaires > Terminal. Ouvrez une fenêtre de terminal et tapezsqlite3<nom_basededonnées>
.
La base de données comporte une table nommée Employee et plusieurs tuples avec des champs. Nous allons établir la connexion à la base de données et afficher tous les tuples dans la table Employee.
Etapes
- Créez une application multi-périphérique pour Delphi ou C++ :
- Fichier > Nouveau > Application multi-périphérique - Delphi > Application vide
- Fichier > Nouveau > Application multi-périphérique - C++Builder > Application vide.
- Activer une plate-forme cible sur le Gestionnaire de projets. Les applications multi-périphériques supportent les plates-formes suivantes :
- Windows 32 bits
- Windows 64 bits
- OS X
- Remarque : Si la plate-forme cible de votre choix n'est pas présente dans le Gestionnaire de projets, cliquez avec le bouton droit sur le noeud Plate-forme cible pour ajouter cette plate-forme cible à votre projet. Pour de plus amples informations, voir Activation et configuration de la plate-forme cible.
- Dans l'inspecteur d'objets, double-cliquez sur l'événement onCreate de la fiche et ajoutez le code suivant :
- Delphi :
procedure TDemonstration.FormCreate(Sender: TObject); begin Self.Caption := 'Demonstration'; end;
- C++ :
void __fastcall TDemonstration::FormCreate(TObject *Sender) { this->Caption = "Demonstration"; }
- Ajoutez les composants suivants à votre fiche :
- Deux contrôles TButton ; depuis l'inspecteur d'objets, définissez les propriétés Name des boutons sur
executeButton
etconnectButton
, et leurs propriétés Text respectivement surExecute
etConnect
. - Un contrôle TSQLConnection ; depuis l'inspecteur d'objets, définissez la propriété Driver sur
Sqlite
. - Un contrôle TMemo ; depuis l'inspecteur d'objets, définissez la propriété Name sur
outputMemo
. - Un contrôle TSQLQuery ; depuis l'inspecteur d'objets, définissez la propriété SQLConnection sur
SQLConnection1
.
- Deux contrôles TButton ; depuis l'inspecteur d'objets, définissez les propriétés Name des boutons sur
- Créez une nouvelle procédure setParamsToConnect dans votre unité et ajoutez le code suivant :
- Remarque : Remplacez "full_path_to_your_database_file" par le chemin d'accès absolu de votre fichier de base de données.
- Delphi :
procedure TDemonstration.setParamsToConnect(); begin // If Database param does not exist, it adds it. Otherwise, the existing value is overwritten. if SQLConnection1.Params.IndexOf ('Database=') = -1 then SQLConnection1.Params.Add('Database=full_path_to_your_database_file'); else SQLConnection1.Params.Values ['Database'] := 'full_path_to_your_database_file'; end;
-
-
- Remarque : N'oubliez pas de déclarer
procedure setParamsToConnect();
dans la partieinterface
de votre fichier source.
- Remarque : N'oubliez pas de déclarer
-
- C++ :
void __fastcall TDemonstration::setParamsToConnect() { // Use double backslash in Windows paths, as the backslash character (\) must be escaped with another backslash to be treated literally. if (SQLConnection1->Params->IndexOf("Database") == -1) { SQLConnection1->Params->Add("Database=full_path_to_your_database_file" ); } else { SQLConnection1->Params->Values["Database"] = "full_path_to_your_database_file"; } }
-
-
- Remarque : N'oubliez pas de déclarer
void __fastcall TDemonstration::setParamsToConnect();
dans le fichierUnit.h
de votre projet.
- Remarque : N'oubliez pas de déclarer
-
- Dans l'inspecteur d'objets, double-cliquez sur l'événement BeforeConnect du composant TSQLConnection.
- Ajoutez le code suivant à ce gestionnaire d'événement :
- Delphi :
procedure TDemonstration.SQLConnection1BeforeConnect(Sender: TObject); begin SetParamsToConnect; end;
- C++ :
void __fastcall TDemonstration::SQLConnection1BeforeConnect(TObject *Sender) { setParamsToConnect(); }
- Ajoutez le code suivant au gestionnaire d'événement OnClick du
connectButton
.- Delphi :
procedure TDemonstration.connectButtonClick(Sender: TObject); begin try // Establish the connection. outputMemo.Lines.Clear; SQLConnection1.Connected := true; executeButton.Enabled := true; outputMemo.Text := 'Connection established!'; except on E: EDatabaseError do ShowMessage('Exception raised with message' + E.Message); end; end;
- C++ :
void __fastcall TDemonstration::connectButtonClick(TObject *Sender) { outputMemo->Lines->Clear(); try { SQLConnection1->Connected = true; executeButton->Enabled = true; outputMemo->Text = "Connection established!"; } catch (EDatabaseError& E) { ShowMessage("Exception raised with message" + E.Message); } }
- Ajoutez le code suivant au gestionnaire d'événement OnClick du
executeButton
.- Delphi :
procedure TDemonstration.executeButtonClick(Sender: TObject); var query: String; begin outputMemo.Lines.Clear; // A random query query := 'SELECT * FROM Employee;'; try // Assign the query to the object SQLQuery1. SQLQuery1.SQL.Text := query; SQLQuery1.Active := true; except on E: Exception do outputMemo.Text := 'Exception raised with message: ' + E.Message; end; // Show the results of the query in a TMemo control. ShowSelectResults(); end;
- C++ :
void __fastcall TDemonstration::executeButtonClick(TObject *Sender) { String query; outputMemo->Lines->Clear(); // A random query query = "SELECT * FROM Employee;"; try { // Assign the query to the object SQLQuery1. SQLQuery1->SQL->Text = query; SQLQuery1->Active = true; } catch (Exception& E) { outputMemo->Text = "Exception raised with message" + E.Message; } // Show the results of the query in a TMemo control. ShowSelectResults(); }
- Ajoutez le code suivant pour la procédure
ShowSelectResults
:- Delphi :
procedure TDemonstration.ShowSelectResults(); var names: TStringList; i: Integer; currentField: TField; currentLine: string; begin if not SQLQuery1.IsEmpty then begin SQLQuery1.First; names := TStringList.Create; SQLQuery1.GetFieldNames(names); while not SQLQuery1.Eof do begin currentLine := ''; for i := 0 to names.Count - 1 do begin currentField := SQLQuery1.FieldByName(names[i]); currentLine := currentLine + ' ' + currentField.AsString; end; outputMemo.Lines.Add(currentLine); SQLQuery1.Next; end; end; end;
-
-
- Remarque : N'oubliez pas de déclarer
procedure ShowSelectResults();
dans la partieinterface
de votre fichier source.
- Remarque : N'oubliez pas de déclarer
-
- C++ :
void __fastcall TDemonstration::ShowSelectResults() { TStringList* names; TField* currentField; String currentLine; if (!SQLQuery1->IsEmpty()) { SQLQuery1->First(); names = new TStringList; SQLQuery1->GetFieldNames(names); while (!SQLQuery1->Eof) { currentLine = ""; for (int i = 0; i < names->Count; ++i) { currentField = SQLQuery1->FieldByName(names->Strings[i]); currentLine = currentLine + " " + currentField->AsString; } outputMemo->Lines->Add(currentLine); SQLQuery1->Next(); } } }
-
-
- Remarque : N'oubliez pas de déclarer
void __fastcall TDemonstration::ShowSelectResults();
dans le fichierUnit.h
de votre projet.
- Remarque : N'oubliez pas de déclarer
-
- Après avoir exécuté votre application et cliqué sur le bouton Connect, puis sur le bouton Execute, son apparence doit être la suivante :
Remarque : Sur Windows, pour la connexion à une base de données SQLite, placez la bibliothèque sqlite3.dll dans votre chemin système et vérifiez que sqlite3.dll peut être trouvée par votre application.
- Sur Windows 32 bits : C:\Windows\System32
- Sur Windows 64 bits : C:\Windows\SysWOW64
Utilisations
- Data.DB.TDataSet
- Data.DB.TField
- System.Classes.TStringList
- Data.SqlExpr.TSQLConnection
- Data.SqlExpr.TSQLConnection.BeforeConnect
- FMX.StdCtrls.TButton
- FMX.Memo.TMemo
- FMX.Controls.TControl.OnClick