使用DBComboBox而不是ComboBox的好处?

时间:2010-08-31 00:13:00

标签: delphi combobox components sql

所以我正在搞乱Delphi 2009中的一个新项目,可以删除到用于访问数据的表单的默认组件包括SQLConnection,DataSource和SQLQuery。如果我向查询组件添加一个简单的选择,请说:

select name from customers

然后在表单上放一个DBComboBox并将其与DataSource链接我在组合框中得到一条记录。在使用谷歌一半和一小时来弄清楚我做错了什么之后,看起来你必须手动为项目添加一些代码,这些代码循环遍历数据集并将所有记录添加到下拉框中。类似的东西:

while not SQLQuery.eof do
begin
  DBComboBox.items.add(SQLQuery.fieldbyname('name').asstring);
  SQLQuery.next;
end; 

这实际上是有效的,但是你在下拉列表中得到一个列表,你实际上无法从中选择任何东西。无论结果如何,但我想知道为什么你甚至要使用DBComboBox,如果你必须手动添加查询结果呢?在我看来,如果它没有自动使用查询结果填充db组合框,那么我们也可能使用像tcombobox这样的非数据感知组件。

我想我问的是为什么它会这样运作?数据感知拖放控件的目的不是最小化实际编写的代码量和加速开发吗?是否有一种我错过的方法可以使这更容易?

3 个答案:

答案 0 :(得分:11)

TDBComboBox没有从数据库中获取值列表;它从数据库中获取当前值。将其链接到数据集中的字段,当您更改活动记录时,组合框的当前值将更改。更改组合框的当前值,相应字段的值将更改。

如果你想从数据库中获取值列表,那么使用TDBLookupComboBox。

这些都包含在帮助中:

答案 1 :(得分:4)

我认为你想要TDBLookupComboBox,因为它允许你从列表来自数据集的项目列表中查找。

在TDBComboBox中,列表只是一个手工填充数据的TStrings。

- 的Jeroen

答案 2 :(得分:-1)

DbCombox是标准组合框组件的dbaware版本。