我用delphi7和sql server2000连接数据库,有如下代码:
procedure TForm3.FormCreate(Sender: TObject);
  var i : integer;
  var sEdit : TEdit;
begin
  for i:= 1 to colnumber do
  begin
    sedit := TEdit.Create(self);
    sedit.parent:=self;
    sEdit.Name :='cEdit'+IntToStr(i);
    sedit.Width:=100;
    sedit.Top:=20*i;
  end;
end;procedure TForm3.Button1Click(Sender: TObject);
  var i : integer;
begin
  datamodule2.ADOQuery1.Close;
  datamodule2.ADOQuery1.SQL.Clear;
  datamodule2.ADOQuery1.sql.Add('insert into ' + lname);  for i:=1 to colnumber do
  begin
  datamodule2.ADOQuery1.SQL.Add('values(:a)');
  datamodule2.ADOQuery1.Parameters.ParamByName('a').Value:=(FindComponent('cEdit'+IntToStr(i)) as TEdit).Text ;
  end;  datamodule2.ADOQuery1.Prepared:=true;
  datamodule2.ADOQuery1.ExecSQL;  form3.Visible:=false;
end;
其中lname和colnumber是从form1窗体传来的表的名字和此表的列数,这个窗体是  form3窗体,先动态创建了文本框,然后通过单击按钮把文本框中输入的内容插入表中。可是执行for循环的时候像死机了一样,特别慢,感觉是进入了死循环,其实  colnumber的值才为5!
请问大家这是怎么回事,能帮小弟解决一下吗?

解决方案 »

  1.   

    procedure TForm3.Button1Click(Sender: TObject);
      var i : integer;
    begin
      for i:=1 to colnumber do
      begin
      datamodule2.ADOQuery1.Close;
      datamodule2.ADOQuery1.SQL.Clear;
      datamodule2.ADOQuery1.sql.Add('insert into ' + lname);  datamodule2.ADOQuery1.SQL.Add('values(:a)');
      datamodule2.ADOQuery1.Parameters.ParamByName('a').Value:=(FindComponent('cEdit'+IntToStr(i)) as TEdit).Text ;
      end;  datamodule2.ADOQuery1.Prepared:=true;
      datamodule2.ADOQuery1.ExecSQL;  form3.Visible:=false;
    end;
      

  2.   

    不晓得,放到线程里吧。TThread.
      

  3.   

    for i:=1 to colnumber do
      begin
      datamodule2.ADOQuery1.SQL.Add('values(:a)');1:好像要屏蔽上边那句,这样会SQL脚本会加多次;
    2:多次加这个参数“:a”,大概会出错。