Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекції для 3ОТ1.doc
Скачиваний:
10
Добавлен:
21.02.2016
Размер:
16.31 Mб
Скачать

Контрольні питання

  1. Надати характеристику методів, які дозволяють програмно додавати, видаляти та редагувати записи набору даних

  2. Охарактеризувати компонент Table

АУДИТОРНЕ ЗАНЯТТЯ

Змістовий модуль 6: програмування з графами

Тема 6.6: основи баз даних

Лекція №57 – Робота із зв’язаними таблицями

План заняття

  1. Характеристика поняття зв’язана таблиця

  2. Характеристика властивостей зв’язаних таблиць

В Delphi существует возможность создавать приложения, обеспечивающие работу с двумя взаимосвязанными таблицами, одна из которых является главной, а другая подчиненной. При этом в подчиненной таблице в каждый момент времени отобра­жаются только те записи, которые соответствуют текущей записи главной таблицы. Наиболее распространенным типом связи двух таблиц является связь один-ко-многим, то есть когда одной записи главной таблицы могут соответствовать несколько записей под­чиненной. Кроме этого существует также связь один-к-одному и многие-ко-многим, однако эти типы связи используются относи­тельно редко.

Нижеперечисленные свойства подчиненной таблицы исполь­зуются для установки связи между двумя таблицами.

Свойство MasterSource (тип TDataSource) содержит ссылку на источник данных, связанный с главной таблицей. Та­ким образом, это свойство служит для выбора главной таблицы и обеспечивает ее связь с используемой таблицей, которая выступа­ет в роли подчиненной.

Свойство MasterFields (тип String) задает список полей, в соответствии со значениями которых будет осуществляться связь между двумя таблицами. При вызове данного свойства через Инспектор объектов вызывается диалоговое окно Field Link De­signer, в пределах которого устанавливается связь между полями главной и подчиненной таблицы (см. рис. 14.5).

Как видно из рис. 14.5, в верхней части представленного диа­логового окна расположен разворачивающийся список Available Indexes, позволяющий выбрать необходимый индекс подчиненной таблицы, на основе которого будет формироваться связь с главной таблицей. Ниже в диалоговом окне расположены два списка: сле­ва - поля, входящие в выбранный индекс подчиненной таблицы Detail Fields; справа - поля главной таблицы Master Fields. Проек­тировщик приложения выбирает одно поле в левом списке и одно в правом, а затем нажимает кнопку Add, размещенную в центре окна. Результат, отражающий связь между полями двух таблиц, помещается в список Joined Fields, расположенный в нижней час­ти диалогового окна.

Результатом установления такой связи будет отображение в подчиненной таблице только тех полей, значения которых совпа­дают со значением связанного поля текущей записи главной табли­цы. Например, если связь между двумя таблицами установлена по полям, содержащим фамилию, имя и отчество студентов (Name -для главной таблицы, Fio - для подчиненной таблицы), и при этом поле Name текущей записи главной таблицы в настоящий момент времени содержит значение «Васильев В.А.», то в подчиненной таблице будут отображаться только те записи, у которых поле Fio имеет значение «Васильев В.А.».

Подобным образом путем поочередного связывания двух таб­лиц может устанавливаться одновременная связь между тремя и

более таблицами.

Транзакции. В данном разделе представляется целесообразным упомянуть о таком понятии, как "транзакция". Под транзакцией понимается некое комплексное воздействие на БД, переводящее ее из одного целостного состояния в другое. Воздействие заклю­чается в изменении данных в таблицах БД.

Механизм транзакции обеспечивает сохранение смысловой целостности и достоверности информации, содержащейся в таб­лицах БД. Данный механизм, как правило, используется при рабо­те с несколькими таблицами. Суть его состоит в том, что, если одно из изменений, вносимых в БД в рамках транзакции, завершается неуспешно, должен быть произведен возврат (так называе­мый откат) к состоянию БД, имевшему место до начала транзак­ции. Таким образом, либо одновременно подтверждаются все вне­сенные в БД изменения, либо не подтверждается ни одно из них.

Поясним на примере, о чем идет речь. Допустим, в магазине имеется БД, в которую входят три таблицы, хранящие информа­цию о продаже товаров. В первой таблице Prodaga.db содер­жится подробная информация по каждой продаже, такая, как дата продажи, количество проданных единиц товара, номер накладной и т.п. Вторая таблица Tovars. db содержит сведения о продаже каждого товара за некоторый период времени, например за теку­щий год. В третьей таблице Clients. db хранится информация о продаже товаров каждому покупателю за тот же период времени.

Транзакция, связанная с продажей того или иного товара, бу­дет состоять из такого набора операций:

  1. добавление записи в таблицу Prodaga. db;

  2. поиск (или добавление) в таблице Tovars. db записи, со­ответствующей проданному товару, и увеличение общего объема продаж товара данного вида;

  3. поиск (добавление) в таблице Clients. db записи, отно­сящейся к сделавшему покупку покупателю и увеличение общей суммы совершенных им покупок.

Предположим, что на одном из шагов произошла ошибка. На­пример, первый и второй шаги были выполнены успешно, а на третьем шаге случилась ошибка, и он не был завершен. Возникает ситуация, когда две таблицы изменены и содержат корректные данные, а третья таблица не была изменена и, следовательно, со­держащаяся в ней информация неверна. Таким образом, это ведет к нарушению смысловой целостности БД. Возможность преду­преждать возникновение подобных нарушений и обеспечивает механизм транзакций, который в такой ситуации производит воз­вращение всей БД к исходному состоянию, отменяя все внесен­ные изменения.

Для реализации механизма транзакций необходимо.воспользо-ваться следующими методами компонента Database.

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

Метод Commit утверждает транзакцию в случае, если не воз­никло никаких исключительных ситуаций. Результатом выполне­ния данного метода является вступление в силу всех внесенных

изменений.

Метод Rollback при возникновении исключительных ситуа­ций производит отмену данной транзакции и действий всех опе­раций в ее рамках (откат транзакции).

В самом общем виде программная реализация механизма тран­закции будет выглядеть следующим образом:

// Начало транзакции Databasel.StartTransaction; try

{Составляющие транзакцию операции по изменению таблиц БД}

// Операции выполнены успешно.

// Утверждение транзакции

Databasel.Commit;

except

// Возникла исключительная ситуация.

// Откат транзакции

Databasel.Rollback;

end;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]