Чтение буфера удаленных записей - PullRequest
0 голосов
/ 26 марта 2010

Согласно документации Access (2003), когда вы удаляете запись, она помещается в буфер, затем вызывается событие BeforeDeleteConfirm, а затем событие AfterConfirmDelete ad Delete. В моей таблице, если запись удалена, мне нужно добавить одно из значений ее поля (количественное значение) в поле другой таблицы.

Я попытался установить значение в частную переменную в событии Current, но как только я удаляю кнопку «Удалить», создается впечатление, что событие Current запускается снова и сбрасывает мою переменную.

Как получить доступ к значению поля в удаленной записи?

Ответы [ 3 ]

0 голосов
/ 27 марта 2010

Значения в связанных элементах управления по-прежнему доступны в событии удаления формы. В этом примере txtid является связанным текстовым полем.

Private Sub Form_Delete(Cancel As Integer)
    Dim strActivity As String
    Dim strSql As String

    strActivity = Me.txtid & " deleted."
    strSql = "INSERT INTO tblAudit (activity) " & _
        "VALUES (""" & strActivity & """);"
    CurrentDb.Execute strSql, dbFailOnError
End Sub
0 голосов
/ 29 марта 2010

Как правило, если я хочу что-то сделать в событиях OnDelete, кроме действий по умолчанию, я, как правило, отключаю AllowDeletes и создаю командную кнопку DELETE RECORD, которая делает то, что я хочу.

Таким образом, я не зависим от встроенных событий. Если мне нужно сохранить значение, я делаю это, выскакиваю сообщение с подтверждением, а затем делаю то, что нужно, любым способом, который я считаю самым простым.

Я просто нахожу это намного проще, особенно потому, что пользовательские настройки могут заставить вещи вести себя по-другому. Например, два события Confirm не происходят, когда у пользователя есть эти настройки (из файла справки A2003, но так было всегда):

Примечание. Событие AfterDelConfirm не происходит, и Подтверждение удаления диалоговое окно не отображается, если вы снимите флажок Запись изменений в разделе «Подтверждение» на вкладке «Изменить / Найти» диалоговое окно Параметры, доступное по нажав Опции в меню Сервис.

Так что я просто избегаю всего этого, катя свой собственный код удаления и избегая поведения по умолчанию.

(и да, если вы следили за моими постами на протяжении многих лет, вы знаете, что для меня довольно необычно советовать не использовать просто поведение Access по умолчанию, но это один из случаев, когда я чувствую, что контроль больше подходит почти во всех случаев)

0 голосов
/ 26 марта 2010

Это решение может потребовать доработки, но я использую его для своей формы:

  1. Добавьте в таблицу записей логическое поле с именем " Visible ".
  2. В основной форме установите form.filter = "[Visible] = True "
  3. В основной форме установите AllowFilters = Да .
  4. В основной форме установите Form.Allow Deletions = False (мы не хотим их на самом деле удаляя запись)
  5. Создайте пользовательскую кнопку «Удалить», которая устанавливает Visible = False .
  6. Если позже вам это понадобится, вы можете добавить некоторые изменяемые запросы и удалить запросы, чтобы очистить основную таблицу и перенести удаленные значения в другую таблицу.

Таким образом, пользователь фактически не «удаляет» запись. Скорее, они просто делают эту запись невидимой. А позже, когда форма выгружена, вы можете добавить несколько запросов на очистку.

...