Delphi TSQLQuery未返回正确数量的记录

Delphi TSQLQuery未返回正确数量的记录,delphi,sqlite,delphi-xe3,firemonkey-fm2,Delphi,Sqlite,Delphi Xe3,Firemonkey Fm2,我有一个名为Artist的表,该表当前包含四条记录和一个TSQLQuery,其中包含以下语句: SELECT name FROM Artist 表格艺术家还包含以下记录: id name 1 Artist 1 2 Artist 2 3 Artist 3 4 Artist 4 当前的记录检索方法: Query1.Open; for i := 0 to qArtist.FieldCount -1

我有一个名为
Artist
的表,该表当前包含四条记录和一个
TSQLQuery
,其中包含以下语句:

SELECT name
FROM 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.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
表中选择第一条记录,尽管还有三个其他现有值。我在其他查询中尝试了“current”方法,它们也只返回表的第一个值

我之所以选择这种新方法,是因为我觉得如果继续使用“先前的”/“数据绑定”方法,我所能做的事情非常有限,但这不是重点


那么我如何解决这个问题呢?i、 e.查询仅从表中选择第一条记录的问题。

我认为您没有正确导航查询的数据集。FieldCount和Fields[i]访问字段元数据(跨列),而不是行。我相信你在Delphi中使用而不是Eof begin。。。结束

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

您必须使用和方法对记录进行迭代

Query1.Open;
 while not Query1.eof do
 begin
  cbArtist.Items.Add(Query1.FieldByName('Artist').AsString);
  Query1.Next;
 end;

代码显示字段间的交互,如果需要迭代所有记录,则必须使用如下代码:

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;

与其说是回答,不如说是评论?我只是不知道数据绑定有多强大。那我最好开始研究。谢谢你的回答!这段代码比我计划编写的要简单得多。在运行时为ComboBox动态创建TTabItems?我在想什么。。。但是谢谢你的回答!