Delphi中嵌入的数据库应用开发工具如Database Form Expert具有很强大的功能,我们不需要编写任何程序代码便可以快速地创建一个简单的数据库应用程序,甚至还能创建基于多个数据库表的主要──明细型数据库应用程序。
本章主要介绍用Delphi开发简单的数据库应用程序的一般方法和步骤,首先让读者对Delphi强劲的数据库应用开发工具有一个直观的印象,然后在此基础上进行复杂的数据库应用程序的设计,本章主要包括以下内容:
● 创建数据库应用窗体
包括用Database Form Expert 或手工方式创建简单的无需编写程序代码的应用程序或者利用多个部件并编写功能复杂的程序代码创建主要──明细型数据库应用程序。
● 在应用程序中控制字段有关的属性
描述怎样读写数据库表中字段的值和控制字段的显示格式等。
本章所介绍的例子中用到的窗体、数据库表以及相关的文件都是在安装Delphi时缺省安装在C:\DELPHI\DEMOS\DB\MASTAPP目录中,并且用别名DBDEMOS表示这一子目录。在本章例子中,除特殊声明外,所有的TTable和 TQuery 部件的 DatabaseName 属性都设置为DBDEMOS。
14.1 简单的基于单表的据库应用
用Decphi创建显示一个数据库表中的内容的应用非常简单和方便,只需要三个部件,只要将这三个部件通过相关的属性相互联系起来,不需要编写任何程序代码便可以实现。例如,用户想查看数据库表Customer.DB中的内容时,可以按下面步骤来实现:
14.1.1 选择相关的部件:
选择菜单Project/New开始一个新工程,并修改Form1的Caption属性为CustomerFrom1并把Name属性设置为CustomerForm1,然后从部件选择板上的Data Access 页上选取一个Datasounce部件和一个Table部件放到窗体的左上角,它们是非可见的部件,在窗体中我们看到的只是部件的图标;从Data Control页上选取DBGrid部件放到窗体中前两个部件的下面。完成这些工作之后,窗体如图14.1所示。
图在CustomerFrom1窗体中放置三个部件
14.1.2 设置部件的属性
为了使TDBGrid部件能够显示数据库表Customer.DB中的客户信息,我们必须修改窗体三个部件相关的属性,这些属性的设置如表14.1所示。
表14.1 CustomerFrom1窗体中三个部件的属性设置
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
属 性 属 性 值
──────────────────────────────
DataSource1.AutoEdit False
DataSource1.DataSet Table1
Table1.DatabaseName DBDEMOS
Table1.TableName CUSTOMER.DB
Table1.Active True
DBGrid1.DataSource DataSource1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
这里要注意的是:DBDEMOS是Delphi缺省安装时C:\Delphi\DEMO\DB\MASTAPP目录的别名,而且数据库表Customer.DB存在该目录下,用户在使用这一例子时,请注意这两项设置都是正确的。另外 Datasource1.Dataset,Table1.TableName和DBGrid1.Datasource属性都有下拉式列表框允许用户从可能的值列表中选择它们的值,这样能方便我们进行属性的设置,而且不容易出错。
Datasouuce1.AutoEdit属性设置为False是为了防止用户修改数据库表中的数据,在下面的讨论中我们将详细地进行说明。
Table1.Active设置为True时,Delphi会打开Table1.TableName所指定的数据库表。如果这个数据库表不存在(或表中什么也没有,即空表), Delphi 会弹出出错信息并且Table1.Active变成False。当Table1.Active被设置成True之后,Table1 部件的一些属性就不能再修改了,如Table1.DatabaseName和Table1.Tablename属性。若要修改它们,必须首先要将Table1.Active属性设置为False,然后再进行修改,否则,Delphi会弹出错误信息“Cannot perform this operation on an open database”。当看到这个错误信息时,只需把Table1.Active置成False,完成相关的修改后,再把 Table1. Active 属性设置为True。
当我们把DBGrid1.DataSource的值设置成DataSource1时,Delphi会把Customer.DB中的数据填充到DBGrid1部件中,并且可以用DBGrid1中的滚动条来浏览数据库表中的所有记录。