尝试使用从不同Recordsets获取的UPDATE查询更新表。一个UPDATE查询运行并更新记录,但另一个运行,不更新记录,并且在问题所在的位置不引发任何错误。我怀疑它在WHERE子句中的某处,但无法查明。
我在引号附近玩耍,但是没有运气,这是我最困惑的地方。单引号,双引号和&
字符令我有些困惑。
extArea_SQL = "SELECT * FROM Area;"
Set rsArea = CurrentDb.OpenRecordset(extArea_SQL, dbOpenDynaset)
extDiscipline_SQL = "SELECT * FROM Disciplines;"
Set rsDisp = CurrentDb.OpenRecordset(extDiscipline_SQL, dbOpenDynaset)
instAreaName_SQL = "UPDATE ReportGen SET ReportGen.AreaName = '" & rsArea.Fields("AreaName") & "' WHERE ReportGen.AreaID = '" & rsArea.Fields("AreaID") & "';"
updtDispName_SQL = "UPDATE ReportGen SET ReportGen.DisciplineName = '" & rsDisp.Fields("DisciplineName") & "' WHERE ReportGen.DisciplineID = '" & rsDisp.Fields("DisciplineID") & "';"
db.Execute instAreaName_SQL, dbFailOnError
db.Execute updtDispName_SQL, dbFailOnError
我还想指出AreaName和Discipline数据是字符串,并且具有特殊字符,例如-,()/
等。
不确定较低的(updtDispName_SQL)UPDATE查询在做错什么,因为上面的查询没有问题。我复制粘贴了一种有效的格式,并更改了较低的一种格式,但仍然无法指出。
有人可以指出我在这里错过了什么吗?
答案 0 :(得分:1)
请考虑不使用记录集的纯SQL,因为Access支持JOIN
或UPDATE
中的子查询。将以下内容另存为存储的查询,并根据需要使用GUI或VBA运行。不同于您的代码不会循环并且只会在当前记录集行(不一定是第一行)上运行,下面的查询在所有匹配的行上运行。
SQL
查询1
UPDATE ReportGen r
INNER JOIN Area a
ON r.AreaID = a.AreaID
SET r.AreaName = a.AreaName;
查询2
UPDATE ReportGen r
INNER JOIN Disciplines d
ON r.DisciplineID = d.DisciplineID
SET r.DisciplineName = d.DisciplineName;
VBA
'DOES NOT SHOW WARNINGS
CurrentDb.Execute "mySavedUpdateQuery"
'DOES SHOW WARNINGS (NO NEED TO CLOSE ACTION QUERIES)
DoCmd.OpenQuery "mySavedUpdateQuery"