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 データベース接続


ADO を使用して、JET データベースファイル (mdb) へ接続する基本的なサンプルです。
mdb ファイルは、Microsoft Access というアプリケーションで使用されているデータベースのファイルです。このデータベースファイルは、Access がインストールされていない環境でも [dbGO] タブにあるコンポーネントを利用すると操作可能となります。

ADO による JET データベースファイルへの接続は非常に簡単です。BDE で Paradox へ接続する場合とほとんど変わりません。ADO を使用したデータベースの接続については、マイクロソフトの以下の記事も参考にしてください。

「設計時」とは、Delphi を起動した IDE 上での設定のことです。実行時というのは、プログラムのコードに処理を書いて、作成した EXE 起動後に、イベント等で処理することを意味しています。


以下は、データベース一般についての参考記事へのリンクです。


以下は、サンプルプログラム集の ADO 関係の記事へのリンクです。


[備考]
Delphi XE5 以降であれば、FireDAC を使用して JET データベースに接続できます。




Microsoft Access への接続と操作


当サイトの ADO 関係のサンプルコードでは Microsoft Access というアプリケーションへの接続や操作はできません。[Servers] タブのコンポーネント類を使用してください。
当サイトには Access (アクセス) への接続・操作のサンプルはありません。今後も掲載する予定はありません。Word (ワード) と Excel (エクセル) の接続と操作関係のサンプルはあります。


Microsoft Access の操作関係コンポーネント類




01_TADOTable だけで設計時に設定


実際のアプリでは、実行時にテータベース関係の接続設定をすると思われます。
設計時に設定する利点は、実際に接続のテストができることです。

このサンプルは、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 にするとデータが表示される

リスト1
設計時に設定して接続なので何もなし
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
コンパイルして実行
  • 編集も可能

リスト2
設計時に設定して接続なので何もなし
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
コンパイルして実行
  • 編集も可能

リスト3
設計時に設定して接続なので何もなし
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.




07_ODBC プロバイダ接続


これまでのサンプルは、全て 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.