当前位置: 首页 > 编程语言 > vfp > 正文

看实例学VFP:向数据表中添加记录时自动生成编号

时间:2009-02-06 本站 老马

本例在“看实例学VFP:向数据表中添加记录并验证输入数据是否合法”的基础上进行了改进,实现了在添加记录时不仅能够完成对输入数据的校验,还具有自动生成编号的功能。自动生成编号的相关代码加在表单的init事件及“添加”按钮的click中,在表单第一次启动或添加完记录后都会调用此段代码,实现自动生成编号的功能。运行界面如下:

本例用到了“数据1”数据库中的“网站信息表”,关于该数据库的情况已经在看实例学VFP:示例数据库一文中给出,这里不再详述,下面是制作步骤:

一、新建表单form1,并将其Caption属性值设为“向数据表中添加记录时自动生成编号”,widht属性值设为290,height属性值设为210,AutoCenter属性值设置为.t.,将其保存为“向数据表中添加记录时自动生成编号.scx”。

二、向表单添加一个grid控件,将其readonly属性设置为.t.,其RecordSourceType值采用默认的“1-别名”,在表单设计器中将其宽和高粗略调小一些即可,具体属性值我们将在表单的init事件代码中对其进行设置。

三、向表单添加三个Label控件,其属性值依次设置为“编号”、“网站名称”和“网站网址”,将这三个控件排成一列;在这一列Label控件右侧添加三个文本框控件,属性值不用设置采用默认即可,也把它们排成一行;在第一个文本框的右侧添加两个命令按钮command1和command2,其Caption属性值依次设置为“添加”和“退出”。适当调整一下各控件的大小和位置,“表单设计器”如下图所示:

四、添加事件代码:

(一)表单的unload事件:

set exact off
close data

(二)表单的init事件:

set exact on
set talk off
use 网站信息表
this.Text1.value=""
this.Text2.value=""
this.Text3.value=""
with this.grid1
  .width=290
  .height=110
  .left=0
  .top=0
  .recordsource="网站信息表"
  .deletemark=.f.
  .visible=.t.
  .readonly=.t.
  .ColumnCount=3
  .Column1.Header1.Caption="编号"
  .Column1.Header1.BackColor=RGB(255,255,190)
  .Column2.Header1.BackColor=RGB(255,255,190)
  .Column2.Header1.Caption="网站名称"
  .Column3.Header1.BackColor=RGB(255,255,190)
  .Column3.Header1.Caption="网站网址"
  .Column1.width=75
  .Column2.width=80
  .Column3.width=150
endwith
this.grid1.Setall("DynamicBackColor","RGB(224,225,255)","Column")
calculate max(编号) to maxbh  &&在数据表中查找出序号最大的记录
szbh=val(right(maxbh,3))  &&取出数字部分
if szbh=0 then  &&判断数字部分是否为0
   zdbh='wz001'
else
   zdbh='wz'+padl(alltrim(str(szbh+1)),3,'0')  &&生成自动编号
endif
this.Text1.value=zdbh
this.Text1.readonly=.t.
this.Text2.setfocus

(三)“添加”按钮(command1)的click事件代码:

b=alltrim(thisform.Text2.value)
c=alltrim(thisform.Text3.value)
if empty(b) &&此条件成立则说明该文本框是空的
   messagebox("请输入网站名称",16,"系统提示")
   return
else
  locate for 网站名称=b
  if .not.eof() &&此条件成立,说明要添加的内容和表中有重复的
      go top
      messagebox("不允许有重复的网站名称",16,"系统提示")
      return
  endif
endif
if empty(c)
   messagebox("请输入网站网址",16,"系统提示")
   return
else
  locate for 网站网址=c
  if .not.eof()
      go top
      messagebox("不允许有重复的网站网址",16,"系统提示")
      return
  endif
endif
msg=messagebox('确定要添加记录吗?',32+4,'系统提示')
if msg=6
   append blank
   go bottom
   replace 网站信息表.编号 with alltrim(thisform.Text1.value),;
   网站信息表.网站名称 with alltrim(thisform.Text2.value),;
   网站信息表.网站网址 with alltrim(thisform.Text3.value)
   messagebox('保存记录成功!',64,'系统提示')
  thisform.grid1.refresh
  calculate max(编号) to maxbh  &&在数据表中查找出序号最大的记录
  szbh=val(right(maxbh,3))  &&取出数字部分
  if szbh=0 then  &&判断数字部分是否为0
     zdbh='wz001'
  else
     zdbh='wz'+padl(alltrim(str(szbh+1)),3,'0')  &&生成自动编号
  endif
  thisform.Text1.value=zdbh
  thisform.Text2.value=""
  thisform.Text3.value=""
  thisform.Text2.setfocus
  thisform.refresh
endif

(四)“退出”按钮(command2)的click事件代码:thisform.release

五、运行“向数据表中添加记录时自动生成编号.scx”。

参考资料:

vfp基础教程:http://bianceng.cn/vfpjc/index0.htm

vfp初级教程:http://bianceng.cn/cc/index.htm

vfp中级教程:http://bianceng.cn/mcc/mcc.htm

vfp高级教程:http://bianceng.cn/hcc/hcc.htm

VFP网络开发:http://bianceng.cn/VFPwz/vfpwlkf.htm

vfp调用api函数:http://bianceng.cn/VFPwz/vfpapi.htm

VFP报表打印:http://bianceng.cn/VFPwz/vfpreport.htm

VFP常用技术:http://bianceng.cn/VFPwz/vfpcyjs.htm

VFP经验汇总:http://bianceng.cn/VFPwz/vfpjyhz.htm

VFP控件使用:http://bianceng.cn/VFPwz/vfpkjsy.htm

VFP数据处理:http://bianceng.cn/VFPwz/vfpsjcl.htm

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

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