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;`
您的代码中存在多个问题。首先,将值分配给 s
和 id
一次,然后对每个标签使用相同的值,在分配后忽略数据库中的任何内容。其次,您永远不会在循环中推进记录指针,这意味着它将以无限循环结束。第三,您正在遍历 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;
我想在正在创建的框架中查看数据库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;`
您的代码中存在多个问题。首先,将值分配给 s
和 id
一次,然后对每个标签使用相同的值,在分配后忽略数据库中的任何内容。其次,您永远不会在循环中推进记录指针,这意味着它将以无限循环结束。第三,您正在遍历 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;