Delphi Programming / Object Pascal
[掲載 2007年09月19日] [更新 2013年03月03日] Delphi サンプルプログラム集 |
570_ADO による JET データベース接続 |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro |
|
570_ADO_JETDB.zip [5,047 KB] 2013年03月02日版 (EXE 同梱) |
- 2010年05月21日
- 動作確認環境の変更と記事の修正等
- ダウンロード用のファイル名変更
- 2013年03月03日
- Windows 7 U64(SP1) + Delphi XE Pro で動作確認
- 記事の加筆修正等
|
ADO を使用して,JET データベースファイル (mdb) へ接続する基本的なサンプルです.
mdb ファイルは,Microsoft
Access というアプリケーションで使用されているデータベースのファイルです.このデータベースファイルは,Access がインストールされていない環境でも [dbGO] タブにあるコンポーネントを利用すると操作可能となります.
ADO による JET データベースファイルへの接続は非常に簡単です.BDE で Paradox へ接続する場合とほとんど変わりません.ADO を使用したデータベースの接続については,マイクロソフトの以下の記事も参考にしてください.
「設計時」とは,Delphi を起動した IDE 上での設定のことです.実行時というのは,プログラムのコードに処理を書いて,作成した EXE 起動後に,イベント等で処理することを意味しています. |
以下は,データベース一般についての参考記事へのリンクです. |
以下は,サンプルプログラム集の ADO 関係の記事へのリンクです. |
[備考]
Delphi XE5 以降であれば,FireDAC を使用して JET データベースに接続できます.
|
当サイトの ADO 関係のサンプルコードでは Microsoft Access というアプリケーションへの接続や操作はできません.[Servers] タブのコンポーネント類を使用してください.
当サイトには Access (アクセス) への接続・操作のサンプルはありません.今後も掲載する予定はありません.Word (ワード) と Excel (エクセル) の接続と操作関係のサンプルはあります. |
|
Microsoft Access の操作関係コンポーネント類 |
実際のアプリでは,実行時にテータベース関係の接続設定をすると思われます.
設計時に設定する利点は,実際に接続のテストができることです.
このサンプルは,TADOTable コンポーネントだけを使用して設計に接続設定をする例です.
DBE で Paradox に接続する場合と違うのは,プロバイダの設定があることだけです.各データベース対応コンポーネントの設定手順も同じです. |
|
図1
設計時画面
- 以下のコンポーネントを配置
- TADOTable
- TDataSource
- TDBGrid
|
各コンポーネントを配置したら,コンポーネントのプロパティを以下のように設定します. |
DataSource1.DataSet = ADOTable1
DBGrid1.DataSource = DataSource1
設定したら,TADOTable コンポーネントを選択しオブジェクト・インスペクタの ConnectionString プロパティでダイアログを表示して,接続関係のプロパティを設定します. |
|
図2
[ビルド] をクリック |
|
図3
データリンクプロバイダの設定
- [Microsoft Jet 4.0 OLE DB Provider] を選択して[次へ]をクリック
|
|
図4
mdb ファイルの選択
- 目的の mdb ファイルを選択
- 添付サンプルは [../TestMDB.mdb] (一つ上のフォルダ) にある
|
|
図5
接続のテスト |
|
図6
データを表示
- TADOTable の Active プロパティを True にするとデータが表示される
|
unit ADO_DsgnTbaleOnlyUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, Grids, DBGrids, DB, ExtCtrls;
type
TForm1 = class(TForm)
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
02_設計時に設定 ( TADOConnection + TADOTable ) |
実際のアプリでは,実行時にテータベース関係の接続設定をすると思われます.
設計時に設定する利点は,実際に接続のテストができることです.
TADOConnection と TADOTable コンポーネントを使用して設計時に設定する例です.
TADOConnection を使用すれば切断をまとめてできますし,トランザクションなども使用でき何かと便利です.接続文字列の設定手順は上のサンプルと同じです. |
|
図7
設計時画面
- 以下のコンポーネントを配置
- TADOConnection
- TADOTable
- TDataSource
- TDBGrid
|
各コンポーネントを配置したら,コンポーネントのプロパティを以下のように設定します. |
ADOTable1.Connection = ADOConnection1
DataSource1.DataSet = ADOTable1
DBGrid1.DataSource = DataSource1
次に TADOConnection コンポーネントを選択し,オブジェクト・インスペクタの ConnectionString プロパティの省略ボタンをクリックするか,TADOConnection コンポーネントをダブルクリックして,設定ダイアログを表示します. |
|
図8
[ビルド] をクリック |
|
図9
プロバイダーを設定
- [Microsoft Jet 4.0 OLE DB Provider] を選択して [次へ] をクリック
|
|
図10
mdb ファイルの選択
- 目的の mdb ファイルを選択
- 添付サンプルは [../TestMDB.mdb] (一つ上のフォルダ) にある
|
|
図11
接続のテスト |
|
図12
データを表示
- TADOTableのActive プロパティを True にするとデータが表示される
|
|
図13
コンパイルして実行
|
unit ADO_DsgnTbaleUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, Grids, DBGrids, DB, ExtCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
03_設計時に設定 ( TADOConnection + TADOQuery ) |
実際のアプリでは,実行時にテータベース関係の接続設定をすると思われます.
設計時に設定する利点は,実際に接続のテストができることです.
TADOConnection と TADOQuery コンポーネントを使用して設計時に設定する例です.TADOConnection を使用すれば切断をまとめてできますし,トランザクション処理なども使用でき何かと便利です.
接続文字列の設定手順は,前のサンプルと同じです.
Delphi のコミュニティの場で質問される方の中には,クエリーの使用を積極的に避けている方がいますが,簡単な検索はもちろん,少し複雑な検索や集計を実行するにはクエリーは便利で欠かせないものです.と言うより,データベースでは SQL は必須と言っても過言ではないでしょう.
このサンプルで使用している SELECT * FROM TESTTBL という SQL 文は,
- SELECT 選ぶ(選べ),何を
- * 全ての項目を * の代りに項目をカンマで区切って指定可能)
- FROM 何から(どこから)
- TESTTBL TESTTBLという表から
ということを意味しています. |
|
図14
設計時画面
- 以下のコンポーネントを配置
- TADOConnection
- TADOQuery
- TDataSource
- TDBGrid
|
各コンポーネントを配置したら,コンポーネントのプロパティを以下のように設定します. |
ADOQuery1.Connection = ADOConnection1
DataSource1.DataSet = ADOQuery1
DBGrid1.DataSource = DataSource1
次に TADOConnection コンポーネントを選択し,オブジェクト・インスペクタの ConnectionString プロパティの省略ボタンをクリックするか,TADOConnection コンポーネントをダブルクリックして,設定ダイアログを表示します. |
|
図15
[ビルド] をクリック |
|
図16
プロバイダーを設定
- [Microsoft Jet 4.0 OLE DB Provider] を選択して [次へ] をクリック
|
|
図17
mdb ファイルの選択
- 目的の mdb ファイルを選択
- 添付サンプルは[../TestMDB.mdb] (一つ上のフォルダ) にあ る
|
|
図18
接続のテスト |
|
図19
SQL文の作成
- TADOQuery コンポの SQL プロパティ
- 添付の mdb ファイルには TESTTBL という表がある.これを表示するには
- SELECT * FROM TESTTBL
と書く
|
|
図20
データの表示
- TADOQuery の Active プロパティをTrue にするとデータが表示される
|
|
図21
コンパイルして実行
|
unit ADO_DsgnQueryUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, Grids, DBGrids, DB, ExtCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
04_設計時に設定する際の問題点と,実行時に設定する際の注意 |
これまでの方法で作成した EXE を他の環境で実行すると,下図のような,
- ファイル XXX が見つかりませんでした
- オブジェクト XXXX が見つかりませんでした
というエラーが発生する場合があります.これは,設定した接続文字列にあるデータベース関係のフファイル等の場所が,設計時と実行時で異なるためです.
また,たとえデータベースの場所が同じであっても,ネットワーク上にデータベースがある場合,データベースに接続できないのが,ネットワークの接続の問題なのか,データベース接続の問題なのかを判定することができません.
これを避けるには,設計時ではなく,実行時にこれらの値を設定します.次からのサンプルは,実行時に設定する例です.
もちろん,設計時に動作確認のために設定して接続のテストを行うことも重要です.実行時に接続文字列を設定する場合は,EXE 作成前に,設計時に設定した接続文字列を,必ず,空白にしておきます.これは,オブジェクト・インスペクタの ConnectionString プロパティの値のことです. |
|
図22
実行エラー |
05_実行時に設定 ( TADOConnection + TADOTable ) |
TADOConnection と TADOTable コンポーネントを使用して実行時に接続する例です.
TADOConnection を使用すれば切断をまとめてできますし,トランザクションなども使用でき何かと便利です.このサンプルではほとんどのプロパティを実行時に設定しています. |
|
図23
設計時画面
- 以下のコンポーネントを配置
- TADOConnection
- TADOTable
- TDataSource
- TDBGrid
|
|
図24
実行画面
|
リスト4
実行時に設定して接続する (TADOTable 使用) |
unit ADO_RunTbaleUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, Grids, DBGrids, DB, ExtCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// フォーム表示開始時にADO関係を設定
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
var
Str : String;
begin
ADOConnection1.Connected := False;
ADOConnection1.LoginPrompt := False;
//接続文字列の作成(パスワードなしの場合)
Str := 'Provider=Microsoft.Jet.OLEDB.4.0';
Str := Str + ';Data Source=' + '../TestMDB.mdb';
ADOConnection1.ConnectionString := Str;
ADOConnection1.Mode := cmReadWrite;
ADOTable1.Connection := ADOConnection1;
ADOTable1.TableName := 'Testtbl';
DataSource1.DataSet := ADOTable1;
DBGrid1.DataSource := DataSource1;
//テーブルオープン
ADOTable1.Open;
end;
//=============================================================================
// 終了時には切断処理
//=============================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADOConnection1.Connected := False;
end;
end.
06_実行時に設定 ( TADOConnection + TADOQuery ) |
TADOConnection と TADOQuery コンポーネントを使用して実行時に接続する例です.
TADOConnection を使用すれば切断をまとめてできますし,トランザクション処理なども使用でき何かと便利です.このサンプルではほとんどのプロパティを実行時に設定しています.
Delphi のコミュニティの場で質問される方の中には,クエリーの使用を積極的に避けている方がいますが,簡単な検索はもちろん,少し複雑な検索や集計を実行するにはクエリーは便利で欠かせないものです.と言うより,データベースでは SQL は必須と言ってもい過言ではないでしょう.
このサンプルで使用している SELECT * FROM TESTTBL という SQL 文は,
- SELECT 選ぶ(選べ),何を
- * 全ての項目を(* の代りに項目をカンマで区切って指定可能)
- FROM 何から(どこから)
- TESTTBL TESTTBLという表から
ということを意味しています. |
|
図25
設計時画面
- 以下のコンポーネントを配置
- TADOConnection
- TADOTable
- TDataSource
- TDBGrid
|
|
図26
実行画面
|
リスト5
実行時に設定して接続 (TADOQuery 使用) |
unit ADO_RunQueryUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, Grids, DBGrids, DB, ExtCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// フォーム表示開始時にADO関係を設定
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
var
Str : String;
begin
ADOConnection1.Connected := False;
ADOConnection1.LoginPrompt := False;
//接続文字列の作成(パスワードなしの場合)
Str := 'Provider=Microsoft.Jet.OLEDB.4.0';
Str := Str + ';Data Source=' + '../TestMDB.mdb';
ADOConnection1.ConnectionString := Str;
ADOConnection1.Mode := cmReadWrite;
ADOQuery1.Connection := ADOConnection1;
DataSource1.DataSet := ADOQuery1;
DBGrid1.DataSource := DataSource1;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM TESTTBL ');
ADOQuery1.Open;
end;
//=============================================================================
// 終了時には切断処理
//=============================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADOConnection1.Connected := False;
end;
end.
これまでのサンプルは,全て JET プロバイダによる接続方式です.
この他に,ODBC プロバイダによる接続方式があります.そのサンプルです.OLE と ODBC についてはマイクロソフトの記事を参考にしてください. |
|
図27
設計時画面
- 以下のコンポーネントを配置
- TADOConnection
- TADOTable
- TDataSource
- TDBGrid
|
|
図28
実行画面
|
リスト6
実行時に設定して接続 (TADOQuery 使用)
ODBC プロバイダ接続 |
unit ADO_ODBCUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, Grids, DBGrids, DB, ExtCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//=============================================================================
// フォーム表示開始時にADO関係を設定
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
var
Str : String;
begin
ADOConnection1.Connected := False;
ADOConnection1.LoginPrompt := False;
//接続文字列の作成
//ここがいままでのサンプルと違う部分
Str := 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ='+ '../TestMDB.mdb';
ADOConnection1.ConnectionString := Str;
ADOConnection1.Mode := cmReadWrite;
ADOQuery1.Connection := ADOConnection1;
DataSource1.DataSet := ADOQuery1;
DBGrid1.DataSource := DataSource1;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM TESTTBL ');
ADOQuery1.Open;
end;
//=============================================================================
// 終了時には切断処理
//=============================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADOConnection1.Connected := False;
end;
end.
|