Office中国论坛/Access中国论坛

标题: 请教:如何在子窗体中新增记录时自动产生序号 [打印本页]

作者: jackysu78    时间: 2009-5-11 14:41
标题: 请教:如何在子窗体中新增记录时自动产生序号
请高手帮忙!谢谢!
问题:如何在子窗体中新增记录时自动产生序号?
作者: jackysu78    时间: 2009-5-11 15:26
咋就没人赐教呢,版主?
作者: todaynew    时间: 2009-5-11 15:31
用子查询或者Dcount函数,具体方法参见《趣谈子查询》中的倒数第二个查询。
作者: jackysu78    时间: 2009-5-11 15:53
谢谢你的回复!好象没有看到适合我的意思的。
作者: chuang0321    时间: 2009-5-11 16:00
用一下=currentrecord看行不行
作者: todaynew    时间: 2009-5-11 16:06
本帖最后由 todaynew 于 2009-5-11 16:11 编辑

不会吧?呵呵
关于no可以这样得到:
select  dcount("*","表名称","id=" & 表名称.id &  " and deteil-id <=" & 表名称.deteil-id ) as no form  表名称
或者:
select  (select count(*)  form  表名称 as b where b.id=a.id  and b.deteil-id <=a.deteil-id from 表名称 as b) as no form  表名称  as  a

此外也可用窗体的编号:
me.Form.CurrentRecord

总之不需要等设一个字段
作者: jackysu78    时间: 2009-5-11 16:15
这样说吧,我现在生成序号的处理方法就是用dcount()更新生成的,如下:
  1. UPDATE 业务联系单detail SET 业务联系单detail.receive_no = DCount("bill_detail_id","业务联系单detail","bill_id=" & [bill_id] & " and bill_detail_id<=" & [bill_detail_id])
  2. WHERE (((业务联系单detail.receive_no) Is Null) AND ((业务联系单detail.customer_short) Is Not Null));
复制代码
但是,这不是我的原意,我的意思是在如上图子窗体中新增一条记录,即自动产生一个序号,在事件中实现,而不是通过更新查询来处理。
再次表示感谢!
烦请下载本人上传的示例,然后在子窗体中随便增加一条记录,当前是没有事件,现在的No值1、2是手工输入的。
作者: jackysu78    时间: 2009-5-11 16:18
还补充说一下:增加一个字段是为了提高效率,如果用dcount()去生成,打开窗体的速度好慢!谢谢!
作者: todaynew    时间: 2009-5-11 16:19
id 的更新后事件中写:

DoCmd.RunCommand acCmdRecordsGoToFirst
Do While IsNull(Me.ID) = False
    Me.no.value = Me.Form.CurrentRecord
    DoCmd.RunCommand acCmdRecordsGoToNext
Loop
DoCmd.RunCommand acCmdRecordsGoToFirst
作者: jackysu78    时间: 2009-5-11 16:39
真是不好意思,经测试好象还是不行,可否帮忙在示例中处理一下,感激!
作者: todaynew    时间: 2009-5-11 17:04
真是不好意思,经测试好象还是不行,可否帮忙在示例中处理一下,感激!
jackysu78 发表于 2009-5-11 16:39

[attach]37991[/attach]
作者: jackysu78    时间: 2009-5-11 17:28
谢谢!
作者: Henry D. Sy    时间: 2009-5-11 23:01
Private Sub Form_Current()
    Dim a As Integer
    a = DCount("*", "表2")
    If NewRecord Then
        Me.no.DefaultValue = a + 1
    End If
End Sub
作者: Henry D. Sy    时间: 2009-5-11 23:03
或者直接
Private Sub Form_Current()
    Dim a As Integer
    a = DCount("*", "表2")
    If NewRecord Then
        Me.no = a + 1
    End If
End Sub
作者: jackysu78    时间: 2009-5-12 10:24
谢谢版主!
以上两种方法均可达成,因楼上版主上传的文件好象无法解压,所以再次说明一下,有两个不同意见供参考!
1、为了保证同一ID序号连续,故需增加dcount()的分组条件
2、事件换成No的进入,或者其他可编辑字段的更新后事件较好
  1. Private Sub no_Enter()
  2. 'Me.no.Value = Me.Form.CurrentRecord
  3.     Dim a As Integer
  4.     a = DCount("*", "表2", "id =" & [id] & "")
  5.     If NewRecord Then
  6.         Me.no = a + 1
  7.     End If
  8. End Sub
复制代码





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3