delphi vcl - 如何在标签中设置数据库 table 的值?

delphi vcl - How do I set the values of a database table in a Label?

我想在正在创建的框架中查看数据库table的记录并且运行时间包含显示此数据的标签

我不知道密码是什么 数据出现重复。

procedure TForm3.Button1Click(Sender: TObject);
var
  cartRow: TFrm;
  lin :SmallInt;
  posX,posY : SmallInt;
  s , id: string;
  i : Integer;
begin
  ScrollBox1.DestroyComponents;
  s := FDQuery1.FieldByName('CountryAr').AsString;
  id:= FDQuery1.FieldByName('CountryID').AsString;
  posX := 0;
  posY := 0;
  for lin := 0 to FDTable1.RecordCount - 1 do
  begin
    cartRow := TFrm.Create(ScrollBox1);
    cartRow.Parent :=ScrollBox1;
    cartRow.Name := '';
    cartRow.Left := posX -1;
    cartRow.Top := posY -1;
    cartRow.Label1.Caption := (s);
    cartRow.Label2.Caption :=(id);
    cartRow.Width := (ScrollBox1.Width) -3;
    cartRow.Height := 35;
    posY := posY + cartRow.Height +1;
  end;
  cartRow.Free;`

您的代码中存在多个问题。首先,将值分配给 sid 一次,然后对每个标签使用相同的值,在分配后忽略数据库中的任何内容。其次,您永远不会在循环中推进记录指针,这意味着它将以无限循环结束。第三,您正在遍历 FDTable1 个字段,但从 FDQuery1 中读取值。第四,您不必要地使用了对 RecordCount 的调用,而不是简单的 while not Eof 循环。最后,当 CartRow 不应该被释放时,你释放了它;您将 ScrollBox1 指定为创建的控件的所有者,这意味着滚动框将在滚动框空闲时释放它。

像这样的东西对你来说会更好:

procedure TForm3.Button1Click(Sender: TObject);
var
  cartRow: TFrm;
  posX,posY : SmallInt;
begin
  ScrollBox1.DestroyComponents;
  posX := 0;
  posY := 0;
  FDQuery1.First;
  while not FDQuery1.Eof do
  begin
    cartRow := TFrm.Create(ScrollBox1);
    cartRow.Parent := ScrollBox1;
    cartRow.Left := posX - 1;
    cartRow.Top := posY - 1;
    cartRow.Label1.Caption := FDQuery1.FieldByName('CountryAr').AsString;
    cartRow.Label2.Caption := FDQuery1.FieldByName('CountryID').AsString;
    cartRow.Width := ScrollBox1.Width - 3;
    cartRow.Height := 35;
    posY := posY + cartRow.Height + 1;
    FDQuery1.Next;
  end;
end;