1

これは少し奇妙に聞こえるかもしれませんが、次のようになります。

私のフォームは各顧客 (+-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 つの項目が入力され (どんなカスタム番号でも)、次の項目は常に失敗します。イミディエイト ウィンドウに手動で (変数なしで) 入力すると、機能します。

アイデアはありますか?ありがとう !

4

2 に答える 2

3

あなたの例はうまくいくはずです。私が考えることができる唯一の問題はCUST_NO、文字列ではない場合です。これを試して、違いがあるかどうかを確認してください。

dict.Add CSTR(rsLastVisits!CUST_NO), CSTR(rsLastVisits!LAST)

編集:

のDB定義を投稿できますCUST_NOか?

于 2012-10-24T21:08:03.597 に答える
0

回避策を見つけました...

変えたら

dict.Add rsLastVisits!CUST_NO, rsLastVisits!LAST

dict.Add "" & rsLastVisits!CUST_NO, "" & rsLastVisits!LAST

できます...

私の変数はすでに文字列だったので、これは意味がありません。

これは「回答済み」のままにしておきます。Vb6の内部に関する知識が豊富な方が、何が起こっているのかを説明していただければ幸いです。

ありがとう

于 2012-10-24T14:41:40.433 に答える