为何通过ClientDataSet参数输入汉字会少一半(200分)

  • 主题发起人 主题发起人 kane
  • 开始时间 开始时间
K

kane

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是我的SQL语句
INSERT INTO USRINF(CERTID, NAME, UNIT, CONTACT, PROPOSER,
PAYACCOUNT, KINDID,DateTime) VALUES
(:CERTID, :NAME, :UNIT, :CONTACT, :PROPOSER, :PAYACCOUNT, :KINDID
,:DateTime)
NAME是VARCHAR()类型的,给参数赋值后提交.
例如把:NAME赋值"宝宝"
数据库里面只会有一个"宝"字:(
各位大侠赶紧帮忙,老板要砍人了~~~~~~~~~`
 
你是用ADO的吗
可以看看http://www.gislab.ecnu.edu.cn/delphibbs/dispq.asp?LID=292025
 
我也遇到过此问题。我后来是用ADOQuery.
zengr:说是Delphi的Ansi String 和Unicode String的问题,我觉得并非如此。
我直接用ADOStoredProc执行存储过程来存储数据不会出现一半的情况(双层),
可见这应该不是Delphi的Ansi String 和Unicode String的问题,
而在三层中会出现一半的情况,我想可能还是Delphi的Midas有问题。
 
把AnsiString 改为 WideString即可(可以查看WideString帮助)
 
多人接受答案了。
 
To: Hexi这当中确实字符的转换确实有问题,我还问了MS的朋友。但要说是Midas的问题,
当你在三层中使用ADOQuery时,也不会出现这样的问题,这样也似乎有点不成立,或者
是DELPHI 的BUG吧。

不过建议改为WIDESTRING的效果是好点。另外,真要使用存储过程的话,我觉得我的方法还
是有点效果:在APPSERVER中的远程数据模块中的DATASETPROVIDER的BeforeExecute事件中
对要处理汉字的字段加入如下处理:
procedure TNew_appserver.DSPStoredProcBeforeExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
ADOStoreProcedure1.Parameters.ParamByName('@UserName').Size := length(ADOStoreDealed.Parameters.ParamByName('@UserName').Value ) +1;
end; //UserName为一汉字内容。
这样就可以成功处理汉字了。
 
后退
顶部