复制结构体或流到Variant里

set nocounton 在使用dbExperss时 在SQLSERVER的存储过程开头要写这一行,在尾select 之前写set nocount off

procedure VariantToStream(const Data: OleVariant; Stream: TStream);
var
p: Pointer;
begin
p := VarArrayLock(Data);
try
Stream.Write(p^, VarArrayHighBound(Data,1) + 1); //assuming low bound = 0
finally
VarArrayUnlock(Data);
end;
end;

function StreamToVariant(Stream: TStream): OleVariant;
var
p: Pointer;
begin
Result := VarArrayCreate([0, Stream.Size - 1], varByte);
p := VarArrayLock(Result);
try
Stream.Position := 0; //start from beginning of stream
Stream.Read(p^, Stream.Size);
finally
VarArrayUnlock(Result);
end;
end;

function RecToVariant(Rec:TMyRecArr):variant;
var
p:PChar;
begin
Result:=VarArrayCreate([0,SizeOf(Rec) - 1],VarByte);
p:=VarArrayLock(Result);
try
Move(Rec[1], p^, SizeOf(Rec))
finally
VarArrayUnlock(Result);
end;
end;

procedure VariantToRec(Value:variant): TMyRecArr;
var
p:PChar;
Size: Cardinal;
begin
size:=VarArrayHighBound(Value,1);
p:=VarArrayLock(Value);
try
Move(p^, Result[1], Size)
finally
VarArrayUnlock(Value);
end;
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值