1

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

Private Sub pickdate_AfterUpdate()
'''''''''''''''''''''''''''''''''''''''''
'   Add review history by selected date
'''''''''''''''''''''''''''''''''''''''''
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("SELECT model, entered_date FROM history WHERE entered_date=#" & Me.pickdate.value & "# ORDER BY model DESC", dbOpenDynaset, dbSeeChanges)

If rs.BOF = False Then rs.MoveFirst
While rs.EOF = False

    Forms!main!histories.Form.Recordset.AddNew
    Forms!main!histories.Form.Recordset![model] = rs![model]
    Forms!main!histories.Form.Recordset![entered_date] = rs![entered_date]
    Forms!main!histories.Form.Recordset.Update

    rs.MoveNext
Wend
End Sub

我在线上得到错误Forms!main!histories.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

我真的不知所措,试图找出问题所在。该子表单具有存储信息的所有适当框。我给了他们标签以匹配他们将进入他们的数据库列。我尝试将它们的控制源设置为数据库列名,而不是将它们设置为任何内容。我查找了一百种不同的“解决方案”,但似乎没有一个适合问题或工作。

我觉得我忽略了一些非常容易的事情。

4

1 回答 1

2

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

这适用于我的示例表。

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 的工作情况。

于 2012-08-30T21:26:12.100 回答