Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2017年02月03日] [更新 2017年02月03日] Delphi サンプルプログラム集
636_FireDAC を使用して JET データベースに接続
動作確認等 Windows XP(SP3) + Delphi XE5(UP2) Pro / XE7 Pro
636_FireDAC_JETDB.zip [1,903 KB] 2017年02月03日版 (EXE 同梱)







01_FireDAC を使用して JET データベースに接続


FireDAC を使用して JET エンジンのデータベースに接続するテストです.
Delphi XE5 では Pro 版でも FireDAC が利用できるようになりました.当サイトには,ADO を使用して JET データベースに接続するサシンプルがありますが,JET エンジンのバージョンによってプロバイダ名を変更する必要があります.FireDAC を使用すると,JET エンジンのバージョンに関係なく,同じ DriverID の値で接続できます.実行環境に Microsoft Access がインストールされていなくても動作します.

動作確認は Delphi XE5 と Delphi XE7 で行っています.Delphi XE6 と Delphi XE8 以降のバージョンでの確認していません.
Delphi XE7 では TFDPhysMSAccessDriverLink は必要ありません.TFDPhysMSAccessDriverLink を削除した後,uses 部の Vcl.Forms, Vcl.Dialogs の後部を削除して,以下のようにしてからコンパイルした方がいいでしょう.



uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, 
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;



図1
設計時の画面
  • Delphi XE7 では TFDPhysMSAccessDriverLink
    は不要
図2
Microsoft Access 2000 用の JET データベースに接続
図3
Microsoft Access 2007 用の JET データベースに接続

リスト1
FireDAC を使用して JET データベースに接続
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, 
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, 
  FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, 
  FireDAC.Phys.Intf, FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, 
  FireDAC.UI.Intf, FireDAC.VCLUI.Wait, FireDAC.Stan.Def, FireDAC.Stan.Pool, 
  FireDAC.Phys, Data.DB, FireDAC.Comp.Client, FireDAC.Comp.UI, FireDAC.Comp.DataSet,
  Vcl.StdCtrls, Vcl.Grids, Vcl.DBGrids, FireDAC.Phys.ODBCBase,
  FireDAC.Phys.MSAcc;

type
  TForm1 = class(TForm)
    FDQuery1: TFDQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    Button1: TButton;
    Button2: TButton;
    FDConnection1: TFDConnection;
    FDPhysMSAccessDriverLink1: TFDPhysMSAccessDriverLink;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//=============================================================================
//  フォーム生成時の処理
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
  DataSource1.DataSet := FDQuery1;
  DBGrid1.DataSource  := DataSource1;
end;

//=============================================================================
//  フォームを閉じる時の処理
//=============================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FDQuery1.Close;
  FDConnection1.Connected := False;
end;

//=============================================================================
//  Microsoft Access 2000 のJETデータベースに接続
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LDBFileName : string;
  LTableName  : string;
begin
  FDConnection1.Connected := False;

  LDBFileName := ExpandFileName('..\TestMDB.mdb');
  LTableName  := 'Testtbl';

  FDConnection1.LoginPrompt := False;

  FDConnection1.Params.Clear;
  FDConnection1.Params.Add('DriverID=MSAcc');
  FDConnection1.Params.Add('Database=' + LDBFileName);

  FDQuery1.Close;
  FDQuery1.Connection := FDConnection1;

  FDQuery1.SQL.Clear;
  FDQuery1.SQL.Add('select * from ' + LTableName);

  FDQuery1.Open;
end;

//=============================================================================
//  Microsoft Access 2007 のJETデータベースに接続
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LDBFileName : string;
  LTableName  : string;
begin
  FDConnection1.Connected := False;

  LDBFileName := ExpandFileName('..\TEST2007.mdb');
  LTableName  := '食品カロリ表';

  FDConnection1.LoginPrompt := False;

  FDConnection1.Params.Clear;
  FDConnection1.Params.Add('DriverID=MSAcc');
  FDConnection1.Params.Add('Database=' + LDBFileName);
  FDConnection1.Params.Add('Password=123');

  FDQuery1.Close;
  FDQuery1.Connection := FDConnection1;

  FDQuery1.SQL.Clear;
  FDQuery1.SQL.Add('select * from ' + LTableName);

  FDQuery1.Open;
end;

end.




02_Microsoft Access 2007 / 2010 用の JET データベースへの接続


Microsoft Access 2007 / 2010 用の JET データベースに接続するには,それらに対応するドライバが必要です.該当する Microsoft Office がインストールされている環境では,これらのドライバはインストールされています.ドライバがインストールされていない環境では,下図のようなエラーが発生して接続できません.

その場合は,以下のリンクからドライバを入手してインストールします.
32 ビットのアプリで使用する場合は,AccessDatabaseEngine.exe を,64 ビットのアプリで使用する場合は AccessDatabaseEngine_X64.exe をダウンロードしてインストールします.このドライバをインストールすると,Microsoft Access 2007 用の JET データベースにも接続できます.



図4
該当する ODBC ドライバが存在しない場合のエラー