详见主题内容 (100分)

  • 主题发起人 主题发起人 fishwater_2240
  • 开始时间 开始时间
F

fishwater_2240

Unregistered / Unconfirmed
GUEST, unregistred user!
服务器:ADO+SQLServer+MTS/COM+
服务器控制组件中有一个方法供客户端执行SQL,函数原型如下
procedure SaveData(SQL:Olevariant;
Params:OleVariant);//参数是先打包的没有问题
var aps:IAppServer;
OwnerData:OleVariant;
begin
try
//创建MtsDatamodal接口过程
aps.AS_EXECUATE('Save_dsp',SQL,Params,ownerdata);
SetComplele;
except
SetAbort
end;
end;
在执行过程中没有错误可是保存到数据库里如果参数中有参数的值是汉字只能保存一部分。
这是为何?
比如:SQL=insert into tmp(id,name) values (:id,:name)
参数数值name=‘张三’ 传到服务器执行后只能保存‘张’;
还请各位帮帮忙

 
各位老兄也来提点建议,光看多没劲呀。我在线ing
 
我正在看呢....
 
字段大小问题?
 
不是呀,字段的大小绝对没有问题。
我从IAPPServer一值看到了Providor的PSEXecute,如果有问题的话也是从Params 到 ado的
parameters转换过程。可是那是borland程序员写的呀真不知该如何是好
 
我遇到过这种问题,你的情况同C/S没有关系,问题是在执行SQL这一块,具体情况你可以
使用事件探察器查看下传入的SQL语句,中文其实已经被截掉了,至于什么原因,具体的我
也说不上来,可能是跟Delphi和SqlServer对中文字符的长度判断上有出入的原因,Delphi
对“中”判断为长度为2,而SqlServer为1,我当时的解决方法是:
SQL=insert into tmp(id,name) values (:id,:name)
Name := '张三'+' ';
//后面加四个空格
Name := S1+S2 ;//S2为Delphi下Length(S1)个空格
 
期待更好更从根本上解决问题的方法
 
参数的写法我忘了,但应该看得懂:)
Params(ParamName).Size := Length(ParamValue);
Params(ParamName).Value := ParamValue;
 
多谢各位的指点,可是我仍想找到一个从根本上解决问题的办法。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部