当前位置:主页   - 电脑 - 程序设计 - VFP
看实例学VFP:同时向两个表中添加记录
来源:网络   作者:www.bianceng.cn 老马    更新时间:2010-09-26
收藏此页】    【字号    】    【打印】    【关闭

本文利用看实例学VFP:利用多个表中的字段创建新表这个实例中的知识来制作一个文本式录入表单的简单示例,通过这个表单可以同时向“数据1”数据库中的“网站信息表”和“附加信息表”这两个表中添加记录,并且对录入的数据可以选择“保存”、“添加”或“撤消”。这两个表的索引字段分别是“编号”和“网站编号”,这两个字段的内容是完全相同的,只是分别处于两个表中,并且两个表通过这两个字段发生关联。关于“数据1”数据库的情况已经在看实例学VFP:示例数据库一文中给出,这里不再详述。

本例要点:

在以前的例子中,我们介绍过可以在“数据环境”中拖动一个表的字段到表单上,系统会自动生成一个标签及一个文本框控件。不过本例要求对录入的数据可以选择“保存”、“添加”或“撤消”等操作,如果也这样设计的话,则录入的数据不管你是否保存了都会写入到表中,原因是文本框是从数据环境中拖动过来而生成的,它们的数据源(ControlSource)已经自动与表中的字段绑定了。这很明显与我们的设计要求不符。

所以本例在设计时采取从“表单设计器”上手工向表单中添加文本框等控件,并且将添加上去的各个文本框的ControlSource属性值分别设置为临时表lsb中的字段,在表单的init事件中对“网站信息表”和“附加信息表”进行连接查询并将查询结果输出为临时表lsb。这样表单在启动时各个文本框就会显示临时表lsb当前记录的各个记录的值,同时命令按键“保存”和“取消”不可用,单击“第一条”等记录移动按钮可以依次显示lsb表的各条记录的值,如下图:

单击了“添加”按钮后,这个按钮本身及“第一条”~“最后一条”这四个记录移动按钮不可用,同时各个文本框被清零、等待接收数据,如下图:

此时单击“取消”按钮可以撤消此次操作,单击“保存”按钮后,则对表单上各个文本框的值进行校验,如果都不会空,才会依据表单上文本框的值分别在“网站信息表”和“附加信息表”这两个表中添加一条记录。

制作步骤:

一、新建表单,并将其caption属性值设置为“设计文本式录入表单”,AutoCenter属性值设置为.t.,width属性值设置为375,height属性值设置为250,并将表单保存为“设计文本式录入表单.scx”。

补充:建好表单后,需要右击表单选“数据环境”命令,把“网站信息表”和“附加信息表”添加到数据环境中去(或者不使用数据环境、在表单的init事件中把这两个表打开也可以)。写制作过程时忘记写这一点,今天补充一下。

二、向表单上添加5个label控件,将这些label控件的AutoSize属性值都设为.t.,caption属性值分别设置为“编号”、“网站名称”、“网站网址”、“网站类型”和“网站描述”。

三、向表单上添加5个文本框控件(Text1~Text5),将这5个文本框控件(Text1~Text5)的ControlSource属性值依次设置为“lsb.编号”、“lsb.网站名称”、“lsb.网站网址”、“lsb.网站类型”和“lsb.网站描述”。

四、向表单上再添加8个命令按钮控件。

五、适当调整各控件的大小及它们在表单上的位置,调整后的表单设计器如下图:

六、将这8个命令按钮控件(command1~command8)的caption属性值依次设置为“第一条”、“上一条”、“下一条”、“最后一条”、“添加”、“保存”、“取消”和“退出”。

七、添加事件代码:

(一)表单的init事件:

select 网站信息表
Select 编号,网站名称,网站网址,网站类型,网站描述;
 from 网站信息表 Inner Join 附加信息表;
  on 网站信息表.编号= 附加信息表.网站编号 into cursor lsb
thisform.command6.enabled=.f.
thisform.command7.enabled=.f.
thisform.Text1.value=lsb.编号
thisform.Text2.value=lsb.网站名称
thisform.Text3.value=lsb.网站网址
thisform.Text4.value=lsb.网站类型
thisform.Text5.value=lsb.网站描述

(二)“第一条”按钮(command1)的click事件:

if bof()=.f.
 go top
endif
thisform.refresh

(三)“上一条”按钮(command2)的click事件:

if bof()=.f.
 skip -1
endif
thisform.refresh

(四)“下一条”按钮(command3)的click事件:

if eof()=.f.
  skip
endif
thisform.refresh

(五)“最后一条”按钮(command4)的click事件:

if eof()=.f.
 go bottom
endif
thisform.refresh

(六)“添加”按钮(command5)的click事件:

thisform.Text1.ControlSource=""
thisform.Text2.ControlSource=""
thisform.Text3.ControlSource=""
thisform.Text4.ControlSource=""
thisform.Text5.ControlSource=""
thisform.Text1.value=""
thisform.Text2.value=""
thisform.Text3.value=""
thisform.Text4.value=""
thisform.Text5.value=""
this.enabled=.f.
thisform.command1.enabled=.f.
thisform.command2.enabled=.f.
thisform.command3.enabled=.f.
thisform.command4.enabled=.f.
thisform.command6.enabled=.t.
thisform.command7.enabled=.t.

(七)“保存”按钮(command6)的click事件:

a=alltrim(thisform.Text1.value)
b=alltrim(thisform.Text2.value)
c=alltrim(thisform.Text3.value)
d=alltrim(thisform.Text4.value)
e=alltrim(thisform.Text5.value)
if empty(a).or.empty(b).or.empty(c).or.empty(d).or.empty(e)
   messagebox("请输入完整信息")
   return
endif
INSERT INTO 网站信息表;
 (编号,网站名称,网站网址) VALUES(a,b,c)
INSERT INTO 附加信息表;
 (网站编号,网站类型,网站描述) VALUES(a,d,e)
messagebox("保存记录成功!",64,"系统提示")
this.enabled=.f.
thisform.command7.enabled=.f.
thisform.command1.enabled=.t.
thisform.command2.enabled=.t.
thisform.command3.enabled=.t.
thisform.command4.enabled=.t.
thisform.command5.enabled=.t.
select 网站信息表
Select 编号,网站名称,网站网址,网站类型,网站描述 from 网站信息表 Inner Join;
 附加信息表 on 网站信息表.编号= 附加信息表.网站编号 into cursor lsb
thisform.Text1.ControlSource="lsb.编号"
thisform.Text2.ControlSource="lsb.网站名称"
thisform.Text3.ControlSource="lsb.网站网址"
thisform.Text4.ControlSource="lsb.网站类型"
thisform.Text5.ControlSource="lsb.网站描述"
thisform.refresh

(八)“取消”按钮(command7)的click事件:

this.enabled=.f.
thisform.command6.enabled=.f.
thisform.command1.enabled=.t.
thisform.command2.enabled=.t.
thisform.command3.enabled=.t.
thisform.command4.enabled=.t.
thisform.command5.enabled=.t.
thisform.Text1.ControlSource="lsb.编号"
thisform.Text2.ControlSource="lsb.网站名称"
thisform.Text3.ControlSource="lsb.网站网址"
thisform.Text4.ControlSource="lsb.网站类型"
thisform.Text5.ControlSource="lsb.网站描述"
thisform.refresh

(九)“退出”按钮(command8)的click事件:thisform.release

八、运行“设计文本式录入表单.scx”。

本例代码在Win2003+VFP6.0环境下调试通过。

查看全套“菜鸟也学VFP”教程

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明