![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Работа с транзакциями
108. Создайте новое приложение Delphi. 109. Сохраните проект с именем Transact. 110. Поместите на форму 3 компонента Panel, установите значение свойств Align в alBottom. 111. Разместите на форме компонент DBGrid1, установите значение свойства Align в alBottom. 112. Разместите на форме компонент Splitter (панель Additional), установите значение свойства Align в alBottom. 113. Добавьте компонент Panel, установите значение свойства Align в alBottom. 114. Разместите на форме компонент DBGrid2, установите значение свойства Align в alClient. 115. Поместите на форму компонент IBDataBase, дайте ему имя DB. 116. Установите соединение с базой данных IB_BIBLXX.GDB. 117. В параметрах компонента DB установите: user_name=SYSDBA password=masterkey 118. Установите в свойство LoginPrompt компонента DB значение False. 119. В свойство Connected компонента DB установите значение True. 120. Обратите внимание на свойство TransIsolation компонента DataBase. Выбор свойства TransIsolatioin обеспечивает нужный уровень изоляции транзакций. Изолировать транзакции необходимо при одновременном доступе к одним и тем же данным нескольких пользователей. При уровне изоляции Dirty Read (буквальный перевод — грязное чтение) пользователь видит любые изменения в данных, даже если они еще не подтверждены. В этой ситуации может нарушиться непротиворечивость данных. Уровень Dirty Read фактически не изолирует транзакции. Только этот уровень возможен для файл-серверных БД, вот почему в СУБД этого типа транзакции используются крайне редко. Уровень Read Committed (чтение подтверждений) разрешает транзакции видеть только подтвержденные изменения. Этот уровень рекомендуется для клиент-серверных БД (по умолчанию компонент TDatabase автоматически устанавливает уровень Dirty Read для файл-серверных и уровень Read Committed для клиент-серверных БД). Для клиент-серверных БД возможен также уровень Repeatable Read (повторяющееся чтение). На этом уровне изоляции также читаются только подтвержденные изменения, однако раз прочитанная запись помещается в локальный буфер и повторно читается из этого буфера, то есть повторное чтение не позволит увидеть изменений, внесенных другим пользователем, даже если эти изменения подтверждены. Какой уровень изоляции установлен для вашей базы данных? 121. Разместите на форме два компонента IBTable, и два компонента DataSource. 122. Поместите в свойство DatabaseName компонента IBTable1 ссылку на компонент DB (в раскрывающемся списке выберите имя, введенное в пункте 10). 123. Поместите на форму компонент IBTransaction. 124. Укажите в свойстве DefaultTransaction компонента DB имя добавленного компонента. 125. То же сделайте для компонентов Table в свойстве Transaction. 126. В списке свойства TableName выберите таблицу BOOKS, в свойстве Name задайте имя BOOKS. 127. Раскрывающемся списке DataSet компонента DataSource1 выберите BOOKS. 128. Второй компонент Table свяжите с компонентом DB и таблицей FIRMS, укажите для него имя Firms. 129. Раскрывающемся списке DataSet компонента DataSource2 выберите FIRMS. 130. Вызовите редактор полей компонентов IBTable2 (двойным щелчком на компоненте) и добавьте все поля. 131. Поместите в свойство DataSource сетки DBGrid1 ссылку на источник данных DataSource2, а в такое же свойство DBGrid2 — на источник DataSource1, сохраните проект. 132. На первую панель поместите компонент DBNavigator, в свойстве DataSource сделайте ссылку на источник данных DataSource2. 133. На вторую панель поместите компонент DBNavigator, в свойстве DataSource сделайте ссылку на источник данных DataSource1. 134. Установите нужные свойства UpdateMode наборов данных. Свойство UpdateMode определяет, по каким столбцам сервер ищет в таблице запись, чтобы внести в нее изменения. Если установлено свойство upWhereAl1, транзакция будет подтверждена только в том случае, если все столбцы изменяемой записи имеют те значения, которые были к моменту старта транзакции. Если свойство имеет значение upWhereChange, ищется запись, у которой ключевые столбцы и столбцы с изменениями остались прежними. В этом случае может быть нарушена непротиворечивость данных. Еще хуже защищаются данные в случае, если свойство UpdateMode имеет значение upWhereKeyOnly, которое заставит сервер искать запись только по ключевым столбцам. 135. На нижнюю панель поместите компонент GroupBox (палитра Standart), и дайте ему имя Транзакция, изменив свойство Caption. 136. В GroupBox1 поместите две кнопки «Подтвердить» и «Откатить». 137. Далее на ту же панель правее GroupBox а поместите три кнопки «Изменить», «Освежить», «Выход». 138. Для кнопки «Подтвердить» напишите обработчик события onClick, завершающий транзакцию (подтверждающий выполненные изменения): DB.Commit 139. Для кнопки «Откатить» напишите обработчик события onClick, возвращающий БД к состоянию до начала транзакции: DB.Rollback 140. Для кнопки «Изменить» напишите обработчик, добавляющий записи в обе таблицы и изменяющий значение полей Name: Firms.Append; FirmsFName.Value: = 'Партнер - транзакция'; Firms.Post; Books.Append; BooksBName.Value: = 'Проверка механизма транзакций'; Books.Post; 141. Для кнопки «Освежить»: Books.Refresh; Firms.Refresh; 142. Для кнопки «Выход»: Close 143. Сохраните приложение и запустите. Проверьте работу механизма транзакций Наименование дисциплины: Разработка и эксплуатация удаленных баз данных Тема (раздел) учебной программы: Управление транзакциями и кэширование памяти
|