第十四章-简单数据库应用的创建及MASTAPP介绍(一)(2)

14.1.3 运行程序 

保存文件,命名代码单元为Cust.pas,命名工程名为CustPRJ.DPR,然后按F9编译并运行程序。程序执行之后,我们可以使用滚动条或键盘移动键在字段和记录间移动。但不能修改表中的数据,因为Datasouc1.AutoEdit1属性已被设置为False。

Cust程序中的三个部件都有各自的特殊用途,三个部件的相关属性在内部相互联系生成最终的应用程序。TTable部件连接磁盘上的实际数据库表和应用程序中其他部件的通道。TTable部件具有打开和关闭、读取、更新以及其他处理磁盘数据库文件的方法。

TDatasource部件是连接TTable部件和数据浏览部件如TDBGrid部件的桥梁。 TDBGrid部件用于显示数据库表中的数据信息,它为应用程序提供一个直观的界面。图14.2阐述了这三个部件之间的关系。 

Cust程序中三个部件之间的内部关系 

TDBGrid 部件的奇妙之处在于它知道如何去获取数据库表中的下一条或前一条记录,我们使用滚动条或箭头键便可以完成这项任务。TDBGrid部件不知道如何增加、删除和修改记录。如果想让 Cust 程序能够修改数据库表中的记录,只要把 Datasource1 部件的AutoEdit属性设置成True ,并重新编译和运行程序就可以达到目的。 使用箭头键, 把DBGrid的高亮度条定位到某一个字段上,然后键入新值,该字段中的值将被键入的新值所取代,并且当移动到另一条记录时,健入的信息会自动写入数据库表中。如果想放弃所做的改动,只需在离开该字段前按一下Escape键。

如果想在表中增加新记录,可以把高亮度条移到网格底端的空白记录上并输入新记录的有关字段值。也可以在用户指定的某一条记录的后面插入一条新记录,只要把高亮度条定位到指定的记录上,按Ins键,使可以在该记录的后面插入新记录。

删除某一条记录时,把高亮度条定位在想删除的记录的任何字段上,按Ctrl+ del键,这时会出现保护信息,我们可以确认是否真的想删除该项记录。

TDBGrid为用户提供了较完备的功能,用于控制是否编辑、增加或删除记录。若想禁止对数据库表作任何修改,设置TDBGrid部件的Readonly属性为 True , 并设置 Option.dgEDiting为False(这将为我们提供一个只读的数据库表浏览器而不是数据库编辑器,但它隐含着增加、编辑和删除记录的能力)。TDBGrid部件的这些属性和Option属性其它选项的各种不同组合可以让我们很方便地对数据库表进行有效的浏览、编辑等操作。

如果我们经常使用像电子表格那样的界面来显示和编辑数据记录,TDBGrid 部件便是一个很方便的工具,但那并不是最友好的用户界面,如果想拥有更优美更直观的界面,我们还可以使用单独的数据浏览部件来显示数据库表中各个字段的值,并利用TDBNavigator部件控制对数据库表的存取。 

14.2 利用TDBNavigator部件创建存取程序 

我们可以改进一下Cust程序以便它一次只在对话框中显示一个客户的记录信息,并用一个TDBNavigator部件控制对记录存取──允许我们选择一个记录来显示或编辑以及增加和删除记录。完成的应用窗体。

增强的Cust程序

14.2.1 创建应用程序窗体 

我们可以非常迅速地创建起来,因为到目前为止我们对创建窗体的方法已经比较熟悉,我们首先把所有的部件都放到窗体中,然后再设置它们的属性。

开始一个新工程,设置窗体Form1的Name 属性为 Customerform2 , Caption 属性为         CustomerForm2。然后从部件选择板上的Data Access页上选取一个Datasource部件和一个Table部件放在窗体的右上角。再从Data Controls页上选取DBNatvigator部件放在窗体的左上角。

窗体中其余的部件如图14.3所示。它们是TDBEdit和TLabel部件,按图14.3 所示创建并布置部件,分别命名DBEdit部件为EditCustno、 Editcompany 、 EditAddr1 、EditAddr2、EditCity、EditState、EditZip、EditCountry、EditPhone 、EditFAX、EditTaxRate、EditContact。

现在我们来连接TTable部件和 TDataSource 部件, 然后连接所有的数据浏览部件和DataSource部件。设置TBNavigator部件和TDBEdit部件的属性,它们的DataSource属性都设置为DataSouce1。我们最后要做的事是连接窗体中各个TDBEdit 部件和它们在数据库表中对应的字段名,通过设置TDBEdit 部件的 DataField 属性来完成。 例如要连接命名为EditCustNo的TDBEdit部件和数据库表中的CustNo字段,具体步骤如下:

①选中窗体中的EditCustNo部件。

②在Object Inspector窗体中,单击DataField属性右边的箭头。

③从下拉列表中选中CustNo字段名。

对窗体中的其他TDBEdit部件执行以上操作连接到其对应的字段,然后保存文件。命名代码单元名为Cust2.pas,命名工程名为Cusprj2.DPR。 

14.2.2 使用TDBNavigator部件移动记录指针 

上述程序运行之后,在数据浏览部件中会显示数据库表中的第一条记录。利用Tab 键可以在字段之间移动,但是不能编辑字段。因为我们为了防止意外修改,设置了Table1的AutoEdit属性值为False。如果想对数据库表中的记录进行编辑、插入和删除操作或者想显示数据库表中另一条记录, 需要按 TDBNvigator 部件上这些功能所对应的功能按钮。TDBNavigator部件上的按钮和它们的功能如图14.4所示。

TDBNavigator中的按钮 

TDBNavigator部件的绝大多数功能都可以根据其按钮的图标能够很容易地识别出来,而且TDBNavigator部件本身能感知到很多事情,如当前指针是否在数据库表的开头或尾部。如果用户正在查看数据库表中的最后一个记录,Next和Last按钮将会变灰成为非活动状态。同样,如果用户当前正在浏览数据库表中的第一条记录, TDBNavigator 上的 First 和Previous按钮会变灰而成为非活动状态。有关各个按钮的作用的更详细说明请查看联机帮助。

如果用户想修改当前的记录,单击TDBNavigator部件的Edit按钮,然后完成需要做的修改,在做完修改之后,单击Post按钮以便将作的修改写入实际的数据库表中(更新实际的数据库表中的记录在数据库术语中叫作“投寄”记录即PostT)。如果想取消所做的修改,单击Cancel按钮。Cancel按钮只取消自从上一次往数据库表中投寄记录以来对记录所做的修改。例如,如果用户曾修改了CustNo字段并单击了Post按钮投寄了修改,然后再修改Company字段并按Cancel,那么只有对Company所做的修改将会被取消。也就是说,一旦修改被写入了数据库表中,再按Cancle按钮是无法取消对记录的修改的,要想恢复到以前的状态,用户必须要重新编辑修改记录。值得注意的是,当用户修改了当前的记录,并移动到其他记录时,TDBNavigaator部件会自动地投寄用户对记录的修改。例如:如果我们修改了记录的Company字段,并没有按Post按钮以更新表中的记录,而是移动到下一条记录,这时用户对记录的修改也会自动地被写入数据库表中。 

14.2.3 定制TDBNavigator部件 

TDBNavigator部件中的按钮对我们开发人员来说是很方便的,但对于程序的最终用户来说不一定那么一目了然。为了帮助最终用户或初级用户更方便有效地使用TDBNavigator部件,我们可以设置TDBNavigator部件的ShowHint属性为True,这样当鼠标光标停留在TDBNavigator部件上的某一个按钮上超过大约1秒钟,在屏幕上便会出现该按钮的提示信息。如果我们不想使用TDBNavigator部件本身嵌入的提示信息,我们还可以设置TDBNavigtor部件的Hints属性,为每个按钮指定特定的提示信息,以帮助用户使用TDBNavigator部件。

TDBNavigator部件中有多个功能按钮,但并不是所有的按钮对每一个数据库应用程序都是需要的,特别是那些不允许修改表中的数据,或修改只是在很严格的控制下进行的数据库应用程序。我们可以通过设置TDBNavigator部件的 VisibleButtons 属性来确定要在TDBNavigator中显示哪些按钮步显示哪些按钮。例如,如果我们不允许用户修改表中的记录,我们就不需要Add、Delete、Post、Cancel 或 Refresh 按钮, 我们设置这些按钮的VisibleButtons属性为False,这样在TDBNavigator部件中将不会出现这些按钮。

TDBNavigator部件的ConfirmDelete属性和Delete 按钮配合使用对用户删除数据库表中的记录是非常有用的,当ConfirmDelete属性设置为 True (缺省设置), 当用户单击Delete按钮试图删除当前记录时,Delphi会弹出一个确认框,要用户确认是否真的想删除当前记录。这样,在用户进行删除记录的操作时,会更安全一些。如果用户不希望在按下Delete按钮时出现确认框,只要把ConfirmDelete设置为False就可以了。

还有一些属性可以用来定制TDBNavigator部件的外观和性能,有关这方面的详细信息请参看联机帮助。

时间: 2025-01-31 05:40:50

第十四章-简单数据库应用的创建及MASTAPP介绍(一)(2)的相关文章

第十四章-简单数据库应用的创建及MASTAPP介绍(一)(1)

Delphi中嵌入的数据库应用开发工具如Database Form Expert具有很强大的功能,我们不需要编写任何程序代码便可以快速地创建一个简单的数据库应用程序,甚至还能创建基于多个数据库表的主要──明细型数据库应用程序. 本章主要介绍用Delphi开发简单的数据库应用程序的一般方法和步骤,首先让读者对Delphi强劲的数据库应用开发工具有一个直观的印象,然后在此基础上进行复杂的数据库应用程序的设计,本章主要包括以下内容: ● 创建数据库应用窗体 包括用Database Form Exper

第十四章-简单数据库应用的创建及MASTAPP介绍(一)(3)

14.3 创建主要──明细数据库应用 我们前面在介绍的基于单个数据库表的数据库应用程序只能对数据库表进行简单的管理,大多数只用来浏览单个数据库表中的记录信息,如果我们想浏览多个相关的数据库表中的记录信息,就必须要创建主要──明细型数据库应用程序. 在主要──明细型数据库应用程序中,一个数据库表作为主要表,其中存放着综合信息,其他的数据库表和主要数据库表相关联,它们当中存放着更详细的信息.例如,当数据库表Customer.DB作为主表,它包含着客户的综合信息如编号.姓名.所在公司的名称等等.而数据

第十四章-简单数据库应用的创建及MASTAPP介绍(三)(3)

14.7 插入和删除记录 虽然我们使用DBD或者在应用程序窗体中用TDBNavigator可以插入.删除表中的记录,但是任何重要的数据库应用程序都是根据最终用户的命令完成此类操作的.同样,如果我们掌握了字段对象及其用法,修改数据库中的记录,插入和删除记录将变得非常容易. 要想删除表中的某一条记录,首先将记录指针移到该记录处,然后调用delete方法,这样,当前指针所在的记录就会被删除,而且我们在进行删除操作时,不必将TTable部件设置成编辑状态.当前指针所在的记录被删除之后,被删除记录下面的所

第十四章-简单数据库应用的创建及MASTAPP介绍(三)(1)

利用GotoNearest方法执行不精确查找 窗体中的"不精确查找"按钮的事件处理过程代码如下: procedure TForm1.Button1Click(Sender: TObject); begin with table1 do begin IndexFieldNames:='Company'; setkey; FieldByName('Company').AsString:=Edit1.text; GotoNearest; label3.caption:=FieldByName

第十四章-简单数据库应用的创建及MASTAPP介绍(二)(4)

14.5.1 使用GotoKey方法查找数据记录 使用Gotokey方法查询数据库中的记录的具体步骤如下: 1.确保要查找的字段是关键字或已经为它定义了辅助索引,并保证TTable部件的属性列表中有关键字段名或辅助索引名. 2.通过调用GotoKey方法,把要查找的TTable部件置成查找模式. 3.把查找值送进被查找的Field的查找缓冲区. 4.调用TTable部件的GotoKey方法,并测试它的返回值判断查找是否成功. 如果查找成功,GotoKey返回一个True值,并且表中的记录指针指向

第十四章-简单数据库应用的创建及MASTAPP介绍(二)(2)

14.4.4 字段对象的访问 字段对象在应用程序中有动态生成的,也有通过字段编辑器Fields Editor 创建的永久性的,它们虽然在设计和运行阶段都是不可见,但是它们跟其他的对象一样都拥有自己的属性.方法和事件,因此我们在应用程序中是可以对字段对象进行控制和访问的. 因为动态字段对象是没有自己的名字的,永久性的字段对象有自己的名字,所以对这两种字段对象的访问方法是不一样的. 14.4.4.1 动态字段对象的访问 动态字段对象存在于数据集部件TTable和TQuery部件中,它们是随着磁盘上的

第十四章-简单数据库应用的创建及MASTAPP介绍(一)(4)

14.4 字段对象的使用 Ttable和TQuery部件中有一个TField类型的属性Fiedls,Fields是TField类型的对象的列表,TField对象列表是Delphi数据库中较难以理解的一个对象,它是 TTable 部件和TQuary部件的一部分,它们是不能够选择到窗体中的独立的部件,而且无论是在设计阶段还是在程序运行过程中,它们都没有可见的图像.即使到Object Inspector窗中察看它们也很困难. Tfield对象是在打开磁盘上的数据库表时动态产生的,并在数据库表被关闭时自

第十四章-简单数据库应用的创建及MASTAPP介绍(三)(4)

14.8 输入数据的有效性验证 当用户向一个数据库表中插入新记录或修改原有记录时,我们必须确保用户输入的数据是有效的,为此Delphi通过三种不同的途径用来验证用户输入的数据是否有效. 这三种途径是:基于数据库表的有效性验证.基于字段的有效性验证.基于记录的有效性验证. 基于数据库表的有效性验证: 在用户创建数据库表时就建立有效性验证机制,如在使用DBD创建一个表时,我们可以为创建的数据库表说明一些验证手段,包括字段的最大值,最小值,图形字段的显示格式等等.在设定这些有效性验证机制时,不需要编写

第十四章-简单数据库应用的创建及MASTAPP介绍(三)(2)

14.6.2 实现异常保护的TRY...FINALLY语句 上面的程序存在着潜在的危险,在实际应用过程中,可能因为某些原因使得对数据库表的更新不能进行下去.如当程序试图执行Post方法将修改后的记录写回磁盘时,而又因为某种原因磁盘没有准备好,这时便出现了异常.当出现异常时,应用程序会暂停下来并且会弹出一对话框显示有关的错误信息,在用户单击错误信息对话框之后,程序将继续执行到某一个地方去,而这个地方常常不是用户所能预料到的.在我们的程序中, 在执行Post方法之前,窗体中所有的部件与TTable部

第十四章-简单数据库应用的创建及MASTAPP介绍(二)(3)

14.4.5 设定字段对象的显示格式 我们即可以在设计阶段设定字段对象的显示格式,也可以在运行过程中通过程序代码来设定字段对象的显示格式. 例14.2 在如图14.10所示的窗体中,再增加一个TaxRate字段,并在程序设计过程中设定它的显示格式为0.00%,即设置TaxRate字段对象的DisplayFormat属性为0.00% , 若TaxRate的值为0.085那么在网格部件中其显示的格式为8.50%. 在运行过程中我们通过程序代码来设定字段Phone的显示格式,美国的电话表示形式与中国的