访问:如何在以第二种形式创建后以一种形式显示新记录

时间:2011-05-12 21:20:29

标签: ms-access vba

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 

2 个答案:

答案 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上,但我希望你能得到这个概念......)