K
kaithink
Unregistered / Unconfirmed
GUEST, unregistred user!
关键字:ado dataset clientdataset 参数 汉字 截断 错误 三层
原因分析:
一。
也许是ADO,也许是midas。。。。。。。。
总之汉字参数值到了后台被截断了
很多人以为是ansistring与widestring中间的转换失误
的确,但不完全是,仅仅是长度计量出了问题
如果参数A中有n个汉字,则给参数A加n个字符后再赋值,SQL将生成正确。
大多数人用了这种方法
二。
在字符串长度计量失误情况下,ado参数的size得到了不正确的值,一个汉字的size被等
同于一个字符,所以参数值在嵌入SQL时被截断的长度恰好是其包含汉字的数目,
由此亦可知ado参数的size是动态的随值而定的,
万幸的是,传到中间层的ado.Parameters.ParamByName('pname').value还是完整的,
而这就是我们的希望。
解决方案:
在中间层ado打开或执行之前,执行此句即可.
ado.Parameters.ParamByName('pname').Size :=length(ado.Parameters.ParamByName('pname').Value);
例子代码:已测试
[win2000p中文版sp3 + ms sql server2000p 中文版
+delphi6无补丁+dcom+ado2.7+clientdataset]
procedure TkTestRDM.AdoQryFiltTestBeforeOpen(DataSet: TDataSet);
begin
AdoQryFiltTest.Parameters.ParamByName('pname').Size :=length(AdoQryFiltTest.Parameters.ParamByName('pname').Value);
end;
ps:
ado.excute尚未测试,我想当然地认为应该可以,那位兄弟有时间试试
原因分析:
一。
也许是ADO,也许是midas。。。。。。。。
总之汉字参数值到了后台被截断了
很多人以为是ansistring与widestring中间的转换失误
的确,但不完全是,仅仅是长度计量出了问题
如果参数A中有n个汉字,则给参数A加n个字符后再赋值,SQL将生成正确。
大多数人用了这种方法
二。
在字符串长度计量失误情况下,ado参数的size得到了不正确的值,一个汉字的size被等
同于一个字符,所以参数值在嵌入SQL时被截断的长度恰好是其包含汉字的数目,
由此亦可知ado参数的size是动态的随值而定的,
万幸的是,传到中间层的ado.Parameters.ParamByName('pname').value还是完整的,
而这就是我们的希望。
解决方案:
在中间层ado打开或执行之前,执行此句即可.
ado.Parameters.ParamByName('pname').Size :=length(ado.Parameters.ParamByName('pname').Value);
例子代码:已测试
[win2000p中文版sp3 + ms sql server2000p 中文版
+delphi6无补丁+dcom+ado2.7+clientdataset]
procedure TkTestRDM.AdoQryFiltTestBeforeOpen(DataSet: TDataSet);
begin
AdoQryFiltTest.Parameters.ParamByName('pname').Size :=length(AdoQryFiltTest.Parameters.ParamByName('pname').Value);
end;
ps:
ado.excute尚未测试,我想当然地认为应该可以,那位兄弟有时间试试