昨天把程序跑到英文的操作系统中试运行,结果出现数据库异常,而在中文的操作系统中正常。
数据库异常症状如下,
问题出在一个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加入各个参数值,正确。唉,百思不得其解。
希望大侠们解惑。
数据库异常症状如下,
问题出在一个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加入各个参数值,正确。唉,百思不得其解。
希望大侠们解惑。
只是听说过用Parameters.Value会出现一些问题,
但如果我不知道为什么,下回自己还是会犯错的。
所以希望解决。最好能够尽快啊。
因为英文的操作环境在一段时间后为移走。
ParamByName('Name').AsString=''
这样的代码改成:Parameters.ParamByName('P_Name').AsInteger := 3;
也就是说,你的参数的数据类型如果能确定的话,那是最好的了!否则在不同的环境下运行,就有可能出错的了!
最新情况是SmallInt改成Int后也是一样不行。
‘Insert Into Log Values (’+param1+quotedstr(param3)+quotedstr(param3)+')'
'Insert Into Log Values (’+INTTOSTR(param1)+','+quotedstr(param3)+','+quotedstr(param3)+')'
但是我想知道的是为什么会出现这种情况?从而避免下次重犯。
而且如果不能用Parameters.Value的话,程序看起来很麻烦。不过还是谢谢各位的解答。
继续期待高手的解答。
直接用SQL串来作,也一样呀,没什么不行的。
能不能说清楚点,我看不懂啊。谢谢。to 烈焰
直接用SQL串来作,也一样呀,没什么不行的。可是有些存储过程中的参数呢?
不是还要用到Parameters.Value的吗?我想彻底解决这个问题。以绝后患。
继续期待高手的解答。
传递参数的时候VARIANT的错误。可是Why?And how to avoid?