Delphi 2007についてはわかりませんが、Delphi7とOracle8でも同じことをしました。
これが私がしたことです:
- TAdoDataSet.CursorLocationを設定します クエリによると:
- clUseClient クエリがGUIのレコードをフェッチし、クエリが比較的「単純」である場合-グループ化や合計はありません
- clUseServer クエリに何らかの集計(合計、グループ化、カウント)がある場合
- TAdoDataSet.CursorTypeを設定します クエリによると:
- ctForwardOnly データセットをスクロールバックする必要がないレポートの場合-clUseServerでのみ機能します
- ctStatic GUI用。これは、 clUseClientで機能する唯一のモードです。
- TAdoDataSet.LockTypeを設定します クエリによると:
- ltReadOnly 編集に使用されていないすべてのデータセット(グリッド、レポート)
- ltOptimistic 変更直後にレコードがデータベースに投稿されたとき(例:ユーザーがフォームでデータを編集したとき)
- ltBatchOptimistic 多数のレコードを変更する場合。これは、多数のレコードをフェッチし、それらに対していくつかの処理を実行してから、更新をバッチでデータベースに送信する場合に使用します。これは、clUseClientおよびctStaticと組み合わせると最適に機能します。
- 私の経験では、Oracle用のMicrosoftOLEDBプロバイダーはOracleOleDbプロバイダーよりもうまく機能しました。あなたはそれをテストする必要があります。
編集: 考えられるblobの問題に関するFabricioのコメントを確認してください。 - TAdoQUeryを置き換えます TAdoDataSetを使用 。 TAdoQueryは、アプリをBDEからADOに変換するために作成されましたが、Borland/Codegearの推奨事項はTAdoDataSetを使用することでした
- Oracle接続文字列を再確認して、ネットワーク遅延がないことを確認します。 Oracleへの接続にはどのくらい時間がかかりますか? TnsPingの長さはどれくらいですか?