私は昨日、SEのキャストを行い、WebはAccessデータベースのクエリ/レポート構造の一部として複数のレコードの特定のフィールドを連結する方法を模索していました。私はを見つけたので、私はAllen BrowneのConcatRelated()関数 hereにつながりました。関数と同じモジュールに名前を付けて間違った足で降りた後、私はそれを望みどおりに動かすことができました。このエラーは、関数を終了する代わりにループを引き起こすのはなぜですか?
しかし、最初にクエリで使用しようとすると、私は間違いを犯して、'WHERE Employee = ' & [Employee] & "'"
の代わりに"WHERE Employee = " & [Employee]
と等しいパラメータを入力して文字列として評価しました。これにより、予想される3464(データ型の不一致)ランタイムエラーが発生しましたが、Allenの修正により、エラーの原因となった実際の文字列が示されました。驚きはありません、私はちょうどOKをクリックし、SQLを修正するつもりです。私はそれがうまくいかなかったことに驚いた。私がmsgboxをクリックするとすぐに、それは再び来るでしょう。 Ctrl+Break
を使用してコードを停止しましたが、End
をクリックすると、実際に関数を終了するのではなく、同じエラーに戻ります。ループを止める唯一の方法は、Debug
をクリックして私のコードを期待どおりに落とすことでしたが、元のクエリを変更するコードから抜け出せませんでした。ヒット・リセットにより、エラーが再びポップしてループの中に戻ってきました。
最終的にエラーハンドラからすべてをコメントし、Exit Function
に伝えることで、それから抜け出しました。ほとんどの場合、問題を隠しているだけなので、カウンタを追加してエラーハンドラが呼び出され、イミディエイトウィンドウの値がチェックされるたびにインクリメントしていたことが分かりました。確かに、私はクエリのどこかをクリックするたびに10以上になるだろう。
私が理解していないことは、エラーの原因となるものです。 Err_Handler
は、Resume
を試すように指示するものは何もないので、最初のエラーで関数からダンプする必要があります。具体的には、Exit_Handler
に指示して、いくつかの変数をリセットしてからExit Function
にします。直接Exit Function
をErr_Handler
に入れても、私のエラーカウンタには複数の増分が発生します。 Debug
をさらに実験すると、Set rs = DBEngine(0)(0).OpenRecordset(strSql, dbOpenDynaset)
という行が強調表示されます。関数の後に最初の行であるので、それが助けになることはわかりません。strSql
の値を構成します。それをコメントアウトすると、次の行が強調表示されました。
私は初期のエラー(私の間違い)の原因を知っています。それは簡単な修正です。私は間違いの意図しない結果とそれが作成したループにもっと興味があります。
TL; DR
- は、代わりに出たり破壊のループにこのエラーが発生しますか?
- エラー処理が即時終了を呼び出すが、最初に
msgbox
のようなものを追加すると、無限にループするように見えたり、少なくともクリックするのが疲れるまで、有限回数発生するように見えるのはなぜですか? - コード内でこれを回避する方法はありますか?実際には、最初のエラーの後で停止しますか?
最初は600+レコードのテーブルを使用していましたが、さらにわずか10レコードの小さなテーブルで実験しました。 小さなテーブルクエリSELECT TestEmpHistory.Employee, ConcatRelated("EmpGroup", "TestEmpHistory", "Employee = " & Employee) AS CompliedNames FROM TestEmpHistory
を実行すると、エラーが再現されます。 テーブルTestEmpHistory
の形式は次のとおりです。
ID(AutoNum)| Employee | EmpGroup |クエリで参照されていない他のフィールド
ID |従業員| EmpGroup |
1 | Employee1 | G & A
2 | Employee1 |営業
3 |従業員2 | CSR
4 | Employee2 | G & A
5 | Employee3 | CSR
6 | Employee3 |プログラミング
7 | Employee3 | G & A
8 | Employee4 | CSR
9 | Employee4 | CSR
10 | Employee4 |私は、全体の記事を読むことなくアクセス2016
私は誰もあなたの質問をすべて読むつもりはないと思いますが、要約したり、コードを追加したりできますか? – Moreno