分享

VFP6.0中实现记录删除后自动调整编号

 风与树雨 2006-08-16
VFP6.0中实现记录删除后自动调整编号
null
好,言归正传,下面就来看看笔者是怎么样实现记录删除后自动调整记录编号这一功能的。
nullnull
  首先大家来看一下我的这个人事管理系统的删除表单:见图1,这里面的各个控件我想大家一看就知道是干什么用的了,在此我就不再介绍,有一点要说明的是,数据库(或表)打开的时候是不能带除了编号以外的索引的,也就是说必须要以编号排序的方式。
nullnull
     
nullnull
  在图1的表单中,“取消”,“确定”这两个按钮的代码笔者就不详细介绍了,根据程序作用的不同这两个按钮的代码可能会有一些出入。“上一个”和“下一个”按钮的代码也很简单,主要是一些判断记录有没有到头或到尾的代码和跳转记录时刷新的代码,在此也不多做介绍。下面我们主要来看看“删除”这个按钮的代码,整个“删除”按钮的代码如图2所示:下面我来介绍一下各段代码的作用:

    

===========================================
scyesno=messagebox("真的要删除吗?",4+32,"确认") &&这一句不用我多说吧?产生一个“确认”对话框。
if scyesno=6 &&如果用户按下“确定”按钮。
 b=recno() &&首先把要删除的记录号储存下来,以下要用到。
 delete &&把选定的记录作删除标记。
 pack &&把选定的记录从数据库中彻底删除。
 messagebox("已经搞定!",0+64,"删除完毕") &&产生一个“删除完毕”的对话框。
 go bottom &&数据库的记录指针移到尾部。
if reccount()>0 &&判断表中的记录个数是不是大于0,即还有没有记录。如果刚才删除的是数据库中最后  一条记录,不加这条判断语句截止的话 再向下执行会出错!所以这是一条相当重要的判断代码。
 if b<recno() .or. b=recno() &&如果刚才删除的记录号小于或等于最后一条记录的记录号。(在此注意   一下上面“go bottom”这句代码的作用。)
  go b &&跳转到刚才删除的记录的记录号上,从这一条记录开始修改记录的编号。
  do whil .not. eof() &&如里不到数据库结尾则重复执行以下修改编号的代码:
   replace 编号 with 编号-1 &&把当前记录的编号减1并保存。
   skip &&跳转到下一条记录。
  enddo &&结束假设和循环。
  go b &&这句要不要都行,主要是为了方便在表单里显示删除的那条记录的下一条记录的内容的。
 endif &&结束判断。
endif &&结束判断。
endif &&结束判断。

  &&以下的代码是为了删除后刷新用的,大家一看就明白的,不用我说了。

thisform.text1.refresh
thisform.text2.refresh
thisform.combo1.refresh
thisform.text4.refresh
thisform.text5.refresh
thisform.text6.refresh
thisform.text7.refresh
thisform.edit1.refresh
ThisForm.Oleboundcontrol1.refresh
===============================================


  好了,代码向大家看完了,在此笔者再向大家介绍个建议:就是在图1的表单中,如果这是个修改记录的表单的话,有相当一部分书或资料上都介绍把各个控件的controlsource的值直接指向数据库中相对应的字段名,笔者认为这样做不是很好,因为这样的话如果不小心动了表单中各个文本框的值的话,程序是没有一点提示就直接修改数据库中相对应的字段的值的。笔者的做法是:把各个控件的controlsource的值指向一个变量,比如说“姓名”文本框的controlsource值指向xgxm,然后在“确定修改”按钮的代码里再用“replace 姓名 with alltrim(xgxm)”来真正修改数据库中的记录,而用户不按下“确定修改”这个按钮是不会修改记录的内容的,这样就避免了误操作而修改记录的可能性。当然在“确定修改”按钮的开头你还可以加上个“警告框”来作为提醒。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多