<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>Delphi中对用户输入数据的控制</title>
<script language="JavaScript">
function showhide() {
var i, ss, cc, rr;
cc = showhide.arguments;
for (i=0; i<(cc.length-2); i+=3)
{ ss = cc[i+2];
if (navigator.appName == 'Netscape' && document.layers != null)
{ rr = eval(cc[i]);
if (rr) rr.visibility = ss;
} else if (document.all != null)
{ if (ss == 'show') ss = 'visible';
if (ss == 'hide') ss = 'hidden'; rr = eval(cc[i+1]);
if (rr) rr.style.visibility = ss;
}
}}
function keepIE(WinName,WinTop,WinLeft) {
document.all[WinName].style.top=WinTop+parseInt(document.body.scrollTop)+document.body.clientHeight-90
document.all[WinName].style.left=WinLeft+parseInt(document.body.scrollLeft)+document.body.clientWidth-80
}
function keepNN(WinName,WinTop,WinLeft) {
document.layers[WinName].moveTo(self.pageXOffset+WinLeft+window.innerWidth-80,self.pageYOffset+WinTop+window.innerHeight-90)}
</script>
</head>
<body style="font-size: 9pt" background="../../res/back.JPG">
<table border="0" width="100%" style="font-size: 9pt">
<tr>
<td width="100%" align="center"><strong>Delphi中对用户输入数据的控制</strong></td>
</tr>
<tr>
<td width="100%" align="center">文/尚望 录入/江湖小子</td>
</tr>
</table>
<p>一个数据库应用程序,常常需要提供数据输入功能,即让用户输入数据,并存入数据库中,这就涉及到一个数据输入是否合法的问题。若用PowerBuilder来编写这种程序,实现这一点是非常方便的,因为PowerBuilder中每一个数据输入控件都可以单独对其输入进行控制,但Delphi没有提供这样的功能。我们用Delphi编写这样的程序时,就需要自己编写一些代码来实现。这并不是Delphi的一个缺点,相反,我们通过对用户输入数据的人为控制,可以编写出相当方便可靠的数据库应用程序。下面举一个很常见的例子加以说明。<br>
<br>
也许大家在编写数据库程序时遇到过这种情况:库中一些字段必须是非空的,比如索引字段,但用户输入时可能会忘记,如果对这种情况不作出提示,仍旧将这条记录存入库中,就会破坏库的完整性,而且在排序、查找等操作中也会出错。于是我们就要对这种情况加以控制。举例如下:<br>
<br>
一、建立一个简单的数据库,设名为People.dbf,别名为man,库结构如表1。表1
字段名 类型 长度 name c 8 age n 3 work c 10<br>
<br>
二、创建一个工程。<br>
<br>
三、在Form1中放入如下控件,并设定其属性如表2。<br>
<br>
四、定义一个布尔类型的数组,作为三个DbEdit框中是否有数据输入的标志。<br>
<br>
implementation<br>
<br>
var<br>
<br>
test:array[1..3]of boolean;<br>
<br>
{$R *.DFM}<br>
<br>
五、编写Dbedit1、DbEdit2、DbEdit3的OnExit事件代码如下:<br>
<br>
procedure TForm1.DBEdit1Exit(Sender:TObject);<br>
<br>
begin<br>
<br>
if DbEdit1.text=′′ then {若要进行更精确的控制,在这里可以填写更多代码}<br>
<br>
est[1]:=false<br>
<br>
lse test[1]:=true;<br>
<br>
end;<br>
<br>
procedure TForm1.DBEdit2Exit(Sender:TObject);<br>
<br>
begin<br>
<br>
if DbEdit2.text=′′ then<br>
<br>
test[2]:=false<br>
<br>
lse test[2]:=true;<br>
<br>
end;<br>
<br>
procedure TForm1.DBEdit3Exit(Sender:TObject);<br>
<br>
begin<br>
<br>
if DbEdit3.text=′′ then<br>
<br>
est[3]:=false<br>
<br>
lse test[3]:=true;<br>
<br>
end;<br>
<br>
六、编写Button1的Onclick事件代码如下:<br>
<br>
procedure TForm1.Button1Click(Sender:TObject);<br>
<br>
var i:integer;<br>
<br>
begin<br>
<br>
i:=1;<br>
<br>
while test[i] and (i<=3) do {检测test数组元素是否为真}<br>
<br>
i:=i+1;<br>
<br>
if i<=3 then {有数据输入为空的情况}<br>
<br>
begin showmessage(′数据未完全录入′); {提示}<br>
<br>
case i of<br>
<br>
1:DbEdit1.Setfocus;<br>
<br>
2:DbEdit2.Setfocus;<br>
<br>
3:DbEdit3.Setfocus;<br>
<br>
end; {激活数据输入为空的DbEdit }<br>
<br>
end<br>
<br>
else begin table1.post; {如果输入都非空,则存入库中}<br>
<br>
Button1.Enabled:=false;<br>
<br>
Button2.Enabled:=true;<br>
<br>
end;<br>
<br>
end;<br>
<br>
七、编写Button2的OnClick事件代码如下:<br>
<br>
procedure TForm1.Button2Click(Sender:TObject);<br>
<br>
var i:integer;<br>
<br>
begin<br>
<br>
for i:=1 to 3 do test[i]:=false; {初始化数组}<br>
<br>
table1.open; {打开数据库}<br>
<br>
table1.Append; {增加一条空记录}<br>
<br>
table1.edit; {使库处于修改状态}<br>
<br>
DbEdit1.setfocus;<br>
<br>
Button1.Enabled:=true;<br>
<br>
Button2.Enabled:=false;<br>
<br>
end;<br>
<br>
八、编写Form1的OnClose事件代码如下:<br>
<br>
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);<br>
<br>
begin<br>
<br>
table1.close; {关闭数据库}<br>
<br>
end;<br>
<br>
九、存盘并运行程序,单击“录入”后向DbEdit框中输入数据,输入完毕按“确定”按钮,若某个DbEdit框未输入数据,这时会出现一个提示框,显示出错信息,而且入库操作不会进行,光标会停留在未输入数据的DbEdit框中,等待用户输入数据,直到必须输入数据的DbEdit框都被填入数据后,这条记录才会被存入库中。这样就避免了不完整记录的入库。<br>
<br>
显然,我们还可以在DbEdit的OnExit事件中加入更多的代码,来对该框进行更精确的控制,这里限于篇幅,就不在一一举例了。<br>
<br>
注意:有些数据库并不是要求每个字段都非空,这时只需对要求非空的字段加以控制就行了。表2
控件名称 属性 作用 DataSource1 DataSet:Table DbEdit1DbEdit2DbEdit3
DataSource:DataSource1 DataField:nameDataField:ageDataField:work
用于输入姓名用于输入年龄用于输入职业 Table
DataBaseName:manTalbeName:people.dbf 指定别名及数据库名称 Button1 Caption:确定
确定向库中写入数据 Button2 Caption:录入 开始数据输入操作<br>
</p>
<div id="content">
<p><a name="off"></a></p>
<div id="Silversand" style="position:absolute; left:0px; top:0px; z-index:1"><a
href="javascript:void(null)"
onclick="showhide('document.layers[\'Win0\']','document.all[\'Win0\']','show')">
<dd><img SRC="http://www.silversand.net/222.gif" NOSAVE BORDER="0" height="48" width="42"></a></dd>
</div><script language="JavaScript">
IE4=(document.all)?1:0
NN4=(document.layers)?1:0
if (IE4)
{
if( (document.body.clientHeight>300)&&(document.body.clientWidth>400) )
{
setInterval('keepIE("Silversand",0,0)',1000)
}
else
{
document.all['Silversand'].style.visibility = 'hidden';
}
}
if (NN4)
{
if( this.window.innerHeight<300 )
{
document.layers['Silversand'].visibility = 'hide'
}
if( this.window.innerWidth<400 )
{
document.layers['Silversand'].visibility = 'hide'
}
else
{
setInterval('keepNN("Silversand",0,0)',1000)
}
}
</script>
<div id="Win0"
style="position:absolute; width:80px; height:120px; z-index:2; visibility: hidden"><script
language="JavaScript">
IE4=(document.all)?1:0
NN4=(document.layers)?1:0
if (IE4)
setInterval('keepIE("Win0",-30,-30)',1000)
if (NN4)
setInterval('keepNN("Win0",-30,-30)',1000)
</script>
<table width="80" border="0" cellpadding="3" bgcolor="#ECF8FF">
<tr align="CENTER">
<td valign="middle" align="CENTER"><small>=========<a href="#off"
onmouseover="showhide('document.layers[\'Win0\']','document.all[\'Win0\']','hide','document.layers[\'Win1\']','document.all[\'Win1\']','hide','document.layers[\'Win2\']','document.all[\'Win2\']','hide','document.layers[\'Win3\']','document.all[\'Win3\']','hide','document.layers[\'Win4\']','document.all[\'Win4\']','hide','document.layers[\'Win5\']','document.all[\'Win5\']','hide','document.layers[\'Win6\']','document.all[\'Win6\']','hide','document.layers[\'Win6\']','document.all[\'Win6\']','hide')">X</a><br>
<a href="javascript:void(null)"
onclick="showhide('document.layers[\'Win1\']','document.all[\'Win1\']','show','document.layers[\'Win2\']','document.all[\'Win2\']','hide','document.layers[\'Win3\']','document.all[\'Win3\']','hide','document.layers[\'Win4\']','document.all[\'Win4\']','hide','document.layers[\'Win5\']','document.all[\'Win5\']','hide','document.layers[\'Win6\']','document.all[\'Win6\']','hide')">碧海银沙</a><br>
<a href="javascript:void(null)"
onclick="showhide('document.layers[\'Win1\']'
没有合适的资源?快使用搜索试试~ 我知道了~
Delphi中对用户输入数据的控制
共1个文件
html:1个
需积分: 9 7 下载量 107 浏览量
2008-08-30
13:13:49
上传
评论
收藏 4KB RAR 举报
温馨提示
Delphi中对用户输入数据的控制Delphi中对用户输入数据的控制
资源推荐
资源详情
资源评论
收起资源包目录
Delphi中对用户输入数据的控制.rar (1个子文件)
Delphi中对用户输入数据的控制
Del003.html 13KB
共 1 条
- 1
资源评论
XYJ0819
- 粉丝: 4
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功