昨天把程序跑到英文的操作系统中试运行,结果出现数据库异常,而在中文的操作系统中正常。
数据库异常症状如下,
  问题出在一个Insert 语句中,第一次通过(实际没有写入数据到数据库中),第二次异常报告 “Connection Failed”,查看ADOConnection的Connected的属性正常。
特殊情形:在要Insert的表中有个SmallInt属性的字段。而后是几个足够长度的Varchar
SQL语句如下.
  SQL.Add('Insert Into Log Values (:ID, :Result, :Name)');
  Parameters[0].Value := 3;      //SmallInt
  Parameters[1].Value := 'fasgfas';  //200长度的Varchar
  Parameters[2].Value := 'fasdfasgfas';  //200长度的Varchar
  
情况:在Parameters[1]或者Parameters[2]中的字符串写入超过一定长度(本人测是35左右),就出现以上异常。如果把Parameters.Value都去除,直接用SQL.Add加入各个参数值,正确。唉,百思不得其解。  
希望大侠们解惑。

解决方案 »

  1.   

    我不知道是由于SmallInt的原因,还是Value的原因。
    只是听说过用Parameters.Value会出现一些问题,
    但如果我不知道为什么,下回自己还是会犯错的。
    所以希望解决。最好能够尽快啊。
    因为英文的操作环境在一段时间后为移走。
      

  2.   

    你改用试试
    ParamByName('Name').AsString=''
      

  3.   

    Parameters[0].Value := 3;
    这样的代码改成:Parameters.ParamByName('P_Name').AsInteger := 3;
    也就是说,你的参数的数据类型如果能确定的话,那是最好的了!否则在不同的环境下运行,就有可能出错的了!
      

  4.   

    回“老牛”和 “鸟窝里的虫”: 这些是很早就试了的,不行。
    最新情况是SmallInt改成Int后也是一样不行。
      

  5.   

    的确是有这个问题,推荐采用的方法
    ‘Insert Into Log Values (’+param1+quotedstr(param3)+quotedstr(param3)+')'
      

  6.   

    错了,上面,应该;
    'Insert Into Log Values (’+INTTOSTR(param1)+','+quotedstr(param3)+','+quotedstr(param3)+')'
      

  7.   

    楼上的做法就是我现在已经采用的方法,
    但是我想知道的是为什么会出现这种情况?从而避免下次重犯。
    而且如果不能用Parameters.Value的话,程序看起来很麻烦。不过还是谢谢各位的解答。
    继续期待高手的解答。
      

  8.   

    value是根据后面的赋值自动转换的,如果异常,应该与操作系统设置有关
      

  9.   

    不要参数来作吧
    直接用SQL串来作,也一样呀,没什么不行的。
      

  10.   

    to 天下
      能不能说清楚点,我看不懂啊。谢谢。to 烈焰
      直接用SQL串来作,也一样呀,没什么不行的。可是有些存储过程中的参数呢?
    不是还要用到Parameters.Value的吗?我想彻底解决这个问题。以绝后患。
    继续期待高手的解答。
      

  11.   

    在存储过程中要用到Parameters.Value的话,必须把所有的参数写全,数据类型等,不会有你说的问题。我觉得这个问题就是当传递参数的时候VARIANT的错误。
      

  12.   

    从各位的谈论中我觉得问题出在Parameters.Value上,是他可以有限制
      

  13.   

    是不是要设好Parameters的Style后,才能像你说那样做!!!我以前也遇到这类问题,但我都写成SQL串来执行了!!!
      

  14.   

    与参数的size属性设置无关,我也认为问题出在Parameters.Value
    传递参数的时候VARIANT的错误。可是Why?And how to avoid?