现在我们就可以借助把TSQLDataSet的Active属性值设定为True,把数据从BIOLIFE数据表中取到应用程序中。接着启动TSQLDataSet的字段编辑器把代表BIOLIFE每一个字段的字段对象加入到应用程序中,这样做的好处是开发人员可以使用Delphi的对象查看器来设定字段对象的属性,例如字段显示的中文名称,或是设定字段显示的宽度等。
请点击主窗体中的TSQLDataSet控件,按下鼠标右键,Delphi会显示一个快捷菜单, 菜单中的第一个选项[Fields Editor…]便可以启动字段编辑器,如图1-8所示。

图1-8 启动TSQLDataSet的字段编辑器
请点击这个选项,Delphi便会显示一个空白窗口,然后在这个空白窗口中点击鼠标右键,Delphi便会显示一个快捷菜单,点击这个菜单中的[Add all fields]选项,以便把BIOLIFE数据表中代表每一个字段的字段对象加入到应用程序中,如图1-9所示。接着Delphi便会把所有的字段对象加入到刚才的空白窗口中,现在我们就可以点击这个窗口中的每一个字段对象,然后使用对象查看器来设定它们的属性值。
图1-9 加入所有的字段对象
当我们在图1-9中把字段对象加入之后,Delphi便会在主窗体中自动声明这些字段对象:
TForm30 = class(TForm)
SQLConnection1: TSQLConnection;
SQLDataSet1: TSQLDataSet;
DataSource1: TDataSource;
DBNavigator1: TDBNavigator;
SQLDataSet1SPECIES_NO: TFloatField;
SQLDataSet1CATEGORY: TStringField;
SQLDataSet1COMMON_NAME: TStringField;
SQLDataSet1SPECIES_NAME: TStringField;
SQLDataSet1LENGTH_CM: TFloatField;
SQLDataSet1LENGTH_IN: TFloatField;
SQLDataSet1TOPOTYPE: TStringField;
SQLDataSet1GRAPHIC: TBlobField;
我们可以看到dbExpress会根据数据表中字段的数据类型而使用dbExpress中相对的类声明,例如字段数据类型如果是char或是varchar,就以TStringField类型声明,而如果字段数据类型是BLOB的类型,就以TBlobField类型声明,稍后开发人员就可以直接借助这些变量来存取和操作字段数据。
现在我们希望应用程序在执行时是显示中文的字段名称,而不是数据表中字段的英文名称,那么,我们就可以点击图1-9中的每一个字段对象,然后在对象查看器中设定字段对象的DisplayLabel属性,接着输入这个字段的中文代表名称即可。例如图1-10便是设定SPECIES_NO这个字段的中文代表名称的画面。
图1-10 使用对象查看器设定字段对象的属性值
在我们设定完毕每一个字段对象的DisplayLabel属性值之后,便可以选择所有的字段对象,然后把它拖曳到主窗体中,那么Delphi便会自动地在主窗体中产生能够适当显示每一个字段对象的数据感知控件,并且显示数据在这些数据感知控件之中。例如图1-11便是把图1-10中所有字段对象拖曳到主窗体之中后的画面。

图1-11 拖曳所有字段对象到主窗体之中
现在我们已经完成了第一个使用dbExpress控件实现的范例数据库应用程序,请执行它,此时我们便可以看到类似图1-12的画面。dbExpress控件果然可以顺利地从InterBase中存取数据,并且显示在数据感知控件之中,就和Delphi原本的BDE/IDAPI控件一样方便。
图1-12 范例应用程序执行的画面,请注意TDBNavigator中所有和变更数据有关的按钮都被暂停,代表应用程序无法变更数据
如果读者仔细观察图1-12的画面,便会发现图1-12中的TDBNavigator中所有和变更数据有关的按钮,例如代表修改数据的【▲】按钮和新增数据的【+】按钮,都被暂停使用。这意味着我们无法使用这个范例应用程序来变更BIOLIFE数据表中的数据,也代表由dbExpress控件开发的数据库应用程序在内定上是无法变更的。
现在如果读者点击往下一笔的按钮移动到随后的记录,接着再点击往前的按钮欲把目前的记录移动到前一笔时,此时范例应用程序便会显示如图1-13所示的错误信息。
图1-13 点击TDBNavigator中的前一笔数据的按钮时,范例应用程序会发生错误
出现这个错误信息是由于dbExpress控件开发的应用程序只能向后走的单向Cursor,而无法再向前走回到前面的记录。
也许读者会觉得奇怪,既然dbExpress无法变更数据,也无法任意移动目前记录的位置,那么dbExpress不是一点用处都没有吗?如何才能用来开发实际的数据库应用程序呢?
当然不是,这是因为dbExpress使用了和以往BDE控件不一样的方式来设计,因此,如果读者是以使用BDE的概念来使用dbExpress便会觉得奇怪。事实上,dbExpress不但能够做到和BDE控件一样的功能,甚至比BDE还有更多的功能,在执行效率上也胜过BDE。在本书进一步介绍如何使用dbExpress变更数据之前,先让我们说明dbExpress控件的一些重要的概念,以及它的设计架构,这样读者应该会更清楚地了解dbExpress的设计原理,在稍后的章节中也能更好地掌握dbExpress。










