Чтобы полностью ответить на ваши вопросы, запросы действий, включая UPDATE
и INSERT
в программе MS Access .exe, по умолчанию вызовут сообщение, сообщающее пользователю, сколько строк будет обновлено или вставлено, и если пользователь хочет продолжить действие. Другие представления запросов действий могут не информировать затронутые записи.
![Access GUI Message](https://i.stack.imgur.com/zBgtB.png)
Это сообщение появится, если запрос действия вызывается из:
- Окно Query Design с использованием действия запуска
!
icon
- Макрос с использованием OpenQuery action
- Модуль с использованием DoCmd.OpenQuery команда
Если не использовать MS Access .exe (поскольку Access - это и прикладная программа, и база данных), вы все равно можете увидеть, сколько записей влияют через код, используя свойство DAO Database.RecordsActed , которое является частью библиотека объектов MS Access. Любой COM-интерфейсный язык может запускать один и тот же процесс, включая VBA, Python, PHP, Java и т. Д.
Пример VBA (примечание: VBA является отдельным компонентом для MS Access и других приложений Office)
Sub RunUpdate()
Dim db as DAO.Database
Set db = CurrentDb()
db.Execute "mySavedUpdateQuery"
MsgBox CStr(db.RecordsAffected) & " records were affected."
Set db = Nothing
End Sub
Пример Python
import os
import win32com.client
access_file = r'C:\Path\To\MyDatabase.accdb'
try:
oApp = win32com.client.Dispatch("Access.Application")
oApp.OpenCurrentDatabase(access_file)
db = oApp.Currentdb()
db.Execute("EmployeesUpdateQ")
print("{} records were affected.".format(db.RecordsAffected))
except Exception as e:
print(e)
finally:
oApp.Quit()
db = None; oApp = None
del db; del oApp
Количество строк Вопрос
Оба ваших запроса обновят разное количество записей. Первая версия поддерживает условия JOIN
и WHERE
на внешнем уровне, поэтому будет влиять на отфильтрованное количество записей в table1 .
UPDATE (table1 t1 INNER JOIN table2 t2 ON t1.[key] = t2.[key])
SET t1.value1 = t2.value1,
t1.datevalue = t2.datevalue
WHERE ((t1.value1) IS NULL);
Вторая версия использует подзапросы с условиями JOIN
и WHERE
, но ничего на внешнем уровне, поэтому все записи table1 будут затронуты, но конкретные значения могут обновиться до NULL
. Фактически, вы можете получить ошибку исключения, если подзапросы возвращают более одного значения:
UPDATE table1
SET table1.value1 = (SELECT value1
FROM table2
WHERE ((table1.value1 IS NULL)
AND (table1.[key] = table2.[key]))),
table1.datevalue = (SELECT datevalue
FROM table2
WHERE ((table1.[key] = table2.[key])
AND (table1.value1 IS NULL)))