Database 版 (精华区)

发信人: starstar (星语心愿), 信区: Database
标  题: 在Visual FoxPro中实现AutoNumber
发信站: 哈工大紫丁香 (2001年05月19日20:26:32 星期六), 站内信件

用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
  在一对多关系中的多方(子表)添加记录时,为了实现与主表的关联,也可以
用类似的方法实现。

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.239.32]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.212毫秒