【发布时间】:2014-09-09 04:23:31
【问题描述】:
我已经被这个问题困扰了几天,我有两个包含数据的客户端数据集,我想使用我在 Stack Overflow 中找到的两个函数将 olevariant 数据转换为字符串。
转换为字符串的目的是为了能够将字符串传输到另一个位置并再次转换回 olevariant 并将其分配给另一个客户端数据集。
为了模拟它,我使用以下部分代码创建了一个示例应用程序(参见下面的块)。
代码执行正确,但我的问题是当我将 Windows 语言环境转换为日语(这是要求)时,我在第二个数据集的数据分配中遇到数据包不匹配。但如果我在日语语言环境中这样做:
clientdataset2.data := clientdataset1.data
它工作正常。英语语言环境,代码运行良好。
字符串转换有问题吗?或者有什么我能做的吗?我真的很感激这方面的帮助。
//to simulate the conversion
TempData := ClientDataSet1.Data;
TempString := OleVariantToString(ClientDataset1.Data);
TempData2 := StringToOleVariant(TempString);
ClientDataSet2.Data := TempData2; //mismatch in data packet happens here in japanese locale
//conversion functions
function TForm1.OleVariantToString(const Value: OleVariant): string;
var
ss: TStringStream;
Size: integer;
Data: PByteArray;
begin
Result := '';
if Length(Value) = 0 then
Exit;
ss := TStringStream.Create;
try
Size := VarArrayHighBound(Value, 1) - VarArrayLowBound(Value, 1) + 1;
Data := VarArrayLock(Value);
try
ss.Position := 0;
ss.WriteBuffer(Data^, Size);
ss.Position := 0;
Result := ss.DataString;
finally
VarArrayUnlock(Value);
end;
finally
ss.Free;
end;
end;
function TForm1.StringToOleVariant(const Value: string): OleVariant;
var
ss: TStringStream;
MyBuffer: Pointer;
begin
Result := null;
if Value = '' then
Exit;
ss := TStringStream.Create(Value);
try
Result := VarArrayCreate([0, ss.Size - 1], varByte);
MyBuffer := VarArrayLock(Result);
try
ss.Position := 0;
ss.ReadBuffer(MyBuffer^, ss.Size);
finally
VarArrayUnlock(Result);
end;
finally
ss.Free;
end;
end;
【问题讨论】:
标签: delphi