如何将TMemoryStream的内容转换为变体?我使用Delphi 2010。
TMemoryStream存储文件的内容,它可以是PDF或JPG(扫描文档)。
文件被保存在MS SQL库中。当我在程序中进入编辑模式时,我将该文件的内容从base提取到TMemoryStream中。
编辑完文档的卡片后,我需要将文档发送回基地。扫描的文件也可以更改(或替换为其他文件)。为了发回记录,我使用了一个带有一堆参数的存储过程——每个字段一个参数。我将参数作为变量传递给存储过程。
这就是为什么我需要将TMemoryStream转换为一个变体
假设您需要变量来保存字节数组,您可以使用:
var
MS: TMemoryStream;
V: Variant;
P: Pointer;
begin
...
V := VarArrayCreate([0, MS.Size-1], varByte);
if MS.Size > 0 then
begin
P := VarArrayLock(V);
Move(MS.Memory^, P^, MS.Size);
VarArrayUnlock(V);
end;
...
end;
TMemoryStream
没有方便的方法直接访问内部数据。它提供了一个属性,该属性为您提供了一个指针,但没有任何有用的数据类型。但是,如果使用从TMemoryStream
派生而来的TBytesStream
,则可以从流中获得作为TBytes
类型变量的数据。
TParam
类型的标准参数对象,则不需要使用变体。你可以这样做:
param.AsBlob := MyTBytesVariable;
或者,更简单的是,你可以直接使用流:
param.AsStream := MyMemoryStream;
(如果您这样做,请确保流的Position
首先设置为0)