优秀的文件型数据库引擎──DBISAM

软件世界

用Delphi开发小型文件型数据库应用程序,在数据库引擎的选择上,通常有这么几种:一是Delphi自带的BDE引擎,通过BDE,我们可以与多种类型的数据库相连接,比如Pardox(*.db)、xBase(*.dbf)、Access数据库(*.mdb)。但是,如果使用了BDE,我们就必须将体积不小的BDE的相关文件安装到客户电脑中,而且BDE的配置也是相当复杂,一个不到1MB的程序居然要带上一个庞大的BDE安装包,实在是令人不爽。另外一种选择是使用微软所提供的ADO,ADO的确是一款功能强大的数据库引擎,但只有Windows 98第二版才提供了对ADO的支持,如果要在低版本的Windows 9x操作系统中使用ADO,我们也必须提供相关的ADO安装文件。开发小型文件型数据库应用程序,我们自然希望自己的程序能够随拷随用,小巧玲珑,不受过多的限制,而DBISAM则刚好符合我们的要求。接下来,为大家简单地介绍一下DBISAM的安装与使用。

什么是DBISAM

DBISAM是一款优秀的免费文件型数据库引擎(下载地址:http://www.elevatesoft.com/download.htm),适用于Delphi 3~ Delphi 6,C++ Builder 3~ C++ Builder 5,它拥有自己特有的文件格式和接口,编译后的程序可以独立运行,不需要BDE、ODBC或者是ADO的支持,其引擎(约200KB~300KB)已包含在编译后的EXE文件中,支持标准的SQL查询,支持多用户并发访问,支持事务处理,支持文件加密,特别适合制作小型的数据库管理程序。
另外,DBISAM还自带了实用程序,可以方便地建立、修改、加密数据库以及将多种格式的数据库转换为自己的数据库格式。

DBISAM控件的安装

DBISAM的安装相当容易,只要直接执行安装程序就可以了,安装程序会自动将DBISAM的相关控件安装在Delphi的控件面板上。安装完成后在Delphi的控件面板中会多出两页:“DBISAM”和“DBISAM Utilities”。“DBISAM”页中包含了四个控件,分别是DBISAMTable、DBISAMQuery、DBISAMDatabase和DBISAMSession,这四个控件的作用和使用方法都与Delphi自带的Data Access控件相类似,在下面会具体说明它们的用法。而“DBISAM Utilities”页中包含了DBISAMDBGrid、DBISAMFileLisBox、DBISAMDiectoryListBox、DBISAMDriveComoboBox、DBISAMStatusBar五个数据库感知控件,不过其功能远比不上那些专业的数据库控件如InfoPower等。

建立、设计和转换DBISAM数据库

DBISAM自带了一个名为Database System Utility的实用程序,用它可以方便地建立、修改DBISAM的数据库;另一个实用程序名为BDE Database Transfer Utility,利用该程序,我们可以方便地将各种类型的数据库转化为DBISAM的数据格式。这两个实用程序的使用与其他数据库系统的实用工具非常相似,使用过其他数据库设计工具的读者应该能很快掌握。
建库实例:运行Database System Utility,点击菜单File→NewTable,在弹出的New Table对话框中可以对表进行设计,如新建字段、索引等,其中的“Encrypted”选项可以对数据表进行加密,满意后点SAVE按钮存盘即可。DBISAM数据库文件扩展名为.dat,其索引文件的扩展名为.idx(在这里我们把所建立的表存放于d:\test目录中,表的文件名为test.dat)。

DBISAM控件的使用

(1)新建一个Delphi工程,将DBISAMTable、DBISAMQuery和DBISAMDatabase控件以及Delphi自带的DataSource控件全部拖到设计窗体上,Delphi将其自动命名为DBISAMTable1、DBISAMQuery1、DBISAMDatabase1和DataSource1,并将DataSource1的DataSet属性设为DBISAMTable1,这几个控件用于访问数据库。另外再拖一个DBGRID控件于窗体上,将其DATASOURCE属性指定为DataSource1,用于显示表中的数据。
(2)选中DBISAMDatabase1控件,将Dirctory设为DBISAM表所在的目录(假设我们所建的表保存于d:\test目录中,表文件名为test.dat,则Dirctory属性就设为d:\test);接着设定DatabaseName属性,名称自定(这里设为db);最后将Connected设为True就可以了。
(3)选中DBISAMTable1控件,设定它的DatabaseName属性值为db,然后点击TableName属性,在下拉框中选择一个表名(这里为test.dat),最后将ACTIVE属性设为TRUE。看,在DBGRID中显示出刚才我们所设计的表的内容了。
总的来说,DBISAM数据访问控件的使用与Delphi自带的数据库控件的使用方法并没有什么太大的不同,原来在Delphi中所学的数据库编程技巧、方法都可运用于此。

DBISAM的高级功能

(1)事务处理
DBISAM提供了完善的多用户支持和事务处理的能力,我们只要用DBISAMDatabase控件所提供的3个方法StartTransaction(启动事务处理)、Commit(提交事务处理),RollBack(回滚)就可以使多用户编程不再成为头痛的事情(呵呵,这可是大型数据库SQL-SERVER、ORACLE才有的功能啊)。
实例:
DBISAMDatabase1.StartTransaction
Try
DBISAMQuery1.Execute;
DBISAMDatabase1.Commit;
Except
DBISAMDbatabase1.Rollback
end;
不过DBISAM只支持read-committed事务隔离级别,即网络上的其他用户只能看到已经提交(commit)的数据。
(2)强大的SQL支持
DBISAM支持SQL 92标准,你尽可以放心大胆在程序中使用各种符合SQL 92 语法的SQL语句,而且DBISAMQuery控件还有一个相当独特的优点,就是在查询过程中可以显示查询进度并随时中断查询过程,在查询过程中会发生事件名叫OnQueryProgress。
实例:
DBISAMQuery1QueryProgress(Sender: TObject;CurrentRecord: Integer; PercentDone: Word;var AbortQuery: Boolean);
begin
form1.caption:='查询进度:'+inttostr(PercentDone)+'%'
//其中CurrentRecord是指当前记录;PercentDone是指查询的进度;AbortQuery,将该变量设为
// False即可中断查询
end;
通过上面所提供的简单例子,相信大家一定对DBISAM的功能和用法都有了一些了解吧。但DBISAM的强大功能不是用简单的几句话可以说清楚的,希望有兴趣的读者能花时间去慢慢钻研、摸索。