第二节  使用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(对象检视器)中完成。一旦你这样做了,就会出现以下的对话框:

什么?为什么显示“位图图像无效”呢?我们有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。表单显示后,点击按钮,将出现下面的显示:

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

Delphi数据库编程教程(五)相关推荐

  1. Delphi数据库编程教程(二)

    填写数据(Filling some data)        为了有一些"哑元"(dummy)数据,在类型(Type)表中填上以下4个记录:"游戏(Game)" ...

  2. Delphi数据库编程教程(四)

    第三章 数据库中的图片 第一节 处理BLOBs,在Access中存储图片       现在开发数据库应用程序不仅仅只需要处理文本或数字数据.例如,如果你正开发基于Interner/Intranet或基 ...

  3. Delphi数据库编程教程(九)

    第五章 数据集数据的后面..... 第一节 数据的状态 当用Delphi和ADO开发数据库应用程序时,大部分工作用于学习数据集组件的帮助文档..为了创建一个基于ADO的程序,Delphi提供了几个数据 ...

  4. Delphi数据库编程教程(七)

    第四章  数据浏览和导航 第一节  设置和连接       欢迎来到免费DB Delphi教程的第四章!到现在为止,本教程以说明了怎样连接到Access数据库及怎样显示数据库表中的图形数据.在上一章我 ...

  5. Delphi数据库编程教程(三)

    第三节 ADO(ActiveX Data Objects)编程模型 如文章"Delphi中引入ADO"所叙述的,ADO是一套COM(Component Object Model组件 ...

  6. Delphi数据库编程一日通

    Delphi数据库编程一日通. 通常情况下,利用 Delphi 开发数据库应用程序,可以使用TTable.TDataSource.TDBEdit.TDBNavigator等构件.只要正确设置了构件的某 ...

  7. C语言连接MySQL数据库编程教程:超详细

    ** C语言连接MySQL数据库编程教程 ** 一.下载安装mysql.h库文件 我们使用的编译器一般为VC6.0或者VS,默认的都是32位编译器,所以我们下载的库文件也直接下载32位的就可以.下面附 ...

  8. 深入浅出Qt数据库编程:从基本操作到高级技巧

    深入浅出Qt数据库编程:从基本操作到高级技巧 (Demystifying Qt Database Programming: From Basic Operations to Advanced Tech ...

  9. oracle 郑阿奇 pdf,Delphi编程教程 (郑阿奇) PDF扫描版

    <delphi编程教程>主要包括delphi 2010集成开发环境.面向对象的pascal语言.窗体和常用组件.菜单类组件和工具栏.多窗体和mdi窗体.文件操作.数据库基础和应用(以sql ...

最新文章

  1. POJ - 2763 Housewife Wind LCA+dfs序+线段树
  2. Rabbitmq 消息对列 生产者与消费者的具体实现 springboot
  3. js如何获得FCKeditor控件的值
  4. GPT-3没有亲自上手,不如展望一下GPT-4?
  5. java继承的生活例子,帮你突破瓶颈
  6. 收藏 | 49 个 Python 学习资源
  7. 2013年长沙网络赛G题
  8. 统计学 计算机论文,统计学课程论文范文
  9. 打破PermGen神话
  10. 运行cudasift
  11. centos6配置mysql远程访问_MariaDB 数据库配置 Navicat 程序远程访问权限
  12. mysql多数据源事务_springboot项目多数据源及其事务
  13. 【电子技术实验设计】简易交通灯控制逻辑电路设计报告
  14. LCD1602单片机(STC51/STM32)驱动程序详解
  15. “老赖”罗永浩:“首席忽悠官”,发布黑科技鲨纹技术
  16. Java实现Excel中的Rate函数
  17. 在win xp上使用pyqt5
  18. 京东2019春招商业分析试卷[题目整理]
  19. python 爬取淘宝网课
  20. 无人配送这半年:从风口到浪潮

热门文章

  1. 计算机系统中中断源怎么分类,中断优先级
  2. Flutter汽车仪表盘DashBoard
  3. 安全绳日本JIS T 8165标准
  4. 英语二 - 常用词根五
  5. 基于STM32单片机智能蓝牙PWM温控风扇带定时APP控制
  6. I/O操作总结(一)
  7. 互联网兴起背后 众多医疗网红离开医院照样门庭若市
  8. MySQL中的 空值(null)和空字符(‘‘)
  9. [Game] Happiness 破解 StarForce 认证
  10. 单片机初学者,都会遇到的10个问题