其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

Delphi实现在数据库中存取图像


发布日期:2021年03月15日
 
Delphi实现在数据库中存取图像

本实例演示如何在数据库中存取图像文件

向窗体上添加一个TListBox组件一个TImage组件和一个TTable组件设计完成的主界面如图所示

主界面

本系统中需要设计一个新的基于Paradox 的数据库Imagedb为设计完成的Imagedb数据库

设计完成的数据库

为了方便测试程序Imagedb数据库存储在实例程序所在的路径下

设置TTable组件的TableName属性为ImagedbActive属性为True

在程序运行初期首先会判断Imagedb数据库中是否存在记录如果没有记录存在那么就执行以下代码向Imagedb数据库中添加bmp文件

procedure TFormFormCreate(Sender: TObject);

var

mem:TMemoryStream;

begin

if TableEof and TableBof then

begin

with Table do

begin

Insert;

FieldByName(Name)AsString:=;

mem:=TMemoryStreamCreate();

memLoadFromFile(bmp);

TBlobField(FieldByName(Data))LoadFromStream(mem);

Post;

end;

end;

end;

然后按照相同的方式顺序向Imagedb数据库中添加样品wav叶子wav荷花图像文件

最后通过下面的代码把Imagedb数据库中存储的文件名字添加到窗体的TListBox组件中

with Table do

begin

First;

while not Eof do

begin

ListBoxItemsAdd(FieldByName(Name)AsString);

Next;

end;

end;

在程序运行过程中如果用户在窗体的TListBox组件中选择了图像文件程序会通过TTable组件的First方法把数据表中的第条记录作为当前记录然后通过一个循环来遍历数据库中的记录如果某条记录中Name字段的内容和用户的选择相同那么就把该记录中Data字段中的图像信息读取出来并且把图像显示在窗体上的TImage组件上代码如下

procedure TFormListBoxClick(Sender: TObject);

var

mem:TStream;

bmp:TBitmap;

begin

with Table do

begin

First;

while not Eof do

begin

if FieldByName(Name)AsString=ListBoxItems[ListBoxItemIndex] then

break;

Next;

end;

bmp:=TBitmapCreate;

mem:=CreateBlobStream(FieldByName(Data)bmRead);

memPosition:=;

bmpLoadFromStream(mem);

selfImagePictureAssign(bmp);

bmpFree;

memFree;

end;

end;

程序代码如下

unit Unit;

interface

uses

Windows Messages SysUtils Variants Classes Graphics Controls Forms

Dialogs StdCtrls DB DBTablesmmsystem ExtCtrls;

type

TForm = class(TForm)

ListBox: TListBox;

Table: TTable;

Image: TImage;

procedure FormCreate(Sender: TObject);

procedure ListBoxClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form: TForm;

implementation

{$R *dfm}

procedure TFormFormCreate(Sender: TObject);

var

mem:TMemoryStream;

begin

if TableEof and TableBof then

begin

with Table do

begin

Insert;

FieldByName(Name)AsString:=;

mem:=TMemoryStreamCreate();

memLoadFromFile(bmp);

TBlobField(FieldByName(Data))LoadFromStream(mem);

Post;

Insert;

FieldByName(Name)AsString:=样品;

mem:=TMemoryStreamCreate();

memLoadFromFile(样品bmp);

TBlobField(FieldByName(Data))LoadFromStream(mem);

Post;

Insert;

FieldByName(Name)AsString:=叶子;

mem:=TMemoryStreamCreate();

memLoadFromFile(叶子bmp);

TBlobField(FieldByName(Data))LoadFromStream(mem);

Post;

Insert;

FieldByName(Name)AsString:=荷花;

mem:=TMemoryStreamCreate();

memLoadFromFile(荷花bmp);

TBlobField(FieldByName(Data))LoadFromStream(mem);

Post;

memFree;

end;

end;

with Table do

begin

First;

while not Eof do

begin

ListBoxItemsAdd(FieldByName(Name)AsString);

Next;

end;

end;

end;

procedure TFormListBoxClick(Sender: TObject);

var

mem:TStream;

bmp:TBitmap;

begin

with Table do

begin

First;

while not Eof do

begin

if FieldByName(Name)AsString=ListBoxItems[ListBoxItemIndex] then

break;

Next;

end;

bmp:=TBitmapCreate;

mem:=CreateBlobStream(FieldByName(Data)bmRead);

memPosition:=;

bmpLoadFromStream(mem);

selfImagePictureAssign(bmp);

bmpFree;

memFree;

end;

end;

end

保存文件然后按F键运行程序程序运行的初始画面如图所示

在TListBox组件中选中一项后就会显示相对应的图像文件如图所示

程序运行的初始画面

程序运行结果

               

上一篇:用Delphi实现网络驱动器的映射和断开

下一篇:Delphi开发嵌入式IE浏览器监控程序