看实例学VFP:同时向两个表中添加记录

本文利用看实例学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”教程

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索表单
, command
, 按钮
, text
, 网站
, enabled
, 表单,编号
表单value
,以便于您获取更多的相关知识。

时间: 2024-11-02 10:48:02

看实例学VFP:同时向两个表中添加记录的相关文章

看实例学VFP:编程方式向表单添加新控件

vfp的"表单控件工具栏"包含了标签(Label).文本框(TextBox)等常用的控件类,以前我们向表单添加控件时多数都是在设计时使用该工具栏. 单击该工具栏上的某个控件图标后,即可在表单上拖动.绘制出所需要的控件.但有时我们需要的控件有可能在设计时无法确定,而是在应用程序运行时根据具体情况动态创建的,这时就需要以编程的方式,通过使用addobject()函数或creatobject()函数动态地向表单添加新控件. 本例在命令按钮的click事件代码中,使用系统基类grid动态创建出

看实例学VFP:利用多个表中的字段创建新表

本例中再来复习一下select语句中的inner join子句的知识,关于select语句请参考:select SQL 命令 或sql语言教程.本例的主要操作是在表单的init事件中完成的,在该事件中进行连接查询并将查询结果输出为一个临时表(该表包括了"人员信息表"的"姓名,性别,基本工资"3个字段以及"工资表"的"奖金,生活补助,养老保险"3个字段),最后将该表设为表格控件的数据源.本例应用到了数据环境,并使用"数

看实例学VFP:页框控件的使用

页框(pageframe) 也是vfp的一个基本控件,使用它可以制作出类似于windows对话框的效果,关于这个控件的常用属性和方法请参考vfp基础教程-页框和页一文. 页框控件本身是一个容器,其中可以包含若干个页(page):而页也是容器,可以在其中添加各种对象,因此无论是在设计时添加对象或者是代码引用,都要比别的控件麻烦些.在使用这个控件时需要注意:如果设计时要向某个页中添加对象,一定要在页框的编辑状态下选中该页的标签,然后再向该页中添加控件:另外在不同页之间切换时,需要处理好数据源的问题.

看实例学VFP:对组合框控件的再探索

组合框控件(combobox)在vfp中也是一个常用的控件,组合框兼具文本框和列表框的功能,它的名称大概也由此而来.在vfp基础教程-组合框控件(combobox) 中已经比较详细地给出了组合框的常用属性和方法. 在组合框控件的应用中,很重要的一个环节是它的RowSourceType及RowSource这两个属性的组合.比如在看实例学VFP:对表中记录进行定位与查找操作这个例子中是把组合框的RowSourceType属性值设为"1-值",而在看实例学VFP:去除查询结果中的重复记录这个

看实例学VFP:制作系统登录表单

本例制作一个简单的登录表单,系统运行时首先启动此登录表单,运行界面如下图: 输入正确的用户名及密码才会启动主表单,如下图:若连续3次输入错误的用户名及密码则会自动退出. 制作步骤如下: 一.新建表单,将表单的caption属性值设置为"系统登录",ShowWindow属性值设置为"2-作为顶层表单",width属性值设置为295,height属性值设置为100,AutoCenter属性值设置为,并将表单保存为"系统登录.scx". 二.继续设置该

看实例学VFP:制作只能从顶层表单调用的系统主菜单

我们知道正常的VFP菜单都是显示在主屏幕(_screen)中的,但如果要使用顶层表单来做软件的主界面,_screen是要屏蔽掉的.这就产生了一个问题:_screen没有了,软件菜单该往哪里放呢?没有关系,可以使用只能从顶层表单中调用的菜单来解决这个问题,另外这种菜单的调用处是在顶层表单的init事件中,而不是在主程序中. 本例来制作一个只能从顶层表单调用的系统主菜单MAIN.MPR,下一课我们将会给出使用顶层表单制作软件主界面的示例,并会在该示例中调用这个菜单.该菜单包括"数据操作"和

看实例学VFP:顶层表单(父子表单)的例子

记得以前有朋友想让他的vfp程序运行时是这个样子:没有VFP的主屏幕(_screen),运行时直接在桌面出现一个登录对话框,输入用户名及密码并验证通过之后出现软件的主界面,看起来象是用VB编写的软件,有种很酷的感觉. VFP软件主界面的实现通常可以采用两种方式:主屏幕(_screen)或顶层表单(或者叫父子表单).可以用顶层表单来实现上述的想法. VFP中设置顶层表单的方法是将表单的showWindow属性设置为"2-作为顶层表单",这也就是所谓的"父表单"了:与之

看实例学VFP:表单集的例子

本文是一个关于表单集的小实例.本例运行时表单集中的表单form2的状态是隐藏,表单form1上面的表格显示的是"网站信息表"中的数据,如下图: 单击了"显示附加信息"命令按钮后,该按钮上面的文字变为"隐藏附加信息",同时表单form2显示出来,它上面的表格显示的是"附加信息表"中的数据:并且form1和form2上面的两个表格中的数据能实现数据联动,即在form1的表格中单击一个网站的记录,在form2的表格中会显示该网站的附

看实例学VFP:用SELECT语句创建查询

vfp中可以使用sql语句操作表,并且在使用sql语句操作表时不需要打开数据库.本例介绍的是select查询语句(数据检索),关于select语句的格式请参考:select SQL 命令 或sql语言教程. 在看实例学VFP:对表中记录进行定位与查找操作一文中,我们是使用locate语句作记录定位并同时使用了eof()函数,如果该函数返回真值,说明数据表中不存在所查询的记录并给出提示信息.本例用sql语句对这一部分进行了改写.与上例的区别大致的如下: 1.本例依然使用表格控件作为数据显示控件,表