これは少し奇妙に聞こえるかもしれませんが、次のようになります。
私のフォームは各顧客 (+-10 000) を繰り返し処理し、最後の訪問を取得するためにレコードセットを開きました。最適化が不十分なため、単一のクエリを実行することにしました。簡単にアクセスできるように保存する必要があります。
配列とは異なり、キー文字列 (クライアント番号) で検索して項目 (文字列: クライアントの最後の訪問) を取得できるため、辞書を使用することにしました。
Dim dict As Dictionary
Set dict = CreateObject("Scripting.Dictionary")
dict.RemoveAll
dict.CompareMode = TextCompare ' BinaryCompare does not change anything
rsLastVisits.Open "SELECT CUST_NO, MAX(DATE) AS LAST FROM [...] GROUP BY CUST_NO", DBHandle, adOpenDynamic, adLockOptimistic
Do While Not rsLastVisits.EOF
dict.Add rsLastVisits!CUST_NO, rsLastVisits!LAST
rsLastVisits.MoveNext
Loop
rsLastVisits.Close
「このキーは既にこのコレクションの要素に関連付けられています」という実行時エラーが発生します。
私のクエリは重複を返さないので、ここから楽しい部分が始まります (私は二重にチェックしました)。
デバッグ時に追加される値は次のとおりです。
最初の反復: "0000000.", "2012/05/27"
2 回目の反復: "00000001"、"2011/06/14" この行を挿入しようとするとエラーが発生します。
イミディエイトウィンドウで、私が書いた場合
dict.add "00000001", "2011/06/14"
問題なく追加されます。
ディクショナリ (dict.removeall) をクリアすると、1 つの項目が入力され (どんなカスタム番号でも)、次の項目は常に失敗します。イミディエイト ウィンドウに手動で (変数なしで) 入力すると、機能します。
アイデアはありますか?ありがとう !