web-dev-qa-db-ja.com

ODBCAD.exesystem32とsyswow64の同じデータソース

現在、どのodbcデータソースがWindows Server 2008R2マシンで構成されているかを証明したいと思います。開くとsystem32/odbcad32.exeおよびSysWow64/odbcad32.exe、それらには同じソース(64ビットOS)が含まれています。どのDSNがどのアーキテクチャを使用しているかを確認する方法は?たとえば、Windows 10では、これが表示されます。

どうもありがとうございました!

2
BendEg

相関レジストリパス

  • 32ビット:HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/ODBC/ODBC.INI
  • 64ビット:HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBC.INI

以下のMicrosoftKB942976 はあなたの質問に対する答えを持っているかもしれません。

x86およびx64ODBCシステムDSNは常に該当するsystem32/odbcad32.exe32ビットおよびSysWow64/odbcad32.exe64ビット)。

ユーザーDSNのみを使用している場合、これはServer 2008 R2でのMicrosoftの回避策のようです。すべてをシステムDSNに変更できます。

Windows 8およびServer 2012の場合、PowerShellGet-OdbcDsn ただし、Server 2008 R2には適用されません。

ODBC Administratorツールは、64ビットバージョンのWindowsで32ビットと64ビットの両方のユーザーDSNを表示します

症状

64ビットバージョンのMicrosoftWindowsオペレーティングシステムには、次のバージョンのMicrosoft Open Database Connectivity(ODBC)データソースアドミニストレーターツール(Odbcad32.exe)が含まれています。

  • 32ビットバージョンのOdbcad32.exeファイルは、%systemdrive%\Windows\SysWoW64フォルダーにあります。

  • 64ビットバージョンのOdbcad32.exeファイルは、%systemdrive%\Windows\System32フォルダーにあります。

Odbcad32.exeファイルには、次のタイプのデータソース名(DSN)が表示されます。

  • システムDSN
  • ユーザーDSN

症状1

ODBC管理者ツールの32ビットバージョンは、32ビットシステムDSN、32ビットユーザーDSN、および64ビットユーザーDSNを表示します。 ODBC管理者ツールの64ビットバージョンは、64ビットシステムDSN、32ビットユーザーDSN、および64ビットユーザーDSNを表示します。

症状2

SQLDataSources関数は、アプリケーションのアーキテクチャに関係なく、ユーザーDSNのすべてのバージョンを返します。 32ビットアプリケーションで呼び出されるSQLDataSources関数は、32ビットドライバーのシステムDSNのみを返しますが、32ビットドライバーと64ビットドライバーの両方のユーザーDSNを返します。同様に、64ビットアプリケーションで呼び出されるSQLDataSources関数は、64ビットドライバーのシステムDSNのみを返しますが、32ビットドライバーと64ビットドライバーの両方のユーザーDSNを返します。 。したがって、アプリケーションがSQLDataSources関数から返されるユーザーDSNを使用して接続を確立すると、次のエラーメッセージが表示される場合があります。

データソース名が見つからず、デフォルトのドライバーが指定されていません

たとえば、次のシナリオについて考えてみます。 32ビットドライバー「MicrosoftAccessDriver(* .mdb)」のユーザーDSNを作成します。このドライバーには、対応する64ビットバージョンがありません。 64ビットアプリケーションで呼び出されるSQLDataSources関数は、この32ビットユーザーDSNを返します。ただし、この32ビットユーザーDSNを介して接続すると、このセクションで前述したエラーメッセージが表示されます。


原因

ユーザーDSNは、次のレジストリサブキーの下に保存されます。

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI

このレジストリサブキーでは、レジストリリダイレクトが有効になっていません。したがって、ユーザーDSNは、32ビットバージョンと64ビットバージョンの両方のODBC管理者ツールで表示されます。


解決策

下位互換性を維持するために、この問題の解決策は現在利用できません。


回避策

この問題を回避するには、適切なバージョンのODBCAdministratorツールを使用します。アプリケーションをビルドしてから64ビットオペレーティングシステムで32ビットアプリケーションとして実行する場合は、%windirのODBCAdministratorツールを使用してODBCデータソースを作成する必要があります%\ SysWOW64\odbcad32.exe。 DSNのタイプを示すために、32ビットユーザーDSNに「_32」を追加し、64ビットユーザーDSNに「_64」を追加できます。


詳細情報

64ビットのODBC管理者ツールをコントロールパネルから呼び出して、64ビットプロセスで使用されるユーザーDSNとシステムDSNを管理できます。 64ビットオペレーティングシステムでは、32ビットのODBC AdministratorツールがWindowson Windows 64(WOW64)プロセスで使用されます。 SysWoW64フォルダーから32ビットのODBCアドミニストレーターツールを直接呼び出す必要があります。 32ビットのODBC管理者ツールを使用して、WOW64プロセスで使用されるユーザーDSNとシステムDSNを管理できます。

システムDSNは、次のレジストリサブキーに保存されます。

HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI

このレジストリサブキーに対してレジストリリダイレクトが有効になっています。したがって、32ビットドライバーと64ビットドライバーのシステムDSNは分離されています。 64ビットのODBC Administratorツールは、32ビットのODBCAdministratorツールによって作成されたシステムDSNを表示しません。同様に、32ビットのODBC Administratorツールは、64ビットのODBCAdministratorツールによって作成されたシステムDSNを表示しません。また、64ビットのODBC Administratorツールは、32ビットドライバーを使用するシステムDSNを表示しません。同様に、32ビットのODBC Administratorツールは、64ビットのドライバーを使用するシステムDSNを表示しません。

ユーザーDSNは、次のレジストリサブキーに保存されます。

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI

このレジストリサブキーでは、レジストリリダイレクトが有効になっていません。したがって、両方のODBC管理者ツールはすべてのユーザーDSNを表示します。

レジストリリダイレクトの詳細については、次のMicrosoft Developer Network(MSDN)Webサイトにアクセスしてください。

http://msdn2.Microsoft.com/en-us/library/aa384232.aspx


その他のリソース

2
Pimp Juice IT