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