访问2007 VBA GoToRecord问题

时间:2012-07-04 11:43:51

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

我有一个事件表,记录每个人的多个事件。我添加了一个event_number字段,允许用户识别每个人的事件顺序并在它们之间移动。添加了一个包含以下代码的“新建事件”按钮,该按钮查找此人的最后一个事件编号,并在表中插入一个新行,其中包含一些基本数据,例如其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

1 个答案:

答案 0 :(得分:0)

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

''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字符串。

请注意,除了单个用户环境之外,您选择获取新号码的方式不安全。