我的表tb_abc中字段很多,由于ADOQuery1.SQL.text中的内容有限制,不能超过255个字符,所以我只能用ADOQuery1.SQL.Add('')一行一行添加sql语句,代码举例如下:
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(' insert into TB_abc( ');
ADOQuery1.SQL.Add('aa,');
ADOQuery1.SQL.Add('bb,');
ADOQuery1.SQL.Add('cc');
ADOQuery1.SQL.Add(')');
ADOQuery1.SQL.Add(' values ');
ADOQuery1.SQL.Add(' ( ');
ADOQuery1.SQL.Add(':aa,');
ADOQuery1.SQL.Add(':bb,');
ADOQuery1.SQL.Add(':cc');
ADOQuery1.SQL.Add(' ) ');
ADOQuery1.Parameters.ParamByName('aa').Value:=trim(Edit1.Text);
ADOQuery1.Parameters.ParamByName('bb').Value:=trim(Edit2.Text);
ADOQuery1.Parameters.ParamByName('cc').Value:=trim(Edit3.Text);
ADOQuery1.ExecSQL;
此时系统提示:
+++++++++++++++++
abc.exe raised exception class EOLeException with massage '[DB2/NT] SQL0104N 在") values (?"之后发现意外的标记","。期望的标记可能包括:")"。……
+++++++++++++++++
不知道是不是参数后面的","有问题。但是如果将参数写到一行里就没问题了,如下:
ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(' insert into TB_abc( ');
ADOQuery1.SQL.Add('aa,');
ADOQuery1.SQL.Add('bb,');
ADOQuery1.SQL.Add('cc');
ADOQuery1.SQL.Add(')');
ADOQuery1.SQL.Add(' values ( :aa,:bb,:cc ) ');
ADOQuery1.Parameters.ParamByName('aa').Value:=trim(Edit1.Text);
ADOQuery1.Parameters.ParamByName('bb').Value:=trim(Edit2.Text);
ADOQuery1.Parameters.ParamByName('cc').Value:=trim(Edit3.Text);
ADOQuery1.ExecSQL;
不知什么原因?

解决方案 »

  1.   

    可能分开写它就不认识这个语句了吧。
    你吧values和( 写到一行里试试,看看还有没有问题。
      

  2.   

    呵呵,我写完一条SQL如果不确定时我会在后面加一句:showmessage(adoquery1.sql.text)验证一下
      

  3.   

    to:janezjtjdx(<-_->我是女生......秋秋)
    ADOQuery1.SQL.Add(' values ( :aa,:bb,:cc ) ');这样写就没问题,与括号的位置没关系,但是这样写就出错:
    ADOQuery1.SQL.Add(' values( ');
    ADOQuery1.SQL.Add(':aa,');
    ADOQuery1.SQL.Add(':bb,');
    ADOQuery1.SQL.Add(':cc) ');
    我感觉主要是参数后面的“逗号”;
    如果写成:
    ADOQuery1.SQL.Add(' values( ');
    ADOQuery1.SQL.Add(':aa,:bb,');
    ADOQuery1.SQL.Add(':cc) ');
    那ADOQuery1.SQL.Add(':cc) ');这一行就报错,出错原因同上。to:zhangl_cn(不做和尚了!)
    showmessage(adoquery1.sql.text)我用过了,就是一行一回车,没什么问题。各位再帮忙想想。
      

  4.   

    to:zhangl_cn(不做和尚了!)
    我用memo1.Text:= ADOQuery1.SQL.Text;得到结果如下:
    ++++++++++++++++++++++++++
    insert into TB_abc(
    aa,
    bb,
    cc
    )
    values
    (
    :aa,
    :bb,
    :cc
    )
    +++++++++++++++++++++++++++
      

  5.   

    SQL语句的错误ADOQuery1.Active:=false;
    ADOQuery1.SQL.Clear;
    SQLStr:=' insert into TB_abc( ';SQLStr:=SQLStr+'aa,';
    SQLStr:=SQLStr+'bb,';
    SQLStr:=SQLStr+'cc';
    SQLStr:=SQLStr+')';
    SQLStr:=SQLStr+' values ';
    SQLStr:=SQLStr+' ( ';
    SQLStr:=SQLStr+':aa,';
    SQLStr:=SQLStr+':bb,';
    SQLStr:=SQLStr+':cc';
    SQLStr:=SQLStr+' ) ';
    //这里输出一下SQL语句看看,拿到数据库执行试试
    ADOQuery1.SQL.Add(SQLStr);另外没有必要分这么多行
      

  6.   

    to: hellolongbin(一个人[年长资深少男]) 
    我的表tb_abc中字段很多(上面只是象征性的列举几个),由于ADOQuery1.SQL.text中的内容有限制,“每行”不能超过255个字符,如果像你这样写,字段少可以,但是字段多就出错了。
      

  7.   

    to: hellolongbin(一个人[年长资深少男]) 
    我的表tb_abc中字段很多(上面只是象征性的列举几个),由于ADOQuery1.SQL.text中的内容有限制,“每行”不能超过255个字符,如果像你这样写,字段少可以,但是字段多就出错了。//////////////////////////////////////////字段多了出错,可能是引号,空格造成的问题,细心点应该可以克服的
      

  8.   

    顶刚才那位说用showmessage的同学。。
    习惯用这种方式检测/