Myquery.SQL.Add('insert into #lsrkm values(''+lshh+'','''+lsrbh+''','''+lsbh+''',''+lssl+'',''+lszk+'')');
我创建表时用的是:
create table #lsrkm(Hh int,Rbh char(12),Bh char(5),sl int,zk int)
能正常执行。
但运行到最上面那条语句时,被提示"将varchar值'+lszk+'转换为数据类型为int的列时发生语法错误"
请问为什么?
变量类型如下
lsbh:string;         
lsrbh:string;       
lshh:integer;        
lssl:integer;          
lszk:integer;

解决方案 »

  1.   

    用参数,
    adoquery.sql.add('insert into #lsrkm values(:lshh,:lsrbh,:lsrbh,:lssl,:lszk)')
    adoquery1.Parameters.ParamByName('lshh').value :=lshh;
    adoquery1.Parameters.ParamByName('lsrbh').value :=lsrbh;
    adoquery1.Parameters.ParamByName('lsrbh').value :=lsrbh;
    adoquery1.Parameters.ParamByName('lssl').value :=lssl;
    adoquery1.Parameters.ParamByName('lszk').value :=lszk;
    try
      excesql;
    except
    end;
      

  2.   

    Myquery.SQL.Add('insert into #lsrkm values('+lshh+','''+lsrbh+''','''+lsbh+''','+lssl+','+lszk+')');
      

  3.   

    Myquery.SQL.Add(xxx);xxx是字符串类型,因此,lshh;  lssl;  lszk;需转换如下:
    Myquery.SQL.Add('insert into #lsrkm values(''+lshh+'','''+lsrbh+''','''+inttostr(lsbh)+''',''+inttostr(lssl)+'',''+inttostr(lszk)+'')');
      

  4.   

    忘了要转一下,不过boz(波)的也有问题
    两个单引号并在一起肯定是错
    综合一下
    Myquery.SQL.Add('insert into #lsrkm values('+inttostr(lshh)+','''+lsrbh+''','''+lsbh+''','+inttostr(lssl)+','+inttostr(lszk)+')');