dbExpress ドライバ フレームワークを使用したデータベースへの接続

提供: RAD Studio
移動先: 案内検索

dbExpress の使用 への移動


ここでは、dbExpress ドライバ フレームワークを使用して、データベースに接続し、そのレコードを読み取る方法について説明します。サンプル コードの dbExpress ini ファイルには、ドライバ、ユーザー名、パスワードなど、特定のデータベース接続に関するすべての情報が含まれています。

データベースに接続してレコードを読み取るには:

  1. 接続先のデータベースに関する情報を接続 ini ファイルで構成します。この情報には、ドライバ名、ユーザー名、パスワードなどの設定が含まれます。
  2. GetConnectionFactory から返される Data.DBXCommon.TDBXConnectionFactory を取得します。
  3. GetConnection から返される Data.DBXCommon.TDBXConnection オブジェクトを取得します。
  4. Data.DBXCommon.TDBXConnectionFactory インスタンスに対して Open を呼び出して、データベース接続を開きます。
  5. Data.DBXCommon.TDBXConnection インスタンスに対して CreateCommand を呼び出して、Data.DBXCommon.TDBXCommand オブジェクトを取得します。
  6. Data.DBXCommon.TDBXCommandText プロパティを目的の SQL コマンドに設定します。PrepareData.DBXCommon.TDBXCommand インスタンスに対して呼び出します。
  7. ExecuteQuery を呼び出して SQL クエリを実行します。その結果、Data.DBXCommon.TDBXReader インスタンスが返されます。
  8. Next を呼び出して、最初のデータベース レコードを読み取ります。このメソッドを呼び出して、後続のデータベース レコードを順に取得します。
  9. データベースから必要な情報を取得します。たとえば、GetColumnCount は、データベース列の数を返します。Data.DBXCommon.TDBXReaderValueType プロパティと Value プロパティには、現在のレコードの指定された列番号のデータ型と値が含まれます。
{ 
  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;