質問

私はTADOQueryから一部のレコードをフィルタ処理しようとしています。私がtrueにフィルタプロパティを設定し、私は=「値を」フィールドフィルタを設定すると、すべてが正常に動作します。私は動的に追加することによって、このフィルタを構築したいと思います。

<space>AND field='value'

は常に真の値に、と私は= 1 1は、トリックを行うだろうと思いました。だから私は、デフォルトのフィルタとして1 = 1を持っているでしょうし、その後だけにAND field='value'を追加して、必要に応じています。

これは、しかし、動作しません。エラーメッセージは読みます:

  

引数は、間違ったタイプのもので許容範囲外であるか、または互いに矛盾しています。

私はこのフィルタのための多目的常に真の表現として使用することができますどのような誰も私に教えていただけますか?

役に立ちましたか?

解決

私はそれは言うまでもないとし、それがこの作品かどうかOLE DBプロバイダに依存します。既存のレコードセットにフィルタを設定すると、それは(私の記憶が正しければIViewFilter)異なるOLE DBインタフェースを経由してしまいます。フィルタは、SQLステートメントのWHERE句で動作していてもそう、それは必ずしもそれがフィルタとして動作することを意味するものではありません。あなたが設定したフィルタは、コンポーネントの部分に離れて解析され、その後、OLE DBインタフェースに渡されてしまいます。これは、プロバイダの実装は、「定数=定数」形式のフィルタを期待されていないことかもしれません。回避策として、あなたは、SQL文のWHERE句でそのすべてを設定してみてください。

他のヒント

あなたは結果セットをフィルタリングすることにしたいときに何かをフィルタリングされていない場合はFalseに「ろ過」プロパティを設定し、真のそれを設定して、あなたの状態する必要があります。

私は動的にあなたが常に正確にデータベースに送信されているものを知っている(とあなたが欲しいレコードだけがプログラムによって受信されていることを確認している)ことをいえので、正しいSQLプロパティを構築します。

1 = 1トリックは、クエリのWHERE句ではなく、フィルタの特性で正常に動作します。あなたは、フィルタを無効にしたい場合は、falseにフィルタリング設定され、すべてのレコードが返されます。

フィルタリングの問題点は、クライアント側で行われていることです。あなたはSQL Serverなどのデータベースエンジンを使用してフィルタリングするレコードの大規模なセットを持っていることを期待されている場合は、あなたの優れたデータベース・サーバは、要求されたレコードのみを返すことができますSQLクエリを変更することで務めました。ただ、最初にあなたのTAdoQueryを閉じて再オープンし、SQLを変更してください。

私は(大規模なデータセットを使用)、データセット全体を返す避けるために使用するトリックは私がしたかったレコードの数より1つ多く返すためにTOP SQL構文を使用し、その後、私は表示するレコードの最大数を考慮することです表示「n」を...私はその数に達した場合、その後、私はより多くのn-1のレコードが返されると、検索/フィルタ条件を調整することがあったことをユーザに通知します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top