Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Работа с транзакциями






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. Сохраните приложение и запустите. Проверьте работу механизма транзакций


Наименование дисциплины: Разработка и эксплуатация удаленных баз данных

Тема (раздел) учебной программы: Управление транзакциями и кэширование памяти

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.