我的表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;
不知什么原因?
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;
不知什么原因?
你吧values和( 写到一行里试试,看看还有没有问题。
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)我用过了,就是一行一回车,没什么问题。各位再帮忙想想。
我用memo1.Text:= ADOQuery1.SQL.Text;得到结果如下:
++++++++++++++++++++++++++
insert into TB_abc(
aa,
bb,
cc
)
values
(
:aa,
:bb,
:cc
)
+++++++++++++++++++++++++++
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);另外没有必要分这么多行
我的表tb_abc中字段很多(上面只是象征性的列举几个),由于ADOQuery1.SQL.text中的内容有限制,“每行”不能超过255个字符,如果像你这样写,字段少可以,但是字段多就出错了。
我的表tb_abc中字段很多(上面只是象征性的列举几个),由于ADOQuery1.SQL.text中的内容有限制,“每行”不能超过255个字符,如果像你这样写,字段少可以,但是字段多就出错了。//////////////////////////////////////////字段多了出错,可能是引号,空格造成的问题,细心点应该可以克服的
习惯用这种方式检测/