Herstellen einer Verbindung zu einer Datenbank mit dem dbExpress Treiber-Framework

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu dbExpress verwenden


Diese Anleitung zeigt Ihnen, wie Sie mit dem dbExpress-Treiber-Framework eine Verbindung zu einer Datenbank herstellen und deren Datensätze lesen können. In dem Beispielcode enthalten die .ini-Dateien von dbExpress alle Informationen über die spezielle Datenbankverbindung, wie z.B. den Treiber, den Benutzernamen, das Passwort usw.

So verbinden Sie zu einer Datenbank und lesen deren Datensätze:

  1. Konfigurieren Sie die ini-Datei der Verbindung mit den Informationen über die Datenbank, zu der Sie eine Verbindung herstellen möchten. Dazu zählen der Treibernamen, der Benutzername, das Passwort usw.
  2. Rufen Sie ein Data.DBXCommon.TDBXConnectionFactory-Objekt ab, das von GetConnectionFactory zurückgegeben wird.
  3. Rufen Sie ein Data.DBXCommon.TDBXConnection-Objekt ab, das von GetConnection zurückgegeben wird.
  4. Öffnen Sie die Datenbankverbindung durch Aufrufen von Open für die Data.DBXCommon.TDBXConnectionFactory-Instanz.
  5. Rufen Sie ein Data.DBXCommon.TDBXCommand-Objekt ab, indem Sie CreateCommand für die Data.DBXCommon.TDBXConnection-Instanz aufrufen.
  6. Setzen Sie die Eigenschaft Text von Data.DBXCommon.TDBXCommand auf die gewünschten SQL-Anweisung. Rufen Sie Prepare für die Data.DBXCommon.TDBXCommand-Instanz auf.
  7. Führen Sie die SQL-Abfrage durch Aufrufen von ExecuteQuery aus. Eine Data.DBXCommon.TDBXReader-Instanz wird zurückgegeben.
  8. Lesen Sie den ersten Datensatz in der Datenbank, indem Sie Next aufrufen. Rufen Sie diese Methode auf, um die nachfolgenden Datensätze der Datenbank abzurufen.
  9. Ermitteln Sie alle gewünschten Informationen aus der Datenbank. GetColumnCount gibt beispielsweise die Anzahl der Spalten in der Datenbank zurück. Die Eigenschaften ValueType und Value von Data.DBXCommon.TDBXReader enthalten den Datentyp und den Wert einer angegebenen Spaltennummer im aktuellen Datensatz.
{
  Dieses Beispiel verbindet zu einer Datenbank mithilfe von ini-Dateien.
  Diese Dateien müssen für die Datenbank konfiguriert sein.
  Nachdem Herstellen der Verbindung liest das Beispiel Werte und zeigt die
  ANSI-Werte der ersten 100 Datensätze in einem Listenfeld an.
}

{ Rufen Sie TDBXConnection mithilfe von TDBXConnectionFactory ab... }
{ ConnectionName = Abschnitt in der ini-Datei der Verbindung }
class function TForm1.BuildConnectionFromConnectionName(ConnectionName: WideString): TDBXConnection;
var
  ConnectionFactory: TDBXConnectionFactory;
  ConnectionProps: TDBXProperties;

begin
  ConnectionFactory := TDBXConnectionFactory.GetConnectionFactory;
  ConnectionProps := ConnectionFactory.GetConnectionProperties(ConnectionName);
  Result := ConnectionFactory.GetConnection(ConnectionProps);

  { ...oder verwenden Sie diese Zeile anstatt der oberen drei Zeilen. }
  { Result := TDBXConnectionFactory.GetConnectionFactory.GetConnection(TDBXConnectionFactory.GetConnectionFactory.GetConnectionProperties(ConnectionName)); }
end;
 
procedure Connect;
var
  connection: TDBXConnection;
  command: TDBXCommand;
  reader:   TDBXReader;
  value: TDBXValue;
  valueType: TDBXValueType;
  colCountStr: string;
  i, j: Integer;
  numCols: integer;
  ListBox1: TListBox;
 
const
  sqlCommand = 'select * from employee';

begin
  { Verbindung zu DB öffnen. }
  connection := BuildConnectionFromConnectionName('ConnectionName'); { der Name der DB-Verbindung }
  try 
    { Befehl abrufen. }
    command := connection.CreateCommand();
    try
      command.Text := sqlCommand;
      { Abfrage ausführen. }
      command.Prepare;
      reader := command.ExecuteQuery;
      try
        { Werte aus DB ermitteln. }
        if reader.Next then
        begin
          numCols := reader.ColumnCount;
          Str(numCols, colCountStr);

          ListBox1.Items.Add('Number of columns = ' + colCountStr);

          j := 1;
          repeat
            for i := 0 to reader.ColumnCount - 1 do
            begin
              valueType := reader.ValueType[i];
              if valueType.DataType = TDBXDataTypes.AnsiStringType then
              begin
                value := reader.Value[i];
                ListBox1.Items.Add(valueType.Name + ' = ' + value.GetString);
              end else
                ListBox1.Items.Add(valueType.Name);
            end;
            Inc(j);
          until (j > 100) or not reader.Next;

          reader.Next;
        end;

      { Ressourcen freigeben. }
      finally
        reader.Free;
      end;
    finally
      command.Free;
    end;
  finally
    connection.Free;
  end;
end;