广告位招租 联系qq:165345322

用VC实现对超长数据库字段的操作简介

时间:2007-02-09 10:49:08   来源:ahcit.com  作者:高云飞 孙斌 王宁  点击:次  出处:技术无忧
关键字:VC 6.0 数据库 关键技术

本文介绍了用VC实现对超长数据库字段操作方法的关键技术,并以Access2003环境下的数据库为例,在VC 6.0下进行了实现,给出了关键的程序代码。

1 前言

数据库在实际的开发过程中常常需要存储较大的二进制数据对象,如图像、音频文件、视频文件或其他二进制数据,这些数据称之为二进制大对象BLOB(Binary Large Object),其存取方式与普通数据有所区别。在数据库的表中,BLOB实际上是以二进制数据的形式存放的。由于BLOB的特殊性,一般的程序都无法处理它。比如,如果在一张表中存在BLOB,当用access或Database DeskTop(Delphi在带的数据库管理工具)等打开它时,BLOB列将只显示BLOB字样。至于该列中实际存的是什么数据单靠access(Database DeskTop)是无法得到的。如果在我们编制的程序中,用控件打开一个有BLOB字段的表,效果也一样。我们的程序无法直接显示、编辑以及插入BLOB字段。可见,如何处理这种不能直接显示的二进制形式数据,用常规的方法是不能满足要求的。

结合笔者开发的模型库管理系统,本文以Visual C++ 6.0和access 2003环境下的数据库为例,介绍利用ADO实现对超长数据库字段的访问,包括写入和读出。

2 设计数据库

使用Access2003作为数据库系统,数据库名为blob,唯一的一个数据表为blob,如图1所示。

9deb5425216bfa9d9da9deb0aae93045.jpg


图1
其中包括四个字段,分别是id(文本),name(文本),data(OLE对象)和suffix(后缀名),其字段类型必须是OLE对象。id作为主键,name是该blob文件的文件名,data字段用来保存二进制大对象,suffix是二进制文件的后缀名,可以是rm,avi,bmp,mp3等。

3 系统的实现

3.1 SafeArray:

在对BLOB进行操作时,要用到SAFEARRAY结构。SAFEARRAY是一种结构化的数据类型,包含了一个由其它数据类型的数据元素组成的数组。之所以称之为安全的数组是因为它包含了每一维的边界信息,并限制在边界内进行数组元素的访问。其Win32定义SAFEARRAY如下:


  typedef struct tagSAFEARRAY
   {
    unsigned short cDims;
    unsigned short fFeatures;
    unsigned long cbElements;
    unsigned long cLocks;
    void * pvData;
    SAFEARRAYBOUND rgsabound[ 1 ];
   } SAFEARRAY;
 

这个结构的成员(cDims,cLocks等)是通过API函数来设置和管理的。真正的数据存放在pvData成员中,而SAFEARRAYBOUND结构定义该数组结构的细节。以下就是该结构成员的简要描述:

53945292907fe70ad5b9d112c4cc9069.png

rgsabound是一个有趣的成员,它的结构不太直观。它是数据范围的数组。该数组的大小依safe array维数的不同而有所区别。rgsabound成员是一个SAFEARRAYBOUND结构的数组--每个元素代表SAFEARRAY的一个维。 


 
typedef struct tagSAFEARRAYBOUND   
{  
unsigned long cElements;    
unsigned long lLbound;   
} SAFEARRAYBOUND;  
 访问技术无忧网,软硬件通吃保你技术无忧!网址http://www.pc51.net


 1/2    1 2 ›› ›|

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

特别推荐
300x250广告位招租