Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2020年10月25日] [更新 2020年10月25日] エクセル操作フォームEx
エクセル操作フォームEx   参考コード類
JET データベースのデータを読み込む
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010







JET データベースのデータを読み込む


QueryTables.Add メソッドは,OLE DB または ODBC の接続文字列を使用してデータベースからデータを取得してエクセルのシートに読み込むことができます. 以下は,JET エンジンのデータベースから,指定した表のデータをエクセルのシートに読み込む例です.

以下の最初のリンクに ADO による JET データベースへの接続のサンプルがあります.その ADO による接続サンプルは OLE DB 接続です.この場合,その接続文字列の先頭に OLEDB を追加した文字列を接続文字列とします.接続文字列のパラメータのデリミタ (区切り文字) は ; (セミコロン) です.
QueryTables の CommandType プロパティの値を xlCmdTable にします.この設定がなくても動作しますが,設定しておいた方が無難でしょう.



図1
JET データベースのデータの読み込み

リスト1 
procedure TplExcelFormEx1.Button1Click(Sender: TObject);
var
  LDBPath      : string;
  LpConnectStr : OleVariant;
  LpSqlStr     : OleVariant;
  LpStartCell  : Txlf2000Range;
  LQueryTbl    : Excel2000._QueryTable;
begin
  // シートの内容 (書式や数式も) をクリア
  xlfExcelSheet.Cells.Clear;

  Screen.Cursor := crHourGlass;

  // JET データベースのファイルのフルパス
  // フルパスにしないと OLE 例外発生
  LDBPath := ExtractFilePath(Application.ExeName) + 'TestMDB.mdb';

  // 接続文字列 (ここでは OLEDB ドライバを使用
  // ADO 接続の時の接続文字列の先頭に OLEDB; を追加
  LpConnectStr := 'OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + LDBPath;

  // 出力先セル番地は A1
  LpStartCell := xlfExcelSheet.Range['A1', 'A1'];

  // 選択 SQL 文
  LpSqlStr := 'SELECT * FROM TESTTBL';

  try
    LQueryTbl := xlfExcelSheet.QueryTables.Add(LpConnectStr, LpStartCell, LpSqlStr);

    LQueryTbl.RefreshStyle      := xlOverwriteCells; // 上書き
    LQueryTbl.CommandType       := xlCmdTable;       // 読み込むのは DB の表である
    LQueryTbl.AdjustColumnWidth := True;             // 列幅自動調整
    LQueryTbl.BackgroundQuery   := True;             // バックグラウンド実行
    LQueryTbl.Refresh(EmptyParam);                   // 実行
  finally
    Screen.Cursor := crDefault;
  end;
end;