前記述で紹介したツール

の開発の際
Excel操作をADODBで行った際
つまずいた事を備忘録として残しておきます!
Windows10 64bit
VisualStudio2019
目次
VisualStudioでの参照設定
ADODBが使える様にまず参照設定しておく!
ソリューションエクスプローラーの「参照」を右クリック
「参照の追加」から参照マネージャーを開く。
「COM」から
①Microsoft ActiveX Data Objects 6.1 Library
②Microsoft OLEDB Service Component 1.0 Type Library
にチェックを入れて設定しておく!
ADODBでExcel操作
ADODBでExcelに接続
とりあえず操作したいExcelに接続する!
基本的なコードはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Dim cn As ADODB.Connection Dim sFilePath As String cn = New ADODB.Connection sFilePath = "対象ファイルのフルパス" '# 接続情報 cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & sFilePath & ";" & "Extended Properties=""Excel 12.0;HDR=Yes;""" '# 接続 cn.Open() |
■Provider
Microsoft.ACE.OLEDB.12.0
これはOffice32bit、64bitどちらも対応しているそうです!
もうひとつ
Microsoft.Jet.OLEDB.4.0
これは32bitのみ対応だそうです。
■Data Source
ここは操作したいファイルのフルパスを指定。
■Extended Properties
Excel 12.0
これはファイルの種類を指定。
Excel2007以降は12.0。
HDR=Yes
読み込むファイルの1行目を
ヘッダー項目として読み込むYesかNoか。
ここではYesで設定。
SQLでExcelを操作
接続設定が済んだら
操作したいSQL文を作って実行!
実行結果をレコードセットに返します。
1 2 3 4 5 6 7 8 |
Dim rs As ADODB.Recordset Dim sSql As String rs = New ADODB.Recordset '# SQL生成 sSql = "SQL文" rs.Open(sSql, cn, adOpenDynamic, adLockOptimistic, adCmdText) |
合わせて読みたい記事


SQLでの日付は#で囲む
SQLのWHERE句で日付の範囲指定をする際
日付を#で囲まないとうまく処理できませんでした!
例えば
WHERE [日付] = ‘2019/08/11’
ではなく
WHERE [日付] = ‘#2019/08/11#‘
とこんな感じです!
WHERE句のダミー
SQL文を作る中でWHERE句のダミーが必要でした!
これで解決!
例えば条件分岐してSQL文を作るとします。
条件が以下3つあるとします。
①日付指定
②ID指定
③文字列指定
そしてSQL文のパターンが以下3つあるとします。
(1) パターン1:WHERE ① AND ②
(2) パターン2:WHERE ① AND ② AND ③
(3) パターン2:WHERE ② AND ③
問題は(3)のせいでそろえて書けない!
WHERE句の初めは①を指定して
それ以降は“AND 条件文”でそろえて作りたい!
ここで(3)のWHERE句の初めを「WHERE 1」とし
その後”AND 条件文”で②と③を指定すればOK!
adUseClientの指定
SQL文を実行しレコードセットに返す際
これを指定してないとうまく処理しませんでした!
実行結果のデータを
クライアント(ローカル)側にしっかり返すために
以下の様に指定した後に実行結果を受け取りましょう!
1 2 3 4 5 6 7 8 9 10 11 |
Dim rs As ADODB.Recordset Dim sSql As String rs = New ADODB.Recordset '# SQL生成 sSql = "SQL文" '# ↓ここでクライアント側を指定 rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient rs.Open(sSql, cn, adOpenDynamic, adLockOptimistic, adCmdText) |
プロバイダーが見つかりません
開発環境は64bitだったのですが
32bit環境で実行すると「プロバイダーが見つかりません」
というエラーが発生しました!
ADODBで設定しているプロバイダーは
「Microsoft.ACE.OLEDB.12.0」なので
これが見つからないと言っている様です。
以下サイトからAccessDatabaseEngine.exeを実行し
Access Connectivity Engine (ACE)を
インストールすることで解決しました!
Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント
コンパイルターゲット
ADODBとは関係ないのですが
実行してもちゃんと動かず…。
実行bit数が良くなかったみたいです。
ソリューションエクスプローラーの
対象プロジェクトを右クリックし「プロパティ」へ。
コンパイルの「ターゲットCPU」を確認。
実行bit数がAnyCpu(32bitを優先)となっていました。
32bitを優先して実行するがダメなら64bitで実行されるぽいのですが…
環境開発は64bitなので
「x64」に変更してビルド→実行で上手く行きました!