TSQLQuery没有返回正确数量的记录

时间:2013-03-07 20:40:48

标签: delphi sqlite delphi-xe3 firemonkey-fm2

我有一个名为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;

以前的记录检索方法:

数据绑定Query1ComboBox1


使用“previous”方法,ComboBox1将显示Artist表中的所有预期记录。但是,当我尝试使用“当前”方法Query1时,只选择Artist表中的第一条记录,尽管还有其他三个现有值。我在其他查询中尝试了“当前”方法,它们也只返回表的第一个值。

我采用这种新方法的原因是因为我觉得如果我继续使用“上一个”/数据绑定方法,我的工作非常有限,但除了这一点之外。

那么我该如何解决这个问题呢?即查询问题只选择表中的第一条记录。

3 个答案:

答案 0 :(得分:8)

您必须使用EofNext方法迭代记录。

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开始......结束。

Navigating Datasets

我会考虑更改数据绑定字段以满足您的需求。 Delphi的数据绑定功能非常强大。手动迭代数据集只是为了填充控件只是可以隐藏错误的额外代码。利用工具的内置功能,它将更容易理解和维护。