delphi - 如何将项目从SQL查询添加到TListView

标签 delphi tlist

我想使用for循环将查询中的项目添加到TListView中。但是我在ListViewShifts.Items.Add()行中说“实际参数太多”时出错。从查询添加到列表的正确方法是什么?

  Qry := TFDQuery.Create(DBConnection);
  Qry.Connection := DBConnection;
  Qry.SQL.Text := 'SELECT Count(10) FROM Bookings WHERE NurseNo=:nurseID;';
  Qry.Params.ParamByName('nurseID').AsInteger := NurseID;
  Qry.Active := True;

  //Fill the list view with the shifts that have the nurses ID
  for Count := 0 to 10 do
  begin
    ListViewShifts.Items.Add(Qry.Fields[Count].AsString);
  end;

最佳答案

您需要考虑以下几点:


如果您的ListViewShifts变量是TListView,则方法ListViewShifts.Items.Add不需要参数。这是Too many actual parameters错误的原因。
SQL语句SELECT Count(10) FROM Bookings WHERE NurseNo=:nurseID;将返回仅包含一列的结果集。
如果要获取前10行,则您的语句可能应该是:SELECT TOP(10) FROM Bookings WHERE NurseNo=:nurseID;
使用FirstEofNext数据集方法从结果集中获取记录。


下一个基本示例显示了如何在TListView中添加10个项目:

procedure TMainForm.btnGet(Sender: TObject);
var
   li: TListItem;
begin

   Qry := TFDQuery.Create(DBConnection);
   Qry.Connection := DBConnection;
   Qry.SQL.Text := 'SELECT TOP(10) FROM Bookings WHERE NurseNo=:nurseID;';
   Qry.Params.ParamByName('nurseID').AsInteger := NurseID;
   Qry.Active := True;

   Qry.First; 
   for Count := 1 to 10 do
   begin
      Qry.Next;
      li := ListViewShifts.Items.Add;
      li.Caption := Qry.Fields[0].AsString;
   end;
   (*
   Qry.First;
   while not Qry.Eof do begin
      li := ListViewShifts.Items.Add;
      li.Caption := Qry.Fields[0].AsString;
      Qry.Next;
   end;
   *)
end;

关于delphi - 如何将项目从SQL查询添加到TListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54830183/

相关文章:

Delphi 2010 : Confusing generic type TList scenario? 按值传递还是引用传递?

delphi - 发送 self 不起作用

delphi - 泛型和 Marshal/UnMarshal。我在这里缺少什么?

delphi - 如何让 DBGrid 绘制 Yes/No 而不是 True/False

arrays - 包含动态数组的通用记录列表

delphi - 在 Delphi 中从 TList 开头删除大块项目的有效方法是什么

Delphi插入字符串时出现问题,类型不兼容错误

delphi - TControlState.csDesignerHide 与 TControlStyle.csNoDesignVisible

delphi - 使用尖括号(我见过有人使用 TList<PSomething>)

delphi - 在 Delphi 中分配和取消分配动态列表的最佳方法?