2010-08-04 64 views
2

我想改變我們的搜索,因爲它現在有點怪異。 目前,它的工作原理是這樣的:在組合框中列出搜索結果

  1. 用戶在文本框中輸入文本,例如沃爾沃並開始搜索。
  2. 此搜索SQL包含沃爾沃的所有文章。
  3. 結果是一個帶有2列BoldID和DisplayValue的列表。
  4. BoldID只是一個唯一的數字來標識數據庫中的對象。
  5. DisplayValue是用戶在結果列表中看到的內容。
  6. 結果集中的每一行都用用戶列表中的行號標識。第一個是1,第二個是2,依此類推。
  7. 還有一個限制,即只通過在代碼中循環查詢來按意圖顯示最多99次點擊。有一個查詢返回很多匹配是不好的,因爲它在用戶匹配列表中沒有更多的意義。在這種情況下,搜索應該更具體。

結果列表顯示在名爲rightpane的單獨全局窗口中。 hacky的一部分是,如果從模態對話框中搜索,則右窗格必須從主窗口中取消鎖定才能使用鼠標選擇一個值。我們懷疑這可能是應用程序有時會使用主窗口背後的模式對話框鎖定自己的原因。

變化後,它會像這樣工作:

用戶在組合框輸入文字,並開始與像以前那樣需要SQL搜索。但結果集顯示在組合框中。所以我只想改變顯示,如果可能的話,因爲有很多舊的SQL查詢正在使用,並且現在工作正常。

我們使用Delphi 2007,Interbase 2009和DevExpress的組件。昨天我試圖將一個customdatasource連接到一個組合框,但我意識到這還沒有實現。見How to use a TcxCustomDataSource in a TcxExtLookupComboBox。我想使用自定義數據源來實現行號和最大點擊次數。上面列表中的第6和第7條。

所以,現在我看到2個選項:

  • 使用DB-感知組合框
  • 使用一個文本框,並附上一個網格,它顯示的結果集。

組合框更簡單,因爲它是一個整體組件,但我不知道如何從上面的列表中實現功能6和7。 文本框+網格給予更多的自由,但需要更多的工作。

我更喜歡第一個選項。目前的問題是:

  • 我認爲Interbase SQL不能限制結果集中的命中數量。它必須用代碼完成。這是如何完成一個數據庫感知組合框?
  • 如何在結果集中顯示行號?

更新1: 要求7解決由於馬裏安,謝謝。 至於6我認爲這是更難。理想情況下,我需要SQL,因此我可以提取自己的列,如Adding row no。但Interbase不支持這一點。

+0

這真的是越來越而不是一個問題 - 將它分開可能是一件好事。 – Tobiasopdenbrouw 2010-08-04 06:54:19

回答

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感知組合框/列表框通過查詢直到EOF或99行循環出去了。所以你需要依靠SQL。即使您不想更改任何當前的SQL語句,也可以使用SQL的「TOP」功能來限制行數。例如

SELECT TOP 99 FROM (<your original SQL>) 

在Interbase的SQL,你可以用這個短語:只是爲了條款後

ROWS 1 TO 99 

(見例如在http://blogs.teamb.com/craigstuntz/dtpostname/ibsqlintro/ - 頁面幾乎底部)

+0

感謝您的行語法。我不知道,真的有用! 我給你的信貸,並創建一個關於nr 6的新問題。 – 2010-08-04 09:25:40

+0

Roland,是你的「關於nr 6的新問題」[從Interbase生成行號](http://stackoverflow.com/questions/3405723)問你只是問?您並不需要在Interbase中做任何特殊的事情。 Marjan向你展示了一個循環,你可以從你的查詢中讀取結果並將它們添加到組合框中。在添加它們時,增加一個計數器,並在添加每個項目時將該計數器的值包含在文本字符串中。您可能認爲,既然您使用的是數據庫,則需要使用支持數據庫的控件,但事實並非如此。普通的非數據庫組合框可以正常工作。 – 2010-08-04 15:04:46

+0

是的,它似乎不是一個簡單的方法來從SQL生成行號。我必須評估選項,包括使用一個簡單的組合框的名單。 – 2010-08-05 07:12:35