在Delphi实现在数据库中存取图像的图文演示无错

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

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

图1 主界面

本系统中需要设计一个新的基于Paradox 7的数据库Image.db,图2为设计完成的Image.db数据库。

图2 设计完成的数据库

为了方便测试程序,Image.db数据库存储在实例程序所在的路径下。

设置TTable组件的TableName属性为Image.db,Active属性为True。

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

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;
end;
end;
end;
然后按照相同的方式顺序向Image.db数据库中添加“样品.wav”、“叶子.wav”和“荷花”图像文件。

最后通过下面的代码把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 程序运行的初始画面

(0)

相关推荐

  • delphi实现保存和读取图片的方法

    本文实例讲述了delphi实现保存和读取图片的方法,是非常实用的技巧.分享给大家供大家参考.具体实现方法如下: 首先引用jpeg 1.显示图片: if OpenPictureDialog.Execute then begin img1.Picture.LoadFromFile(OpenPictureDialog.FileName); btnPicture.Text:=OpenPictureDialog.FileName; end; 2.保存图片: var Stream:TMemoryStream

  • Delphi基本图像处理方法汇总

    本文实例汇总了Delphi基本图像处理方法.分享给大家供大家参考.具体分析如下: //浮雕 procedure Emboss(SrcBmp,DestBmp:TBitmap;AzimuthChange:integer);overload; var i, j, Gray, Azimuthvalue, R, G, B: integer; SrcRGB, SrcRGB1, SrcRGB2, DestRGB: pRGBTriple; begin for i := 0 to SrcBmp.Height -

  • TImage组件实现保存图片到Stream

    因为一个项目,不得不将图片保存到数据库中,需要的时候再从数据库中读取.初时,以为很简单,不就是一个Stream.事实上,也很简单.度娘一下,代码也很多,但,都是坑! 看一下TImage的源,Picture.Graphic下有一个loadfromStream和SavetoStream.如果没有猜错,那么直接用这两个函数就可以了.于是,我做了一个demo测试 demo里放了两个TImage.TImage1放一张图片,然后用代码将TImage1的图片保存到Stream.TImage2再从这个Strea

  • 在Delphi实现在数据库中存取图像的图文演示无错

    本实例演示如何在数据库中存取图像文件. 向窗体上添加一个TListBox组件.一个TImage组件和一个TTable组件,设计完成的主界面如图1所示. 图1 主界面 本系统中需要设计一个新的基于Paradox 7的数据库Image.db,图2为设计完成的Image.db数据库. 图2 设计完成的数据库 为了方便测试程序,Image.db数据库存储在实例程序所在的路径下. 设置TTable组件的TableName属性为Image.db,Active属性为True. 在程序运行初期,首先会判断Ima

  • 如何基于java向mysql数据库中存取图片

    这篇文章主要介绍了如何基于java向mysql数据库中存取图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 学mysql的时候都是做个表格,放的也都是文字内容,虽然我知道长篇的文章和图片或者视频的都是用过文件夹的方式存储的,再讲文件路径存进数据库中.但还是想试试直接往mysql数据库中存取图片.这里我用的是java语言和jdbc实现的 mysql数据库中有一个类型是Blob类型,这是一个二进制类型,通常我们会将图片或音像文件转成二进制再存入数

  • C#操作数据库中存取图片文件的方法

    本文实例讲述了C#操作数据库中存取图片文件的方法.分享给大家供大家参考.具体如下: private string sqlconnstr = "Data Source=.;Database=db_test;User id=sa;PWD=123456"; /*功能:把一种图片插入到数据库中 *返回值:无 */ void InsertImageToDB() { //将需要存储的图片读取为数据流 FileStream fs = new FileStream(@"D:/Bear.jpg

  • 用asp实现的数据库中存取文件的代码

    ************************************************************************* '** '** 使用 ADODB.Stream 保存/读取文件到数据库 '** 引用 Microsoft ActiveX Data Objects 2.5 Library 及以上版本 '** '** ----- 数据库连接字符串模板 --------------------------------------- '** ACCESS数据库 '** i

  • c#读取图像保存到数据库中(数据库保存图片)

    复制代码 代码如下: 注:MyTools.g_PhotoField为数据库表中的图象字段名称//将图片保存到数据库中    if(this.picPhoto.Image==null)    {     m_DataRow[MyTools.g_PhotoField]=DBNull.Value;    }    else    {     try      {      MemoryStream ms = new MemoryStream ();      picPhoto.Image.Save (

  • 整理Oracle数据库中数据查询优化的一些关键点

    数据库最基本的任务是存储.管理数据,而终端用户唯一能看到的数据库特性就是其性能:数据库以何速度处理某一指定查询的结果,并且将结果返回到用户所用的工具和应用程序.从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大.查阅新闻. 查看文件. 查询统计信息等.因此,数据库查询操作的效率是影响一个应用系统响应时间的关键因素.随着一个应用系统中数据的动态增长,数据量变大,数据库查询效率就会有所降低,应用系统的响应速度也随之减慢,尤其对于海量数据的管理和查询问题就更加突出,Oracle查询

  • thinkphp表单上传文件并将文件路径保存到数据库中

    上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` ( `id` int(11) NOT NULL AUTO_INCREMENT, `img_name` varchar(255) DEFAULT NULL COMMENT '图片名称', `img_url` varchar(255) DEFAULT NULL COMMENT '图片路径', `create_time` text,

  • 在MsSql、Access两种数据库中插入记录后马上得到自动编号的ID值

    本编文章将要介绍重点解释如何在Ms Sql Server中更新或添加一条记录后立即得到其标识列的值,这个值在ACCESS就是我们熟知的自动编号的 ID值,好了,闲话不多说,代码我也不多写,只写关键些,相信各位高手一看就明白,呵呵.后面也附带了在ACCESS中获取的方法,虽然在ACCESS 中获取自动编号的文章网上虽然很多,但放在此做为一个总结吧. Set testRs=Server.CreateObject("ADODB.RecordSet") '创建要测试的对象 testRs.Ope

  • 在C#和MySQL中存取中文字符时避免乱码的方法

    当用到socket来进行网络程序开发时,大多数情况下会遇到中文字符的发送与接收,这时若对发送的字符串用默认的方式进行处理,则一般会得到一堆乱码. 由于中文字符采用双字节表示,所以对含有中文的字符串的处理一定要按UNICODE编码方式进行处理,也就是说,使用socket发送中文字串时要事先将字串转成UNICODE格式的. 下面是简单的socket通信的代码. //服务端代码 try { IPAddress MyIP = IPAddress.Parse("127.0.0.1″); TcpListen

  • SQL Server数据库中的存储过程介绍

    什么是存储过程 如果你接触过其他的编程语言,那么就好理解了,存储过程就像是方法一样. 竟然他是方法那么他就有类似的方法名,方法要传递的变量和返回结果,所以存储过程有存储过程名有存储过程参数也有返回值. 存储过程的优点: 存储过程的能力大大增强了SQL语言的功能和灵活性. 1.可保证数据的安全性和完整性. 2.通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全. 3.通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性. 4.在运行存储过程前,数据库已对其

随机推荐