トップ回答者
Office2013 環境における ODBC登録(SQLConfigDataSource の動作)について

質問
-
お世話になります、yanazakiと申します。
下記のExcel_VBAプログラムを使用して、Access(mdb)のODBCの設定を
行っています。
この度、Officeのバージョンアップ 2007 -> 2013 を実施したところ、
以下の現象となり、難儀しております。
・ODBC 画面で確認しても、登録されていない。
・SQLConfigDataSource としては正常復帰する。
「データソースが登録されました。」のメッセージが出力
SQLConfigDataSource で、ODBC設定を登録する際、
Office (Excel)2013移行時の注意点等はございますでしょうか。
お心当たりのある方、ご教授をお願い致します。
【環境・補足】
□ OS : WindowsServer2008R2
□ Office : 2013 Professional 32bit
□ 32bit のODBCに登録するため、
C:\Windows\SysWOW64\odbcad32.exe で確認
□ WindowsServer2008R2 + Office2007 の組合わせは正常登録
□ 本環境はオフライン(インターネットとは未接続)
---
【実行プログラム抜粋】
strParam = ""
strParam = "DSN=XXX" & vbNullChar
strParam = strParam & "Description=YYY" & vbNullChar
strParam = strParam & "DBQ=" & strPath & "ZZZ.mdb" & vbNullChar
' データソースの登録
intRet = SQLConfigDataSource(0&, ODBC_ADD_SYS_DSN, strDriver, strParam)
' 登録の成功・失敗の判断
If intRet = 0 Then
GoTo ERRMSG
End If
ERRMSG:
' 登録の成功・失敗の判断
If intRet Then
MsgBox "データソースが登録されました。"
Else
MsgBox "登録されませんでした。"
End If
End Sub
以上
2014年8月20日 8:44
回答
-
質問者の柳崎です。
Officeバージョンにより、現象の発生有無が確認できます。
・Office Pro 2013 (以降2013) :発生する
・Office Pro 2013 Pro (以降2013Pro) :発生しない。
【原因】
2013は、これまでのDVD提供からダウンロード提供となり、
Click-to-Runというインストール形態になります。
これは、App-Vという「仮想」テクノロジに基づいた実装です。
つまり、ローカルマシンの「システム」のレジストリに登録しようとしてもできません。
仮想化されたシステムのレジストリ、即ち以下に登録されてしまいます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\ClickToRun\REGISTRY\MACHINE
【対応】
Office(Excel)から直接APIを呼び出すのではなく、
別のODBC登録アプリを作成し、Officeからはそれを外部実行するようにします。
(同現象にお悩みの方:2013Proに変更する、という選択肢もあります。)
藤森様
今回は、サポートいただき、ありがとうございました。
今後ともよろしくお願い致します。
以上
2014年9月4日 0:13
すべての返信
-
ConfigDSN Function を見る限り SQLConfigDataSource Function を使った場合の文字列の区切りは NULL で良いようですね。
ただし文字列の最後は ダブルで NULL をつける必要があるようです。
2014年8月25日 1:19 -
Office 2013 の問題かもしれませんね。
Download Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント from Official Microsoft Download Center
2014年8月26日 1:01 -
藤森様
毎々お世話をかけます、質問者のyanazaki です。
2013 環境において、Access2010 再頒布コンポーネントは、導入済です。。
・AccessDatabaseEngine.exe (32bit の方)
-----------------------------
当方の調査事項をご連絡いたします。
・Excel は、「管理者で実行」にて起動。 Administrator
・上記、および関連コンポーネントのバージョン
- 再頒布コンポーネント 14.0.7015.1000
- Microsoft Access Driver 6.01.7601.17514
以上
2014年8月26日 3:47 -
レジストリに正しく書き込まれているか確認、、、でしょうかね。
64 ビット版の Windows で、ODBC アドミニストレーター ツールが 32 ビットと 64 ビット両方のユーザー DSN を表示する
ちなみに *.accdb は
Windows 8.1 x64 + Office 2013 x64
Windows Server 2012 R2 + Office 2010 x86
の組み合わせで問題なく登録出来ました。- 編集済み 藤森幸治 2014年8月26日 8:17
2014年8月26日 7:00 -
藤森様
毎々お手数をお掛けしております、質問者のyanazakiです。
残念ながら、レジストリにも登録されておりませんでした。
※ いただきましたURLに記載の 「システムDSN」を確認
余談ですが、手動でレジストリ登録してみましたが、ODBCアドミニストレーターツールには
表示しませんでした。
--
なお、藤森様の環境で成功したとのこと。
当方でも、2008R2 に対して、Office2007 (32bit)では成功していたことから、
Office2013 (32bit版)が怪しいかもしれません。
いろいろとありがとうございます。
またご情報がありましたら、ご教授をお願い致します。
2014年8月27日 4:54 -
レジストリに直接記述して表示されないのは、 ODBC Data Sources への記述が抜けているせいでは?
そこだけ記述すればデーターソースに表示されるはずです。
ちなみにテストしたコードは以下の通り。
Private Declare PtrSafe Function SQLConfigDataSource Lib "ODBCCP32.DLL" _ (ByValhwndParent As Long, _ ByVal fRequest As Long, _ ByVal lpszDriver As String, _ ByVal lpszAttributes As String) As Long Private Const ODBC_ADD_SYS_DSN = 4 Private Const ODBC_REMOVE_SYS_DSN = 6 Dim R_REMOVE As Long Dim R_ADD As Long Dim lpszDriver As String Dim lpszAttributes As String lpszDriver = "Microsoft Access Driver (*.mdb, *.accdb)" lpszAttributes = "DSN=AAA" + vbNullChar & _ "Description=YYY" + vbNullChar & _ "DBQ=C:\\DB.accdb" + vbNullChar + vbNullChar R_REMOVE = SQLConfigDataSource(0, ODBC_REMOVE_SYS_DSN, lpszDriver, lpszAttributes) R_ADD = SQLConfigDataSource(0, ODBC_ADD_SYS_DSN, lpszDriver, lpszAttributes)
2014年8月27日 5:46 -
質問者の柳崎です。
Officeバージョンにより、現象の発生有無が確認できます。
・Office Pro 2013 (以降2013) :発生する
・Office Pro 2013 Pro (以降2013Pro) :発生しない。
【原因】
2013は、これまでのDVD提供からダウンロード提供となり、
Click-to-Runというインストール形態になります。
これは、App-Vという「仮想」テクノロジに基づいた実装です。
つまり、ローカルマシンの「システム」のレジストリに登録しようとしてもできません。
仮想化されたシステムのレジストリ、即ち以下に登録されてしまいます。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\ClickToRun\REGISTRY\MACHINE
【対応】
Office(Excel)から直接APIを呼び出すのではなく、
別のODBC登録アプリを作成し、Officeからはそれを外部実行するようにします。
(同現象にお悩みの方:2013Proに変更する、という選択肢もあります。)
藤森様
今回は、サポートいただき、ありがとうございました。
今後ともよろしくお願い致します。
以上
2014年9月4日 0:13