我用下面过程往oracle数据库插入数据是正常的,但是,如果往sql server2000数据库插入数据,执行到sql.Add('INSERT INTO ....时,却会死在那里,delphi没反应了,不知道为什么。
procedure TForm3.my_bc;
begin
    with adoquery1 do
       begin
         Close;
         sql.Clear;         if yes_or_no=true then
         begin
           sql.Clear;
           如果往sql server2000数据库插入数据,执行到下一句时,delphi没反应了,什么原因?
           sql.Add('INSERT INTO tianyi_list VALUES (:a1,:a2,:a3,:a4,:a5,:a6,:a7,');
           sql.Add(':a8,:a9,:a10,:a11,:a12,:a13,:a14,:a15,:a16,:a17,:a18)');
           parameters.ParamByName('a1').Value:=dls.Text;
           parameters.ParamByName('a2').Value:=zhongduan.Text;
           parameters.ParamByName('a3').Value:=shui_nbr.Text;
           parameters.ParamByName('a4').Value:=yucun.text;
           parameters.ParamByName('a5').Value:=butie.Text;
           parameters.ParamByName('a6').Value:=taocan.Text;
           parameters.ParamByName('a7').Value:=FormatdateTime('yyyymmdd',zj_date.DateTime);
           parameters.ParamByName('a8').Value:=bumen.Text;
           parameters.ParamByName('a9').Value:=fazhan.Text;
           parameters.ParamByName('a10').Value:=beizhu.Text;
           parameters.ParamByName('a11').Value:=Tcpclient1.localhostaddr;
           parameters.ParamByName('a12').Value:=FormatdateTime('yyyy-mm-dd hh:nn:ss',now);
           parameters.ParamByName('a13').Value:=v_gh_gh;
           parameters.ParamByName('a14').Value:=v_xm;
           parameters.ParamByName('a15').Value:='F0A';
           parameters.ParamByName('a16').Value:=hm.Text;
           parameters.ParamByName('a17').Value:=dz.Text;
           parameters.ParamByName('a18').Value:='';
           try
             execsql;
             shui_nbr.Text:='';
             shui_nbr.SetFocus;
           except
             ShowMessage('录入错误.');
             shui_nbr.SetFocus();
             Exit;
           end;
         end;
       end;
end;
如果改成这样却不会“死”,到底是什么原因?帮助我一下,谢谢!!!procedure TForm3.my_bc;
begin
    with adoquery1 do
       begin
         Close;
         sql.Clear;         if yes_or_no=true then
         begin
           sql.Clear;
           sql.Add('INSERT INTO tianyi_list VALUES (''1'',''2'',''3'',3,3,''6'',''20110501'',''8'',''9'',''测试'',''139.197.28.210'',''2011-05-20 08:00'',''0011'',''0011'',''FFF'',''0011'',''0011'',''1'')');
           try
             execsql;
             shui_nbr.Text:='';
             shui_nbr.SetFocus;
           except
             ShowMessage('录入错误.');
             shui_nbr.SetFocus();
             Exit;
           end;
         end;
       end;
end;

解决方案 »

  1.   

    在sql server2000里,为什么执行到这一句就死在那里了?而对于oracle却是正常的sql.Add('INSERT INTO tianyi_list VALUES (:a1,:a2,:a3,:a4,:a5,:a6,:a7,');
    sql.Add(':a8,:a9,:a10,:a11,:a12,:a13,:a14,:a15,:a16,:a17,:a18)');
      

  2.   

    我改成下面的样子后,执行到insert语句时不会死在那里了,但是,出现新的问题:提示“字符串数据,右截位”,我核对了表结构的字段长度和类型,长度是够的,类型也没错,不知道是什么原因     SQL.Add('Insert into tianyi_list([NAME_DLS],[TYPE_ZD],[ACC_NBR],[YUCUN],[BUTIE],[NAME_TC],');
               SQL.Add('[TIME_ZJ],[BUMEN],[FZR],[BEIZHU],[IPDZ],[TIME_LR],');
               SQL.Add('[GH_LURU],[XM_LURU],[STATE],[USER_NAME],[USER_ADDR],[LEIBIE_1])');
               SQL.Add('value(:a1,:a2,:a3,:a4,:a5,:a6,');
               SQL.Add(':a7,:a8,:a9,:a10,:a11,:a12,');
               SQL.Add(':a13,:a14,:a15,:a16;:a17;:a18)');
               parameters.ParamByName('a1').Value:='测试';//dls.Text;
               parameters.ParamByName('a2').Value:=测试';//zhongduan.Text;
               parameters.ParamByName('a3').Value:='测试';//acc_nbr.Text;
               parameters.ParamByName('a4').Value:='100';//yucun.text;
               parameters.ParamByName('a5').Value:='100';//butie.Text;
               parameters.ParamByName('a6').Value:='测试';//taocan.Text;
               parameters.ParamByName('a7').Value:='2011-05-01';//FormatdateTime('yyyymmdd',zj_date.DateTime);
               parameters.ParamByName('a8').Value:='测试';//bumen.Text;
               parameters.ParamByName('a9').Value:='测试';//fazhan.Text;
               parameters.ParamByName('a10').Value:='测试';//beizhu.Text;
               parameters.ParamByName('a11').Value:='114.177.123.222';//Tcpclient1.localhostaddr;
               parameters.ParamByName('a12').Value:='2011-05-20 08:00';//FormatdateTime('yyyy-mm-dd hh:nn:ss',now);
               parameters.ParamByName('a13').Value:='0021';//v_gh_gh;
               parameters.ParamByName('a14').Value:='测试';//v_xm;
               parameters.ParamByName('a15').Value:='M0A';
               parameters.ParamByName('a16').Value:='测试';//hm.Text;
               parameters.ParamByName('a17').Value:='测试';//dz.Text;
               parameters.ParamByName('a18').Value:='0';
      

  3.   

    不会太长,我特意用parameters.ParamByName('a14').Value:='测试';来测试,还是出现同样的错误,此时,我的数据库字段长度加到300,而“测试”二字才4个字节