Tutorial: Verbinden mit einer SQLite-Datenbank aus einer VCL-Anwendung

Aus RAD Studio
Wechseln zu: Navigation, Suche

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

  1. Wählen Sie Datei > Neu > VCL-Formularanwendung - Delphi oder VCL-Formularanwendung - C++Builder.
  2. Fügen Sie dem Formular die folgenden Komponenten hinzu:
3. Jetzt sollte das Formular folgendermaßen aussehen:
VLCSQLiteTutorialForm.png
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.
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.
6. Nach dem Ausführen der Anwendung und Klicken auf die Schaltfläche Connect und dann auf Execute sollte die Anwendung wie folgt aussehen:
VLCSQLiteTutorialApp.png

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

Siehe auch