Sql 无法更新。数据库或对象为只读错误3027

Sql 无法更新。数据库或对象为只读错误3027,sql,ms-access,vba,Sql,Ms Access,Vba,我有两个表,从中我做了一个叫做“查询日期”的查询。在这里,我创建了4个计算字段,用于比较前面提到的两个表的字段。 我试图做的是每次计算字段等于“Diff”,从第二个表(ADHOC)中获取值,并将其放入第一个表(Master_表)。总共有4个字段,我会根据其他4个字段(CheckRR、CheckQual、CheckProd、CheckCap)进行更改 问题是它给了我一个错误3027,对象在显示为“rsd.edit”的行中是只读的。有人能帮我或给我一些反馈吗?。先谢谢你 在下面,您可以找到代码 en

我有两个表,从中我做了一个叫做“查询日期”的查询。在这里,我创建了4个计算字段,用于比较前面提到的两个表的字段。 我试图做的是每次计算字段等于“Diff”,从第二个表(ADHOC)中获取值,并将其放入第一个表(Master_表)。总共有4个字段,我会根据其他4个字段(CheckRR、CheckQual、CheckProd、CheckCap)进行更改

问题是它给了我一个错误3027,对象在显示为“rsd.edit”的行中是只读的。有人能帮我或给我一些反馈吗?。先谢谢你

在下面,您可以找到代码

enter code here
Private Sub Comando27_Click()

Dim rsd As DAO.Recordset

Dim supplierName As String

Set rsd = Application.CurrentDb.OpenRecordset("Query_Dates", dbOpenDynaset)

retry: supplierName = InputBox("Please enter the Supplier Name", _
"Information Required")

'MsgBox "Supplier requested: " & supplierName

valid = MsgBox("Supplier Requested = " & supplierName & "??", vbYesNoCancel, "Validation")

If valid = 7 Then

GoTo retry

ElseIf valid = 2 Then

GoTo salir

End If

rsd.MoveFirst

Do While Not rsd.EOF

If rsd![Supplier Name] = supplierName Then

If rsd![CheckRR] = "Diff" And rsd![ADHOC_Run at Rate Dt] <> Empty Then

rsd.Edit

rsd![Run at Rate Dt] = rsd![ADHOC_Run at Rate Dt]

rsd.Update

End If

If rsd![CheckQual] = "Diff" And rsd![ADHOC_Qual Verif Dt] <> Empty Then

rsd.Edit

rsd![Master_Table_Qual Verif Dt] = rsd![ADHOC_Qual Verif Dt]

rsd.Update

End If

If rsd![CheckProd] = "Diff" And rsd![ADHOC_Prod Verif Dt] <> Empty Then

rst.Edit

rsd![Master_Table_Prod Verif Dt] = rsd![ADHOC_Prod Verif Dt]

rsd.Update

End If

If rsd![CheckCap] = "Diff" And rsd![ADHOC_Prod Verif Dt] <> Empty Then

rsd.Edit

rsd![Master_Table_Cap Verif Dt] = rsd![ADHOC_Cap Verif Dt]

rsd.Update

End If

End If

rsd.MoveNext

Loop

salir: rsd.Close

Set rsd = Nothing

End Sub 
在此处输入代码
私人分公司27_Click()
作为DAO的Dim rsd。记录集
以字符串形式显示供应商名称
Set rsd=Application.CurrentDb.OpenRecordset(“查询日期”,dbOpenDynaset)
重试:supplierName=InputBox(“请输入供应商名称”_
“所需信息”)
请求的“MsgBox”供应商:“&供应商名称”
valid=MsgBox(“请求的供应商=”&supplierName&“?”,vbYesNoCancel,“验证”)
如果有效=7,则
转到重试
ElseIf valid=2,则
GoTo salir
如果结束
区域市政总署
不使用rsd.EOF时请勿使用
如果rsd![供应商名称]=供应商名称
如果rsd![CheckRR]=“差异”和rsd![ADHOC_以Dt的速率运行]然后清空
rsd.编辑
区署![以Dt速率运行]=rsd![临时运行速率为Dt]
区署更新
如果结束
如果rsd![CheckQual]=“差异”和rsd![ADHOC_Qual Verif Dt]然后清空
rsd.编辑
区署![Master_Table_Qual Verif Dt]=rsd![临时资格验证]
区署更新
如果结束
如果rsd![CheckProd]=“差异”和rsd![ADHOC_Prod Verif Dt]然后清空
rst.编辑
区署![Master_Table_Prod Verif Dt]=rsd![临时产品验证Dt]
区署更新
如果结束
如果rsd![CheckCap]=“差异”和rsd![ADHOC_Prod Verif Dt]然后清空
rsd.编辑
区署![Master_Table_Cap Verif Dt]=rsd![临时资本确认]
区署更新
如果结束
如果结束
rsd.MoveNext
环
沙利尔:区署,关闭
设置rsd=无
端接头

某些查询不可更新。在尝试编辑之前,请检查

if rsd.Updatable then
但你可能有更大的问题。您的声明与您的用法不匹配

Dim rsd As DAO.Recordset
...
If rsd![CheckProd] = "Diff" And rsd![ADHOC_Prod Verif Dt] <> Empty Then

rst.Edit
Dim rsd作为DAO.Recordset
...
如果rsd![CheckProd]=“差异”和rsd![ADHOC_Prod Verif Dt]然后清空
rst.编辑
看到区别了吗?声明rsd,使用rst.Edit。要么在外部作用域中声明了rst——这是一件坏事——要么没有使用
选项Explicit
——这也是一件坏事