Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ПП1 (C++ БД).doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
5 Мб
Скачать
☆

Поля файла бд

В Builder-программе каждому файлу БД соответствует компонент, называемый таблицей. В общем, этот компонент является программным аналогом абстрактной таблицы БД, существующей на бумаге.

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

Функциональное отличие компонента-таблицы от файла состоит в том, что в таблицу могут быть добавлены поля, не существующие физически, но появляющиеся в интерфейсе во время выполнения программы. Такие поля называют виртуальными или динамическими. К ним относятся вычисляемые поля и поля динамической подстановки или LookUp – поля. Изучению этих полей посвящены соответствующие лабораторные работы.

Набор данных таблицы бд

Во время выполнения программы (на фазе run time) при открытии компонента «таблица БД» с ним связывается определённая область оперативной памяти, называемая «набором данных». В неё автоматически без участия программиста переносятся несколько (возможно, все) записей из файла. Дальнейшая работа с БД проистекает не на физическом диске, а в этом наборе данных. Когда таблицу БД закрывают, записи из набора данных копируются в файл на диск, где они и сохраняются длительное время. Именно в этом наборе данных и формируются виртуальные поля таблицы. Наличие такого «дублёра» реального файла позволяет построить более быстрые программы, хотя в аварийных ситуациях, например при отключении электропитания, информация из набора данных может быть потеряна. Методы борьбы с такими аварийными потерями рассматриваются во время практических работ.

Управление наборами данных в среде Builder

Для обеспечения надёжности программирования в смысле уменьшения вероятности ошибочных действий программиста разработана концепция управления наборами данных(НД) , которую можно выразить таким образом:

чтобы выполнить некоторую операцию над НД, надо установить НД в такое состояние, когда эта операция разрешена.

В данном курсе мы остановимся на таком подмножестве операций над набором данных:

  • открытие,

  • перемещение (навигация),

  • добавление новой записи,

  • редактирование старой записи,

  • закрытие.

Для каждой группы операций вводится внутренняя системная константа, обозначающая состояние НД, в котором эта операция разрешена. Устанавливаются также и команды (методы набора данных), позволяющие переводить НД из одного состояния в другое. На рис. 88 изображена таблица состояний НД и разрешенные в этом состоянии команды (полный набор разрешенных методов и состояний НД см. в [1]) .

Константа состояния

Описание

Команды управления состоянием НД

dsInactive

НД закрыт, данные недоступны

Open, RenameTable, DeleteTable

dsBrowse

НД открыт, данные можно просматривать, но нельзя редактировать

Next, Prior,First, Last,

Insert, Edit,

Close

dsInsert

НД открыт, можно добавить новую запись

Next, Prior, First, Last,

Post ,Close

dsEdit

НД открыт, можно редактировать текущую запись

Next, Prior, First, Last,

Post ,Close

Рис. 88. Состояния НД

Перед тем, как применить к НД какую-либо команду, надо установить допустимое для этой команды состояние НД. На рис. 89 показаны варианты перевода НД из одного состояния в другое.

Рис. 89. Граф состояний НД

Исходное состояние НД – dsInactive: набор закрыт, файл, связанный с ним, можно переименовать (метод RenameTable), удалить (метод DeleteTable) или открыть (метод Open). Команда Open «открывает» набор данных и переводить его в состояние dsBrowse. При открытии НД система переписывает в оперативную память индексный файлы и упорядочивает их, строит набор данных и устанавливает курсор базы данных на первую запись. В состоянии dsBrowse можно перемещаться по НД, используя команды (методы) :

Метод

Действие

Next

Перейти на следующую запись

Prior

Перейти на предыдущую запись

Last

Перейти на последнюю запись файла

First

Перейти на первую запись файла

Когда НД находится в состоянии dsBrowse, эти команды не изменяют его состояния. Команда Insert переводит НД в состояние dsInset, а команда Edit – соответственно в dsEdit. В обоих состояниях – dsInsert и dsEdit – разрешается записывать данные в поля НД, но для dsInsert эти данные записываются в новую пустую запись, а для dsEdit они заносятся в поля текущей записи.

Когда к НД добавлена новая запись или отредактирована старая, её надо записать в НД командой Post. Эта команда всегда переводит НД в состояние dsBriwse, поэтому, если надо вновь отредактировать НД, необходимо снова выполнить команды Edit или Insert для перевода НД в нужное состояние.

Команда Post действует по-разному в зависимости от того, в каком состоянии находился НД. Если состояние было dsInsert, то новая запись будет добавлена к НД и количество записей файла увеличится на 1. Если же состояние было dsEdit, новые данные записываются на место текущей записи и количество записей в файле не изменится.

В обоих состояниях – dsInsert и dsEdit – разрешено выполнить любую команду навигации и перейти на другую запись НД. Но перед переходом на другую запись автоматически (по умолчанию) выполнится команда Post и новые данные будут записаны в НД. Однако рекомендуется команду записи Post всегда выполнять явно – это более надёжно.

Перед окончанием сеанса работы следует в явном виде закрыть таблицу набора данных командой Close. По этой команде уничтожаются все управляющие таблицы, созданные при открытии : индексы и динамическая память, отведённая под НД, а сам НД переводится в состояние dsInactive, в котором все записи файла становятся недоступными. Однако в этой ситуации программиста подстерегает опасность потери нескольких последних записей. Это может произойти, если сеанс Windows завершен некорректно: например, пользователь непосредственно отключил машину от сети. Дело в том, что даже при явном выполнении команд Post и Close данные из НД не записываются на диск, а остаются какое-то время в области оперативной памяти, называемой «кэш виртуальных страниц». Кэш переписывается на диск самой операционной системой, когда происходит его насыщение или при корректном закрытии сеанса Windows. Поэтому при некорректном завершении сеанса данные из кэша безвозвратно теряются. Чтобы избежать этого, надо при работе программ с базами данных настраивать компьютер таким образом, чтобы запретить операционной системе кэшировать по записи.