新しいMicrosoftSQLServerODBCおよびOLEDBドライバーのもつれを解く
マイクロソフトが計画されていたOLEDBの非推奨に逆戻りし、新しいOLEDBドライバーを提供したことをすでにご存知の方もいらっしゃるかもしれません。ただし、何を使用すべきかを理解するのは頭を悩ませる可能性があります。 SQL Server Native Clientを使用していたときは、非常に簡単でした。NativeClientでは、OLEDBとODBCの両方が単一のDLLファイルで出荷されていたため、簡単にインストールできました。正しいバージョンのネイティブクライアントを使用していることを確認する必要がありました。
LinuxでSQLServerが利用できるようになったため、ネイティブクライアントを配布する意味がなくなりました。Linuxは一般に、主にMicrosoft製品で使用されるWindowsのみのテクノロジであるOLEDBをサポートしていないためです。そのため、MicrosoftはODBCとOLEDBの両方を1つのDLLに結合することを選択していません。アプリケーションにDAOとADOの両方を使用するVBAコードが含まれている場合は、2つをインストールする必要があります。 ODBCとOLEDBの両方の最新機能とサポートをそれぞれ取得するためのさまざまなプロバイダー。
多くの人がさまざまなドライバーを単に「ODBCドライバー」または「OLEDBプロバイダー」と大まかに参照するため、命名規則は少し混乱する可能性があります。それでは、名前をまっすぐにしましょう。まず、廃止されたバージョンを特定してから、現在のバージョンを確認します。
非推奨バージョン
デフォルトでは、すべてのバージョンのWindowsには、2つのSQLServerデータアクセスクライアントライブラリがプリインストールされています。
SQLServer用のMicrosoftOLEDBプロバイダー(SQLOLEDBとも呼ばれます)
Microsoft SQL Server ODBCドライバー(SQLODBCとも呼ばれます)
とても これらは非推奨であることに注意してください 。それらはSQLServer2000を対象としており、それ以降に導入された新機能が不足しています。 Windowsはしません 新しいドライバーを出荷するか、WindowsUpdateを介してそれらを更新します。今後、アプリケーション開発者は、Windowsが提供するドライバーに依存するのではなく、アプリケーションで使用する適切なバージョンのドライバーを提供する必要があります。 しない 現在の開発でそれらを使用してください。
現在のバージョン
それでは、使用したい正しいODBCドライバーとOLEDBプロバイダーを見てみましょう。
SQLServer用のODBCドライバー17
執筆時点では、SQL Server用のODBCドライバー17が最新のドライバーであり、提供されているリンクからダウンロードできます。接続文字列は次のようになります:
ODBC;DRIVER=ODBC Driver 17 for SQL Server;SERVER=myServer;DATABASE=myDatabase;
SQLServer用のOLEDBドライバー18
執筆時点では、OLEDBドライバー18が最新のドライバーです。バージョンは1つ高くなっていますが、機能セットはSQLServer用のODBCドライバー17と同等です。接続文字列は次のようになります:
Provider=MSOLEDBSQL;Server=myServer; Database=myDataBase;
32ビットまたは64ビット?
よくある質問の1つは、64ビットバージョンと32ビットバージョンのどちらのドライバーをインストールする必要があるかということです。答えは、説明しているバージョンに関係なく同じであり、Officeではなく常にOSに依存します。したがって、64ビットWindowsで32ビットAccessを実行している場合は、64ビットドライバーをインストールする必要があります。これには、32ビットアクセスを実行するために必要な32ビットコンポーネントが含まれます。
SQL Server Native Clientを使用できますか?
公式には、SQLServerネイティブクライアントはSQLServer 2012までサポートされています。ただし、SQLServerの新しいバージョンに接続するために引き続き使用できます。ネイティブクライアントに欠けている機能がいくつかあります。時間の経過とともに、特にAzureテクノロジでは、ニーズに適さなくなることが多くなります。既存のアプリケーションで引き続き使用できる場合もありますが、個別のODBCドライバーとOLEDBドライバーを使用して新しい開発を計画し、可能な場合は既存のアプリケーションを移行することをお勧めします。これらの新しいドライバーでのみサポートされる新しいテクノロジーを利用する必要がある場合は、移行する必要があります(たとえば、Azure認証やAlwaysEncrypted機能など)。
両方必要ですか?
DAOとADOの両方を使用する場合のみ。一般的に、すべてのフォームとレポート、およびAccessクエリは常にDAOを使用しています。 ADOを使用できるのは、VBAコード内のみです。したがって、ADOを使用しない場合は、ODBCドライバーのみを使用することができ、必要に応じてそれで十分です。つまり、通常はテーブルをリンクする場合、次のようなコードを使用します。
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db =CurrentDb
Set tdf =db.CreateTableDef
tdf.Name =“ MyRemoteTable”
tdf.SourceTableName =“ dbo.MyRemoteTable”
tdf.Connect =“ ODBC; DRIVER =ODBC Driver 17 for SQL Server; SERVER =myServer; DATABASE =myDatabase;”
db.TableDefs.Append
tdf.Connectに使用される構文は、パススルーquerydef、またはDAO.Workspace.OpenDatabaseメソッドのConnectプロパティでも機能します。
ODBCを使用してADO接続を開くことは合法ですが、欠点は、ODBC用のOLEDBプロバイダーを使用してSQL Server用のODBCドライバー17に接続するため、より多くのレイヤーを通過することになることです。それでもODBCを使用したい場合は、次のコードを使用してOLEDB上でODBCを使用できます。
Dim con As ADODB.Connection
Set con =New ADODB.Connection
con.ConnectionString =“ DRIVER =ODBC Driver 17 for SQL Server; SERVER =myServer; DATABASE =myDatabase;”
con.Open
余分なレイヤーを避け、OLEDBを直接使用することをお勧めします。このコードを使用して、ADOコードで最高のパフォーマンスを得ることができます:
Dim con As ADODB.Connection
Set con =New ADODB.Connection
con.ConnectionString =“ Provider =MSOLEDBSQL; Server =myServer; Database =myDataBase;”
con.Open
したがって、SQL Server用の新しいOLEDBドライバーが実際に必要であり、使用するのは、アプリケーションにADOコードがあり、基盤となるOLEDBドライバーで有効にする必要があるADOの全機能を使用する場合のみです。
追加リファレンス
MicrosoftDataAccessテクノロジーのロードマップ