添加新记录时子窗体失去焦点

时间:2013-12-30 20:49:51

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

我的数据库分为Front和Back。我在这个问题上有三张桌子。 tblMain,tblDetail,tblNote。我知道记录的数量相对较少,但我设计这个记录是为了长期使用。我有一个tblMain的绑定表单(frmMain),它有一个用于tblDetail的子表单(subDetail)。 SubDetail有一个tblNote的子表单(subNote)。当我单击主窗体上的按钮frmMain时,subDetail窗体变为可见,并允许我添加新记录。我将按钮和VBA复制到subDetail,这样我就可以根据需要为subNote添加记录。但是,创建记录后,subNote表单将消失,焦点将返回到subDetail。如果我移动到新记录然后返回,则subNote表单变为可见并显示除PK之外的空记录。我检查了subDetail和subNote的所有属性。除了subDetail的OnCurrent事件之外,它们完全相同。我有以下的subDetail OnCurrent事件。

'Hide subform if no records
Private Sub Form_Current()
    Me!ctrlmlsID.SetFocus
With Me!subNote.Form
    .Visible = (.RecordsetClone.RecordCount > 0)
End With

End Sub

这会隐藏或显示子表单subNote,具体取决于是否有任何记录。任何帮助搞清楚这种行为都会受到赞赏。

以下是点击按钮时向subNote添加新记录的代码。

If Me.Dirty Then Me.Dirty = False
Dim AddTransID As String
AddTransID = Me!ctrlID.Value
Me!subNote.Visible = True
Me!subNote.SetFocus
DoCmd.GoToRecord , , acNewRec
Me!subNote.Form!ctrlID = AddTransID
Me!subNote.Form!ctrlType.SetFocus

我使用了断点,添加记录也很好用。只是子窗体再次变得不可见,并且焦点被更改回父母,因为它不允许添加这些笔记。

1 个答案:

答案 0 :(得分:1)

我得到的印象是你在这里与之抗争。

您通常不需要使用具有AllowAdditions = True的正确绑定子窗体创建新记录的按钮。这将自动发生。

您遇到的问题可能源于这样一个事实:新记录在保存之前并不存在(因为您发现没有PK值)。因此隐藏子表单的逻辑不起作用。如果你坚持使用这种方法,你可以尝试

.Visible = (.RecordsetClone.RecordCount > 0 or .NewRecord) 

但是我认为如果你删除你提到的按钮和代码并让Access做它擅长的事情,你的生活会更容易。确保您的子表单数据绑定属性设置正确。