我在程序中动态生成一条insert命令,然后用tadoquery对象执行  adoquery.sql.add(insertsql);
  ret := adoquery.execsql;在执行execsql会出现“不正常地定义参数对象”的错误,后来调试的时候发现,如果insertsql小于255字符就没有问题。请问当sql语句大于255字符,要如何执行呢?

解决方案 »

  1.   

    会有那么长的SQL? 那就别用insert语句 用个数据集打开表 然后用ADO的insert方法
      

  2.   

    这是出错的sql,请帮忙看一下。数据库是sybase,这个sql用pb在数据库上已经运行过,可以用。
    INSERT INTO stts (utsc,zczx,yuls,uvsx,ylsm,gsdw,gssp,xdtd,zsdf,faq,note)  VALUES('2003-12-07 14:07:20','INVERT',' ','3552012300','35012299933','52012301',' ',' ','INSERT INTO sys_config_sims (netid,idate,sno,name,uno,note) VALUES ("5201236000000021","2003-12-07 00:00:00.00","0001","福建省xx县xx实业有限责任公司","01001","")','32010000',NULL)
      

  3.   

    你有辆条完整的Insert语句,每次只执行一条就没问题啦!
      

  4.   

    现在发现不是超过字符的原因,如果把出错的sql里的双引号都删除就可以运行。双引号应该不是特殊字符啊?!
      

  5.   

    在Delphi中(说起来与开发工具没关系,但其实有影响的),双引号是不能用在SQL语句中的.
    第二,实际上,在你的SQL语句中,有的字段值为空,那么你根本就可以不管这些字段,或者,你要给所有字段赋值,那into xxx[(...)]中,[]及其中的所有字符都可以不要,以减少SQL语句的复杂性.
      

  6.   

    谢谢volkia,我已经把双引号改成单引号。那么如果用户输入的字符包括双引号要怎么解决呢,是否一定要转换?希望继续讨论。
      

  7.   

    如果输入的数据中包含双引号,就看代表什么了,如果代表双引号本身(一个特殊的字符),那你把它当成一个字符就完了嘛,用'“”';如果用户想用这个双引号来代表中间的是一个字符串,如["abc"],那么,这个时候恐怕你得在程序中把这个双引号转成单引号,或把它去掉了,只取其中的[abc]来供你使用。