Question

I have a table called Artist which currently contains four records and a TSQLQuery that contains the following statement:

SELECT name
FROM Artist

The table Artist also contains the following records:

id          name
1           Artist 1
2           Artist 2
3           Artist 3
4           Artist 4

Current method of record retrieval:

Query1.Open;
for i := 0 to qArtist.FieldCount -1 do
    with cbArtist.ListBox.ListItems[i] do
        Text := qArtist.Fields[i].AsString;

Previous method of record retrieval:

Data bind Query1 to ComboBox1.


With the "previous" method, ComboBox1 would display all the expected records from the Artist table. However, when I try to use "current" method Query1 is only selecting the very first record from the Artist table despite there being three other existing values. I have tried the "current" method across other queries and they also returned only the first value of the table.

The reason I am going for this new approach is because I feel that I am very limited in what I can do if I continue to the "previous" / data bind method, but that is besides the point.

So how can I fix this problem? i.e. the problem of the query only selecting the very first record from the table.

Était-ce utile?

La solution

You must use the Eof and Next methods to iterate over the records.

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

Autres conseils

You code show an interaction over fields, if you need iterate all record then you must use a code like:

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;

I don't think you are navigating your query's dataset correctly. The FieldCount and Fields[i] access the field metadata (columns going across), not the rows. I beleive in Delphi you use While not Eof begin... end.

Navigating Datasets

I would consider altering the data binding fields to suit your needs. Delphi's Databinding is very powerful. Manually iterating the dataset just to populate a control will just be extra code where bugs can hide. Utilize the built-in capabilities of the tools and it will be easier to understand and maintain.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top