2

今は少しハッキーなので、検索を変更したいと思います。現在、次のように機能します。

  1. ユーザーは、 Volvoなどのテキストをテキスト ボックスに入力し、検索を開始します。
  2. Volvo を含むすべての投稿を SQL で検索します。
  3. 結果は、BoldID と DisplayValue の 2 つの列を持つリストです。
  4. BoldID は、データベース内のオブジェクトを識別するための一意の番号です。
  5. DisplayValue は、結果のリストでユーザーに表示されるものです。
  6. 結果セットの各行は、ユーザー リストの行番号で識別されます。最初は 1、2 番目は 2 などです。
  7. コードでクエリをループすることにより、意図的に最大 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 はそれをサポートしていません。

4

2 に答える 2

3

要件 6:

データベースの id 値が整数であると仮定すると、コントロールのタグまたはコンボボックス/リストボックス内の文字列のオブジェクトを使用して、id 値を格納できます。

【疑似コード】

while not eof do
  ComboBox.Items.AddObject(<DisplayText From Db>, TObject(<IntegerID from Db>));

そしてそれをそのように使う

id := Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]);

要件 7:

db 対応のコンボボックス/リストボックスを使用して、クエリ タイルまたは 99 行をループすることはできません。したがって、SQL に依存する必要があります。現在の SQL ステートメントを変更したくない場合でも、SQL の「TOP」機能を使用して行数を制限できます。例えば

SELECT TOP 99 FROM (<your original SQL>)

Interbase SQL では、次のフレーズを使用できます。

ROWS 1 TO 99 

order 句の直後 ( http://blogs.teamb.com/craigstuntz/dtpostname/ibsqlintro/の例を参照- ページのほぼ下部)

于 2010-08-04T06:56:51.903 に答える
2

Interbase には ROWS 句があり、明らかに目的に使用されます。

于 2010-08-04T06:55:05.150 に答える