dbExpress ドライバ フレームワークを使用したデータベースへの接続
dbExpress の使用 への移動
ここでは、dbExpress ドライバ フレームワークを使用して、データベースに接続し、そのレコードを読み取る方法について説明します。サンプル コードの dbExpress ini ファイルには、ドライバ、ユーザー名、パスワードなど、特定のデータベース接続に関するすべての情報が含まれています。
データベースに接続してレコードを読み取るには:
- 接続先のデータベースに関する情報を接続 ini ファイルで構成します。この情報には、ドライバ名、ユーザー名、パスワードなどの設定が含まれます。
- GetConnectionFactory から返される Data.DBXCommon.TDBXConnectionFactory を取得します。
- GetConnection から返される Data.DBXCommon.TDBXConnection オブジェクトを取得します。
- Data.DBXCommon.TDBXConnectionFactory インスタンスに対して Open を呼び出して、データベース接続を開きます。
- Data.DBXCommon.TDBXConnection インスタンスに対して CreateCommand を呼び出して、Data.DBXCommon.TDBXCommand オブジェクトを取得します。
- Data.DBXCommon.TDBXCommand の Text プロパティを目的の SQL コマンドに設定します。Prepare を Data.DBXCommon.TDBXCommand インスタンスに対して呼び出します。
- ExecuteQuery を呼び出して SQL クエリを実行します。その結果、Data.DBXCommon.TDBXReader インスタンスが返されます。
- Next を呼び出して、最初のデータベース レコードを読み取ります。このメソッドを呼び出して、後続のデータベース レコードを順に取得します。
- データベースから必要な情報を取得します。たとえば、GetColumnCount は、データベース列の数を返します。Data.DBXCommon.TDBXReader の ValueType プロパティと 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;