三层数据库中英文问题(200分)

  • 主题发起人 主题发起人 love2001
  • 开始时间 开始时间
L

love2001

Unregistered / Unconfirmed
GUEST, unregistred user!
datasource.res.Params.ParamByName('name').AsString:='工业大学';
datasource.res.Open;
结果:数据库更新:工业
大学没有进去。
datasource.res.Params.ParamByName('name').AsString:='工业大学工业大学'';
datasource.res.Open;
结果:工业大学进去
如果是英文:一切正常,请问高手是为什么??
我是用D6+SQLServer2000
 
用的是bde还是ado,如果是bde你把bde升级到最新版本试试.
如果是ado先把ado的补丁打上再说.
以前的贴子有大虾说三层结构时中文支持不好.
 
datasource.res.Open;
OPEN也能更新数据库???
 
好像是按照双字节(汉字)的字符长度取的单字节长度的字符串?!
 
好像是widestring与string的差别。
写三层时服务器的变量如果用到string的话应该定义为widestring
 
我用的是ADO
是用储存存过程,
 
用 ExecSQL 更新
 
这是delphi和sqlserver在三层中结合不是很好的问题.
我翻了很多书发现了这个问题:
delphi三层传输的时候,能够传输的数据要有特定的类型.比如"工业大学",只能作为widestring
来传输,但是在转换成widestring的时候,把它作为了4个中文字符,而在传输过去进行翻译的
时候,也只取了4个字符,但是这次却是服务器的英文问题.大家都知道,在计算机中,一个汉字占两个字符,
而一个英文字母只占了1个字符,所以在服务器只去了4个字符,也就是两个汉字
明白了吧?
 
双击查看你的参数定义,它的长度设定太小了
 
用另外的变量类型做参数传递
 
墨剑先生,那么请问题如何解决呢?是不是要在提交前,把它的LENGTH加倍??
 
我急死了,那位大虾帮帮我,分不给可以再加.
 
我怎么没有遇到这样的问题?
你是这是三层应用中的问题,那么你的这段代码应该是在中间层了。
前台客户端传递参数到中间层,组件服务接收到后根据参数调用存储过程。
相对与Ado操作DataBase的部分只是在单机上进行(如果组件服务和数据库在同一台机器上)或者
是一个C/s模式。这样怎么会有问题?
问题参见:http://www.delphibbs.com/delphibbs/dispq.asp?lid=1031987
我做的时候全部把参数当成Olevariant变体类型传递,
举个例子:
client:
s: String;
v: OleVairant;
s := '工业大学工业大学';
v := s;
//v := '工业大学工业大学';
一样的。
...//创建组件,调用组件服务。
中间层服务:
procedure coDataHandleServer.GetParamAndCallProc(v:OleVariant);
var s :string;
begin
s := v;
//下面是你自己的存储过程执行。
datasource.res.Params.ParamByName('name').AsString:= s;
datasource.res.Open;
end;
 
提前一下
 
我是换成FieldByName来解决的。。。用ClientDataSet的Post
[:(] 没空试其他的方法了。。。听听大家的意见。。。
 
用SQL可以解决,不过用存储过程怎么解决?
 
最好不要用Name这个关键字,你改个名看看。
 
到现在还没有人能解决这个问题?
 
后退
顶部