第十四章-简单数据库应用的创建及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('Company').AsString;

end;

end;

读者可以利用 FindNearest 方法执行上面的不精确查找, 具体使用方法可以参看Findkey方法的使用。

在上面的例子中要设置table1的IndexFieldNames属性为Company。

GotoNearest方法进行不精确查找

14.6 修改数据库中的记录 

我们掌握了字段对象的概念和如何查找数据库中的记录之后,下面我便可以很方便地修改数据库中现存的记录了,一般来说,在程序中修改数据库中的记录包括下面这些步骤:

1、在数据库中找到要修改的记录,并将记录指针移至该记录。

2、调用Edit方法将与数据库表相连的TTable部件设置成编辑状态。

3、修改一个或多个字段。

4、调用post方法将修改后的记录写入数据库。

以上这几个步骤只是概述性的,具体实现时还有很多细节需要留心,我们通过一个例子来演示上面的全过程,以便让读者进一步地了解和掌握修改记录的方法。

例14.6 我们为四个按钮分别编写了事件处理过程,用来遍历数据库中的记录并对每个客户记录的Company字段进行修改,在程序对记录进行更新操作时窗口中的控件都是无效的,在这个例子中我们还编写了一个简单的异常代码块用来确保在更新过程中出现异常时使控件恢复正常操作。 

修改数据库记录

14.6.1 Edit方法Post方法 

为了能让用户通过程序修改数据库表中的记录,TTable部件必须要处在编辑状态下。在大多数情况下,数据库表都是以浏览(只读方式)方式打开的,也就是说它的每一个字段可以被读取介不能被编辑修改。调用Edit 方法能够将 TTable 部件置成编辑状态, 当TTable部件处于编辑状态后,我们才可以通过程序修改当前记录指针所指向的记录,但这样修改后的记录不会立即被写入到磁盘上的实际数据库表中。要想保存对记录的修改,必须要调用Post方法,Post方法才真正将我们对记录的修改写入实际的数据库表中。

一般来说,用来扫描整个数据库表并修改每个记录的某一个字段的程序如下所示:

with Table Do

begin

DisableControls;{在修改记录的过程中,使其它部件无效}

First; {将记录指针指向第一条记录}

while not EOF do

begin

<读取记录的一个字段值到一个变量中>

<做适当的修改>

Edit; {将TTable部件置成编辑状态}

<将修改后的字段值写回到其对应的字段>

post; {将修改后的记录写回数据库}

next; {修改下一条记录}

end;

enablecontrols; {恢复其它部件的功能}

end;

程序都是对TTable部件进行操作,因此使用With语句来防止错误的扩散是很有意义的。在这里要注意Disablecontrols方法和EnableControls方法的使用。DisableControls方法是在程序修改TTable部件中的记录时,切断TTable部件与数据访问部件TDatasource 部件的联系。否则,在对TTable中的每一修改之后,TDataSource 部件都会更新窗体中所有数据浏览部件的显示内容,这样会急剧减慢处理过程而且浪费时间。EnableControls方法是与DisableControle方法执行相反的操作,它是用来恢复TTable部件与TDatasource部件的联系并促使所有的数据浏览部件更新显示。

调用First方法是将记录指针移到数据库表中的第一条记录,确保程序从表中的第一条记录开始进行修改。调用Next方法是将记录指针从当前的记录移到下一条记录,这样保证了从表中的第一条记录开始逐条记录进行修改,直到修改完最后一条记录。如果不调用Next方法,程序将会陷入无穷的死循环。 

时间: 2024-11-03 02:40:05

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

第十四章-简单数据库应用的创建及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介绍(二)(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的显示格式,美国的电话表示形式与中国的