Интерфейс прикладного программирования ВDЕ
Как уже говорилось выше, любое приложение Delphi, работающее с базами данных и написанное с использованием стандартных компонентов доступа к данным, обращается к данным и получает результат при помощи BDE. При этом механизм доступа к данным использует вызовы функций из API BDE.
Достаточно сложно представить себе такую ситуацию, когда возникает необходимость создания приложения, использующего только функции BDE, без применения компонентов доступа к данным VCL. А вот отдельные функции вполне могут понадобиться в любой программе. Поэтому рассмотрим процесс работы приложения, использующего вызовы BDE, т. к. это дает хорошую возможность понять механизм доступа к данным, который реализован в Delphi.
Итак, для создания приложения на основе вызовов функций BDE необходимо выполнить следующие операции:
- Инициализация BDE (функция DbiInit).
- Открытие объекта базы данных (функция DbiOpenDatabase).
- Определение рабочего каталога (функция obiSetDirectory), если на предыдущем этапе не задается псевдоним БД.
- Определение временного каталога (функция DbiSetPrivateoir).
- Открытие набора данных и создание курсора (функции DbOреnТаblе, DbiQExec и пр.; дескриптор курсора hDBICur).
- Заполнение структуры cuRProps, содержащей данные о курсоре и наборе данных (функция DbiGetCursorProps).
- Выделение памяти для буфера записи.
- Навигация набору данных (функции DbiSetToBegin, DbiSetToEnd, DbiSetToCursor и пр.)
- Чтение необходимой записи (функции DbiGetRelativeRecord, DbiGetNextRecord, DbiGetRecord, DbiGetPriorRecord и др.).
- Чтение или обновление необходимого поля (функции DMGetFieid, DbiPutField).
- Освобождение всех ресурсов (освобождение буфера записи, закрытие курсора, таблицы, BDE).
При использовании в программе функций из API BDE необходимо включить в секцию uses модуль BDE.
В прикладном программировании задачи, которые требовали бы выполнения всех описанных выше операций, практически не встречаются. Между тем, включение в программный код отдельных функций API BDE оправдано. В качестве примера рассмотрим приложение, которое позволяет очистить таблицу базы данных (рис. 16.4).
Дело в том, что при удалении записи из таблицы локальной СУБД (например Paradox) размер файла таблицы остается прежним, даже если удалить все записи. То есть на самом деле запись не удаляется, а только становится недоступной. При интенсивном использовании базы данных файлы таблиц могут занимать значительные объемы дискового пространства при довольно умеренном числе записей.
Рис. 16.4. Главная форма проекта BDEEmptyTable
Полная очистка таблиц базы данных осуществляется функцией DbiErr.ptyTable из API BDE. Именно она используется в демонстрационном приложении для радикального уменьшения размера таблиц.
Примечание
Функция DbiEmptyTable используется в методе EmptyTable компонентов доступа к данным (см. гл. 17).
В листинге 16.1 приведен исходный код этого приложения. Помимо указанной функции, в нем используются функции создания списка параметров доступных баз данных и таблиц текущей базы данных.