回答
你的问题我不太清楚(看着答案,您的意见是相同的所有其他)。所以这只是在黑暗中拍摄...
绝对数据库有一个转换函数MimeToBin
将MIME编码(字符串)值转换为二进制数据类型。
样品为MimeToBin
(样本数据是刚刚Hello World
)
INSERT INTO table (BinData)
VALUES (MimeToBin('SGVsbG8gV29ybGQ='))
为了得到这样从流使用ABSDecUtil.TStringFormat_MIME64
一个Base64
编码的字符串。
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;
因为这一切只是有点抽象,你可以得到一个sample project from Component Ace
就这样! :) – user299323 2013-03-14 22:47:49
下面的示例从一个备忘录字段中的数据读入一个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;
从这里:
TACRBlobStream已定义? – user299323 2013-03-14 15:31:23
它在['ACRMain'](http://www.aidaim.com/products/acr/ref_cross-platform_client-server_single-file_embedded_bde_replacement_database_sql_delphi_c++builder_kylix/tsqlmemblobstream.php)单元中。 – TLama 2013-03-14 15:33:20
@TLama不会使用ABSQuery .. – user299323 2013-03-14 15:40:49
The documentation for BLOB fields告诉您如何。这里的代码演示了如何将文件存储到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;
我不使用ABSTable,而是使用ABSQuery :)这不会起作用 – user299323 2013-03-14 16:34:24
@RobKennedy:您可以通过将BlobStream声明为通用的'TStream'来摆脱类型转换专门用来代替“TABSBlobStream”。 'CreateBlobStream()'返回一个通用的'TStream'指针,这个代码没有使用任何'TABSBlobStream'特定的功能。 – 2013-03-14 20:34:09
@ user2153148:尝试'Field.DataSet.CreateBlobStream(Field,...)';' – 2013-03-14 20:37:19
- 1. c# - 从firebird读取/写入blob
- 2. 从php插入/读取blob数据
- 3. 从localStorage读取和写入?
- 4. 无法用TMemoryStream读取布尔值
- 5. Node.JS从mysql读取BLOB
- 6. 直接读取blob zip文件而不写入磁盘
- 7. Azure函数 - 写入和读取一个Blob文件
- 8. Redis写入主站从从站读取
- 9. 从array1中读取从array2中写入
- 10. Redis读取/写入
- 11. 试图读取blob
- 12. blob读取txt php
- 13. Oracle BLOB列读取
- 14. 从csv文件读取和写入
- 15. Linux - 同时从文件读取/写入
- 16. 写入(读取)IO.Stream到(从)ApplicationData.Current.LocalFolder
- 17. 从JAR读取/写入.txt文件
- 18. 从html读取并写入Excel
- 19. 从plist文件中写入和读取
- 20. 如何从Perl读取和写入XML?
- 21. 从文件读取和写入
- 22. 从python中读取和写入文件
- 23. 从其他进程读取和写入
- 24. 从串行端口写入和读取
- 25. Hadoop写入/读取int []从/到HDFS
- 26. 写入和从文件中读取
- 27. Android从类中读取/写入
- 28. Android - 从文件读取和写入
- 29. 在VC++中写入和从XML读取
- 30. 从大的MongoDB中读取,写入JSON
您是否尝试过做['这个way'(http://www.scalabium.com/faq/dct0141 .htm)? – TLama 2013-03-14 15:12:02
@TLama不是真的SQL:p – user299323 2013-03-14 15:33:10
我不知道你的意思,但你甚至试图将该代码翻译成['像这样'](http://pastebin.com/WVM6vqy6)?我敢打赌,大多数数据库组件供应商使用通用的Delphi DB类祖先。 – TLama 2013-03-14 15:50:09