2010-08-31 69 views
3

所以我搞乱了Delphi 2009中的一个新项目,并且可以通过SQLConnection,DataSource和SQLQuery将默认组件拖放到表单中以访问数据。如果我添加一个简单的选择到查询组件,说:在CombBox上使用DBComboBox的好处?

select name from customers 

,然后在表单上放一个DBComboBox,并与数据源我得到在组合框中的一条记录链接起来。在使用Google一半和一小时来弄清楚我做错了什么之后,看起来您必须手动向您的项目中添加一些代码,这些代码循环访问数据集并将所有记录添加到下拉框中。喜欢的东西:

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

而实际上这类作品,但你得到的下拉你不能真正选择什么列表。不管结果如何,但我想知道为什么如果您必须手动将查询结果添加到它,为什么还要使用DBComboBox?在我看来,如果它不会自动用查询结果填充数据库组合框,那么我们可能会使用像tcombobox这样的非数据感知组件。

我想我问的是为什么它以这种方式工作?数据感知的拖放控件的目的不是为了最大限度地减少实际编写的代码和开发速度?有没有一种方法可以让我更容易?

回答

11

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

如果您还想从数据库中获取值列表,请使用TDBLookupComboBox。

这涵盖的所有帮助:

+0

感谢罗布,澄清它。完全无关,但我的帮助文件以某种方式被歼灭时,我安装MS Visual Studio的另一个项目(在C#)..还没有想出如何让我的Delphi帮助文件还没有。但这是另一个线索的讨论。 – Rafe 2010-08-31 19:06:14

4

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

在TDBComboBox中,列表仅仅是手动填充数据的TStrings。

--jeroen

-1

DbCombox是标准组合框组件的数据感知版本。