Delphi存取图像完整解决方案2008-02-02李明亮 罗明莉对于涉及图像数据的数据库应用程序,图像数据的存取技术是一个关键。由于缺少技术文档及DEMO例程演示,为此笔者在网上搜索了相关资料,有的根本不能用,有的过于繁杂,有的应用范围太窄(如只能适用于BMP图像),有的写得过于简单理解起来十分困难。。。而且在网上这也是大家比较关心的一个问题。笔者对这个问题进行了反复实作和探索,下边笔者将通过一个完整的简单例子来说明如何保存和显示SQL数据库中的图像数据(同时包括BMP和JPEG两种格式)。一、 创建演示数据库在SQL SERVER中新建一演示数据库:Demo,并创建一数据表Picture1,结构如下:
字段名 | Dtata Type | Identity |
Id | Int | Yes |
Isbmp | Tinyint | |
Myimage | Image | |
字段Isbmp是用来记录在Myimage中存入的图像的类型(0表JPEG,1表BMP,其它值表无图像),Isbmp数据类型选用整型Tinyint而末选用逻辑bit型主要是考虑到如下方法仍适用于ACCESS数据库。在SQL中打开表Picture1,添入几条记录,Myimage图像字段值暂不管,字段Isbmp值随便输入0和1之外的其它数。二、 窗口设计在DELPHI中新建一个工程,在FORM1上放置如表所示控件(考虑到TDBImage型控件不能正确显示JPEG型图像,所以选用Timage型控件显示所有类型图像)。
组件类别 | 组件属性名 | 属性值 | 用途说明 |
Timage | caption | Image1 | 显示图像 |
name | Image1 |
Stretch | True |
Tbutton | caption | 选择图像 | 选择图像 |
name | selectimage |
Tbutton | caption | 保存图像 | 保存图像到数据库 |
name | savetodb |
TADOConnection | caption | Adoconnection1 | 创建与数据库demo的连接 |
name | Adoconnection1 |
Connectionstring | 见备注 |
Connected | True |
Loginprompt | False |
Tadotable | Caption | Adotable1 | 建立与表Picture1的连接 |
name | Adotable1 |
Connection | Adoconnection1 |
Tablename | Picture1 |
Active | True |
Tdatasource | Name | Datasource1 | 建立数据源 |
Dataset | Adotable1 |
Topenpicturedialog | Caption | Openpicturedialog1 | 选择图像文件 |
Name | Openpicturedialog1 |
Tdbgrid | Caption | Dbgrid1 | 显示记录 |
Name | Dbgrid1 |
Datasource | Datasource1 |
备注:adoconnection1.connectstring :="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=demo;Data Source=Mysqlserver"Mysqlserver为SQL服务器的名称请据实际情况更改。