Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РЭУБД лекции.doc
Скачиваний:
25
Добавлен:
27.08.2019
Размер:
399.36 Кб
Скачать

Механизм кэшированных изменений

КЭШем называется специально выделенная область оперативной памяти (буфер).

Кэшированные изменения БД заключаются в том, что на компьютере клиента в КЭШе создается локальная копия данных, и все изменения в данных выполняются в этой копии. Сделанные изменения можно подтвердить, перенеся их в основную БД, или отказаться от них. Этот механизм напоминает транзакции, но, в отличие от них, существенно снижает нагрузку на сеть, т.к. все изменения в основную БД передаются одним пакетом. Однако для всех записей локальной копии отсутствуют блокировки на изменение их значений, в то время как для основной БД, находящейся на сервере, они могут быть в этот момент установлены другим приложением.

Механизм кэшированных изменений реализуется в приложении через компоненты DataBase, Table, Query (при доступе с помощью BDE), а также через специально предназначенный для этого компонент UpdateSQL. Компонент UpdateSQL используется для подтверждения кэшированных изменений и обеспечивает модификацию наборов данных, доступных только для чтения.

Для наборов данных DataBase, Table, Query включением режима кэшированных изменений управляет свойство CachedUpdates, принимающее два значения:

True – активизирует режим;

False – выключает его (по умолчанию).

После включения режима кэширование производится автоматически. Подтверждение кэшированных изменений выполняют в два этапа:

  • запись кэшированных изменений в основную БД;

  • подтверждение или отмена сделанных изменений.

Метод ApplyUpdates набора данных записывает в БД изменения в кэшированных данных. Данные пересылаются одним пакетом, что снижает нагрузку на сеть. Однако в основной БД в текущий момент могут быть блокированные записи, поэтому потребуется обработка исключений (удобно использовать конструкцию TRY … EXCEPT).

Метод CommitUpdates набора данных подтверждает изменение.

Метод CancelUpdates отменяет их, возвращая БД в исходное состояние.

Перехват исключительных ситуаций и обработка ошибок

Структурная схема терминов

Понятие исключительных ситуаций

Исключительная ситуация – это динамическая ошибка, представляющая собой нарушение условий выполнения программы, вызывающее прерывание или полное прекращение ее работы.

Исключением называют обработчик исключительной ситуации, который производит нейтрализацию вызвавшей его динамической ошибки.

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

В Delphi механизмы обработки ошибок инкапсулированы в класс Exception, описываемый в модуле SysUtils. Все классы исключений являются его потомками.

Возникающие при выполнении программы динамические ошибки автоматически преобразовываются средствами Delphi в соответствующие объекты-исключения. Объект-исключение содержит информацию о типе ошибки и при возникновении исключения заставляет программу или ее поток (составляющую процесса) временно приостановиться. После обработки исключения объекты-исключения автоматически удаляются.

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

Для операций, связанных с БД, существуют специальные дополнительные классы исключений:

EDatabaseError – предназначен для обработки ошибок при работе с набором данных (БД – TTable, TQuery), имеет двух потомков:

  • EDBEngineError – ошибка BDE (для локальных и файл-серверных БД);

  • EDBClient – ошибка в приложении клиента (для клиент-серверных БД).

EDBEditError – значение, введенное в поле, не соответствует типу данных поля или вводимые в поле данные несовместимы с маской ввода, заданной в свойстве EditMask.

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

Класс TDBError содержит информацию об исключительной ситуации в свойствах:

  • Message типа String – текст сообщения, характеризующий возникшую ошибку;

  • ErrorCode типа DBIResult – код ошибки;

  • Category типа Byte – категория исключительной ситуации;

  • SubCode типа Byte – группа (подкод) исключительной ситуации;

  • NativeError типа Longint – код ошибки, возвращаемой сервером. Если код равен 0, то ошибка произошла не на сервере.