您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Delphi >> 正文

Google
深入Delphi编程
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 16:01:41
下文的讨论打好基础 。更多、更深入的东西等待着你自己去发掘。
  本文已经多次强调OOP的重要性,这里还要强调一次:对OOP的掌握程度,在某种意义上决定着你对Delphi世界的理解能力。
  
  2、数据库
  
  在相对枯燥的理论之后,我们终于要开始接触到一些比较激动人心的实际应用了。
  数据库编程是Delphi最强大的优势之一,恐怕也很少有Delphi程序员没有接触过数据库编程的。Delphi独特的Data-Aware构件,让很多初识Delphi的人为之目瞪口呆。不需要写任何代码,在几分钟之内就可以做出一个相当精巧的数据库程序,而且在开发期就可以看到运行期的结果,这真是不可思议啊!但是,Delphi强大无比的数据库开发能力,决不仅仅限于用几个构件操纵一下DBF或是Access数据库而已。你所看到只是冰山一角。让我们仔细说来。
  数据库虽然家族庞大,但一般来说可以分为两种:文件型数据库和C/S型数据库。下面分别讨论。
  
  2.1 文件型数据库
  所谓文件型数据库,顾名思义,是基于文件的(file-based),数据被按照一定格式储存在磁盘里,使用时由应用程序通过相应的驱动程序甚至直接对数据文件进行读取 。也就是说,这种数据库的访问方式是被动式的,只要了解其文件格式,任何程序都可以直接读取,这样就使得它的安全性相当糟糕。同时,在蓬勃兴起的网络应用,文件型数据库更是难有用武之地:效率低下,不支持很多SQL命令,不支持视图、触发器、存储过程等高级功能,等等。这些特点决定了它不适合大型的工程。
  最为大家所熟悉的文件型数据库可能就是DBF(DBase/Foxbase/Foxpro)数据库,在DOS时代风靡一时,相信很多人都有过抱着一本手册苦背Foxbase命令的回忆吧!其特点是,每个Table或Index都是一个独立的文件,使用相当简单,性能还可以,安全性非常的差,但应用非常广泛(主要是DOS时代遗留下来的,哪个单位没有两个用这种东东编出来的老古董程序呢?)。它在今天还能占有一席之地,其主要原因之一是,正因为简单和使用广泛,使得对它的访问是最容易的,甚至根本无需第三方的接口,就可直接对其进行字节级的读取 。
  除此之外,还有著名的Access数据库。这是MS Office里的构件之一,和DBF数据库不同,所有的文件都被整合在一个.mdb文件中,这样就避免了数据库变大之后管理上带来的麻烦。同时它还提供密码保护功能,安全性比DBF数据库要好很多。Access数据库除了一般的文本数据之外,还擅长于对多媒体数据的处理,在对声音、图像乃至基于OLE的对象进行处理时,令DBF数据库望尘莫及。随着微软战略的步步胜利,Access数据库也不断发展,凭借着优秀的性能和与MS Office的无缝结合,早已超越DBase系列,成为现今最强大的文件型数据库了。
  Delphi中附带的Paradox也是一种文件型数据库。它是Inprise公司自己的产品。因此和Inprise的系列开发工具配合得很不错。它支持密码保护,支持标准的SQL,性能也还不错,但是应用就不那么广泛了。和DBF数据库一样,它的每一个Table都是一个独立的文件,因此也有同样的管理问题。
  上文说到可以对文件型数据库直接读取,但实际编程中很少有人这么做。因为再简单的数据库其实也是相当复杂的,一步步分析它的格式,从底层实现所有的数据库应用,如果都要程序员去写的话,可能会把人累死。所以数据库的开发商将这些访问代码封装起来,向程序员开放,程序员只需要调用相应的接口就可以了。
  以DBF为例,使用DBase/Foxbase/Foxpro系列开发工具,可以用它自己的语法开发出应用程序。其中对DBF文件的具体操作被封装了。对于Access数据库,微软公布了一个DAO(Database Access Object),由一系列的DLL文件组成,封装了对.mdb文件的访问。使用VB的读者可能对DAO比较熟悉,只要在VB中嵌入DAO对象,就可以非常方便地访问Access数据库了。ODBC(Open DataBase Connection,开放数据库互连)也是一种封装,用意在于向开发人员提供一个统一的接口,通过这个接口可以访问任何支持ODBC的数据库,只要该数据库提供了相应的ODBC驱动。从这一点上来说,ODBC是一种更加高级的封装。目前几乎所有的主流的数据库都能被ODBC所支持。打开你的Windows的控制面板,就可以看到ODBC的图标。
  用Delphi写数据库程序的人免不了要同BDE打交道。BDE(Borland Dasebase Engine,Borland数据库引擎)是一个和ODBC类似的东西,Borland/Inprise本来企图用它来统一数据库接口。但后来Inprise在和微软的战争中败下阵来(ODBC是微软搞出来的),它又不肯放弃BDE,而是将其捆绑在Delphi/C++ Builder系列开发工具中,结果好象变成这些开发工具的一种附属品了。
  用BDE开发数据库程序相当容易。许多Delphi教科书在写到数据库开发这一章时,总是告诉你先在BDE中为某个DBF或Paradox数据库设置一个别名,然后往窗体上放一个TTable构件,然后将其DatabaseName指向相应的别名……然后,这个数据库中某个表的内容就在相应的Data-Aware构件中显示出来了。但是它们具体是怎么工作的呢?
  Delphi对数据库进行访问时,事实上通过了很多层次的连接。如下图:
  
  图1
  DataAware构件-DataSource构件-DataSet构件-BDE-数据库
  
  从这个图可以看出,BDE负责与具体的数据库打交道,而Dataset构件与BDE相连,DataSource构件与Dataset构件相连,最后才连接到显示具体数据的Data-Aware构件。在Delphi的构件面板上,Data Access页面中的构件一般属于DataSet构件,例如TTable、TQuery,只要指定它们的DatabaseName属性,就可以将它们与某个数据库建立连接。在Data Control页面中的构件一般是Data-Aware构件,例如TDBGrid,TDBEdit,TDBImage。它们的作用看上去与一般的Delphi构件相似,不同之处在于,可以通过一个DataSource构件作为中介,与DataSet构件相连,并自动显示相应的数据。
  用Delphi的数据库构件建立一个应用程序是如此之方便,但是如果深入下去,会发现事情并不简单。你可以尝试自己编写代码,访问数据库中字段,而不是通过Data-Aware构件由用户来编辑。如何做到这一点呢?秘密在于Field构件。
  可以说,Field构件是Delphi数据库应用程序的基础 。当打开一个DataSet构件时,相应的数据会被读取,并储存在TTable或TQuery构件的Fields属性中。这个属性被定义为Field数组。通过直接访问数组,可以使用它们,例如:
  
  Table1.Fields[0].AsInteger;
  
  这段代码访问了Table1中当前记录的第一个字段,该字段的类型为Integer。
  也可以通过使用FieldbyName属性来使用它们:
  
  Table1.FieldbyName('Last Name').AsString;
  
  这段代码访问了Table1中当前记录的名为Last Name的字段,该字段的类型为String。
  事实上,Data-Aware构件就是通过访问DataSet构件的Fields属性来使用数据的。弄明白了这一点之后,你自己也可以尝试改写一个常规的显示构件,使之具有Data-Aware的性质。其实,大多数使用Delphi的数据库高手并不喜欢使用Data-Aware构件,因为Data-Aware构件远不用常规的构件来得灵活。DataSet构件除了Fields属性之外,还具有数目众多的特殊属性、方法和事件,足以应付从小型文本数据库到大型网络数据库的所有应用。本文不拟一一讨论它们,如果读者能将它们的运用烂熟于

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
GOOGLE广告

阅读排行

| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号