VFP中重复数据输入表单的制作
几乎所有的VFP应用程序,都要遇到将数据输入表单的情况。有一个大家经常碰到的问题,那就是如果输入的记录大多数字段数据相同,或者仅仅主关键字不同,而其余项相同的话,普通的解决办法只能是全部录入了,这样做显然费时费力,效率不高。对这个问题,有必要寻求一种方便高效的办法。这里给出本人在编制实验室仪器管理系统中所用的解决方法。为简单起见,仅给出一些必不可少的控件及其属性和代码。
先定义所用的数据表YIQIKU.DBF,结构如下:
字段名称:仪器编号 仪器名称 仪器位置 启用日期
字段类型:数值型 字符型 字符型 日期型
字段宽度:5 20 6 8
数据录入仅使用一个表单frminput,外形如^401301a^1:
控件共11个,下面分三类说明它们的属性。
第一类:标牌(Lable)共四个,其标题(Caption)分别为“仪器编号”、“仪器名称”、“仪器位置”、“启用日期”。
第二类:文本框(Textbox)共四个,其名称(Name)分别为“txt仪器编号”、“txt仪器名称”、“txt仪器位置”、“txt启用日期”,MaxLength属性分别为5,20,6,8。其中“txt启用日期”的Value属性设为“=DATE()”。
第三类:命令按钮(Commandbutton)共三个,其标题分别为“录入”、“清除”、“退出”,其名称分别为“cmd录入”、“cmd清除”、“cmd退出”。
现在说明命令按钮的事件代码。
“cmd录入”控件的“click”事件代码:
locate for 仪器编号==val(thisform.txt仪器编号.value) &&检查主关键字是否重复,由于“txt仪器编号”控件的value属性是字符,故用VAL( )函数转换
if found()=.f.
go bottom&&指针移至表的末尾
append blank &&添加空记录
dimension m.memadd[4]&&定义内存数组存放记录数据
m.memadd[1]=val(thisform.txt仪器编号.value)
m.memadd[2]=thisform.txt仪器名称.value
m.memadd[3]=thisform.txt仪器位置.value
m.memadd[4]=thisform.txt启用日期.value
gather from m.memadd&&数组数据入库表
else
if messagebox(″本仪器资料已经在库!″,0,″录入″)=1
return
endif
endif
return
“cmd清除”控件的click事件代码为:
thisform.txt仪器编号.value=″″
thisform.txt仪器名称.value=″″
thisform.txt仪器位置.value=″″
thisform.txt启用日期.value=DATE()
“cmd退出”控件的click事件代码为:
thisform.release( )&&释放本表单
表单“frminput″的load事件代码:
use YIQIKU.DBF &&打开库表
其unload事件代码:
use &&关闭库表
运行本表单时,光标先出现在“仪器编号”录入文本框,输入完5个数字后,光标自动移到下一项目。全部项目录完,单击“录入”按钮,则启动“cmd录入”的click事件处理程序。本段程序先检查“仪器编号”是否与库表中原有的仪器记录重复,重复则屏幕给出提示(见^401301b^2,由messagebox( )函数完成),如不重复则将输入数据先存入一个数组,再存入表中。显然,如果有许多相同的仪器,仅“仪器编号”不同,就可以只修改“仪器编号”,而无须再重新输入其余数据,而如果所有数据均不相同,就可以按“清除”按钮将原来数据清除,这样就可以节约大量的时间。