Access 2007:我有一个显示100条记录的表单。我有第二个表单用于编辑或创建新记录。当我在添加新记录后返回第一个表单时,我执行On Activate:Me.Requery,因此新记录被添加到列表中,但我希望它在屏幕上显示新记录上的记录选择器。有没有办法做到这一点?我假设我将ID保存在全局变量中,但不知道下一步该怎么做。谢谢。
RESPONSE: 谢谢// t。你的回答让我朝着正确的方向前进。我将发布我的解决方案,我认为这更像是一种解决方案。必须有一个更好的解决方案,但这似乎有效。
表格1(清单) - >表格2(编辑/新)并创建新记录。
Private Sub Form_Current ()
glngID = Me.ID.Value
End Sub
Private Sub Form_Close
gstrLastForm = "Form2"
End Sub
当我关闭表格2时,表格1处于活动状态。
Private lngSelectedRecord as Long
Private Sub Form_Activate()
Me.Requery
FindSelectedRecord
If gstrLastForm = "Form2" Then
DoCmd.GoToRecord acDataForm, "Form1", acGoTo, lngSelectedRecord
End If
End Sub
Private Sub FindSelectedRecord()
...
Open recordset, move through records, increment counter, exit when ID found
...
lngSelectedRecord = intCounter
...
End Sub
答案 0 :(得分:2)
这通常使用在对话框模式下打开的表单来完成。在大多数情况下,你的主表单ADD NEW RECORD上有一个命令按钮,点击后会运行如下代码:
DoCmd.OpenForm "MyAddForm", , , , acFormAdd, acDialog
这将打开用于将新记录添加到新的空记录中的表单,并暂停代码。
但是,您需要知道添加的记录的PK,因此您不能只关闭表单并让代码继续。因此,通常的做法是将对话框窗体的Visible属性设置为False,从中获取所需的数据,然后关闭它并执行您想要的操作:
Dim lngPK As Long
DoCmd.OpenForm "MyAddForm", , , , acFormAdd, acDialog
If Forms!MyAddForm.Tag <> "Cancel" Then
lngPK = Forms!MyAddForm!PK
Application.Echo False
Me.Requery
With Me.RecordsetClone
.FindFirst "[PK]=" & lngPK
If Not .NoMatch Then
If Me.Dirty Then
Me.Dirty = False
End If
Me.Bookmark = .Bookmark
End If
End With
Application.Echo True
End If
DoCmd.Close acForm, "MyAddForm"
在对话框窗体中,您必须隐藏默认窗口控件,以便用户无法关闭它。相反,有两个命令按钮SAVE和CANCEL。 SAVE按钮执行此操作:
If Me.Dirty Then
Me.Dirty = False
End If.
Me.Visible = False
...而CANCEL按钮执行此操作:
Me.Undo
Me.Tag = "Cancel"
Me.Visible = False
结果是你知道没有保存记录,所以你不想对调用表单做任何事情。
这是所有标准的Access用户界面设计,它是迄今为止最简单,最防弹的方法。
答案 1 :(得分:1)
使用弹出窗口中的on_close方法转到插入的记录, 类似的东西:
private sub on_close()
'maby first check we're not undoing..
docmd.gotoRecord yourform,yournewid
me.close
(目前在osx上,但我希望你能得到这个概念......)