Delphi 从BLOB读写TMemoryStream
如何将TMemoryStream存储到BLOBB字段并使用Accuracer DB/SQL从中读取。对于SQL,我指的是ABSQueryDelphi 从BLOB读写TMemoryStream,delphi,delphi-xe2,accuracerdb,Delphi,Delphi Xe2,Accuracerdb,如何将TMemoryStream存储到BLOBB字段并使用Accuracer DB/SQL从中读取。对于SQL,我指的是ABSQuery 感谢以下示例将数据从备注字段读取到blob流中,并在备注控件中显示 procedure TForm1.Button2Click(Sender: TObject); var Buffer: PChar; MemSize: Integer; Stream: TACRBlobStream; begin Stream := TACRBlobStream.Create(
感谢以下示例将数据从备注字段读取到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;
从这里开始:
以下示例将数据从备注字段读取到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;
从这里开始:
向您展示如何。那里的代码演示了如何将文件存储到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字段中,但您可以调整它以存储任何类型流的内容,而不仅仅是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;
你的问题对我来说不是很清楚(看看答案和你的评论,其他人都一样)。所以这只是在黑暗中拍摄 绝对数据库有一个转换函数,用于将MIME编码(字符串)值转换为二进制数据类型 MimeToBin的示例(示例数据仅为Hello World)
插入到表中(BinData)
值(米托宾('SGVsbG8gV29ybGQ='))
要从流中获取这样的Base64
编码字符串,请使用ABSDecUtil.TStringFormat\u MIME64
使用
ABSDecUtil;
函数BuildSQLFromStream(AStream:TMemoryStream):字符串;
变量
LCoder:TStringFormat_MIME64;
开始
LCoder:=TStringFormat_MIME64.Create;
尝试
结果:=
'插入表格(BinData)'+
'值(米托宾('+
QuotedStr(
lcorder.StrTo(
阿斯特拉姆,记忆,
AStream.Size))+
' ) )';
最后
免费订购;
结束;
结束;
因为这只是一个小小的抽象,你可以得到一个你的问题对我来说不是很清楚(看看答案和你的评论,其他的都一样)。所以这只是在黑暗中拍摄 绝对数据库有一个转换函数,用于将MIME编码(字符串)值转换为二进制数据类型 MimeToBin的示例(示例数据仅为Hello World)
插入到表中(BinData)
值(米托宾('SGVsbG8gV29ybGQ='))
要从流中获取这样的Base64
编码字符串,请使用ABSDecUtil.TStringFormat\u MIME64
使用
ABSDecUtil;
函数BuildSQLFromStream(AStream:TMemoryStream):字符串;
变量
LCoder:TStringFormat_MIME64;
开始
LCoder:=TStringFormat_MIME64.Create;
尝试
结果:=
'插入表格(BinData)'+
'值(米托宾('+
QuotedStr(
lcorder.StrTo(
阿斯特拉姆,记忆,
AStream.Size))+
' ) )';
最后
免费订购;
结束;
结束;
因为这只是一个小小的抽象,你可以得到一个你试过吗?@TLama不是真正的SQL:pI不知道你的意思,但你甚至试过把代码翻译成什么?我打赌大多数DB组件供应商都使用通用的Delphi DB类。@TLama这种方法不适用于SQL:)对不起,我又迷路了;SQL是一种语言……你试过吗?@TLama不是真正的SQL:pI不知道你的意思,但你甚至试过把代码翻译成什么?我打赌大多数DB组件供应商都使用通用的Delphi DB类。@TLama这种方法不适用于SQL:)对不起,我又迷路了;SQL是一种语言…TACRBlobStream在哪里定义?它在单元中。TACRBlobStream在哪里定义?它在单元中。我不使用ABSTable,而是使用ABSQuery:)这不会work@RobKennedy:通过将
BlobStream
声明为泛型TStream
而不是TABSBlobStream
具体地说CreateBlobStream()
返回一个通用的TStream
指针,该代码没有使用任何TABSBlobStream
特定的功能。@user2153148:尝试Field.DataSet.CreateBlobStream(Field,…)
`我不使用ABSTable,而是使用ABSQuery:)这不会work@RobKennedy:您可以通过将BlobStream
声明为泛型TStream
而不是TABSBlobStream
来摆脱类型转换CreateBlobStream()
返回一个通用的TStream
指针,该代码没有使用任何TABSBlobStream
特定的功能。@user2153148:尝试Field.DataSet.CreateBlobStream(Field,…)
`