VBA:不允许我更改Microsoft Access中另一个表单的RecordSource

时间:2016-08-09 12:05:27

标签: database forms vba ms-access-2010

我正在开发一个数据库,用于保存和显示员工的资源,每个员工都有不同的日期,他或她必须再次执行特定的课程。我制作了一些包含所有信息的表格。我可以在表单中显示信息,这个表单包含几个按钮,允许我在不同的查询之间进行选择。所有查询以相同的形式输出相同类型的数据。为便于参考,我将此表格称为 FormA

这一切都运行正常,但几个小时前我添加了一个按钮,可以让我更新某条记录的信息。此更新以不同的形式发生,我们称之为 FormB 。在旧的情况下,我使用了一种特定的形式进行每次训练,但我认为这是完全无效的。我制作了一个可以显示每个查询信息的表单。我遇到的问题是每当我按下按钮更新某个记录时。它始终在查询/表单中显示最高记录的信息。我已经被困在这几个小时了,我不能让它工作。如果我手动将 FormB 的RecordSource设置为正确的查询,它就会像它应该的那样工作。但这需要我制作很多相同的形式。

我将尝试链接我认为相关的所有代码。如果需要别的东西,请说出来。

更新按钮上使用的代码位于 FormA

Private Sub btnUpdate_Click()
Dim stDocName As String


If Forms!FormA.RecordSource = "QryFG" Then

  stDocName = "FormB"

  ' we open first the form:
  DoCmd.OpenForm stDocName, , , "peoplesoftnr = " & Me!PeopleSoftNr

  ' we then set up it's RecordSource:
  Forms!FormB.RecordSource = "QryFG"

End If

这个if语句在所有不同的训练中重复了五次,它们都是一样的,所以我不会在这篇文章中包含它们。

代码在我的 FormB 中填充了我的文本框。但它始终是最佳记录。即使我按下不在同一行的按钮( FormA )。当我注释掉以下内容时:

' Forms!FormB.RecordSource = "QryFG":

并手动将QryFG设置为 FormB 的RecordSource,它会执行它应该执行的操作。但通过这样做,我将不得不创建大量相同的形式。我希望有更好的方法来做到这一点。在此先感谢您的时间和efford。我的母语不是英语,所以请忽略拼写和语法错误;)。

再次感谢!

Joeri Rommers

1 个答案:

答案 0 :(得分:0)

通过设置表单的记录来源,您可以覆盖之前在DoCmd.OpenForm中设置的过滤器,以便显示QryFG的所有记录,从第一个开始。

有很多方法可以解决这个问题,例如

' Open without filter
DoCmd.OpenForm stDocName
' Limit recordsource to current record
Forms!FormB.RecordSource = "SELECT * FROM QryFG WHERE peoplesoftnr = " & Me!PeopleSoftNr

或在更改记录源后设置过滤器:

DoCmd.OpenForm stDocName
With Forms(stDocName)
    .RecordSource = "QryFG"
    .Filter = "peoplesoftnr = " & Me!PeopleSoftNr
    .FilterOn = True
End With

如果表格"闪烁"在执行此操作时,您可以使用WindowMode:=acHidden打开它,然后在更改RecordSource / Filter后将其设置为.Visible = True