方案一: 做一个自定义函数强行取值, 假设函数名为 min_zyh, 代码如下:
程序代码:
Func min_zyh Local tmp* If !Used("tmp_ypjgk") Use ypjgk In 0 Again Shar Alia tmp_ypjgk && 这么做的目的是不让函数干扰源表的记录指针 Endi Sele tmp_ypjgk set order to zyh && 关键, 需要确保对 zyh 字段进行索引 ( 这里假设索引名为 zyh ) m.tmp = 0 Scan && 此时的全表扫描, 记录指针已经受控于前面的 set order to 了. m.tmp = m.tmp + 1 && 这里假设楼主的表中序号为数值型字段并且序号增量为 1 If zyh <> m.tmp && 进行比对, 不吻合则意味着序号缺失 Retu m.tmp && 发现了空缺的序号时, 返回这个序号 Endi Ends Retu m.tmp + 1 && 没有发现空缺的序号, 则返回最大序号 + 1 作为新序号这个方案非常可靠, 使用也简单, 在需要用到这个序号的地方写上 min_zyh() 即可.
但是, 严重不推荐, 因为性能方面有太多隐患, 仅适用于数据量不太大的情况下(单机百万记录以下).
方案二: 假设楼主项目中的序号空缺是因为删除记录造成, 可以考虑维护一个"被删除的序号表",
这样当需要重用已删除的序号时,
直接到这个表中取最小值就行了.
具体代码这里略掉吧, 有思路应该足够了.
总结: 将删除的序号进行重用总体来说不是好的方案, 虽然不是很清楚楼主的意图, 但基本可以肯定这种思路在很多方面都不能达成理想效果.
[ 本帖最后由 arefeng 于 2012-6-18 00:45 编辑 ]