Tutorial: Verbinden mit einer SQLite-Datenbank aus einer geräteübergreifenden Anwendung auf Desktop-Plattformen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Tutorials zu Datenbanken und LiveBindings


In diesem Tutorial wird anhand einer einfachen geräteübergreifenden Anwendung gezeigt, wie eine Verbindung mit einer SQLite-Datenbank hergestellt und eine einfache Abfrage ausgeführt wird.

In diesem Tutorial wird eine von Embarcadero bereitgestellte Datenbank verwendet, Sie können aber jede SQLite-Datenbank einsetzen, die für Sie verfügbar ist. Die in diesem Tutorial verwendete Datenbank befindet sich hier:

  • Windows: C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Data\Employees.s3db.
  • OS X: Sie können die von Embarcadero bereitgestellte Datenbank auf Ihren Mac kopieren. Denken Sie vor der Bereitstellung Ihrer Anwendung daran, OS X als Zielplattform auszuwählen, und Ihr Verbindungsprofil zu überprüfen.
Hinweis: Das SQLite-Programm ist in OS X ab Version 10.4 enthalten und befindet sich im Verzeichnis /usr/bin. Wählen Sie zum Erstellen einer Datenbank einfach Programme > Dienstprogramme > Terminal aus. Öffnen Sie ein Terminalfenster, und geben Sie sqlite3<Datenbankname> ein.

Die Datenbank enthält eine Tabelle namens Employee und mehrere Tupel mit Feldern. Im Folgenden wird eine Verbindung zu der Datenbank hergestellt, und alle Tupel in der Tabelle Employee werden angezeigt.

Schritte

  1. Erstellen Sie eine geräteübergreifende Anwendung für Delphi oder C++:
    • Datei > Neu > Geräteübergreifende Anwendung - Delphi > Leere Anwendung
    • Datei > Neu > Geräteübergreifende Anwendung - C++Builder > Leere Anwendung
  2. Aktivieren Sie eine Zielplattform in der Projektverwaltung. Geräteübergreifende Anwendungen unterstützen die folgenden Plattformen:
    • 32-Bit-Windows
    • 64-Bit-Windows
    • OS X
    Hinweis: Wenn die gewünschte Zielplattform nicht in der Projektverwaltung angezeigt wird, klicken Sie mit der rechten Maustaste auf den Knoten Zielplattform, um Ihrem Projekt diese Zielplattform hinzuzufügen. Weitere Informationen finden Sie unter Aktivieren und Konfigurieren der Zielplattform.
  3. Doppelklicken Sie im Objektinspektor auf das Ereignis onCreate des Formulars, und fügen Sie den folgenden Code hinzu:
    • Delphi:
    procedure TDemonstration.FormCreate(Sender: TObject);
    begin
      Self.Caption := 'Demonstration';
    end;
    
    • C++:
    void __fastcall TDemonstration::FormCreate(TObject *Sender) {
    	this->Caption = "Demonstration";
    }
    
  4. Fügen Sie Ihrem Formular die folgenden Komponenten hinzu:
    • Zwei TButton-Steuerelemente; setzen Sie im Objektinspektor die Eigenschaft Name der beiden Schaltflächen auf executeButton bzw. connectButton und die Eigenschaft Text auf Execute bzw. Connect.
    • Ein TSQLConnection-Steuerelement; setzen Sie im Objektinspektor die Eigenschaft Driver auf Sqlite.
    • Ein TMemo-Steuerelement; setzen Sie im Objektinspektor die Eigenschaft Name auf outputMemo.
    • Ein TSQLQuery-Steuerelement; setzen Sie im Objektinspektor die Eigenschaft SQLConnection auf SQLConnection1.
    Jetzt sollte Ihr Formular etwa folgendermaßen aussehen:
    FMXSQLiteTutorialForm.png
  5. Erstellen Sie in Ihrer Unit eine neue setParamsToConnect-Prozedur, und fügen Sie den folgenden Code hinzu:
    Hinweis: Ersetzen Sie "full_path_to_your_database_file" durch den absoluten Pfad zu Ihrer Datenbankdatei.
    • 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;
    
    Hinweis: Vergessen Sie nicht die Deklaration von
    procedure setParamsToConnect(); im interface-Abschnitt Ihrer Quelldatei.
    
    • 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";
    	}
    
    }
    
    Hinweis: Vergessen Sie nicht die Deklaration von
    void __fastcall TDemonstration::setParamsToConnect(); in der Datei Unit.h Ihres Projekts.
    
  6. Doppelklicken Sie im Objektinspektor auf das Ereignis BeforeConnect der TSQLConnection-Komponente.
  7. Fügen Sie den folgenden Code für diese Ereignisbehandlungsroutine hinzu:
    • Delphi:
    procedure TDemonstration.SQLConnection1BeforeConnect(Sender: TObject);
    begin
       SetParamsToConnect;
    end;
    
    • C++:
    void __fastcall TDemonstration::SQLConnection1BeforeConnect(TObject *Sender) {
    	setParamsToConnect();
    }
    
  8. Fügen Sie der OnClick-Ereignisbehandlungsroutine von connectButton den folgenden Code hinzu.
    • 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. Fügen Sie der OnClick-Ereignisbehandlungsroutine von executeButton den folgenden Code hinzu.
    • 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. Fügen Sie den folgenden Code für die Prozedur ShowSelectResults hinzu:
    • 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;
    
    Hinweis: Vergessen Sie nicht die Deklaration von
    procedure ShowSelectResults(); im interface-Abschnitt Ihrer Quelldatei.
    
    • 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();
    		}
    
    	}
    
    }
    
    Hinweis: Vergessen Sie nicht die Deklaration von
    void __fastcall TDemonstration::ShowSelectResults(); in der Datei Unit.h Ihres Projekts.
    
  11. Nach dem Ausführen Ihrer Anwendung und dem Klicken auf die Schaltfläche Connect und dann auf die Schaltfläche Execute sollte Ihre Anwendung wie folgt aussehen:
    FMXSQLiteTutorialApp.png

Hinweis: Um unter Windows eine Verbindung mit einer SQLite-Datenbank herzustellen, müssen Sie die Bibliothek sqlite3.dll Ihrem Systempfad hinzufügen und sicherstellen, dass sqlite3.dll von Ihrer Anwendung gefunden werden kann.

  • 32-Bit-Windows: C:\Windows\System32
  • 64-Bit-Windows: C:\Windows\SysWOW64

Verwendete Komponenten und Ereignisse

Siehe auch