Delphi Programming / Object Pascal
[掲載 2020年10月25日] [更新 2020年10月25日] エクセル操作フォームEx |
エクセル操作フォームEx 参考コード類
JET データベースのデータを読み込む |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE Pro + Excel 2010 |
QueryTables.Add メソッドは,OLE DB または ODBC の接続文字列を使用してデータベースからデータを取得してエクセルのシートに読み込むことができます.
以下は,JET エンジンのデータベースから,指定した表のデータをエクセルのシートに読み込む例です.
以下の最初のリンクに ADO による JET データベースへの接続のサンプルがあります.その ADO による接続サンプルは OLE DB 接続です.この場合,その接続文字列の先頭に OLEDB を追加した文字列を接続文字列とします.接続文字列のパラメータのデリミタ (区切り文字) は ; (セミコロン) です.
QueryTables の CommandType プロパティの値を xlCmdTable
にします.この設定がなくても動作しますが,設定しておいた方が無難でしょう.
|
|
図1
JET データベースのデータの読み込み |
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;
|