0

私の Access クライアントには、acDialog モードで開かれたフォームであるというトリックを使用する検索結果フォームがあります。ユーザーが検索をキャンセルすると、フォームは閉じます。ユーザーが検索項目の 1 つを選択すると、フォームは結果をバインドされていないフィールドに書き込み、非表示にします。

acDialog前の段落で説明した 2 つのイベントのいずれかが発生するまで、呼び出し元のコードは (モードのために) 中断されます。呼び出し元のコードは、フォームがまだ読み込まれているかどうかを確認します。検索項目が要求されていることがわかっている場合は、フォームから項目を取得して閉じます。フォームがまだ読み込まれていない場合は、キャンセル ルートが選択されたと見なされます。

検索結果のデータソースは select ステートメントです"SELECT * FROM details ORDER BY ..."

このトリックは、"details" が別の Access データベースへのリンク テーブルであるコードでしばらくの間機能していました。

SQL Server に移植しています。詳細テーブルは、起動時に正しい SQL Server インスタンスに動的にリンクされるようになりました。次の接続文字列の使用

ODBC;driver=SQL Server;SERVER=ROO\SQLEXPRESS;DATABASE=Test_DB;UID=my_app;PWD=xxxx;

(無実を守るためにパスワードなどを変更しています)

Access がアプリケーションを終了するとき (およびそのときのみ) - コードを通るパスが visible = false トリックを使用する結果になった場合、エラー メッセージが表示されて終了します。パスが検索フォームを経由しているが、戻る前にフォームが閉じたアプリケーションの終了がある場合、エラー メッセージは表示されません。

エラーメッセージは次のとおりです。

Cannot access database because of Error [Microsoft][ODBC Driver Manager] Data source 
name not found and no default driver specified

終了します。

なぜこれが起こっているのかを正確に突き止め、止める必要があります。

4

1 に答える 1

1

回避策で問題を解決しました。フォーム結果のグローバル変数を作成し、検索結果フォーム自体を常に閉じていました。結果を取得しようとしていた基になるルーチンは、グローバル変数を使用するだけです。

これは、結果を取得するためにダイアログ ボックスを非表示にすることは信頼できないことを証明しました。変更するとすぐに問題が解消されました。

于 2012-11-12T23:07:24.143 に答える