Удаление данных из Access с VBA
Я пытаюсь удалить каждую запись из моей текущей базы данных Access в VBA, где OTP = txtOTP.value
а также VARIABLE = {NomAdminContrats,TelAdminContrats,TelecAdminContrats, [...]}
Вот мой код:
Dim query As Recordset
Set query = CurrentDb.Execute("DELETE * FROM tb_SOMMAIRE WHERE OTP = '" & txtOTP.value & "' AND (VARIABLE = 'NomAdminContrats' or VARIABLE = 'TitreAdminContrats' or VARIABLE = 'UnitAdminContrats' or VARIABLE = 'AdrAdminContrats' or VARIABLE = 'VilleAdminContrats' or VARIABLE = 'TelAdminContrats' or VARIABLE = 'TelecAdminContrats' or VARIABLE = 'CourrielAdminContrats')")
Я получил ошибку 3219 "Недопустимая операция" при попытке использования функции OpenRecordset или " Ожидаемая" при выполнении операции "Выполнение". Я перепробовал много вещей, но мне пока не удалось заставить этот запрос работать. У меня также есть полная таблица в наборе записей, было бы проще / быстрее сделать это с myRecordset.Delete? Если так, как я мог это сделать?
РЕДАКТИРОВАТЬ
Теперь попробуйте использовать CurrentDb.Execute вместо CurrentDb.OpenRecordset. Ошибка теперь является ожидаемой функцией вместо неверной операции.
3 ответа
Вы не должны были использовать скобки для recordset.execute
функция, если вы не хотите отправить execute
параметры функции, а также ваш запрос.
currentDB.Execute ("SQL EXECUTABLE QUERY", Options)
options - это необязательная константа, которую вы можете включить в функцию, например, dbDenyWrite или dbFailOnError. если вы не включаете опции в свою функцию execute, Microsoft использует dbInconsistent по умолчанию, и вам не следует использовать скобки.
Set query = CurrentDb.Execute "DELETE * FROM tb_SOMMAIRE..."
Причина, по которой ваш код работал, когда вы использовали переменную sql
это потому, что вы не использовали parantheses, когда вы использовали переменную.
Вы уже решили проблему. Поздравляю. Видите ли другой подход для вашего WHERE
с предложением легче работать.
WHERE
пункт проверяет, является ли VARIABLE
соответствует списку значений. Вместо использования нескольких OR
условия для сравнения VARIABLE
с каждым членом списка вы можете просто спросить VARIABLE
настоящее IN
список значений.
AND
(
[VARIABLE] IN
(
'NomAdminContrats',
'TitreAdminContrats',
'UnitAdminContrats',
'AdrAdminContrats',
'VilleAdminContrats',
'TelAdminContrats',
'TelecAdminContrats',
'CourrielAdminContrats'
)
)
Наконец-то удалось заставить его работать. Пришлось объявить другую переменную для запроса по какой-то причине.
Dim sql as String
sql = "DELETE * FROM tb_SOMMAIRE WHERE OTP = '" & txtOTP.value & "' AND (VARIABLE = 'NomAdminContrats' or VARIABLE = 'TitreAdminContrats' or VARIABLE = 'UnitAdminContrats' or VARIABLE = 'AdrAdminContrats' or VARIABLE = 'VilleAdminContrats' or VARIABLE = 'TelAdminContrats' or VARIABLE = 'TelecAdminContrats' or VARIABLE = 'CourrielAdminContrats')"
CurrentDb.Execute sql