Идентичный запрос ОБНОВЛЕНИЯ. Один работает другой нет - PullRequest
1 голос
/ 06 ноября 2019

Попытка обновить таблицу с помощью запроса 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, где, как и выше, работает без проблем. Я скопировал и вставил формат одного работающего и внес изменения в нижний, но все еще не могу указать.

Кто-нибудь может указать на то, что мне здесь не хватает?

1 Ответ

1 голос
/ 06 ноября 2019

Рассмотрим чистый SQL без наборов записей, поскольку Access поддерживает JOIN или подзапросы в UPDATE. Сохраните ниже как сохраненные запросы и запускайте при необходимости с графическим интерфейсом или 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...