Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 999 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00

Самостоятельная работа 15: Создание СУБД средствами BDE (на примере протокола экзамена кандидатов в водители)

Создание псевдонима базы данных в BDE Administrator

Прежде, чем начать разработку приложения, нужно сделать так, чтобы при запуске оно автоматически узнавало логическое имя своей базы данных. Это логическое имя называется псевдонимом (Alias) BDE. Фактически это каталог, где хранятся таблицы с данными, даже если некоторые из них логически не принадлежат базе данных.

Псевдоним создадим с помощью утилиты BDE Administrator. Вызов этой программы осуществляется из главного меню C++Builder командой Tools/BDE Administrator. Окно программы состоит из двух панелей


В левой панели во вкладке Databases также отображается дерево зарегистрированных псевдонимов. Выделив интересующий псевдоним, в правой панели можно увидеть его параметры, которые при желании можно изменить. Выделив корневой узел в левой панели, можно с помощью команды Object/New меню или New контекстного меню создать новый псевдоним.

Создадим псевдоним для нашей базы данных.

  • Войдите в место размещения своей лабораторной работы и создайте в нем подчиненный каталог для хранения таблиц базы данных с именем DBF. Это имя мы в дальнейшем будем использовать как имя базы данных.
  • Запустите из меню оболочки утилиту Tools/BDE Administrator и в появившемся окне Администратора выберите вкладку Databases
  • Через меню Object (или через контекстное меню на узле Databases ) выполните команду New. Появится диалоговое окно с раскрывающемся списком, в котором выберите нужный тип драйвера STANDARD ( как показано на рисунке), который лучше всего подходит для локальных таблиц dBase и Paradox

  • После нажатия кнопки OK создастся новый узел в дереве зарегистрированных на компьютере псевдонимов, которому присвойте имя BaseGai, а справа установите параметр PATH окна псевдонима в значение каталога размещения файлов с данными ( DBF )
  • В правой панели для параметра DEFAULT DRIVER установите значение FOXPRO
  • Нажмите кнопку Apply (Применить) на панели инструментов окна BDE Администратора, чтобы сохранить созданный псевдоним ( Alias ), и закройте утилиту BDE Администратор

Создание структуры таблиц базы данных средствами Database Desktop

Создать таблицу можно программным путем или вручную прямо из оболочки. Мы сначала рассмотрим второй способ (вручную), а затем в программе предусмотрим еще одно место создания структуры таблицы с помощью кода на случай, если таковой не окажется. Таблицу можно создать с помощью утилиты Database Desktop (dbd32.exe) , которая поставляется вместе с C++Builder. Ее быстрый вызов должен присутствовать в меню Tools оболочки, а сама утилита располагается в каталоге C:\Program Files\Common Files\Borland Shared\Database Desktop\dbd32.exe

Если опции ее вызова в меню Tools нет, то создайте опцию командой


  • Запустите утилиту Database Desktop, вызовите через меню Tools команду создания новой таблицы


    и задайте тип таблицы dBASE IV


После нажатия кнопки OK появится диалоговое окно для задания параметров структуры создаваемой таблицы. Для каждого поля таблицы выбранного типа dBASE IV указывается

  1. Field Name - идентификатор поля
  2. Type - тип данных поля
  3. Size - размер хранимых данных
  4. Decimals - число значащих цифр после запятой

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

  • Создайте структуру таблицы Base0.dbf по приведенной ранее информации
  • Щелкните по кнопке Save As... и в появившемся окне Save Table As установите соответствующие значения

Опция Display table обеспечивает немедленное автоматическое открытие таблицы после ее сохранения. Вторая опция Add data to new table доступна в случае, если производилось не создание таблицы, а изменение ее структуры.

После щелчка по кнопке Сохранить в созданном ранее каталоге Dbf появится файл таблицы Base0.dbf. Проверьте это.

  • Подобным же образом создайте файлы для остальных таблиц разработанной структуры

Теперь мы имеем файлы таблиц базы данных с заданной структурой, расположенных в каталоге Dbf и зарегистрированных в системе под псевдонимом BaseGai

Обзор компонентов C++Builder 6, используемых для связи с локальными базами данных

Взаимодействие с базой данных обеспечивается рядом визуальных и невизуальных (неотображаемых во время выполнения программы) компонентов, размещенных во вкладках палитры компонентов оболочки C++Builder 6.


Компоненты "Наборы данных" ( data set ) непосредственно связываются с базой, руководствуясь информацией псевдонима, в котором вместе с местом расположения таблиц указан тип используемого драйвера. К этой группе относятся такие компоненты как Table, Query, StoredProc, BDEClientDataSet. Они находятся во вкладке BDE. (Вообще-то их принято называть поставщиками данных ).

Нам не потребуются компоненты Query или StoredProc до тех пор, пока мы не начнем писать свои собственные SQL -процедуры или обращаться к процедурам, хранимым на сервере. Можно и без SQL открывать таблицы баз данных в любом из локальных или удаленных форматов, поддерживаемых C++Builder, используя только компонент Table.

Компонент "Источник данных" ( data source ) осуществляет обмен информацией между компонентами "Наборы данных" и компонентами визуализации и управления данными. Этот компонент так и называется DataSource (вкладка Data Access ). С данными базы непосредственно работают компоненты набора данных, но они не могут передать данные непосредственно интерфейсным компонентам. Эта передача осуществляется через посредника - DataSource.

К интерфейсным компонентам непосредственной визуализации и управления данными относятся DBGrid, DBText, DBEdit, DBListBox, DBComboBox, DBCheckBox и множество других. Все они находятся во вкладке Data Controls. Интерфейсные компоненты работают на стороне пользователя. Они отображают данные на экране в удобной форме и позволяют их изменять. Они представляют собой аналоги элементов управления, используемых в обычных приложениях. Интерфейсные компоненты обращаются к данным через посредника DataSource.


Помимо указанных компонентов в приложении может размещаться (явно или неявно) компонент Database. Этот компонент в основном используется в сетевых приложениях, работающих на платформе клиент/сервер. Он обеспечивает некоторые дополнительные возможности, которые мы вольны использовать или неиспользовать, такие как: общение с удаленным сервером, реализацию транзакций и работу с паролями. Но в то же время он не является неотъемлемой частью приложения, работающего с базой данных. C++Builder автоматически создает экземпляр Database для каждой используемой в приложении базы данных, как и экземпляр компонента Session. Оба этих компонента находятся во вкладке BDE.

Нам не потребуется компонент Session до тех пор, пока мы не начнем разрабатывать многопоточные приложения для работы с базами данных. Многопоточные приложения открывают одновременно несколько каналов выполнения. Это означает, что несколько операций могут выполняться в одно и то же время. Обычно приложения, работающие с базами данных, не делают многопоточными, поэтому редко приходится создавать и использовать компонент Session явно.

Основные свойства компонента Table

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

Основные свойства компонента Table
Свойство Описание
Active Открывает и закрывает соединение с таблицей. Если в режиме проектирования значение свойства установить в true, то можно увидеть "живые данные" таблицы, что во многих случаях является удобным для разработчика приложения. Но в законченном приложении во всех таблицах это свойство нужно установить в false, а в событии OnCreate() формы приложения поместить код с установлением этого свойства в true, что откроет соединение с соответствующей таблицей. В событии OnDestroy() формы приложения нужно установить значение свойства вновь в false, что обеспечит закрытие соответствующих файлов базы данных и предотвратить неоправданный расход ресурсов в системе, а при работе в сети - устранит преграду доступа к таблице со стороны других пользователей.
AutoCalcFields Определяет способ вычислений с использованием полей
Bof, Eof Bof (Before of file) - показывает, находится ли курсор таблицы перед первой записью, Eof (End of file) - показывает, находится ли курсор таблицы после последней записи. Эти свойства принимают значение true только тогда, когда курсор выходит за пределы строк таблицы при вызове методов Prior() или Next(). При открытии таблицы свойство Bof также устанавливается в true автоматически.
CachedUpdates Определяет, будут ли кэшироваться обновленные данные.
DatabaseName Определяет псевдоним BDE, используемый для соединения с базой данных или каталог расположения таблиц (абсолютный или относительный).
Exclusive Определяет, могут ли другие пользователи обращаться к данной таблице.
Exists Логический флаг существования таблицы
FieldCount Возвращает количество полей в таблице
FieldDefs Содержит редактируемый список используемых в приложении полей таблицы. Используется при программном создании структуры таблицы
Fields Возвращает указанное по индексу поле со всеми характеристиками
Filter Определяет выражение, используемое для фильтрации записей
Filtered Включает или отключает действие фильтра
FilterOptions Управляет настройкой фильтров
IndexDefs Выдает информацию об индексах базы
IndexFieldCount Возвращает число полей в текущем индексном ключе
IndexFieldNames Указывает поля, используемые в качестве индексного ключа
IndexName Указывает имя используемого индекса
IndexFields Возвращает указанное по индексу массива поле индексного файла со всеми характеристиками
KeyExclusive Инвертирует действие функций поиска и установки диапазона
KeyFieldCount Указывает количество ключевых полей, используемых для поиска
MasterFields Указывает главные поля в отношении "главный/подчиненный"
MasterSource Указывает главный источник в отношении "главный/подчиненный"
Modified Показывает, была ли данная запись изменена с момента последнего обновления базы методами Post или Cancel
ReadOnly Устанавливает режим только чтения данных из источника
RecNo Номер текущей записи
RecordCount Возвращает количество записей в источнике данных
SessionName Указывает, какой компонент используется для соединения с базой данных
State Возвращает состояние источника данных
TableName Указывает физическое имя файла сопоставленной таблицы
TableType Указывает тип локальной таблицы ( ttDefault - тип определяется по расширению файла)
UpdateMode Определяет тип SQL, используемый для изменения данных
UpdateObject Определяет компонент UpdateSQL для использования совместно с кэшируемыми изменениями
Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .