LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Отмена из...
 Тема: Отмена изменений в форме
 
 15.06.2007 21:09:41
All
4316 сообщения
1-ый


Тема: Отмена изменений в форме
В Access создал документ который состоит из главной и подчиненной формы. Источником данных подчиненной формы является запрос, а главной таблица.

Задача состоит в следующем:Как корректно организовать отмену изменений в документе.

Пытался решать задачу следующим образом.
1) использовал транзакции для представления данны в подчиненной форме(процедура SubFrmData() вызывается при возникновении события Current в главной форме)

Private Sub SubFrmData()
Dim DB As DAO.Database
Dim QDF As DAO.QueryDef
Dim RSTbl As DAO.Recordset
Dim PRM As DAO.Parameter

On Error Resume Next

If TRNS Then
WKS.CommitTrans
End If

Set WKS = DBEngine.CreateWorkspace("WKS", "Admin", "")
Set DB = WKS.OpenDatabase(CurrentDb.Name)
Set QDF = DB.QueryDefs(mstrQuery)

For Each PRM In QDF.Parameters
PRM.Value = Eval(PRM.Name)
Next PRM

With SubFrm
.Painting = False
Set RSTbl = QDF.OpenRecordset
RSTbl.LockEdits = False
Set .Form.Recordset = RSTbl
.Painting = True
End With

WKS.BeginTrans
TRNS = True
End Sub

2)Отмену произведенных изменений произвожу следующим образом

Private Sub Form_Unload(Cancel As Integer)
Me.Undo

If TRNS Then
WKS.Rollback
End If

Set WKS = Nothing
End Sub

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

В подчиненной форме откат транзакции происходит корректно, а в главной форме отмены изменений не происходит. Событие Undo не отрабатывает по причине того, что в главной форме уже произошло событие AfterUpdate (AfterUpdate происходит после перемещения фокуса в подчиненную форму). Но, если переместить фокус на главную форму и зайти в главное меню "Правка", то мы увидим активной команду "Откат записи" (сочетание клавишь CTL-Z). Команда "Откат записи" очень корректно возвращает данные в главной форме к значениям на момент её открытия.

Вопрос: Как програмно выполнить эквивалент команды главного меню "Откат записи". Если в чем-то ошибаюсь, укажите на ошибку. Зарание благодарен.

P.S.Свободных элемнтов ни в главной ни в подчиненной формах нет.


P.S. Общий раздел по формам
Автор: Luckiy от 0:00:00 Источник ...
 15.06.2007 21:09:41
All
4316 сообщения
1-ый


RE: Отмена изменений в форме
1. Вариант
Private Sub Кнопка_Click()
CommandBars("Menu Bar").FindControl(, 128, , , True).Execute
End Sub

2. Вариант.
Можно пробежаться по всем редактируемым элементам и взять предыдущее значение
Me.Поле.Value = Me.Поле1.OldValue


P.S. Общий раздел по формам
Автор: Admin от 0:00:00 Источник ...
 15.06.2007 21:09:41
All
4316 сообщения
1-ый


RE: Отмена изменений в форме
Спасибо за помощь. Но пришлось придумывать решение самому.


P.S. Общий раздел по формам
Автор: Luckiy от 0:00:00 Источник ...
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Отмена из...
ПоискПоиск  Список форумовСписок форумов  
right