本文整理自网络,侵删。
我试图在Delphi中使用FireDAC读写Firebird二进制数据。
使用的应用程序版本如下。
Delphi版本,Delphi XE6(FireMonkey桌面应用程序)Firebird版本为Firebird 2.5.2建立表格创建一个表来存储二进制数据。Firebird以BLOB数据类型存储二进制字符串。
BLOB数据类型有两种:二进制数据和长字符串。为二进制数据指定“ SUB_TYPE BINARY”或“ SUB_TYPE 0”。为长字符串指定“ SUB_TYPE TEXT”或“ SUB_TYPE 1”。
/*创建用于保存二进制数据的表格*/CREATE TABLE MYIMAGE (JPEGBYTE BLOB SUB_TYPE BINARY);数据库连接放置一个TFDConnection以启用连接。
TFDTable设置将FTTable1连接属性设置为“ FDConnection1”,并将TableName属性设置为“ MYIMAGE”。
检查是否可以将Active属性设置为True来建立连接。
打开FDTable1的字段编辑器,然后添加所有字段。(已添加JPEGBYTE。)
使用TBlobField的LoadFromFile方法保存二进制数据尝试使用TBlobField的LoadFromFile方法保存二进制数据。
描述按下按钮时的事件。在此代码中,预先准备的用于测试的JEPG文件(C:\ test \ test.jpg)保存在数据库中。
procedure TForm1.Button1Click(Sender: TObject);begin if not FDTable1.Active then FDTable1.Active := True;
FDTable1.Append; FDTable1JPEGBYTE.LoadFromFile('C:\test\test.jpg'); FDTable1.Post;
FDTable1.Active := False;end;使用TBlogField的LoadFromStream方法保存二进制数据尝试使用TBlobField的LoadFromStream方法保存二进制数据。
描述按下按钮时的事件。在此代码中,将预先准备的测试JEPG文件(C:\ test \ test.jpg)读取到流中,然后使用LoadFromStream方法将该流保存在数据库中。
procedure TForm1.Button4Click(Sender: TObject);var MS: TMemoryStream;begin if not FDTable1.Active then FDTable1.Active := True;
FDTable1.Append; MS := TMemoryStream.Create; MS.LoadFromFile('C:\test\test.jpg'); FDTable1JPEGBYTE.LoadFromStream(MS); MS.Free; FDTable1.Post;
FDTable1.Active := False;end;使用TBlobField的SaveToFile方法将二进制数据保存到文件中使用TBlobField的SaveToFile方法将二进制数据保存到文件中。
在代码末尾,将显示保存在TImage组件中的图像以供确认。
procedure TForm1.Button3Click(Sender: TObject);const PATH = 'C:\test\blob.jpg';begin if not FDTable1.Active then FDTable1.Active := True;
FDTable1JPEGBYTE.SaveToFile(PATH); FDTable1.Active := False; Image1.Bitmap.LoadFromFile(PATH);end;使用TBlobField的SaveToStream方法保存到二进制数据流尝试使用TBlobField的SaveToFile方法将二进制数据保存到流中。
流中保存的二进制数据将保存在文件中,然后显示在TImage组件中。
procedure TForm1.Button2Click(Sender: TObject);const PATH = 'C:\test\blob.jpg';var MS: TMemoryStream;begin if not FDTable1.Active then FDTable1.Active := True;
if TFile.Exists(PATH) then TFile.Delete(PATH); MS := TMemoryStream.Create; FDTable1JPEGBYTE.SaveToStream(MS); FDTable1.Active := False;
MS.SaveToFile(PATH); MS.Free; Image1.Bitmap.LoadFromFile(PATH);end;使用TFDQuery保存二进制数据使用TFDParam的LoadFromStream方法保存二进制数据。
procedure TForm1.Button5Click(Sender: TObject);var MS: TMemoryStream;begin MS := TMemoryStream.Create; MS.LoadFromFile('C:\test\test.jpg'); MS.Seek(0, 0); FDQuery1.SQL.Text := 'insert into myImage (jpegByte) values (:bData)'; FDQuery1.ParamByName('bData').LoadFromStream(MS, ftBlob); FDQuery1.ExecSQL; MS.Free;end;使用TFDQuery读取二进制数据使用TFDQuery CreateBlobStream方法获取二进制数据作为TStream。
流数据保存在文件中,并显示在TImage组件上。
procedure TForm1.Button6Click(Sender: TObject);const PATH = 'C:\test\blob.jpg';var Stream: TStream; MS: TMemoryStream;begin FDQuery1.Open('select jpegByte from myImage'); FDQuery1.First; Stream := FDQuery1.CreateBlobStream(FDQuery1.FieldByName('jpegByte'), TBlobStreamMode.bmRead); MS := TMemoryStream.Create; MS.LoadFromStream(Stream); MS.SaveToFile(PATH); MS.Free; FDQuery1.Close; Image1.Bitmap.LoadFromFile(PATH);end;
相关阅读 >>
Delphi 清除ie缓存 internet临时文件 cookie 历史记录 表单记录 上网密码
Delphi 解决timage无法在窗体resize时改变canvas的大小
Delphi 消息实现窗口最小化,最大化,关闭(Delphi)
Delphi win32_networkadapter 网卡 参数说明
更多相关阅读请进入《Delphi》频道 >>