设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2312|回复: 5
打印 上一主题 下一主题

[窗体] 在窗体中每增加新的记录,在子窗体中如何实现记录序号从1开始自动编号

[复制链接]
跳转到指定楼层
1#
发表于 2005-6-28 19:24:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在窗体中每增加新的记录,在子窗体中如何实现记录序号从1开始自动编号
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-10-31 07:01:00 | 只看该作者
先建一个模块  ContinuedIDOption Compare Database

Option ExplicitPrivate WithEvents DataForm As Form

Private strIDField As String

Private lngIDBegin As Long

Private lngIDStep As LongPublic Sub Init(srcForm As Form, srcField As String, Optional IDBegin As Long = 1, Optional IDStep As Long = 1)

    Set DataForm = srcForm

    DataForm.AfterInsert = "[Event Procedure]"

   

    strIDField = srcField

    lngIDBegin = IDBegin

    lngIDStep = IDStep

End SubPrivate Sub DataForm_AfterInsert()

    Dim daoRs As DAO.Recordset

    Dim daoField As DAO.Field

   

    Dim daoFieldName As Variant

    Dim daoFieldNames As New Collection

    Dim daoFieldValues As New Collection

   

    Dim NewID As Long

    Dim tmpID As Long

   

    DataForm.Recordset.MoveLast

    For Each daoField In DataForm.Recordset.Fields

        daoFieldNames.Add daoField.Name

        daoFieldValues.Add daoField.Value, daoField.Name

    Next daoField

   

    tmpID = lngIDBegin - lngIDStep

   

    Set daoRs = CurrentDb.OpenRecordset("SELECT " & strIDField & " FROM " & DataForm.Recordset(strIDField).SourceTable, dbOpenDynaset, dbReadOnly)

   

    Do Until daoRs.EOF

        If daoRs(strIDField) > tmpID + lngIDStep Then Exit Do

        tmpID = tmpID + lngIDStep

        daoRs.MoveNext

    Loop

   

    daoRs.Close

    Set daoRs = Nothing

   

    NewID = tmpID + lngIDStep

   

    If NewID >= DataForm.Recordset(strIDField) Then

        NewID = DataForm.Recordset(strIDField)

        GoTo Check_Next

    End If

   

    DataForm.Recordset.Delete

   

    DataForm.Recordset.AddNew

    For Each daoFieldName In daoFieldNames

        DataForm.Recordset(daoFieldName) = daoFieldValues(daoFieldName)

    Next daoFieldName

   

    DataForm.Recordset(strIDField) = NewID

    DataForm.Recordset.Update

   

    '设定下个默认值

Check_Next:

    tmpID = lngIDBegin - lngIDStep

   

    Set daoRs = CurrentDb.OpenRecordset("SELECT " & strIDField & " FROM " & DataForm.Recordset(strIDField).SourceTable, dbOpenDynaset, dbReadOnly)

   

    Do Until daoRs.EOF

        If daoRs(strIDField) > tmpID + lngIDStep Then Exit Do

        tmpID = tmpID + lngIDStep

        daoRs.MoveNext

    Loop

   

    daoRs.Close

    Set daoRs = Nothing

   

    If tmpID = NewID Then Exit Sub

   

    DataForm.Recordset.FindFirst strIDField & "=" & tmpID

    For Each daoField In DataForm.Recordset.Fields

        daoFieldValues.Remove daoField.Name

        daoFieldValues.Add daoField.Value, daoField.Name

    Next daoField

    DataForm.Recordset.Delete

   

    DataForm.Recordset.AddNew

    For Each daoFieldName In daoFieldNames

        DataForm.Recordset(daoFieldName) = daoFieldValues(daoFieldName)

    Next daoFieldName

   

    DataForm.Recordset.Update

End Sub窗体代码Option Compare Database

Option ExplicitPublic CID As New ContinuedIDPrivate Sub Form_Load()

    CID.Init Me, "id"

End Sub

试一试,应该没有问题.

3#
 楼主| 发表于 2005-10-31 18:39:00 | 只看该作者
嘿你好!

   谢谢你给我的代码,不过不是很明白,能否做个有子母窗体的例子让我看看.

谢了

wangcheng 2005-12-15

4#
发表于 2005-11-23 07:16:00 | 只看该作者
我也想知道。
5#
发表于 2006-4-12 06:29:00 | 只看该作者
以下是引用ACCESSWANGCHENG在2005-10-31 10:39:00的发言:


嘿你好!

   谢谢你给我的代码,不过不是很明白,能否做个有子母窗体的例子让我看看.

谢了

wangcheng 2005-12-15

6#
发表于 2006-4-20 00:33:00 | 只看该作者
最好能作个ACCESS例子,我试了后,也不行,好像所有的记录编号都是一样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-10 16:12 , Processed in 0.096077 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表