- Home
- » よくある質問(FAQ)
- » ColdFusion10情報
- » ColdFusion 10 Windows 64 bit OS 環境でODBC Socket ドライバを使った非公式な接続方法
ColdFusionはWindows 64bit OS 上で Microsoft Access データベースとの接続をサポートしていません。ColdFusion Administratorで"Microsoft Access ドライバ"を使ったデータソースの登録を行ってもエラーが発生して正常に登録することができません。また、日本では"Microsoft Access with Unicode"ドライバもよく利用されますが、ドライバの一覧に表示されず利用することができません。
開発元のColdFusionブログで、公式にはサポートされていませんが、 Microsoft Accessへ接続を行う技術情報が投稿されていました。そのブログの内容をベースにODBC Socket接続に関してこちらで確認した情報を参考情報としてご紹介します。
(参考記事)
手順
- 今回はサンプルとして、「C:/db フォルダ」に「test.xls ファイル」を置きました。このファイルに対して ODBC Socket 接続を行う例を紹介します。
test.xlsは、簡単な内容を作成しました。シート名は test です。
(※ODBC Socket接続のサンプルとしてExcel を使用していますが、
ColdFusion 9 以降からExcelファイルに対する各種操作をCFタグ・関数で
行えるため、実際にExcelの処理を行いたい場合はCFタグ・関数の使用を
おすすめします。)
- (Microsoft Office Access 2007 から追加となった .xlsx ファイル等と接続する場合)
Microsoft社のサイトの「Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント」より 32 bit版のドライバーをダウンロードし、インストールを行います。
- ColdFusion Administrator の「データソース」画面を開きます。
- [データソース名] に登録したいデータソース名を指定します(例:testexcel)
[ドライバ] は、ドライバの一覧から「Microsoft Access」を選択します(ODBC Socket の選択ではありません!!)。
- [追加]ボタンを押します。「データとサービス > データソース > Microsoft Access」の画面に遷移します。
- 「データベースファイル」の入力欄右側の[サーバーのブラウズ]ボタンを押して、ファイルを選択しますが、ここでは接続を行いたい .xls ファイル、または、仮の.mdb または .accdbファイルを選択します(Microsoft Access ドライバを選択しているのにexcel ファイルを選ぶのは間違っていますが、この目的は、中継サーバー(secure link)にデータソース名を登録する事なので、このまま作業を続けます)。
- 「CF データソース名」と「データベースファイル」の内容に誤りがない事を確認して、[送信]ボタンを押します。
- 応答をしばらく待った後に「Unable to update the NT registry. 変数 DRIVERPATH が未定義です。」 のエラーが出力されますが、このエラーは無視して下さい。
- エラーが表示されている状態で、「CF データソース名」を適当な名前に変更します。この例では、testexcel から testexcel2 に変更して、もう一度[送信]ボタンを押します。
- もしもデータソース一覧の画面に戻っている場合は、一覧から作成したデータソース名を選択して、再び設定画面を開いてください
- 再び「Unable to update the NT registry. 変数 DRIVERPATH が未定義です。」エラーがでます。
-
- 「データソース」画面に戻ります。一覧には変更を行った”後”のデータソース名だけが表示されます。
-
- コマンドプロンプトを開き、C:\Windows\SYSWOW64\odbcad32.exe を実行します。そうすると、32bit用の「ODBC データ ソース アドミニストレーター ツール」設定ダイアログが表示されます。
- [システム DSN]タグを選択して開き、「追加」を行います。
- 「セットアップするデータソースのドライバ」は、『Microsoft Excel Driver (*.xls, *.xlsx,*.xlsm,*.xlsb)』を選択します。手順1 の作業を行っていない場合は、『Microsoft Excel Driver (*.xls)』を選択します。
-
「データソース名」には、手順4 で指定したデータソース名(testexcel)と同じにします。手順9 で変更したtestexcel2ではありません。
- 「データベース」の「選択」を押して、接続を行いたい“Excelファイル”を選択します。
- [OK]ボタンを押すと、データソースの登録が行われます。「ODBC データ ソース アドミニストレーター ツール」の[システム DSN]に、データソースが登録されたことを確認してください。
- ColdFusion Administrator の「データソース」画面に再び戻ります。「新規のデータソースの追加」をもう一度行います。[データソース名] には、手順4で指定した登録したいデータソース名を指定します(例:testexcel)
[ドライバ] は、ドライバの一覧から「ODBC Socket」を選択します。
- [追加]ボタンを押します。「データとサービス > データソース > ODBC Socket」の画面に遷移します。
- [ODBC DSN] には、手順4で作成したデータソース名(testexcel) を選択します。
- (追加手順)本題とはそれますが、excelファイルに対しては複数の接続を行った場合に、Connection closed due to session kill 等のエラーになる場合があります。その場合は、接続数の制限や接続の維持を無効にします。それらの設定項目は、[詳細設定を開く]ボタンを押すと表示されます。
- [送信]ボタンを押すとデータソース一覧画面に戻り、正常に登録が完了した場合はステータス欄に [OK] が表示されます。
-
- このデータソースを利用しているプログラム(<cfquery datasource="uri" ...)をブラウザから実行し、正しく動作しているかを確認してください。
- ColdFusion Administrator の「データソース」画面に戻り、手順9で適当な名前に変更した(上記の例では testexcel2)データソースを削除します。
- (以下の手順は、手順1~24を行って ODBC Socket 接続できた後の手順です)
手順 4で作成した64bit用DSNのODBC設定がレジストリに残っていますので、手動で削除します。削除はレジストリを操作しますので、万が一の問題に備えてレジストリのバックアップ等を行ってから作業する事をお勧めします。
- Windows 64bit OS に 32bit版ColdFusion をインストールした場合は、以下の64bit用DSNには登録されていない模様ですので、以下の手順は必要ないようです。
- レジストリエディタを実行し、64bit用DSNに登録されているODBCエントリを削除します。
- key: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\{手順3.で指定したデータソース名}
※例、手順4で最初に指定した Microsoft Access の設定「testexcel」というキーが残っていますので、それを削除します。
- value: HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\{Data Source Name here}
※ODBC Data Sources に含まれている一覧から、「testexcel」という値を削除します。誤って別の名前を削除しないように気をつけて下さい。
- レジストリエディタを閉じます。
- 64bit用の「ODBC データ ソース アドミニストレーター ツール」設定ダイアログを表示します。C:\Windows\system32\odbcad32.exe をコマンドラインから実行します。64bit用の「ODBC データ ソース アドミニストレーター ツール」設定ダイアログが表示されますので、[システム DSN]タグを選択して開き、削除したデータソース名が一覧に表示されない事を確認します。
- 念のため、もう一度、手順23.と同様にこのデータソースを利用しているプログラム(<cfquery datasource="testexcel" ...)をブラウザから実行し、正しく動作しているかを確認してください。
記事公開日:2013年04月01日
最終更新日:2013年04月04日