我想在正在创建的框架中查看数据库表的记录,并且运行时包含用于显示此数据的标签
我不知道代码是什么 数据显示为重复。
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;`
答案 0 :(得分:1)
您的代码中存在多个问题。首先,将值分别分配给 return fac; //<-----should return value
和#include <stdio.h>
int checkiffactorial();
int factorial(int n);
int number;
int main()
{
int answer, n, i;
printf("Enter a number: ");
scanf("%d", &number);
answer = checkiffactorial();
if (answer == 1)
{
printf("It's a factorial");
}
else
{
printf("It's not a factorial");
}
}
int checkiffactorial()
{
static int whichnumber = 1;
int currnumber;
if (whichnumber > number)
{
return 0;
}
if(whichnumber <= number)
{
currnumber = factorial(whichnumber);
if (currnumber == number) //<----should check whether it's same with the number
{
return 1;
}
whichnumber++;
checkiffactorial();
}
}
int factorial(int n)
{
int i;
int fac=1; //<-----initialize this variable
for(i=1; i<=n; ++i)
{
fac = fac * i;
}
return fac; //<-----should return value
}
,然后对每个标签使用相同的值,而在分配之后忽略数据库中的任何内容。其次,您永远不要在循环中前进记录指针,这意味着它将以无限循环结束。第三,您正在遍历s
字段,但是从id
中读取值。第四,您不必要使用对FDTable1
的调用,而不是简单的FDQuery1
循环。最后,您在不应该释放的时候释放RecordCount
;您将while not Eof
分配为创建的控件的所有者,这意味着当滚动框被释放时,滚动框将释放它。
类似这样的方法对您来说会更好:
CartRow