Tutorial: Verbinden mit einer SQLite-Datenbank aus einer geräteübergreifenden Anwendung auf Desktop-Plattformen
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\23.0\Samples\Data\Employees.s3db
. - macOS: Sie können die von Embarcadero bereitgestellte Datenbank auf Ihren Mac kopieren. Denken Sie vor der Bereitstellung Ihrer Anwendung daran, macOS als Zielplattform auszuwählen, und Ihr Verbindungsprofil zu überprüfen.
- Hinweis: Das SQLite-Programm ist in macOS 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 Siesqlite3<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
- 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
- Aktivieren Sie eine Zielplattform in der Projektverwaltung. Geräteübergreifende Anwendungen unterstützen die folgenden Plattformen:
- 32-Bit-Windows
- 64-Bit-Windows
- macOS
- 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.
- 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"; }
- 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 aufExecute
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
.
- Zwei TButton-Steuerelemente; setzen Sie im Objektinspektor die Eigenschaft Name der beiden Schaltflächen auf
- 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();
iminterface
-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 DateiUnit.h
Ihres Projekts. - Doppelklicken Sie im Objektinspektor auf das Ereignis BeforeConnect der TSQLConnection-Komponente.
- 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(); }
- 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); } }
- 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(); }
- 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();
iminterface
-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 DateiUnit.h
Ihres Projekts. - 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:
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
- 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