У вас есть несколько проблем в вашем коде.Сначала вы присваиваете значения s
и id
один раз, а затем используете те же значения для каждой метки, игнорируя что-либо в базе данных после этого назначения.Во-вторых, вы никогда не продвигаете указатель записи в вашем цикле, что означает, что он окажется в бесконечном цикле.В-третьих, вы просматриваете поля FDTable1
, но читаете значения из FDQuery1
.В-четвертых, вы без необходимости используете вызов RecordCount
вместо простого цикла while not Eof
.И, наконец, вы освобождаете CartRow
, когда это не должно быть free'd;вы назначаете 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;