三层怪问题: 有汉字的记录更新时出现右载位错误因而无法更新, why?(200分)

  • 主题发起人 主题发起人 yifawu1
  • 开始时间 开始时间
Y

yifawu1

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库用 sql7.0
采用MIDAS时,服务器采用 ado连接方式,用ciMultiInstance,Free为选项.
客户端采用 TSocketconnection 连接.
用Dbgrid 更新数据,最后用 clinentdataset1.ApplyUpdate(0) 把数据更新
到服务器中,对于有汉字输入的记录,无法更新,而记录全用字母 、数字则可
更新,why? 而采用两层则没有此问题.
在设置断点时查找错误时,提示为字符右截位错误.

请高手指教!
 
既使修改带汉字记录的数字字段,也不行。
只要在记录中有一个汉字便无法添加记录或修改记录.!
 
首先,你要确保SQL SERVER7安装时所安装的字符集正确。否则,SQL SERVER 7只有重新安装了。
这个问题在以前的帖子中我已经谈论过多次了。我得出的结论是由于DELPHI5 和SQL SERVER 7
所采用的编码方式不相同。SQL SERVER 采用的是UNICODE编码方式,而DELPHI采用的是ANSI
方式。所以在有汉字数据更新时,就会使得汉字更新不完全,这种情况一般发生存储过程中。
所以在应用服务器的DATA MODULE 的存储过程的BeforeExecute事件中加入:
procedure TAppServer.DSPStoredProcBeforeExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
ADOStoredProc1.Parameters.ParamByName('@UserName').Size := Length(ADOStoredProc1.Parameters.ParamByName('@UserName').Value)+1;
end;
这样就没问题了。
 
我将sql7.0(正版) 连续重装数次,并重装98 ,还是老问题!
我用字符集先后是:
936 chinese
1252/ISO CHAR
437 us Englist
950 chinese
究竟用什么字符集好呢?
 
  怎么办?
 
我还是决得zengr老兄讲的有理,不够yifawu1你的sql server7用缺省的字符集,因98的
一个连sql的dll是UNICODE编码的,我碰到过在98下输中文到sql6.5理乱码。
 
字符集用936.
好象还可以对汉字使用转换函数,使其变为Unicode格式,再存储。(widechar)
如:function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;
等。
 
但是直接用动态sql 语句可以向数据库中加入汉字记录
只能这样
while not clientdataset1.eof do
begin
clientdataset2.commandtext:='insert tablename(f1,f2) values('''+
clientdataset1.fieldbyname('f1').value+''','+...+')';
cleintdataset2.execute;
clientdataset1.next;
end;
稍微有点麻烦
为什么直接通过sql 语句可以更新呢?
 
yifawu1:如果还想接着讨论请定期提前自己的帖子,如果不想继续讨论请结束帖子。
 
接受答案了.
 
后退
顶部