Connexion à une base de données à l'aide du framework de pilote dbExpress

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation de dbExpress


Cette procédure vous indique comment utiliser le framework de pilote dbExpress pour établir la connexion à une base de données et lire ses enregistrements. Dans le code exemple, les fichiers ini dbExpress contiennent toutes les informations relatives à la connexion de base de données particulière, telles que le pilote, le nom d'utilisateur, le mot de passe, etc.

Pour établir la connexion à une base de données et lire ses enregistrements

  1. Configurez le fichier ini de connexions avec les informations relatives à la base de données auquelle vous allez vous connecter. Ce paramétrage comprend le nom du pilote, le nom de l'utilisateur, le mot de passe, etc.
  2. Obtenez un objet Data.DBXCommon.TDBXConnectionFactory, renvoyé par GetConnectionFactory.
  3. Obtenez un objet Data.DBXCommon.TDBXConnection renvoyé par GetConnection.
  4. Ouvrez la connexion de base de données en appelant Open sur l'instance de Data.DBXCommon.TDBXConnectionFactory.
  5. Obtenez un objet Data.DBXCommon.TDBXCommand en appelant CreateCommand sur l'instance de Data.DBXCommon.TDBXConnection.
  6. Définissez la propriété Text de Data.DBXCommon.TDBXCommand sur la commande SQL désirée. Appelez Prepare sur l'instance de Data.DBXCommon.TDBXCommand.
  7. Exécutez la requête SQL en appelant ExecuteQuery, qui renvoie une instance de Data.DBXCommon.TDBXReader.
  8. Lisez le premier enregistrement de la base de données en appelant Next. Appelez cette méthode pour récupérer les enregistrements suivants de la base de données.
  9. Récupérez toutes les informations souhaitées de la base de données. Par exemple, GetColumnCount renvoie le nombre de colonnes de la base de données. Les propriétés de Data.DBXCommon.TDBXReader, ValueType et Value contiennent le type de données et la valeur pour un numéro de colonne donné dans l'enregistrement en cours.
{ 
  This sample connects to a database using the ini files.
  These files must be configured for the database.
  Once connected, the sample reads values and displays the
  ANSI values for the first 100 records in a list box.
}
 
{ Get a TDBXConnection using a TDBXConnectionFactory... }
{ ConnectionName = section in the connections ini file }
class function TForm1.BuildConnectionFromConnectionName(ConnectionName: WideString): TDBXConnection;
var
  ConnectionFactory: TDBXConnectionFactory;
  ConnectionProps: TDBXProperties;

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

  { ...or you can use this line instead of the above three lines. }
  { 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
  { Open connection to DB. }
  connection := BuildConnectionFromConnectionName('ConnectionName'); { the name of the DB connection }
  try
    { Get command. }
    command := connection.CreateCommand();
    try
      command.Text := sqlCommand;

      { Execute query. }
      command.Prepare;
      reader := command.ExecuteQuery;
      try
        { Get values from DB. }
        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;

      { Free resources. }
      finally
        reader.Free;
      end;
    finally
      command.Free;
    end;
  finally
    connection.Free;
  end;
end;