Удаление данных из 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
Другие вопросы по тегам