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