vfp 插入空缺数

hifi_0371 2008-11-22 05:01:54
我有一个表其中一列为dah ,如图

dah mc
1-1 1
1-2 1
69-1 69
8-1 8
1-3 1
1-4 1
.... ...

这个表的名称为 zmd,其中档案号是自动生成的,在表单中有一个文本框txtdah,当它获得焦点是生成dah,其中档案号前边的为mc编号,- 后边根据dah中名称为mc的最大值+1生成的,select max(val(allrim(substr(dah,rat('-',dah)+1))) from zmd where mc=thisform.txtmc.value into arra b,这样找到dah中属于这个名称的最大档案号右边的值,这样dah就可以不重复,但是现在有个问题是,如果删掉一条记录,比如1-3 这条记录,再有名称为1 的记录时。生成的dah为1-5,1-3这个记录号就浪费了,能不能想生成编号时判断一下前边的档案号是否连续,如果连续,则最大档案号+1.如果有空缺,则生成空缺中最小的档案号,高手看看代码怎么写!
...全文
50 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hifi_0371 2008-11-22
  • 打赏
  • 举报
回复
谢谢指导!
都市夜猫 2008-11-22
  • 打赏
  • 举报
回复
_tally 是 vfp 的一个系统变量,存储了受最后一条数据操作命令影响的记录数,相当于 sql server 中的 @@RowCount 值
hifi_0371 2008-11-22
  • 打赏
  • 举报
回复
If _Tally>0
这个是判断什么啊?
十豆三 2008-11-22
  • 打赏
  • 举报
回复
Select Max(dah) From zmd Where Alltrim(mc)==Alltrim(Thisform.txtmc.Value) Into Array aMaxdah
If _Tally>0
lcLeft=Substr(aMaxdah,1,Rat('-',aMaxdah))
lnMax=Val(Substr(aMaxdah,Rat('-',aMaxdah)+1))
Create Cursor t1 (mydah c(20))
For lnI=1 To lnMax
Insert Into t1 (lcLeft+Transform(lnI))
Endfor
Select mydah From t1 Where mydah Not In (Select Distinct dah From zmd) Order By mydah Into Cursor t2
If _Tally>0
Thisform.txtdah.Value=t2.mydah
Else
Thisform.txtdah.Value=lcLeft+Transform(lnMax+1)
Endif
Else
Thisform.txtdah.Value=Alltrim(Thisform.txtmc.Value)+"-1"
Endif
十豆三 2008-11-22
  • 打赏
  • 举报
回复
先取得MC,然后取得最大值,再从1 至 最大值循环,找到没有的值就用,没找到,就最大值加1

2,727

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧