微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题在Visual FoxPro中实现AutoNumber
栏目游戏世界
作者dqzzb
发布1998年第31期12版
  在用Visual FoxPro设计一对多的关系数据库时,我们需要在主表建立一个主索引,在子表建立一个普通索引。在主表中添加记录时,必须保证被设置为主索引的字段没有重复的值。如果让用户来手工添加记录,有可能在被设置为主索引的字段中出现重复的值,从而导致数据库出错。在Access中,有一个AutoNumber型的字段,由系统自动产生这些不可重复的值,避免了数据库的出错,也为用户带来了方便。
  那么在Visual FoxPro中如何实现这个功能呢?笔者的做法是编一个添加记录的小程序,当用户添加记录时,由自编的程序插入一个新记录,并产生新记录被设置为主索引的字段的值。示例如下:
  有如下二表,people.dbf(主表)结构为id n(3),name c(8),job.dbf(子表)结构为id n(3),job c(10),我们在二表之间建立一对多关系,将people.dbf的id设置为主索引,将job.dbf的id设置为普通索引。添加people.dbf记录的程序如下:
  'insertpeople.prg:
  calculate max(id) to maxid '查找现有id的最大值,存入maxid
  insert into people (id) values (maxid+1) '插入新的记录,并使新记录的id=maxid+1
  实际应用时,设计一个添加按钮(CommandButton1),使其Caption=“添加”,在其Click事件中加入代码:
  'CommandButton1.Click
  do insertpeople
  如表中记录不经常删除,这一方法比较适用。当表中的数据常常删除时,此方法有一个缺点,仍以people.dbf为例,假设people.dbf中有3条记录,id分别为1、2、3,当用户删除(Delete and Pack)id为2的记录后再添加记录,新添加的记录id为4,而这时的愿望是使其id为2,否则的话,为id分配的3位number空间可能不够用。此时可修改insertpeople.prg如下:
  'insertpeople.prg:
  select people
  for i=1 to 999 '让i在1~999之间循环
  locate for (i==people.id) '在people中查找i值是否重复
  if found()=.f.
  insert into people (id) values (i)
  '不重复的话,用此时的i值作为新记录的id值
  exit '中断循环
  endif
  endfor
  在一对多关系中的多方(子表)添加记录时,为了实现与主表的关联,也可以用类似的方法实现。