Vba 为什么在此MS Access代码中出现运行时错误91?

Vba 为什么在此MS Access代码中出现运行时错误91?,vba,ms-access,Vba,Ms Access,所以,我有一个MS Access数据库应用程序。此应用程序中有一个主窗体,其中包含多个子窗体。特别是一个表单有一个下拉框,我用数据库查询中的日期填充该下拉框。当选择其中一个日期时,我运行一个子例程,该子例程将使用历史信息更新子窗体上的记录集。下面是一些经过编辑的代码(刚刚从查询中删除了大量字段) 我在表单上看到了错误!梅因!历史记录.Form.Recordset.AddNew行 我尝试过该行的以下版本: Forms!main!histories.Form.Recordset.AddNew mai

所以,我有一个MS Access数据库应用程序。此应用程序中有一个主窗体,其中包含多个子窗体。特别是一个表单有一个下拉框,我用数据库查询中的日期填充该下拉框。当选择其中一个日期时,我运行一个子例程,该子例程将使用历史信息更新子窗体上的记录集。下面是一些经过编辑的代码(刚刚从查询中删除了大量字段)

我在
表单上看到了错误!梅因!历史记录.Form.Recordset.AddNew

我尝试过该行的以下版本:

Forms!main!histories.Form.Recordset.AddNew
main!histories.Form.Recordset.AddNew
histories.Form.Recordset.AddNew
Me.Form.Recordset.AddNew
Me.Recordset.AddNew
Me.AddNew
Me.main!histories.Form.Recordset.AddNew
Me!histories.Form.Recordset.Addnew
Me!main!histories.Form.Recordset.AddNew
我真的无计可施,试图找出问题所在。 子窗体具有所有适当的框来存储信息。我给了他们标签,以匹配将进入他们的数据库列。我尝试将它们的控制源设置为数据库列名,而不将它们设置为任何内容。我已经找到了上百种不同的“解决方案”,它们似乎都不适合这个问题,也不管用


我觉得我忽略了一些非常简单的事情

我想你的名字有问题。全部检查。不要忘记,子窗体由两部分组成:子窗体控件和包含的窗体。它们通常有相同的名称,但并不总是如此。在您使用的代码中,必须具有子窗体控件的名称,而不是包含的窗体。如果手动将数据输入子窗体无法正常工作,则控件未绑定

这在样品台上对我有效

Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("SELECT atext from table1 WHERE akey=21")

If rs.BOF = False Then rs.MoveFirst
While Not rs.EOF '= False
    Me.Table1_subform1.Form.Recordset.AddNew
    Me.Table1_subform1.Form.Recordset!AText = rs!AText
    Me.Table1_subform1.Form.Recordset.Update

    rs.MoveNext
Wend
要运行查询,您可以说:

sSQL="INSERT INTO NameOfTable (model, entered_date) " _
& "SELECT model, entered_date FROM history WHERE entered_date=#" _
& Me.pickdate.value & "#"

CurrentDB.execute, dbfailOnError

您可以在查询设计窗口中检查sql的工作情况。

为什么不运行附加查询?为什么要遍历记录集?我同意@Remou-将行添加到底层数据集中,而不是通过formI。我对访问和VBA编程非常陌生。这个项目实际上是我必须维护和添加功能的旧遗留代码。应用程序的其余部分几乎所有事情都使用记录集遍历。我不知道如何进行追加查询。支撑表单的记录集必须是正确的类型;它应该是动态集,而不是ForwardOnly或Snapshot。错误91为“未设置对象变量”。表单需要可写,并且能够添加新记录。表单属性中的CanWrite、CanRead、CanAdd等标志是否都设置为Yes?是的,这可能就是问题所在。你能重现错误91吗?没有,但我没有那么努力:)@Remou:谢谢你的帮助。在更改所有内容的名称并重写所有查询之后,我仍然有问题。直到我在子窗体的属性页上打开“获取默认值”。我认为你的想法和改变的结合最终解决了这个问题。我很高兴你解决了这个问题。如果您有获取默认值,那么您似乎正在使用ADP。如果是这样的话,如果你还有其他问题,那就值得一提了。
sSQL="INSERT INTO NameOfTable (model, entered_date) " _
& "SELECT model, entered_date FROM history WHERE entered_date=#" _
& Me.pickdate.value & "#"

CurrentDB.execute, dbfailOnError