現在、どのodbcデータソースがWindows Server 2008R2マシンで構成されているかを証明したいと思います。開くとsystem32/odbcad32.exe
およびSysWow64/odbcad32.exe
、それらには同じソース(64ビットOS)が含まれています。どのDSNがどのアーキテクチャを使用しているかを確認する方法は?たとえば、Windows 10では、これが表示されます。
どうもありがとうございました!
HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/ODBC/ODBC.INI
HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBC.INI
以下のMicrosoftKB942976 はあなたの質問に対する答えを持っているかもしれません。
x86およびx64ODBCシステムDSNは常に該当するsystem32/odbcad32.exe
32ビットおよびSysWow64/odbcad32.exe
(64ビット)。
ユーザー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サイトにアクセスしてください。