Delphi数据库编程教程(五)

原创 2002年12月25日 10:07:00

第二节  使用DBImage引出JPEG—错误的方式

     DBImage—思路一(The DBImage - take one)

      当试图使用Delphi做新的尝试时,我所做的第一件事是向Delphi的自带帮助寻求方法。这是帮助文档将回答:TDBImage(在组件面板的Data Controls页)表示数据库当前记录的一个BLOB字段的图形图像。使用TDBImage表示图形字段值。TDBImage允许表单显示数据库的图形数据。TDBImage仅仅比TImage组件多了一些数据可视属性。其中两个最重要的属性是:DataSource(数据源)和Field(字段)。DataSource(数据源)属性连接图形组件到数据库。在我们的表单上有一个名为DataSource1的DataSource(数据源)组件—代表着一个数据集。Field(字段)属性指出拥有图像的字段(在表中)。
      一切都清楚了,现在在表单上放置一个DBImage组件并默认名为DBImage1。为了真正的把DBImage与表的BLOB字段相连,我们仅需要做以下的配置(使用Object Inspector):

      DBImage1.DataSource = DataSource1
      DBImage1.Field = Picture

      为了显示存在Applications表的Picture字段的JPEG图像,这是必需的窍门。

      为了验证这样的配置是否可以工作,我们所需做的唯一一件事是设置ADOTable1组件的Active(激活)属性为True即可。在设计时我们就可在Object Inspector(对象检视器)中完成。一旦你这样做了,就会出现以下的对话框:

Bitmap image not supported

      什么?为什么显示“位图图像无效”呢?我们有JPEG图片而不是BMP图片—问题就在这里吗?让我们再回头看看帮助。

      通过在帮助中的一阵点击之后,得出结论:为了得到数据库里的JPG图片,我们得使用TJpegImage对象。为了显示图片,我们需要Image(图像)组件的简单、不可视版本。同时,我们需要用流(Stream)从BLOB对象中载出图片。帮助文档叙述:我们应使用TADOBlobStream来访问或改变ADO数据集中BLOB或memo(备注)字段的值。

 

 

第三节 用流引出JPEG—错误的方法

      引出JPEG—思路二(Pulling the Jpeg - take two!

      既然我们不能使用DBImage做任何事—从表单中去掉它并放上一个普通的TImage组件(Additional页)命名为ADOImage。不幸的是,Image组件没有任何数据可视(data-aware)的属性,因此,需要一个单独的程序来显示它所表示的数据库表中的图片。完成这件事的最简单的方法是:在表单上放置一个Button(按钮),把所有的程序代码放在它的OnClick事件中,按钮的名称为:“btnShowImage”。

      为了使用ADOBLOBStream,帮助文档建议创建一个TADOBlobStream实例,用“流”的方法从数据集中读取图形字段,然后释放BLOB流。在中间的某个地方,我们将需要用LoadFromStream方法从TADOBlobStream对象中载入JPEG图像。Image(图像)组件的Picture(图片)、Graphic(图形)属性将用于真正的存储和显示图片。

      字段对象,它是什么?

      这时,我假设只需要一点点关于字段对象的知识对于你掌握本章已绰绰有余了。在Delphi数据库的开发中,主要的对象之一是TField对象。字段组件是表示运行(或设计)时的数据集字段的非可视化对象。TADOTable(和其他TDataSet子类)提供设计时对Fields Editor(字段编辑器)的访问方法。Fields Editor使你能选择数据集中你所想包含的字段。更重要的是,它创建了应用程序数据集中使用的字段组件的稳固的列表。为了调用Fields Editor,可以双击TADOTable组件。默认情况下,字段列表是空的。点击Add按钮打开一个对话框,里面列出了Applications表的字段列表。缺省情况下,所有字段都被选择,然后选择OK。

      Delphi会按如下的方式给出字段的默认名称:Table(表)名+Field(字段)名。这意味着我们的图片字段名为:ADOTable1Picture。

      TADOBlobStream的Create(创建)方法创建一个实例用于读或写一个指定的BLOB字段对象,在这里是ADOTable1Picture字段。

      我们在btnShowImage按钮的OnClick事件中写入程序代码。该代码将从当前所选行的Picture字段中读取图片。源代码如下所示:

      uses jpeg;
      ...
      procedure TForm1.btnShowImageClick(Sender: TObject);
      var    bS: TADOBlobStream;
      Pic : TJpegImage;
      begin
       bS := TADOBlobStream.Create
        (AdoTable1Picture, bmRead);
        try
          Pic:=TJpegImage.Create;
           try
            Pic.LoadFromStream(bS);
             ADOImage.Picture.Graphic:=Pic;
          finally
           Pic.Free;
          end;
       finally
         bS.Free
       end;
     end;

      OK,让我们运行这个工程。当然,设置ADOTable1.Active属性为True。表单显示后,点击按钮,将出现下面的显示:

Jpeg read error

      呃, 怎么哪?代码百分之百的正确但为什么不显示图像呢!记住“永不放弃,永不投降”!让我们深入到字节水平看看到底发生了什么!

Delphi数据库编程教程(三)

第三节 ADO(ActiveX Data Objects)编程模型      如文章“Delphi中引入ADO”所叙述的,ADO是一套COM(Component Object Model组件对象模型)...
  • eagletian
  • eagletian
  • 2002年12月23日 10:02
  • 4925

Delphi数据库编程教程(四)

第三章 数据库中的图片第一节 处理BLOBs,在Access中存储图片      现在开发数据库应用程序不仅仅只需要处理文本或数字数据。例如,如果你正开发基于Interner/Intranet或基于...
  • eagletian
  • eagletian
  • 2002年12月25日 10:09
  • 2802

Delphi数据库编程新手指南(04)

第四章  数据浏览与导航 数据访问所需组件       目前为止,本教程提供了如何连接到Access数据库,以及显示数据库表中图形数据的方法。上一章,我们讨论了一些“高级”的数据库编程技巧(译者加...
  • jinnblue
  • jinnblue
  • 2012年08月14日 16:22
  • 1258

Delphi数据库编程教程

Delphi数据库编程教程        题注:Delphi初学者编写数据库程序的免费在线教程,重点讨论ADO技术。        关于此教程:它是完全针对Delphi数据库编程初学者的免费在线教程,...
  • eagletian
  • eagletian
  • 2002年12月20日 22:35
  • 4665

Delphi数据库编程教程(八)

 第二节浏览和导航      创建访问数据库数据的表单有两种不同的方法。第一种方法是使用Database Form Expert(数据库表单专家)。但不幸的是,数据库表单专家仅仅只可以处理数据集组件中...
  • eagletian
  • eagletian
  • 2002年12月27日 09:07
  • 2027

Delphi数据库编程教程(二)

       填写数据(Filling some data)       为了有一些“哑元”(dummy)数据,在类型(Type)表中填上以下4个记录:“游戏(Game)”,“数据库(Database...
  • eagletian
  • eagletian
  • 2002年12月23日 10:02
  • 3048

Delphi数据库编程教程(六)

 第四节  在BLOB中寻找JPEG的开端      OLE对象类型格式—思路三(OLE object type format - take three!)      现在所有我们需要做的是存储图片到...
  • eagletian
  • eagletian
  • 2002年12月25日 10:01
  • 2205

Delphi数据库编程教程(九)

第五章 数据集数据的后面.....第一节 数据的状态      当用Delphi和ADO开发数据库应用程序时,大部分工作用于学习数据集组件的帮助文档。。为了创建一个基于ADO的程序,Delphi提供了...
  • eagletian
  • eagletian
  • 2002年12月30日 09:23
  • 2682

Delphi数据库编程教程(七)

第四章  数据浏览和导航第一节  设置和连接      欢迎来到免费DB Delphi教程的第四章!到现在为止,本教程以说明了怎样连接到Access数据库及怎样显示数据库表中的图形数据。在上一章我们...
  • eagletian
  • eagletian
  • 2002年12月26日 09:29
  • 2411

100_《Delphi5数据库开发技术》

Delphi是一种非常优秀的可视化程序开发语言,Delphi 5 基于Windows 95/98/NT,采用高度结构化的Object Pascal语言,具有结构清晰、编译迅速等特点。它强大的可扩展数据...
  • shuaihj
  • shuaihj
  • 2010年12月18日 15:31
  • 1655
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi数据库编程教程(五)
举报原因:
原因补充:

(最多只允许输入30个字)