如何将 TMemoryStream 存储到 BLOBB 字段并使用 Accuracer DB / SQL 从中读取。对于 SQL,我的意思是 ABSQuery..
谢谢
如何将 TMemoryStream 存储到 BLOBB 字段并使用 Accuracer DB / SQL 从中读取。对于 SQL,我的意思是 ABSQuery..
谢谢
BLOB 字段的文档向您展示了如何操作。那里的代码演示了将文件存储到 BLOB 字段中,但您可以调整它以存储任何类型的流的内容,而不仅仅是 TFileStream。关键是创建一个 BLOB 流,然后调用CopyFrom
,它将一个流的内容复制到另一个流中。
ABSTable1.Edit;
try
BlobStream := ABSTable1.CreateBlobStream(Field, bmWrite) as TABSBlobStream;
try
BlobStream.CopyFrom(Stream, 0);
finally
BlobStream.Free;
end;
ABSTable1.Post;
except
ABSTable1.Cancel;
raise;
end;
以下示例将备注字段中的数据读取到 Blob 流中,并将其显示在备注控件中。
procedure TForm1.Button2Click(Sender: TObject);
var
Buffer: PChar;
MemSize: Integer;
Stream: TACRBlobStream;
begin
Stream := TACRBlobStream.Create(MyAccuracer.FieldByName('Notes') as TBlobField, bmRead);
try
MemSize := Stream.Size;
Inc(MemSize); //Make room for the buffer's null terminator.
Buffer := AllocMem(MemSize); //Allocate the memory.
try
Stream.Read(Buffer^, MemSize); //Read Notes field into buffer.
Memo1.SetTextBuf(Buffer);// Display the buffer's contents.
finally
FreeMem(Buffer, MemSize);
end;
finally
Stream.Free;
end;
end;
从这里:
你的问题对我来说不是很清楚(看看答案和你的评论,其他人都一样)。所以这只是在黑暗中拍摄...
Absolute Database 有一个转换函数MimeToBin
,可以将 MIME 编码(字符串)值转换为二进制数据类型。
样本MimeToBin
(样本数据只是Hello World
)
INSERT INTO table ( BinData )
VALUES ( MimeToBin( 'SGVsbG8gV29ybGQ=' ) )
要从流中获取这样的Base64
编码字符串,请使用ABSDecUtil.TStringFormat_MIME64
.
uses
ABSDecUtil;
function BuildSQLFromStream( AStream : TMemoryStream ) : string;
var
LCoder : TStringFormat_MIME64;
begin
LCoder := TStringFormat_MIME64.Create;
try
RESULT :=
'INSERT INTO table ( BinData ) ' +
'VALUES( MimeToBin( ' +
QuotedStr(
LCoder.StrTo(
AStream.Memory,
AStream.Size ) ) +
' ) )';
finally
LCoder.Free;
end;
end;
由于这只是一点点抽象,您可以从 Component Ace 获取示例项目