Delphi vcl - Как мне установить значения таблицы базы данных в метке? - PullRequest
0 голосов
/ 28 октября 2018

Я хочу просмотреть записи таблицы базы данных в создаваемом фрейме, и среда выполнения содержит метку для отображения этих данных.

Я не знаю, какой код. Данные выглядят дублированными.

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;`

image

1 Ответ

0 голосов
/ 28 октября 2018

У вас есть несколько проблем в вашем коде.Сначала вы присваиваете значения 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;
...