unidac控件在SQLITE里怎么写入和读取BLOB类型的数据呀?

cntigercat 2011-03-31 07:48:42
...全文
463 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nkym0626 2011-04-01
  • 打赏
  • 举报
回复
UniTable2.Open;
UniTable2.Append;
TBlobField(UniTable2.FieldByName('CONTENT')).LoadFromFile('d:\PackageRequires.exe');
UniTable2.Post;

UniQuery1.Close;
UniQuery1.SQL.Text := 'SELECT * FROM TESTBLOB WHERE ID=9';
UniQuery1.ExecSQL;
TBlobField(UniQuery1.FieldByName('CONTENT')).SaveToFile('d:\system\desktop\d.exe');
kye_jufei 2011-03-31
  • 打赏
  • 举报
回复
example:

1.先建立一个表,字段类型为blob:

SL.Add('CREATE TABLE IF NOT EXISTS TEST (');
SL.Add('FileName TEXT PRIMARY KEY,');
SL.Add('Data BLOB);');
SL.Add('');


2.写进二进制数据:

var
FFileStream:TFileStream;
FData:array of Char;
FSQLR:TSQLRequest;
ASQL:AnsiString;
begin
FFileStream:=TFileStream.Create('test.xml',fmOpenReadWrite);
ASQL:='INSERT INTO TEST(FileName,Data) VALUES('+QuotedStr('test.xml')+',?)';
try
SQLite数据库对象.Execute('DELETE FROM TEST');
//
SetLength(FData,FFileStream.Size);
FFileStream.Position:=0;
FFileStream.Read(PChar(FData)^,Length(FData));
FSQLR.Prepare(SQLite数据库对象.DB,ASQL);
FSQLR.Bind(1,PChar(FData),Length(FData));
FSQLR.Execute;
finally
FreeAndNil(FFileStream);
end;


Note:其中问号是参数,SQLite数据库对象类型为TSQLDataBase.

3.读取数据并写入到文件:

var
FBlobField:TSQLBlobStream;
FFileStream:TMemoryStream;
FData:array of Char;
begin
try
FFileStream:=TMemoryStream.Create;
FBlobField:=SQLite数据库对象.Blob('','TEST','Data',1,True);
try
FBlobField.Position:=0;
SetLength(FData,FBlobField.Size);
FBlobField.ReadBuffer(PChar(FData)^,FBlobField.Size);
FFileStream.Write(PChar(FData)^,FBlobField.Size);
FFileStream.SaveToFile("test.xml");
finally
FreeAndNil(FBlobField);
FreeAndNil(FFileStream);
end;
except
Result:='';
end;

kye_jufei 2011-03-31
  • 打赏
  • 举报
回复
这样声明。。。


type
TServParams = TDAParams;
TServParam = TDAParam;

5,939

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧