【问题标题】:VBA and Access Form FilterVBA 和访问表单过滤器
【发布时间】:2011-08-10 18:54:57
【问题描述】:

我有这个表格可以访问,它的目的是作为一个表格的前端,可以通过这个表格进行编辑。最初,当它加载时,我使用以下查询在记录集中显示表单数据:

SELECT * FROM DATA

一旦打开表单,我希望能够过滤记录集上的数据。我尝试了以下 VBA 代码来完成此操作:

Private Sub Filter_Click()
    If (IsNull(Me.Find_Field) Or Me.Find_Field = "") Then
        rs.Close
        Set rs = db.OpenRecordset("Select * from DATA ORDER BY ID)
        rs.MoveFirst
        LoadData (True)
        Exit Sub
    End If

    Set rs = db.OpenRecordset("Select * from DATA WHERE ID = " & Me.Find_Field)


    rs.MoveFirst
    LoadData (True) ' Function that loads the data into the form
Exit Sub

正如大家所见,我使用新的过滤查询重新加载记录集。到目前为止,它可以工作,当我尝试修改记录时问题就开始了。

最初,当表单加载记录集数据时,我能够编辑数据并且编辑后的数据将显示在表格中(这是我想要的)。但是在我应用过滤器后,我的代码给了我运行时错误“3027”:无法更新。数据库或对象是只读的。

我几乎一遍又一遍地使用相同的代码从表中重新加载数据,在我“覆盖”记录集的源之前,它从来没有给我带来任何问题。知道如何解决这个问题吗?谢谢

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    我更喜欢使用标准的 Access 绑定表单,因为它比您看起来所做的更简单。

    我可以通过 cmdApplyFilter 按钮的单击事件更改表单的 RecordSource。

    Private Sub cmdApplyFilter_Click()
        Dim strSql As String
        If Len(Me.txtFind_Field & vbNullString) > 0 Then
            strSql = "SELECT * FROM tblFoo WHERE id = " & _
                Me.txtFind_Field & " ORDER BY id;"
            Me.RecordSource = strSql
        End If
    End Sub
    

    如果您担心有人可能会使用过滤后的 RecordSource 保存表单,您可以让表单始终使用未过滤的版本打开。

    Private Sub Form_Open(Cancel As Integer)
        Dim strSql As String
        strSql = "SELECT * FROM tblFoo ORDER BY id;"
        Me.RecordSource = strSql
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2019-03-16
      • 1970-01-01
      • 2023-03-17
      • 2016-01-26
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多