2

以下のコードを使用して、テーブルからデータを取得しています。その後、結果のデータをグリッドにバインドしています。問題は速度にあります。このクエリの実行には約 2 ~ 3 分かかりますが、バックエンドからは 30 ~ 40 秒かかります。

-----------現在のコード ------------------

rs.ActiveConnection = con //con is connection
con.Errors.Clear
rs.CursorLocation = adUseServer
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.StayInSync = True
On Error Resume Next
rs.Open strCmd //strCmd is query

------- クライアントを使用して試した代替ソリューション ---------------

rs.ActiveConnection = con //con is connection
con.Errors.Clear
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockBatchOptimistic
rs.StayInSync = True
On Error Resume Next
rs.Open strCmd //strCmd is query

/// 結果 : 同じ速度

--------レコード セットを開くのではなく実行を使用する代替ソリューション ---------------

com.ActiveConnection = con //con is connection
com.CommandType = adCmdText
com.CommandTimeout = 500
com.CommandText = strCmd //strCmd is query
con.Errors.Clear
On Error Resume Next
Set rs= com.Execute()

//結果:速度は速いですが、グリッドの値を更新しようとすると、以下のエラーが表示されます:

「実行時エラー '3251': 現在のレコードセットは更新をサポートしていません。これは、プロバイダーまたは選択したロックの種類の制限である可能性があります。」


4

1 に答える 1

0

問題の原因は接続ではなく、おそらくテーブルのセットアップ/クエリだと思います。

WHERE、JOIN、および ORDER BY 句にリストされているすべてのフィールドがインデックス化されていることを確認してください。

作成している派生フィールドを再評価します。先日、2 つのテキスト フィールドを結合し、その新しいインデックス付けされていないフィールドで並べ替えるクエリを見ました。

クエリとテーブル構造を投稿すると、より良いアイデアが得られます。

于 2012-12-02T20:55:47.117 に答える