unidac控件在SQLITE里怎么写入和读取BLOB类型的数据呀? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样声明type TServParams = TDAParams; TServParam = TDAParam; 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; 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'); Delphi中怎么接收flash中fscommand发出的命令? 初學者簡單一問, 在線等待!!!! 关于数据库 中国足球输了,但中国人民不会输,干掉他妈的小日本。 我想请问 fieldbyname 能不能实现多表数据的输出呢? ??????为什么 程序启动问题!来者有分呀! 如何在Toolbar中动态添加Toolbutton 怎么样才能做出像资源管理器那样的窗口? 怎样得知当系统日期改变? 寻找CyberCtrl控件 关于触发器
type
TServParams = TDAParams;
TServParam = TDAParam;
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;
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');