【问题标题】:Error: cannot update, database or object read only while edit record set in another function错误:在另一个函数中编辑记录集时无法更新、数据库或对象只读
【发布时间】:2017-04-09 21:45:11
【问题描述】:

我将记录集从一个函数(即chkMismatchData)传递到另一个函数(CheckMismatches),如果找不到记录,我会更新传递的记录集的一些值。

即使我在模块级别声明记录集变量仍然发现错误。

我的代码是:

Set rec1 = CurrentDb.OpenRecordset("select * from CBWCFAVENDORMATCHOFFMASTER where [vendor]='" & rec![Vendor] & "'")
While Not rec.EOF        

    Set rec3 = CurrentDb.OpenRecordset("select ID,[HCI_NO],CLEARLOC,SUM([AMOUNT])AS AMOUNT1 from CBWCFAMISUPLOAD WHERE [vendor]='" & rec![Vendor] & "' and nz([match],'')='' and nz([HCI_NO],'')<>'' GROUP BY HCI_NO,CLEARLOC,ID ")
    While Not rec3.EOF

        Set rec2 = CurrentDb.OpenRecordset("select ID,DEPSLIPNO,CLEARLOC from CBWCFAPENDINGPAYMENTDATA WHERE [DEPSLIPNO]='" & rec3![HCI_NO] & "' GROUP BY DEPSLIPNO,CLEARLOC,ID HAVING CLEARLOC='" & rec3![CLEARLOC] & "' AND SUM([amt])=" & rec3![AMOUNT1])
        If rec2.EOF = False Then

            If rec2.RecordCount = 1 Then
                CurrentDb.Execute ("UPDATE CBWCFAMISUPLOAD SET [MATCH]='Y' ,[CASHIN_ID]='" & rec2![ID] & "' WHERE [HCI_NO]='" & rec3![HCI_NO] & "'  ")
                CurrentDb.Execute ("UPDATE CBWCFAPENDINGPAYMENTDATA SET [MATCH]='Y' ,[MIS_ID]='" & rec3![ID] & "' WHERE [DEPSLIPNO]='" & rec3![HCI_NO] & "'")
            ElseIf rec1.RecordCount > 1 Then
                Call UpdateRec(rec3, 0, "Duplicate Match", 0)
            End If

        Else
            strSlipType = "HCI_NO"
            Call UpdateRec(rec3, 0, CheckMismatches(rec3), 0) 'here im passing 
        End If

        rec3.MoveNext
    Wend

Wend


Private Function CheckMismatches(rec As DAO.Recordset) As String
Dim RecCheck As DAO.Recordset
Dim strDepSlipNo As String, strID As String

   If strSlipType = "HCI_NO" Then
        '--Clearing Loc Not Matching
        Set RecCheck = CurrentDb.OpenRecordset("select ID,DEPSLIPNO,CLEARLOC from CBWCFAPENDINGPAYMENTDATA WHERE [DEPSLIPNO]='" & rec![HCI_NO] & "' GROUP BY DEPSLIPNO,CLEARLOC,ID HAVING CLEARLOC<>'" & rec![CLEARLOC] & "' AND  SUM([amt])=" & rec![AMOUNT1])
        If RecCheck.EOF = True Then
            rec.Edit 'here i'm geting error
            rec![match]="Y"    'added line
            rec!.update 'added line
            CheckMismatches = "Clearing Loc Not Matching"
            RecCheck.Close
            Exit Function
        End If
        RecCheck.Close
end function

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    您的rec3 有一个GROUP BY 子句。

    根据定义,聚合的记录集是只读的。所以你必须从这个记录集单独编辑表格。

    当你不编辑它的任何字段时,为什么你的函数中有rec.Edit

    【讨论】:

    • 请检查更新的代码是否我正在更新记录集的记录,它在代码中标记为添加的行
    • 好的。但主要问题是GROUP BY 子句。 allenbrowne.com/ser-61.html -- 为什么我的查询是只读的? 它有一个 GROUP BY 子句。 Totals 查询始终是只读的。
    • 感谢@Andre 提供如此有用的信息,我会相应地更改我的代码,
    猜你喜欢
    • 2014-11-28
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 2017-07-28
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多