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

http://tech.ddvip.com   2006年07月31日    社区交流

本文详细介绍Delphi实现在数据库中存取图像

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

  with Table1 do
begin
 First;
 while not Eof do
 begin
  ListBox1.Items.Add(FieldByName(’Name’).AsString);
  Next;
 end;
end;

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

  procedure TForm1.ListBox1Click(Sender: TObject);
var
 mem:TStream;
 bmp:TBitmap;
begin
 with Table1 do
 begin
  First;
  while not Eof do
  begin
   if FieldByName(’Name’).AsString=ListBox1.Items[ListBox1.ItemIndex] then
   break;
   Next;
  end;
  bmp:=TBitmap.Create;
  mem:=CreateBlobStream(FieldByName(’Data’),bmRead);
  mem.Position:=0;
  bmp.LoadFromStream(mem);
  self.Image1.Picture.Assign(bmp);
  bmp.Free;
  mem.Free;
 end;
end;

  程序代码如下:

  unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables,mmsystem, ExtCtrls;
type
 TForm1 = class(TForm)
 ListBox1: TListBox;
 Table1: TTable;
 Image1: TImage;
 procedure FormCreate(Sender: TObject);
 procedure ListBox1Click(Sender: TObject);
private
 { Private declarations }
public
 { Public declarations }
end;
var
 Form1: TForm1;
 implementation
 {$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
 mem:TMemoryStream;
begin
 if Table1.Eof and Table1.Bof then
 begin
  with Table1 do
  begin
   Insert;
   FieldByName(’Name’).AsString:=’鸟’;
   mem:=TMemoryStream.Create();
   mem.LoadFromFile(’鸟.bmp’);
   TBlobField(FieldByName(’Data’)).LoadFromStream(mem);
   Post;
    Insert;
   FieldByName(’Name’).AsString:=’样品’;
   mem:=TMemoryStream.Create();
   mem.LoadFromFile(’样品.bmp’);
   TBlobField(FieldByName(’Data’)).LoadFromStream(mem);
   Post;
   Insert;
   FieldByName(’Name’).AsString:=’叶子’;
   mem:=TMemoryStream.Create();
   mem.LoadFromFile(’叶子.bmp’);
   TBlobField(FieldByName(’Data’)).LoadFromStream(mem);
   Post;
   Insert;
   FieldByName(’Name’).AsString:=’荷花’;
   mem:=TMemoryStream.Create();
   mem.LoadFromFile(’荷花.bmp’);
   TBlobField(FieldByName(’Data’)).LoadFromStream(mem);
   Post;
   mem.Free;
  end;
 end;
 with Table1 do
 begin
  First;
  while not Eof do
  begin
   ListBox1.Items.Add(FieldByName(’Name’).AsString);
   Next;
  end;
 end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
 mem:TStream;
 bmp:TBitmap;
begin
 with Table1 do
 begin
  First;
  while not Eof do
  begin
   if FieldByName(’Name’).AsString=ListBox1.Items[ListBox1.ItemIndex] then
    break;
  Next;
  end;
  bmp:=TBitmap.Create;
  mem:=CreateBlobStream(FieldByName(’Data’),bmRead);
  mem.Position:=0;
  bmp.LoadFromStream(mem);
  self.Image1.Picture.Assign(bmp);
  bmp.Free;
  mem.Free;
 end;
end;
end.

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

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

 

  图3 程序运行的初始画面

  图4 程序运行结果

责编:豆豆技术应用

正在加载评论...