1

Access 2010 FE と SQL Server 2005 BE を実行しています。DSNless 接続を使用して、SQL Server へのパススルー クエリを正常に実行できます。

テスト段階では、パススルー クエリを再実行できるように、データベースを復元して元のレコードに戻す必要がある場合があります。私が見つけたのは、パススルー クエリを実行すると、SQL Server にアクティブな接続が作成されることです。MANAGEMENT | の下に SQL Server 管理コンソール経由の接続が表示されます。SQL Server ログ | アクティビティ モニター、ビュー プロセスを選択します。そこで、パススルー クエリを実行すると、どのプロセス ID が使用され、誰がそれを使用しているかを確認できます。

データベースを復元する唯一の方法は、アクティブな接続などのプロセスを強制終了することです

データベースを復元してパススルー クエリを再実行すると、ODBC -- Call Failed メッセージ ボックスが表示されます。クエリ定義を更新する手順を実行しようとしましたが、役に立ちませんでした。これらのオブジェクトをクリックすると、ODBC -- Call Failed メッセージ ボックスが表示されます。

この問題を修正する方法には 2 つのオプションがありますが、どちらの場合もユーザー フレンドリーではありません。

  • Access アプリケーションを再起動する
  • パス スルー クエリを再実行するには、約 5 ~ 10 分待ちます。

ODBC エラーをトラップする関数を作成したところ、次のように表示されます。

ODBC エラー番号: 0
エラーの説明: [Microsoft][ODBC SQL Server Driver]通信リンク障害

ODBC エラー番号: 3146
エラーの説明: ODBC -- 呼び出しに失敗しました。

そのため、Access アプリケーションが現在 ODBC 経由で接続されているときに、何らかの理由で SQL サーバーを再起動するか、SQL サーバー上のプロセス (アクティブな接続) を強制終了する必要がある場合、ODBC 経由で作成されたオブジェクトは、2 つの回避策を実行するまで正しく動作しません。上記のソリューション。

誰でも解決策についてアドバイスをもらえますか? 洞察に感謝します。

4

1 に答える 1

0

少し前に同様の質問をしましたが、満足のいく回答が得られませんでした。私の最初の質問は次のとおりです: MS Access から SET IDENTITY_INSERT をより速く有効にするように強制する

タイムアウト動作を制御する ACEのレジストリ設定がここに記載されています。

ConnectionTimeout : キャッシュされた接続がアイドル状態のままタイムアウトになるまでの秒数。デフォルトは 600 です (値のタイプは REG_DWORD です)。

したがって、3 番目の回避策として (既にリストした 2 つに加えて)、そのレジストリ設定をより短いタイムアウト (10 秒など) に変更できます。これが私の答えで取ったアプローチです。1 つの注意点は、タイムアウトを短くすると、パフォーマンスやその他の問題が発生する可能性があることです。あなたのマイレージは異なる場合があります。

詳細については、元の質問に対する私の完全な回答を参照してください。

于 2011-10-31T20:47:03.413 に答える