今は少しハッキーなので、検索を変更したいと思います。現在、次のように機能します。
- ユーザーは、 Volvoなどのテキストをテキスト ボックスに入力し、検索を開始します。
- Volvo を含むすべての投稿を SQL で検索します。
- 結果は、BoldID と DisplayValue の 2 つの列を持つリストです。
- BoldID は、データベース内のオブジェクトを識別するための一意の番号です。
- DisplayValue は、結果のリストでユーザーに表示されるものです。
- 結果セットの各行は、ユーザー リストの行番号で識別されます。最初は 1、2 番目は 2 などです。
- コードでクエリをループすることにより、意図的に最大 99 件のヒットのみを表示するという制限もあります。多くのヒットを返すクエリを使用するのは良くありません。ユーザー ヒット リストにこれ以上ヒットしても意味がないからです。その場合、検索はより具体的にする必要があります。
結果リストは、rightpane と呼ばれる別のグローバル ウィンドウに表示されます。ハックな部分は、モーダル ダイアログから検索する場合、マウスで値を選択できるようにするには、右ペインをメイン ウィンドウからドッキング解除する必要があることです。これが原因で、アプリケーションがメイン ウィンドウの背後にあるモーダル ダイアログでロックされることがあると考えられます。
変更後、次のように動作するはずです。
ユーザーはコンボボックスにテキストを入力し、以前と同様に SQL オンデマンドで検索を開始します。ただし、結果セットはコンボボックスに表示されます。したがって、使用中の古い SQL クエリが多数あり、現在は正常に動作しているため、可能であれば表示のみを変更したいと考えています。
Delphi 2007、Interbase 2009、および DevExpress のコンポーネントを使用しています。昨日、カスタムデータソースをコンボボックスに接続しようとしましたが、まだ実装されていませんでした。TcxExtLookupComboBox で TcxCustomDataSource を使用する方法を参照してください。カスタム データソースを使用して、行数とヒットの最大数を実装したいと考えています。上記のリストの 6 と 7 を参照してください。
だから今、私は2つのオプションが表示されます:
- DB 対応のコンボボックスを使用する
- テキストボックスを使用し、グリッドをアタッチして結果セットを表示します。
コンボボックスはコンポーネント全体であるためシンプルですが、上記のリストの機能 6 と 7 を実装する方法がわかりません。テキストボックス + グリッドは自由度が高くなりますが、より多くの作業が必要になります。
私は最初のオプションを好みます。現在の問題は次のとおりです。
- Interbase SQL は結果セットのヒット数を制限できないと思います。コードで行う必要があります。これは、DB 対応のコンボボックスでどのように行われますか?
- 結果セットに行番号を表示するにはどうすればよいですか?
更新 1: Marjan のおかげで、要件 7 が解決されました。6に関しては難しいと思います。理想的には SQL でそれが必要なので、Add row no のような独自の列を抽出できます。しかし、Interbase はそれをサポートしていません。