3

我有一个名为的表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我已经在其他查询中尝试了“当前”方法,它们也只返回了表的第一个值。

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

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

4

3 回答 3

8

您必须使用EofandNext方法来遍历记录。

Query1.Open;
 while not Query1.eof do
 begin
  cbArtist.Items.Add(Query1.FieldByName('Artist').AsString);
  Query1.Next;
 end;
于 2013-03-07T20:52:03.453 回答
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;
于 2013-03-07T20:52:38.733 回答
0

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

导航数据集

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

于 2013-03-07T20:46:47.810 回答