【问题标题】:Access 2007 VBA GoToRecord issue访问 2007 VBA GoToRecord 问题
【发布时间】:2012-07-04 22:03:26
【问题描述】:

我有一个事件表,其中记录了每个人的多个事件。我添加了一个 event_number 字段,以允许用户识别每个人的事件顺序并在它们之间移动。添加了一个带有以下代码的 New Event 按钮,该按钮查找人员的最后一个事件编号,并在表中插入一个新行,其中包含一些基本数据,例如他们的 ID 和下一个可用的事件编号。这工作正常,但我需要做的是移动事件子表单,以便在表单上显示这个新的事件编号,以便可以添加其余数据。尝试了围绕 DoCmd.GoToRecord 的各种选项,但只能设法显示一个空白子表单,而不是显示新输入的事件编号。有什么想法吗?

Private Sub btnNewEvent_Click()  
   'add a new event by setting discriminator and event number
   Dim lngLast As Long
   Dim strQuery As String
   lngLast = DMax("[event_number]", "event", "[PersonID] = [Forms]![frmContainer]![txPersonID]")
   lngLast = lngLast + 1
   strQuery = "INSERT INTO event ( ID, event_discriminator, event_number ) " & _
           "VALUES ([Forms]![frmContainer]![txtPersonID], 'NR', " & lngLast & ")"
   DoCmd.RunSQL (strQuery)
End Sub

【问题讨论】:

    标签: ms-access ms-access-2007 vba


    【解决方案1】:

    这取决于子表单是连续表单还是单一表单以及您的应用程序如何工作。重新查询子表单然后找到相关记录可能就足够了:

    ''Running from the main form
    Me.MySubformcontrolName.Form.Requery
    
    Me.MySubformcontrolName.SetFocus
    With Me.MySubformcontrolName.Form.Recordset
        .FindFirst "ID=" & lngLast 
    End With
    

    或者

    ''From the subform:
    Me.Requery
    
    With Me.Recordset
       .FindFirst "ID=" & lngLast 
       ''Other stuff
    End With
    

    可能适合简单地将子表单记录源重置为仅包含最新记录的 SQL 字符串。

    请注意,您选择的获取新号码的方式在单用户环境中是不安全的。

    【讨论】:

    • 有没有更好的方法来设置下一个事件编号?该表当前有一个自动编号作为 event_ID 主键。需要能够为每个人记录大约 50 个事件,总共 2400 人。只有一名用户负责记录特定人员。
    • 基于事件表作为记录集的单个表单,但包含多个子表单,每个子表单用于单个表,其中 event_ID 作为外键并通过主/子链接进行链接。
    • 事件编号是每个人的下一个序列号,对吗?需要序号吗?
    • 顺便说一句,我有一个添加事件的系统,我使用一个小的未绑定表单来添加每个事件,这样可以确保在将事件添加到表之前输入所有详细信息。在我看来,弹出表单对用户来说不会那么混乱。
    • 是的,事件编号是每个人的下一个序列号。用户需要能够为一个人的每个事件处理一个屏幕,最多可能有 50 个事件,并添加与该事件相关的所有数据,这些数据进入四个表。如果我不使用序列号,他们是否很难轻松地看到他们在序列中的位置,并且能够直接移动到某个特定事件?
    猜你喜欢
    • 2016-08-23
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多