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),jobdbf(子表)结
构为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.967毫秒