【问题标题】:Error 3027, Database or object is ready only?错误 3027,数据库或对象是只读的?
【发布时间】:2013-06-06 18:23:02
【问题描述】:

当我运行代码时,它会停止并给我一个错误

 3027
Database or Object is Read only

当我点击调试时,它指向了 rec.edit。

但我不知道它是如何只读的。我确实检查以确保对象已关闭并且仍然出现相同的错误。提出它的人说它对他们有用,并且他们对 readonly 没有任何问题。有什么想法吗?

 Public Function HitTest()

    Dim db As Database
    Dim rec As DAO.Recordset
    Dim fld As DAO.Field

    Set db = CurrentDb
    Set rec = db.OpenRecordset("PlayerSal")
    EditTable = "PlayerSal"

    For Each fld In rec.Fields
      If fld.Name <> "Name" And fld.Name <> "Salary" And Left(fld.Name, 4) <> "Per_" Then
        strFieldName = "Per_" & fld.Name & ""
        'rs.Fields (strFieldName)
        'X = "IIf(rec([" & fld.Name & "]) <> 0, Format((rec([Salary]) / rec([" & fld.Name & "])), '$#,###.##'), 0)"
        If FieldExists(EditTable, strFieldName) Then
        Else
            'AltTable = "ALTER TABLE " & EditTable & " ADD COLUMN " & strFieldName & " Double;"
            'CurrentDb.Execute (AltTable)
        End If
            rec.Edit
            X = IIf(rec((fld.Name)) <> 0, Format((rec("Salary") / rec((fld.Name))), "$#,###.##"), 0)
            rec.Fields(strFieldName).Value = X
            rec.Update
      End If
    Next fld

    End Function

因为我知道 Access 有时真的很傻,所以我决定尝试一个新的数据库并只导入我需要的几个文件。由于某种原因,我曾经有过随机地做这件事的时候。当我导入您在下面看到的模块时,它停在了

 If FeildsExists(EditTable, strFieldName) 

它说 Sub 或 Function 未定义...我不知道这两个是否与简单的事情有关..但这越来越愚蠢...尤其是当把它放在一起的人让它工作时很好。

【问题讨论】:

  • 改成这个:Set rec = db.OpenRecordset("PlayerSal", dbOpenDynaset) 我想你需要那个动态集。
  • 你可能想回答这个问题。
  • 这并没有为我解决任何问题。不过,我还要补充一点,我在不同的数据库上尝试过,它给了我一个不同的错误..虽然与您的输入无关。我昨天尝试时遇到了这个错误。
  • PlayerSal 是本地访问表吗?如果是这样,我假设您可以打开它并查看数据表中的内容。可以更改数据表中的内容吗?

标签: vba ms-access


【解决方案1】:

我知道下半场。 :o) 你的函数名是错误的。你有“If FeildsExists”,它应该是“If FieldExists”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2017-07-28
    • 2019-09-11
    • 2021-01-20
    相关资源
    最近更新 更多