Chcę dodać przedmioty z zapytania do TListview za pomocą pętli. Ale dostaję błąd mówiąc "zbyt wiele rzeczywistych parametrów" z ListViewShifts.items.add () linii. Jaki jest właściwy sposób dodawania do listy z zapytania?

  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;
1
Wiliam Cardoso 22 luty 2019, 18:21

2 odpowiedzi

Najlepsza odpowiedź

Musisz wziąć pod uwagę następujące kwestie:

  • Jeśli zmienna ListViewShifts jest TListView, metoda ListViewShifts.Items.Add nie oczekuje parametrów. To jest powód błędu Too many actual parameters.
  • Oświadczenie SQL SELECT Count(10) FROM Bookings WHERE NurseNo=:nurseID; powróci zestaw wyników tylko jedną kolumną.
  • Jeśli chcesz uzyskać pierwsze 10 wierszy, prawdopodobnie twoje oświadczenie powinno być: SELECT TOP(10) FROM Bookings WHERE NurseNo=:nurseID;
  • Użyj First, Eof i Next Metody DataSet, aby pobrać rekordy z zestawu wyników.

Następny podstawowy przykład pokazuje, jak dodać 10 pozycji w swoim {x0}}:

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;
3
Zhorov 23 luty 2019, 10:05
   VAR
   SY1:INTEGER;
   mydata:string;
   begin
   mydata:='mydatabasename';
   qry_tables.Close;
   qry_tables.SQL.Clear;
   qry_tables.SQL.text:= 'SELECT TABLE_NAME NAME FROM information_schema.TABLES       WHERE TABLE_SCHEMA = '+QuotedStr(mydata);
   qry_tables.Open;

   ListViewShifts.Clear;
   for SY1 := 1 to qry_tables.RecordCount do
    begin
     ListViewShifts.Items.Add(qry_tables.FieldByName('NAME').TEXT);
     qry_tables.NEXT;
    end;

Użyłem MySQL.

1
Güney Uzun 22 luty 2019, 16:00