手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

Delphi 简单数据库应用的创建及MASTAPP介绍(三)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

因此,采用逐步插入方法插入记录的程序代码一般如下形式:

With Table do

begin

Insert; {插入一条空白记录}

<填充该记录的各个字段>

post; {将插入的记录写回到磁盘文件}

end;

对于没有索引的数据库表,可以用Append方法替代Insert方法把新记录插入到表的尾部。 

14.7.2 调用InsertRecord插入记录 

对于简单的应用程序,Delphi允许用户用一条语句插入一个新记录,而且这个新记录可以带有任意多个新字段值。InsertRecord方法把新记录中字段的赋值语句和psot方法调用组合进一条语句中。

InsertRecord方法把记录的各个字段值组合成一个字段值数组作为它的唯一参数。在字段值数组中,可以为插入的记录的每个字段提供一个字段值,或从最左一列开始依次为任意多个字段赋值。 也就是说用户可以从表的最左边一列起, 把多个列的值同时传递给InsertRecord,直到所有字段都被赋值。用户也可以省略后面的字段,InsertRecord会用空值填充这些没有赋值的字段。用户还可以对那些明确希望用空值填充的字段传递保留字NIL来标明该字段为空。

如我们希望在Customer.DB表中插入一条记录,可以用下面的代码来实现: 

InsertRecord(['2000',NIL,NIL,NIL]); 

在上面的程序代码中,我们只填充了四个字段:CustNo、Company、Add1 、 Add2 。InsertRecord会自动将其它字段赋以空值。

例14.7 在这个例子中,我们在CustNo.DB表中插入和删除记录,都是在程序中完成这类操作的,而不再是使用DBD或数据浏览部件完成。 

插入/删除记录 

程序清单:

unit tt; 

interface 

uses

SysUtils, Windows, Messages, Classes, Graphics, Controls,

StdCtrls, Forms, DBCtrls, DB, DBGrids, Buttons, DBTables, Grids,

ExtCtrls,Mask,Dialogs;

 

type

TForm1 = class(TForm)

DBGrid1: TDBGrid;

DBNavigator: TDBNavigator;

Panel1: TPanel;

DataSource1: TDataSource;

Panel2: TPanel;

customerTable: TTable;

BitBtn1: TBitBtn;

Label1: TLabel;

Label2: TLabel;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

CustNoEdit: TEdit;

CompEdit: TEdit;

procedure FormCreate(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.DFM}

 

procedure TForm1.FormCreate(Sender: TObject);

begin

customerTable.Open;

end;

 

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

If (Length(CustNoEdit.text)=0)and

(Length(CompEdit.text)=0)

then

MessageDlg('没有输入新记录的字段值!',mtError,[mbCancel],0)

else

with customerTable do

begin

IndexFieldNames:='CustNo';

If FindKey([CustNoEdit.text]) then

MessageDlg('已经存在这条记录!',mtError,[mbCancel],0)

else

InsertRecord([StrToInt(CustNoEdit.text),CompEdit.text,nil]);

CustNoEdit.text:=' ';

CompEdit.text:=' ';

end;

 

end;

 

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

If (Length(CustNoEdit.text)=0)and

(Length(CompEdit.text)=0)

then

MessageDlg('没有输入删除的记录的字段值!',mtError,[mbCancel],0)

else

with customerTable do

begin

IndexFieldNames:='CustNo';

If FindKey([CustNoEdit.text]) then

begin

If MessageDlg('你确定要删除这条记录吗?',mtConfirmation,

[mbYes,mbno],0)=mrYes then Delete;

end

else

MessageDlg('没有你要删除的记录!',mtError,[mbCancel],0);

CustNoEdit.text:=' ';

CompEdit.text:=' ';

end;

end;

 

procedure TForm1.FormActivate(Sender: TObject);

begin

CustNoEdit.setfocus;

end; 

end. 

14.8 输入数据的有效性验证 

当用户向一个数据库表中插入新记录或修改原有记录时,我们必须确保用户输入的数据是有效的,为此Delphi通过三种不同的途径用来验证用户输入的数据是否有效。

这三种途径是:基于数据库表的有效性验证、基于字段的有效性验证、基于记录的有效性验证。

基于数据库表的有效性验证:

在用户创建数据库表时就建立有效性验证机制,如在使用DBD创建一个表时, 我们可以为创建的数据库表说明一些验证手段,包括字段的最大值,最小值,图形字段的显示格式等等。在设定这些有效性验证机制时,不需要编写任何程序代码。基于数据库表的有效性验证是当数据写到数据库之前,由数据库本身来执行。Delphi也执行一些有效性验证,如在数据写到数据库之前Delphi会验证每一个字段是否被填入相应的值,有关这种途径来验证数据的有效性的详细情况请参考DBD的使用。

基于字段的有效性验证:

一般有两种方法来进行这种方式的有效性验证。

①为记录中需要设置有效性验证的字段编写Onvalidate事件处理过程。这样每当该字段的值被修改时,该字段的OnValidate事件处理过程就会被调用,进而对被修改的字段值进行验证。

②对于记录中要求非空的字段(如口令或关键字等),我们必须首先设置这些字段的Required属性为True,然后为这些字段编写OnValidate事件处理过程,这样在修改现存记录或插入新记录时,在写入数据库之前,如果要求非空的字段中没有填入适当的字段值,那么会出现错误信息提示用户必须输入字段值。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!