MTS/COM+数据更新问题,中文不能正确保存。(200分)

  • 主题发起人 主题发起人 marknew
  • 开始时间 开始时间
M

marknew

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么MTS/COM+中文无法正确保存?请看以下代码
//服务端部分程序
procedure TmtsBookObj.MtsDataModuleCreate(Sender: TObject);
begin
AutoComplete:=true;
Pooled:=true;
AInfoSQL[0] := format(DeleteSQL,['info_moto_part',' product_code like :@product_code and vdr_id like :@vdr_id']);
AInfoSQL[1] := format(UpdateSQL,['dm_kczt','name=:@name','code=:@code']);
AInfoSQL[2] := format(InsertSQL,['dm_cklx','code,name,print_price',':@code,:@name,:@print_price']);
end;

procedure TmtsBookObj.SetData(var OwnerData: OleVariant;
ParamList: OleVariant;
CmdIndex: Integer);
var
Params:OleVariant;
lcCmdTxt:string;
lpPara:TParams;
begin
lcCmdTxt:=AInfoSQL[CmdIndex];//得到执行的SQL语句。
if not VarIsNull(ParamList) then
Params:=GetOperParaList(lcCmdTxt,ParamList);//获取参数
try
{lpPara := TParams.Create;
UnPackParams(Params,lpPara);
showmessage(lpPara[0].value);
showmessage(lpPara[1].value);}//得到参数是正确的。
aps.AS_Execute('dspOperate',lcCmdTxt,Params,OwnerData);//执行语句
SetComplete;
except
SetAbort;
raise;
end;
end;
//客户端
ParasList:=varArrayCreate([0,ParaCount], varVariant);
ParasList[0] := '中国';//更新的字段,更新后只有'中'字才能保存进去,英文没问题
ParasList[1] := '02';//根据这个关键字
ImtsBookObj(LoginObj).SetData(OwnerData,ParasList,1);
 
//客户端
ParasList:=varArrayCreate([0,ParaCount], varVariant);
中的VarVariant换成OleStr可以吗?
 
前不久也看到有关中文保存不全的问题,和你的类似,可一时竟找不到,
那里说好象是中文字符长度delphi处理不好,把两个中文字当成一个。
 
不行。你仔细想想。
 
请使用Unicode。
 
具体点...
 
没人知道了吗?
 
不会吧。这帮兄弟也太不够意思了。再加300分。谁先搞定500分就归他!
 
//客户端
ParasList:=varArrayCreate([0,ParaCount], varVariant);// 换成ParasList:=varArrayCreate([0,ParaCount], VarOleStr);试试。
ParasList[0] := '中国';//更新的字段,更新后只有'中'字才能保存进去,英文没问题
ParasList[1] := '02';//根据这个关键字
ImtsBookObj(LoginObj).SetData(OwnerData,ParasList,1);
 
帮助中关于varOleStr的解释:
varOleStr Reference to a dynamically allocated UNICODE string.
varDispatch Reference to an Automation object (an IDispatch interface pointer).
varError Operating system error code.
varBoolean 16-bit boolean (type WordBool).
varVariant A Variant.
varUnknown Reference to an unknown OLE object (an IUnknown interface pointer).
varByte A Byte
varStrArg COM-compatible string.
varString Reference to a dynamically allocated string. (not COM compatible)
varAny A CORBA Any value.
建议要传字符数据都用VarOleStr,在我所有的varArrayCreate([0,ParaCount], VarOleStr);都是用VarOleStr的。
 
http://delphi.mychangshu.com/dispdoc.asp?id=536
我做的三层结构程序,下载,看看对你有没有帮助。
 
分够多,回去找找!!!
 
用VarOleStr也不行的,我试过很多类型了。请大家有空倾力继续解决,分大大的有。
我不希望不了了之。
 
我用你的代码试了,没问题啊
你留下MAIL,我寄给你我测试用的代码,自己看看。
 
supermark@yesky.com,你发过来试试。
 
算了。无人知
 
后退
顶部