Tutorial: Verbinden mit einer SQLite-Datenbank aus einer VCL-Anwendung
Nach oben zu Tutorials zu Datenbanken und LiveBindings
In diesem Tutorial wird anhand einer einfachen VCL-Formularanwendung gezeigt, wie eine Verbindung mit einer SQLite-Datenbank hergestellt und eine einfache Abfrage ausgeführt wird.
In diesem Beispiel 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 Beispiel verwendete Datenbank befindet sich hier:
- Windows:
C:\Users\Public\Documents\Embarcadero\Studio\21.0\Samples\Data\Employees.s3db
.
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 angezeigt.
Schritte
- Wählen Sie Datei > Neu > VCL-Formularanwendung - Delphi oder VCL-Formularanwendung - C++Builder.
- Fügen Sie dem Formular die folgenden Komponenten hinzu:
- Zwei TButton-Steuerelemente; setzen Sie im Objektinspektor die Eigenschaften Name der beiden Schaltflächen auf
executeButton
bzw.connectButton
und die Eigenschaften Caption 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 Eigenschaften Name der beiden Schaltflächen auf
- 4. Fügen Sie der OnClick-Ereignisbehandlungsroutine für
connectButton
den folgenden Code hinzu. - Hinweis: Ersetzen Sie "full_path_to_your_database_file" durch den absoluten Pfad zu Ihrer Datenbankdatei.
- In Delphi:
procedure TDemonstration.connectButtonClick(Sender: TObject);
begin
SQLConnection1.Params.Add('Database=full_path_to_your_database_file');
try
// Establish the connection.
SQLConnection1.Connected := true;
executeButton.Enabled := true;
outputMemo.Text := 'Connection established!';
except
on E: EDatabaseError do
ShowMessage('Exception raised with message' + E.Message);
end;
end;
- In C++:
void __fastcall TDemonstration::connectButtonClick(TObject *Sender)
{
// Use double backslash in Windows Paths as the backslash character (\) must be escaped with another one to be treated literally.
SQLConnection1->Params->Add("Database=full_path_to_your_database_file");
try
{
// Establish the connection.
SQLConnection1->Connected = true;
executeButton->Enabled = true;
outputMemo->Text = "Connection established!";
}
catch (EDatabaseError& E)
{
ShowMessage("Exception raised with message" + E.Message);
}
}
- 5. Fügen Sie der OnClick-Ereignisbehandlungsroutine für
executeButton
den folgenden Code hinzu.- In Delphi:
procedure TDemonstration.executeButtonClick(Sender: TObject);
var
query: String;
begin
outputMemo.ClearSelection;
// 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;
- In C++:
void __fastcall TDemonstration::executeButtonClick(TObject *Sender)
{
String query;
outputMemo->ClearSelection();
// 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();
}
- Im Folgenden finden Sie den Code für die Prozedur
ShowSelectResults
:- In 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;
try
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;
finally
names.Free;
end;
end;
end;
- Hinweis: Vergessen Sie nicht,
procedure ShowSelectResults();
zu deklarieren.
- Hinweis: Vergessen Sie nicht,
- In C++:
void __fastcall TDemonstration::ShowSelectResults()
{
TStringList* names;
TField* currentField;
String currentLine;
if (!SQLQuery1->IsEmpty()) {
SQLQuery1->First();
names = new TStringList
__try{
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();
}
}
}
__finally {
names->Free();
}
}
- Hinweis: Vergessen Sie nicht,
void __fastcall TDemonstration::ShowSelectResults();
in der Datei Unit.h Ihres Projekts zu deklarieren.
- Hinweis: Vergessen Sie nicht,
- 6. Nach dem Ausführen der Anwendung und Klicken auf die Schaltfläche Connect und dann auf Execute sollte die Anwendung wie folgt aussehen:
Hinweis: Um eine Verbindung mit einer SQLite-Datenbank herzustellen, fügen Sie die Bibliothek sqlite3.dll in Ihren Systempfad ein und überprüfen Sie, ob sqlite3.dll von Ihrer Anwendung gefunden werden kann.
- Auf 32-Bit-Windows: C:\Windows\System32
- Auf 64-Bit-Windows: C:\Windows\SysWOW64
Verwendet
- Data.DB.TDataSet
- Data.DB.TField
- System.Classes.TStringList
- Data.SqlExpr.TSQLConnection
- Vcl.StdCtrls.TButton
- Vcl.StdCtrls.TMemo
- Vcl.Controls.TControl.OnClick