Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 添加新记录时,子窗体失去焦点_Ms Access_Ms Access 2007_Vba - Fatal编程技术网

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

Ms access 添加新记录时,子窗体失去焦点,ms-access,ms-access-2007,vba,Ms Access,Ms Access 2007,Vba,我的数据库分为前后两部分。在这个问题上,我使用了三个表;tblMain,tblDetail,tblNote。我知道记录的数量相对较少,但我设计这个是为了长期使用。我有一个tblMain的绑定表单(frmMain),它有一个子表单(subDetail)用于tblDetail。SubDetail有tblNote的子窗体(subNote)。当我单击主窗体frmMain上的按钮时,子详细信息窗体将变为可见,并允许我添加新记录。我将按钮和VBA复制到subDetail,以便在需要时也可以将记录添加到sub

我的数据库分为前后两部分。在这个问题上,我使用了三个表;tblMain,tblDetail,tblNote。我知道记录的数量相对较少,但我设计这个是为了长期使用。我有一个tblMain的绑定表单(frmMain),它有一个子表单(subDetail)用于tblDetail。SubDetail有tblNote的子窗体(subNote)。当我单击主窗体frmMain上的按钮时,子详细信息窗体将变为可见,并允许我添加新记录。我将按钮和VBA复制到subDetail,以便在需要时也可以将记录添加到subNote。但是,在创建记录后,子注释窗体将消失,焦点将返回到子详细信息。如果我移动到一个新记录,然后返回,子注释表单将可见,并显示除PK之外的空记录。我已经检查了subDetail和subNote的所有属性。除了子细节的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

我使用了断点,添加记录的效果很好。只是子窗体再次变为不可见,焦点被更改回父窗体才是问题所在,因为它不允许添加这些注释。

我感觉您正在与访问权作斗争

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

您遇到的问题可能源于这样一个事实,即新记录在保存之前并不真正存在(正如您观察到的,没有PK值)。所以隐藏子窗体的逻辑不起作用。如果你坚持使用这种方法,你可以试试

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

但我认为,如果你删除你提到的按钮和代码,让Access做它擅长做的事情,你的生活会更轻松。确保子窗体数据绑定属性设置正确

不,我在其他表单中使用相同的代码在其他表中添加新记录,效果很好。我将尝试将.NewRecord添加到代码中,看看会发生什么。我怀疑这是一个背景或什么的,但我不明白。事实上,我在frmMain上使用了完全相同的代码来隐藏子细节并在子细节中创建新记录。它在子细节中工作得很好,但在子注释中却不行。