Accessのリンクテーブル「ODBC--呼び出しが失敗しました」タイムアウト設定とパススルークエリ
Access2010 から、SQL Server 2008 R2 のDBへODBC接続して、リンクテーブルを設定する。
Access側でローカルクエリを実行すると、
「ODBC--呼び出しが失敗しました。[ODBC SQL SERVER DRIVER]時間切れになりました」
となってしまう。
そもそも、リンクテーブルに対して、joinの多用や、クエリの入れ子が深いとパフォーマンスは期待できない。
さらに、SQL Server側で、SSISやレプリケーションなどのトランザクション実行時は、レコードが参照できなくなり、
参照したい場合は "ダーティリード" という指定をする必要があるらしい。
ここでは、タイムアウトの設定とパススルークエリについてまとめ、 ダーティリードについては、別の機会にまとめる。
◆タイムアウトの設定
Accessのクエリをデザインモードで開く
[デザイン] タブ の [プロパティシート] をクリックして開く
[ODBCタイムアウト] の項目値を変更する (デフォルト=60(秒)、0=タイムアウトなし)
◆パススルークエリ
Accessのクエリをデザインモードで開く
作成 > クエリデザイン > [テーブルの表示] ダイアログは閉じる
[デザイン] タブ の [パススルー] をクリック
同じく [プロパティシート] をクリックしえ開く
[ODBC 接続文字列] の項目に接続文字列を設定
たとえば、
"ODBC;DRIVER=SQL Server;LANGUAGE=日本語;DATABASE=DBname;
SERVER=HostPathname;Integrated Security=SSPI;Auto Translate=True;"
接続文字列情報にパスワードとログオン名を保存する場合、確認ダイアログが表示されるので、[はい] をクリック
SQL パススルー クエリ ウィンドウにコピーしたAccessクエリを貼り付ける
ここでAccessクエリをSQLクエリに準じて書き換える
たとえば、
dbo_Tablename は、dbo.Tablename という記述に、IIF文は、case文に、といった具合
(Windows Server 2008R2, SQL Server 2008 R2、Windows 7、 Access2010、ODBC)