2016-05-03 3 views
1

EDIT:HansUpのソリューションはうまくいきました。将来使用する人は、使用後に複数のインデックスを削除してください。私のサイズのテーブルでは、データベースのサイズがほぼ倍増していました。私が使用を終了したさらに良いアイデアは、ワークスペースオブジェクトを使用して一時データベースを作成し、そこでのすべての処理を実行し、最終データのみを実際のデータベースに戻すことでした。.Seekを使用して、テスト結果を確認してから、もう一度.Seekを使用して

これを行う方法はありますが、.Seekがインデックスを探す場所を制御する方法を見たことがありません。最後に<を使用してください。

私は2テーブルを比較して、支払い調整の元のレコードを見つける必要があります。問題は、私たちのSAPモジュールのプログラマーが、給与計算の結果から一意のレコード識別子を削除し、調整が行われたリバースエンジニアに任せたという素晴らしい計画のすべてです。

私は問題は結果が戻って複数のレコードの1にまでさかのぼることができたときに(彼らは、元のコード内のエラーを修正するための是正支払実行の数十を作ることを余儀なくされたが生じ、.seekを使用してレコードのほとんどを一致させることができました)。

.seekを使用して、調整変数をテストします(レコードの支払いはすでに0に調整されています)。その場合は、インデックス内の次の一致するレコードにもう一度.seekを入力します。

.seekがインデックスエントリの比較を開始する場所を指定する方法はありますか?現在の試合後に次の検索を開始できますか?

.seekの後に.FindNextを使用することはできますが、遅い性質のために.findグループのメソッドを避けたいと考えています。

アイデア?

答えて

2

Recordset.Seekは、探している値に一致する最初のレコード(存在する場合)を見つけて、そのレコードを現在のレコードにします。

Seekに一致する2番目のレコード...または最初に一致するレコード以外のレコードを指定する方法はありません。

しかし、あなたのRecordsetが(最初の場所でSeekを使用するために必要な)防除指数によって順序付けされているので、次のレコードに移動し、そのレコードのインデックスフィールドは、まだあなたのSeek値と一致するかどうかを確認するためにRecordset.MoveNextを使用しています。

MoveNextを繰り返して、そのフィールドの値がSeekの値と一致しなくなるまで、インデックス付きフィールドを確認することができます。その時点で、すべての一致するレコードを調べたことがわかります。

<または<=に基づいて検索している場合は、インデックスの末尾からSeekが始まることを意味します。これはほぼ同じです。ただMoveNextの代わりにMovePreviousを使用してください

+1

あなたの解決策は私の問題を解決しましたが、私の戦略はちょうど新しいものを作成しました。 – pegicity

関連する問題