Tutoriel : Connexion à une base de données SQLite depuis une application multi-périphérique sur les plates-formes de bureau

De RAD Studio
Aller à : navigation, rechercher

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\22.0\Samples\Data\Employees.s3db.
  • macOS : 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 macOS comme plate-forme cible et de vérifier votre profil de connexion.
Remarque : Le programme SQLite est fourni avec macOS 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 tapez sqlite3<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

  1. 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.
  2. Activez 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
    • macOS
    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.
  3. 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";
    }
    
  4. 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 et connectButton, et leurs propriétés Text respectivement sur Execute et Connect.
    • 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.
    A ce stade, votre fiche devrait ressembler à ceci :
    FMXSQLiteTutorialForm.png
  5. 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 partie interface de votre fichier source.
    • 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 fichier Unit.h de votre projet.
  6. Dans l'inspecteur d'objets, double-cliquez sur l'événement BeforeConnect du composant TSQLConnection.
  7. 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();
    }
    
  8. 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);
    	}
    }
    
  9. 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();
    }
    
  10. 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 partie interface de votre fichier source.
    • 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 fichier Unit.h de votre projet.
  11. Après avoir exécuté votre application et cliqué sur le bouton Connect, puis sur le bouton Execute, son apparence doit être la suivante :
    FMXSQLiteTutorialApp.png

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

Voir aussi