Delphi中对用户输入数据的控制

(04/29/2000)

   

一个数据库应用程序,常常需要提供数据输入功能,即让用户输入数据,并存入数据库中,这就涉及到一个数据输入是否合法的问题。若用PowerBuilder来编写这种程序,实现这一点是非常方便的,因为PowerBuilder中每一个数据输入控件都可以单独对其输入进行控制,但Delphi没有提供这样的功能。我们用Delphi编写这样的程序时,就需要自己编写一些代码来实现。这并不是Delphi的一个缺点,相反,我们通过对用户输入数据的人为控制,可以编写出相当方便可靠的数据库应用程序。下面举一个很常见的例子加以说明。

也许大家在编写数据库程序时遇到过这种情况:库中一些字段必须是非空的,比如索引字段,但用户输入时可能会忘记,如果对这种情况不作出提示,仍旧将这条记录存入库中,就会破坏库的完整性,而且在排序、查找等操作中也会出错。于是我们就要对这种情况加以控制。举例如下:

一、建立一个简单的数据库,设名为People.dbf,别名为man,库结构如表1。表1 字段名 类型 长度 name c 8 age n 3 work c 10

二、创建一个工程。

三、在Form1中放入如下控件,并设定其属性如表2。

四、定义一个布尔类型的数组,作为三个DbEdit框中是否有数据输入的标志。

implementation

var

test:array[1..3]of boolean;

{$R *.DFM}

五、编写Dbedit1、DbEdit2、DbEdit3的OnExit事件代码如下:

procedure TForm1.DBEdit1Exit(Sender:TObject);

begin

if DbEdit1.text=′′ then {若要进行更精确的控制,在这里可以填写更多代码}

est[1]:=false

lse test[1]:=true;

end;

procedure TForm1.DBEdit2Exit(Sender:TObject);

begin

if DbEdit2.text=′′ then

test[2]:=false

lse test[2]:=true;

end;

procedure TForm1.DBEdit3Exit(Sender:TObject);

begin

if DbEdit3.text=′′ then

est[3]:=false

lse test[3]:=true;

end;

六、编写Button1的Onclick事件代码如下:

procedure TForm1.Button1Click(Sender:TObject);

var i:integer;

begin

i:=1;

while test[i] and (i<=3) do {检测test数组元素是否为真}

i:=i+1;

if i<=3 then {有数据输入为空的情况}

begin showmessage(′数据未完全录入′); {提示}

case i of

1:DbEdit1.Setfocus;

2:DbEdit2.Setfocus;

3:DbEdit3.Setfocus;

end; {激活数据输入为空的DbEdit }

end

else begin table1.post; {如果输入都非空,则存入库中}

Button1.Enabled:=false;

Button2.Enabled:=true;

end;

end;

七、编写Button2的OnClick事件代码如下:

procedure TForm1.Button2Click(Sender:TObject);

var i:integer;

begin

for i:=1 to 3 do test[i]:=false; {初始化数组}

table1.open; {打开数据库}

table1.Append; {增加一条空记录}

table1.edit; {使库处于修改状态}

DbEdit1.setfocus;

Button1.Enabled:=true;

Button2.Enabled:=false;

end;

八、编写Form1的OnClose事件代码如下:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

table1.close; {关闭数据库}

end;

九、存盘并运行程序,单击“录入”后向DbEdit框中输入数据,输入完毕按“确定”按钮,若某个DbEdit框未输入数据,这时会出现一个提示框,显示出错信息,而且入库操作不会进行,光标会停留在未输入数据的DbEdit框中,等待用户输入数据,直到必须输入数据的DbEdit框都被填入数据后,这条记录才会被存入库中。这样就避免了不完整记录的入库。

显然,我们还可以在DbEdit的OnExit事件中加入更多的代码,来对该框进行更精确的控制,这里限于篇幅,就不在一一举例了。

注意:有些数据库并不是要求每个字段都非空,这时只需对要求非空的字段加以控制就行了。表2 控件名称 属性 作用 DataSource1 DataSet:Table   DbEdit1DbEdit2DbEdit3 DataSource:DataSource1 DataField:nameDataField:ageDataField:work 用于输入姓名用于输入年龄用于输入职业 Table DataBaseName:manTalbeName:people.dbf 指定别名及数据库名称 Button1 Caption:确定 确定向库中写入数据 Button2 Caption:录入 开始数据输入操作