3

Artist現在 4 つのレコードを含むという名前のテーブルと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


「前の」方法でComboBox1は、テーブルから予想されるすべてのレコードが表示されArtistます。ただし、「現在の」メソッドを使用しようとすると、他に 3 つの既存の値があるにもかかわらず、テーブルQuery1から最初のレコードのみが選択されます。Artist他のクエリで「現在の」メソッドを試しましたが、テーブルの最初の値のみが返されました。

私がこの新しいアプローチを取る理由は、「前の」/データ バインド方法を続けるとできることが非常に限られていると感じているためですが、それは問題ではありません。

では、どうすればこの問題を解決できますか? つまり、テーブルから最初のレコードのみを選択するクエリの問題です。

4

3 に答える 3

8

EofメソッドとNextメソッドを使用して、レコードを反復処理する必要があります。

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 を信じていますが、Eof begin... end ではありません。

データセットのナビゲート

ニーズに合わせてデータ バインディング フィールドを変更することを検討します。Delphi のデータバインディングは非常に強力です。コントロールに入力するためだけにデータセットを手動で反復することは、バグが隠れる可能性のある余分なコードになります。ツールの組み込み機能を利用すると、理解と保守が容易になります。

于 2013-03-07T20:46:47.810 に答える