OleVariant变量传递“病变”问题?(100分)

R

renzhm

Unregistered / Unconfirmed
GUEST, unregistred user!
背景:D6 MSSQL 三层 Corba协议
使用OleVariant变量传递数组,若值为中文或空(null),则插入数据库后内容为乱码
两种情况:
1、若内容为null则插入数据库后内容为乱码
2、若为中文:
方式A:
Str:='begin
tran '+
'insert into table1(字段列) values(OleStr[1]...)'+
'if @@error rollback tran '+
'insert into table2(字段列) values(OleStr[1]...)'+
'if @@error rollback tran '+
'commit tran';
ADOQuery.Execsql;//关闭,清空,赋值我就不写了
这种方式没问题。
方式B:
Str:='begin
tran '+
'insert into table1(字段列) values:)Name1,:Code1)'+
'if @@error rollback tran '+
'insert into table2(字段列) values:)Name2,:Code2)'+
'if @@error rollback tran '+
'commit tran';
ADO参数赋值不写了,把OleStr[1]...赋给Name1,Code1...
ADOQuery.Execsql;//关闭,清空,赋值我就不写了
这种方式有问题,中文保存后为乱码。
请指教!
 
你的字段类型可能是带N的,例如 nvarchar,nchar等,如果是这种情况,以下方法可解决:
引用AdoInt单元,参数赋值后加一句:
例:Parameters.ParamByName('itm_no').ParameterObject.Type_ := adVarWChar;
 
不是,我使用的是varchar型
 
我是指你数据库里的字段类型
 
是的,数据库里的字段类型
 
顶部