我想改变我们的搜索,因为它现在有点hacky。 目前它的工作原理如下:
结果列表显示在名为rightpane的单独全局窗口中。 hacky部分是,如果从模态对话框中搜索,则必须从主窗口取消右侧窗格以便能够使用鼠标选择值。我们怀疑这可能是应用程序有时会锁定主窗口后面的模式对话框的原因。
更改后应该像这样工作:
用户在Combobox中输入文本,并像以前一样开始按需搜索SQL。但结果集显示在组合框中。所以我只想在可能的情况下更改显示,因为有很多旧的SQL查询正在使用并且现在正常工作。
我们使用Delphi 2007,Interbase 2009和DevExpress的组件。昨天我尝试将customdatasource连接到组合框,但我意识到这还没有实现。见How to use a TcxCustomDataSource in a TcxExtLookupComboBox。我想使用自定义数据源来实现行数和最大命中数。上面列表中的Se 6和7。
现在我看到两个选项:
组合框更简单,因为它是一个完整的组件,但我不知道如何从上面的列表中实现功能6和7。 文本框+网格提供了更多自由,但需要更多工作。
我更喜欢第一种选择。目前的问题是:
更新1: 感谢Marjan解决了要求7的问题。 至于6我觉得它更难。理想情况下,我希望它在SQL中,所以我可以提取像Adding row no这样的自己的列。但Interbase不支持这一点。
答案 0 :(得分:3)
要求6:
假设db的id值是一个整数,你可以使用控件的标签或组合框/列表框中字符串的Object来存储id值。
[伪代码]
while not eof do
ComboBox.Items.AddObject(<DisplayText From Db>, TObject(<IntegerID from Db>));
并像这样使用
id := Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]);
要求7:
使用数据库感知组合框/列表框循环查询直到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/的示例 - 几乎是页面的底部)
答案 1 :(得分:2)