q为TClientDataSet,
log表为Sql Server数据库中的一个表,其中name为nvarchar字段,edi为varchar字段
q.Close;
q.CommandText:='Insert into log(name,edi) values(:c,:b)';
q.Params.ParamByName('c').Value:='我们朋友';
q.Params.ParamByName('b').Value:='我们'; try
q.Execute;
showMessage('ok');
finally
q.Close;
end;
这样存入数据库中后,name 字段的内容为“我们”,edi字段的内容为“我”。
如果存入的字符为汉字,就只能存入一半。如果存入的字符为英文字母就能够存完整。
我在oracle数据库中使用没有这个问题。
如果不用三层结构也没有这个问题。
现在不知道是Sql server的问题还是三层结构的问题,在sql server 中怎么解决这个问题?
不知道大家有没碰到过这个问题
log表为Sql Server数据库中的一个表,其中name为nvarchar字段,edi为varchar字段
q.Close;
q.CommandText:='Insert into log(name,edi) values(:c,:b)';
q.Params.ParamByName('c').Value:='我们朋友';
q.Params.ParamByName('b').Value:='我们'; try
q.Execute;
showMessage('ok');
finally
q.Close;
end;
这样存入数据库中后,name 字段的内容为“我们”,edi字段的内容为“我”。
如果存入的字符为汉字,就只能存入一半。如果存入的字符为英文字母就能够存完整。
我在oracle数据库中使用没有这个问题。
如果不用三层结构也没有这个问题。
现在不知道是Sql server的问题还是三层结构的问题,在sql server 中怎么解决这个问题?
不知道大家有没碰到过这个问题
’我们朋友'后加4空格
2.我打算客户端不做修改,有没有办法解决widestring和string的问题啊
3.我用oracle数据库怎么没有上面的问题?
我把name字段类型改为varchar也是同样的问题。
请高手指导,分嫌少我再加
q.Close;
q.CommandText:='Insert into log(name,edi) values('''+'我们朋友'+''''+','''+'我们'+''''+')';
就可以了。
ADODB.PAS单元
//-----------------------------------------------------
function VarDataSize(const Value: OleVariant): Integer;
begin
if VarIsNull(Value) then
Result := -1
else if VarIsArray(Value) then
Result := VarArrayHighBound(Value, 1) + 1
else if TVarData(Value).VType = varOleStr then
begin
Result := Length(PWideString(@TVarData(Value).VOleStr)^);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这句的问题,
if Result = 0 then
Result := -1;
end
else
Result := SizeOf(OleVariant);
end;//---------------------------------------------------
也真是的,这个BUG在DELPHI6,DELPHI7都存在.