Access 2002

Подчиненные формы и транзакции


Поскольку все формы в вашем проекте будут использовать одну и ту же подчиненную навигационную форму, если вы внесете в нее изменения, они тут же отразятся во всех родительских формах. Например, чтобы поменять рисунки на навигационных кнопках во всех формах своего приложения, достаточно открыть форму frmNavigate в режиме конструктора и выбрать для ее кнопок нужные картинки. После этого, открыв любую из форм, вы увидите новые кнопки. С одной стороны, это удобно, с другой же — может оказаться ограничением. Если вам понадобятся навигационные блоки нескольких типов, создайте нужное количество копий формы frmNavigate (разумеется, с разными именами) и настройте каждую из них отдельно.

Если вы свяжете главную форму с подчиненной без использования свойств LinkChildFields и LinkMasterFields, то сможете воспользоваться преимуществами еще одной новой возможности, появившейся в Access 2000, — включить все изменения данных подчиненной формы в одну транзакцию текущей строки главной формы.

Проблема состоит в следующем. Предположим, что в главной форме отображается информация о заказчике, а в подчиненной — о его заказах. Если вы отредактируете информацию о заказчике, а потом захотите отменить внесенные изменения, вам достаточно будет выбрать в меню Edit команду Undo или щелкнуть на кнопке, в обработчике которой вызывается метод формы Undo.

Но что если вы захотите отменить не только изменения в главной форме, но и изменения, внесенные во все записи подчиненной формы? Метод Undo главной формы не отменяет изменения, внесенные в подчиненную форму, а метод Undo подчиненной формы может только отменить изменения ее текущей записи, но никак не всех записей, относящихся к выбранному заказчику. Выходит, нам нужен механизм управления пакетными изменениями. И такой механизм существует — это транзакции. (Подробная информация об использовании транзакций приведена в главе 2 второго тома.)

    

Комментарии закрыты