我有一个名为Artist
的表,其中包含四个记录和一个包含以下语句的TSQLQuery
:
SELECT name
FROM Artist
表格Artist还包含以下记录:
id name
1 Artist 1
2 Artist 2
3 Artist 3
4 Artist 4
当前的记录检索方法:
Query1.Open;
for i := 0 to qArtist.FieldCount -1 do
with cbArtist.ListBox.ListItems[i] do
Text := qArtist.Fields[i].AsString;
以前的记录检索方法:
数据绑定Query1
到ComboBox1
。
使用“previous”方法,ComboBox1
将显示Artist
表中的所有预期记录。但是,当我尝试使用“当前”方法Query1
时,只选择Artist
表中的第一条记录,尽管还有其他三个现有值。我在其他查询中尝试了“当前”方法,它们也只返回表的第一个值。
我采用这种新方法的原因是因为我觉得如果我继续使用“上一个”/数据绑定方法,我的工作非常有限,但除了这一点之外。
那么我该如何解决这个问题呢?即查询问题只选择表中的第一条记录。
答案 0 :(得分:8)
Query1.Open;
while not Query1.eof do
begin
cbArtist.Items.Add(Query1.FieldByName('Artist').AsString);
Query1.Next;
end;
答案 1 :(得分:1)
您的代码显示字段上的交互,如果您需要迭代所有记录,那么您必须使用如下代码:
Query1.Open;
Query1.first;
while not Query1.eof do
begin
with cbArtist.ListBox.ListItems[i] do
Text := qArtist.Fields[1].AsString; //put here field you want to bind on ListBox.
Query1.next;
end;
答案 2 :(得分:0)
我认为您没有正确浏览查询的数据集。 FieldCount和Fields [i]访问字段元数据(遍历的列),而不是行。我在Delphi中相信你使用而不是Eof开始......结束。
我会考虑更改数据绑定字段以满足您的需求。 Delphi的数据绑定功能非常强大。手动迭代数据集只是为了填充控件只是可以隐藏错误的额外代码。利用工具的内置功能,它将更容易理解和维护。