Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 从BLOB读写TMemoryStream_Delphi_Delphi Xe2_Accuracerdb - Fatal编程技术网

Delphi 从BLOB读写TMemoryStream

Delphi 从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(

如何将TMemoryStream存储到BLOBB字段并使用Accuracer DB/SQL从中读取。对于SQL,我指的是ABSQuery


感谢以下示例将数据从备注字段读取到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,…)
`