СУБД - система управления базой данных. Создадим приложение, обеспечивающее управление данными по успеваемости школьников гипотетической школы на локальном компьютере, используя механизм - процессор баз данных.
BDE должен быть поставлен на компьютер пользователя вместе с приложением, работающем на его основе. Иначе приложение не сможет связаться с базой данных и не будет работать.
Пользователем этого приложения должен быть работник школы (лучше - секретарь директора), в обязанность которого входит:
Наша задача, как разработчиков, проанализировать задачу с привлечением работников школы, а затем реализовать ее по следующему плану:
В таблицах, составляющих базу данных, первичный ключ будем выделять жирным синим цветом, а внешний - жирным черным подчеркнутым. Первичные ключи, являющиеся также внешними ключами, будем обозначать синим цветом с подчеркиванием. Таблицы должны выглядеть так
Список учеников SCHOOL | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_SCHOOL |
Numeric |
4 | Идентификатор ученика |
NAME |
Character |
30 | ФИО ученика |
NUM_CLASS |
Character |
2 | Номер класса |
SUB_CLASS |
Character |
1 | Индекс класса |
ADDRESS |
Character |
20 | Домашний адрес |
BIRTHDAY |
Date |
Дата рождения | |
Список телефонов PHONE | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
PHONE |
Character |
20 | Связанный с учеником телефон |
ID_SCHOOL |
Numeric |
4 | Идентификатор ученика |
OWNER |
Character |
20 | Чей телефон |
CONNECT |
Logical |
1 | Участвует ли в процессе обслуживания |
Список предметов TOPIC | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_TOPIC |
Numeric |
4 | Идентификатор предмета |
TOPIC |
Character |
20 | Изучаемый предмет |
NUM_CLASS |
Character |
2 | Номер класса |
SUB_CLASS |
Character |
1 | Индекс класса |
ID_TUTOR |
Numeric |
3 | Идентификатор учителя |
|
Character |
20 | Учитель |
TERM |
Numeric |
1 | Учебная четверть |
Список оценок по предметам VALUATION | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_SCHOOL |
Numeric |
4 | Идентификатор ученика |
DATE |
Date |
Текущая дата | |
ID_TOPIC |
Numeric |
4 | Идентификатор предмета |
VALUATION |
Numeric |
4 | Оценка |
При формировании таблиц базы данных следует соблюдать три общепринятых принципа, которые обеспечивают приведение структуры к нормальным формам
Прежде, чем начать разработку приложения, нужно сделать так, чтобы при запуске оно автоматически узнавало логическое имя своей базы данных. Это логическое имя называется псевдонимом ( Alias ) . Оно необходимо для обеспечения работы механизма . Использование логического имени позволяет перемещать каталог с базой на новое место или другой компьютер, а для подключения к исполнимому коду приложения достаточно эту базу зарегистрировать внешней утилитой, указав место размещения, поддерживаемый драйвер и тот же псевдоним. В самом же приложении ничего переделывать не нужно.
Механизм действует как интерфейс между базой данных и приложением, обеспечивая работу невидимых компонентов доступа. реализован в виде набора DLL -файлов. Взаимодействие программных элементов приложения не зависит от конкретной реализации базы данных благодаря , который обеспечивает доступ к данным на нижнем уровне иерархии управления данными.

Псевдоним аналогичен источнику данных ODBC фирмы Microsoft. Это набор параметров, определяющих способ установления связи с базой данных или СУБД, который разработчик должен настроить при его создании. В этом случае приложению безразлично, где физически раположена та или иная база данных, а часто безразлична и СУБД, создавшая и обслуживающая эту базу данных. При переносе базы администратору базы достаточно внести соответствующую информацию в псевдоним.
имеется собственный драйвер, соответствующий СУБД, то связывается через него с базой данных и с нужной таблицей в ней, обрабатывает запрос пользователя и возвращает в приложение результаты обработки. поддерживает естественный доступ к таким базам данных, как Microsoft Access, FoxPro, Paradox, dBase.
При работе с базами данных часто применяется кэширование всех изменений. Это означает, что все изменения данных (вставка/удаление записей), проводимые пользователем, вначале выполняются не с самой базой, а с виртуальной таблицей в оперативной памяти или виртуальном диске. И только после окончательных проверок пользователь может сохранить изменения в базе или отказаться от сохранения.
При сбросе кэша в базу используется механизм транзакций (логически связанных операций, которые должны рассматриваться как единая группа, в которой при сбое хотя бы одной операции действия всей группы отменяются и происходит откат состояния данных в позицию, которая была до начала транзакции).
Имеются три альтернативных пути создания, просмотра и редактирования псевдонимов с помощью трех различных программ, которые можно вызвать из главного меню оболочки:
Tools/Database Desktop Tools/BDE Administrator Database/Explore Программы являются самостоятельными утилитами и их можно вызвать напрямую, а при настройке базы на другом компьютере их нужно взять с собой и запускать там. Они расположены
C:\Program Files\Common Files\Borland Shared\Database Desktop\dbd32.exe |
C:\Program Files\Common Files\Borland Shared\ |
C:\Program Files\Borland\CBuilder6\Bin\dbexplor.exe |
Вспомните, что для запуска Администратора ODBC фирмы Microsoft необходимо запустить odbcad32.
Прежде, чем приступить к созданию новых псевдонимов, нужно упомянуть о двух псевдонимах, автоматически создаваемых . Эти псевдонимы размещаются в двух каталогах: рабочем ( working ) и частном ( private ).
Рабочий каталог используется для совместной работы всех пользователей. Database Desktop создает его в момент установки на компьютере средa C++Builder с путем
C:\Program Files\Common Files\Borland Shared\Database Desktop\WorkDir |
Он имеет псевдоним WORK. Изменить рабочий каталог можно с помощью Database Desktop, выполнив в нем команду меню File/.

Появится окно для смены места хранения псевдонима

При смене рабочего каталога псевдоним WORK автоматически будет подразумевать этот новый каталог. Если вы - единственный или основной пользователь Database Desktop, то полезно установить в качестве рабочего тот каталог, внутри которого или в подкаталогах которого сосредоточено большинство ваших баз данных.
Личный ( private ) каталог также создается автоматически при уcтановки Database Desktop там же, где и рабочий каталог. Он предназначен для хранения личных таблиц и других объектов пользователя, не предназначенных для всеобщего обозрения. Он имеет псевдоним PRIV. Изменить рабочий каталог также можно с помощью Database Desktop, выполнив в нем команду меню File/.
Псевдонимы баз данных могут создаваться в C++Builder двух видов:
C:\Program Files\Common Files\Borland Shared\BDE \IDAPI32.CFG IDAPI .CFG . Используя псевдонимы проекта, мы можем в разных каталогах разместить файлы конфигурации с разными псевдонимами и в зависимости от того, какой каталог мы назначим рабочим, будем иметь разные наборы псевдонимов.Псевдонимы можно просматривать и создавать в Database Desktop, выполнив в этой программе команду меню Tools/Alias Manager (Диспетчер псевдонимов)

Появится окно диспетчера псевдонимов, вид которого зависит от того, псевдоним какой базы данных просматривается.

Индикатор Public alias (открытый псевдоним) в верхней части окна показывает, будет ли создаваться открытый псевдоним или псевдоним проекта. Выпадающий список Database alias позволяет выбрать псевдоним из уже созданных. То, какие псевдонимы в нем видны, определяется группой радиокнопок справа.
| Группа радиокнопок | |
|---|---|
Show public aliases only |
В списке отображаются только открытые псевдонимы |
Show project aliases only |
В списке отображаются только псевдонимы проекта |
Show all aliases |
В списке отображаются псевдонимы обоих типов |
Кнопка Browse позволяет установить путь размещения таблиц базы данных. Кнопка Remove удаляет выбранный псевдоним. Кнопка Save as... позволяет перезаписать копию псевдонима на новое место и под другим именем.
Для создания псевдонима с помощью Database Desktop нужно выполнить следующие шаги:
Public aliasDriver typeBrowse путь размещения таблиц базыNew и в окне редактирования Database alias ввести имя нового псевдонима (если создается псевдоним базы с однотипными характеристиками, то выгоднее вначале выбрать существующий псевдоним, а затем изменить его имя и щелкнуть по кнопке Keep New, чтобы сохранить новую информацию)Save as.., и выйти из диалогаПрограмма позволяет просматривать, редактировать и создавать псевдонимы баз данных различных типов, подключая к ним информацию о драйверах и их настройку.
Окно программы имеет две страницы (вкладки): Databases - базы данных и Configuration - конфигурация. На вкладке Databases в левой панели расположено дерево псевдонимов баз данных. Справа представлены характеристики выделенного псевдонима, число и смысл которых зависит от закрепленного за этим псевдонимом драйвера.

Для драйвера типа STANDARD набор характеристик псевдонима минимальный. Тип драйвера STANDARD можно использовать для таблиц Paradox, dBase, FoxPro и для текстов ASCII (Американский стандартный код обмена информацией).
Характеристики драйвера типа STANDARD | |
|---|---|
DEFAULT DRIVER |
Можно установить подключение одного из следующих драйверов: PARADOX - таблицы в файлах *.db DBASE - таблицы в файлах *.dbf FOXPRO - таблицы в файлах *.dbf ASCIIDRV - таблицы в файлах *.txt |
ENABLE |
Определяет, должен ли механизм транслировать числовые поля в значения с плавающей точкой, или в коды . позволяет избежать ошибок округления. Если ENABLE установить в TRUE, то поля типа Numeric и Decimals преобразуются в коды . |
PATH |
Путь к месту размещения таблиц базы данных |

В правой панели можно изменить значения только тех параметров, имена которых не выделены жирным шрифтом. После задания значений параметров через контекстное меню правой панели окна можно сохранить изменения командой Apply (Прменить) команда Delete удаляет псевдоним, команда Save as... копирует измененный псевдоним.
Вкладка Configuration (конфигурация) позволяет изменить какие-то параметры выбранного драйвера и установить системные параметры, определяющие, как преобразовываются строки с обозначением дат, времени и чисел в соответствующие значения.
Вызов этой программы осуществляется из главного меню C++Builder командой Database/Explore. Окно программы также состоит из двух панелей

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

При этом вначале будет показано диалоговое окно выбора драйвера, а затем появится диалоговое окно, ничем не отличающееся от рассмотренного ранее в .
Однако возможности по просмотру и модификации не ограничиваются только псевдонимами. Выбрав в левой панели интересующий псевдоним, можно посмотреть, что хранится в закрепленной за ним базе данных (таблицы, индексы и др.) и даже редактировать записи.
Создадим псевдоним для нашей базы данных.
Войдите в место размещения своей лабораторной работы и создайте в нем подчиненный каталог для хранения таблиц базы данных с именем BaseSchool. Это имя мы в дальнейшем будем использовать как имя базы данных.
Запустите из меню оболочки утилиту
Через меню
После нажатия кнопки
Справа установите параметр PATH окна псевдонима в значение каталога предполагаемого размещения файлов с данными
В правой панели для параметра DEFAULT DRIVER установите значение FOXPRO
Нажмите кнопку Физическая структура базы данных зависит от типа СУБД, который мы принимаем для хранения данных и управления ими. Обычно имя базы данных совпадает с каталогом, где хранятся все таблицы, составляющие эту базу. Создадим структуру базы, которая будет основой для наполнения данными. Структуру таблиц можно создадим с помощью инструмента Database Desktop оболочки C++Builder 6 через меню Tools. Если на вашем компьютере его там нет, то присоедините его к оболочке через команду Tools/.
Вызовите через меню В появившемся подменю имеются три команды
Пункты меню File/New | |
|---|---|
| Командаменю | Пояснения |
|
Визуальный построитель запросов и запись этих запросов в файл |
SQL File |
Создание запроса на SQL и запись его в файл |
Table |
Создание новой таблицы |
Выполните команду После нажатия кнопки OK появится диалоговое окно для задания параметров структуры создаваемой таблицы. Для каждого поля таблицы выбранного типа dBASE IV указывается
Field Name - идентификатор поляType - тип данных поляSize - размер хранимых данныхDecimals - число значащих цифр после запятойТип поля можно выбирать из контекстного меню для этого поля, щелкнув правой кнопкой мыши на значении типа, или вводом с клавиатуры начальных символов типа

Создайте структуру таблицы
SCHOOL Field Name Type Size ID_SCHOOLNumericNAMECharacterNUM_CLASSCharacterSUB_CLASSCharacterADDRESSCharacterBIRTHDAYDate
Щелкните по кнопке Опция Display table обеспечивает немедленное автоматическое открытие таблицы после ее сохранения. Вторая опция Add data to new table доступна в случае, если производилось не создание таблицы, а изменение ее структуры.
После щелчка по кнопке Сохранить в созданном ранее каталоге BaseSchool появится файл таблицы SCHOOL.dbf. Проверьте это.
Подобным же образом создайте файлы для остальных таблиц разработанной структуры, заполнив диалоговые окна мастера так, как показано ниже Список телефонов PHONE | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
PHONE |
Character |
20 | Связанный с учеником телефон |
ID_SCHOOL |
Numeric |
4 | Идентификатор ученика |
OWNER |
Character |
20 | Чей телефон |
CONNECT |
Logical |
1 | Участвует ли в процессе обслуживания |

Список предметов TOPIC | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_TOPIC |
Numeric |
4 | Идентификатор предмета |
TOPIC |
Character |
20 | Изучаемый предмет |
NUM_CLASS |
Character |
2 | Номер класса |
SUB_CLASS |
Character |
1 | Индекс класса |
ID_TUTOR |
Numeric |
3 | Идентификатор учителя |
|
Character |
20 | Учитель |
TERM |
Numeric |
1 | Учебная четверть |

Список оценок по предметам VALUATION | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_SCHOOL |
Numeric | 4 | Идентификатор ученика |
DATE |
Date | Текущая дата | |
ID_TOPIC |
Numeric |
4 | Идентификатор предмета |
VALUATION |
Numeric |
4 | Оценка |

Теперь мы имеем файлы таблиц базы данных с заданной структурой, расположенных в каталоге BaseSchool и зарегистрированных в системе под псевдонимом DBSchool
Для быстрого поиска нужных записей в таблице часто применяют индексные файлы. В них содердится информация о значениях одного или нескольких полей, упорядоченная по значениям этих полей. Одновременно содержится и номер записи в основной таблице, где содержится соответствующее значение поля или полей. Такие файлы небольшие и автоматически сортируются для поддержки актуального состояния. Это избавляет от необходимости физически сортировать саму таблицу с данными. Зато можно создавать несколько индексных файлов для одной и той же таблицы, где записи будут упорядочены по нужному полю для быстрой их выборки из основного поля.
Если индекс создается по ключевому полю, то он называется первичным, индексы для других полей называются вторичными.
Создадим несколько индексных файлов для таблицы SCHOOL.dbf.
Через меню Tools запустите утилиту Database Desktop и выполните команду File/Open/Table.
В появившемся диалоговом окне Open Table в раскрывающемся списке установите псевдоним ( Alias ) в значение DBSchool
Выделите файл-таблицу SCHOOL.dbf и щелкните по кнопке Открыть. Откроется таблица SCHOOL, созданная нами ранее.
Выполните команду меню
Проверьте, чтобы в выпадающем списке Индикатор обеспечивает режим автоматического изменения индекса при редактировании связанной таблицы.
После щелчка по кнопке OK появится окно с предложением определить имя индекса

Оставьте значение по умолчанию, равное имени индексируемого поля.
Аналогичным образом создайте индекс для поля BIRTHDAYПосле создания двух индексов окно Database Desktop должно выглядеть так

Щелкните по кнопке Save и сохраните результаты редактирования.
Зайдите в каталог размещения базы и убедитесь, что появился новый файл для хранения созданных индексов
Взаимодействие с базой данных обеспечивается рядом визуальных и невизуальных (неотображаемых во время выполнения программы) компонентов, размещенных во вкладках C++Builder 6. Главным посредником, осуществляющим обмен информацией между компонентами визуализации данных и компонентами, непосредственно связанными с базой данных, является компонент DataSource (источник данных). Он находится во вкладке Data Access

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

Связь этих компонентов друг с другом и локальной базой данных можно представить схемой

Компоненты "Наборы данных" ( ) непосредственно связываются с базой, руководствуясь информацией псевдонима, в котором вместе с местом расположения таблиц указан тип используемого драйвера. К этой группе относятся такие компоненты как Table, Query, StoredProc, BDEClientDataSet. Они находятся во вкладке .
Нам не потребуются компоненты Query или StoredProc до тех пор, пока мы не начнем писать свои собственные SQL -процедуры или обращаться к процедурам, хранимым на сервере. Можно и без SQL открывать таблицы баз данных в любом из локальных или удаленных форматов, поддерживаемых C++Builder, используя только компонент Table.
Компонент "Источник данных" ( data source ) осуществляет обмен информацией между компонентами "Наборы данных" и компонентами визуализации и управления данными. Этот компонент так и называется DataSource (вкладка Data Access ). С данными базы непосредственно работают компоненты набора данных, но они не могут передать данные непосредственно интерфейсным компонентам. Эта передача осуществляется через посредника - DataSource.
К интерфейсным компонентам визуализации и управления данными относятся DataSource.
Помимо указанных компонентов в приложении может размещаться компонент Database. Этот компонент в основном используется в сетевых приложениях, работающих на платформе клиент/сервер. Он обеспечивает некоторые дополнительные возможности, которые мы вольны использовать или неиспользовать, такие как: общение с удаленным сервером, реализацию транзакций и работу с паролями. Но в то же время он не является неотъемлемой частью приложения, работающего с базой данных. C++Builder автоматически создает экземпляр Database для каждой используемой в приложении базы данных, как и экземпляр компонента Session. Оба этих компонента находятся во вкладке .
Нам не потребуется компонент Session до тех пор, пока мы не начнем разрабатывать многопоточные приложения для работы с базами данных. Многопоточные приложения открывают одновременно несколько каналов выполнения. Это означает, что несколько операций могут выполняться в одно и то же время. Обычно приложения, работающие с базами данных, не делают многопоточными, поэтому редко приходится создавать и использовать компонент Session явно.
Основным компонентом, непосредственно работающим с данными, является Table. Он устанавливает соединение между приложением и таблицей с данными, а также используется для добавления, изменения и удаления строк в таблице базы данных. Имеет свойства, часть из которых доступна в режиме проектирования, а часть - программно при выполнении приложения.
Основные свойства компонента Table | |
|---|---|
| Свойство | Описание |
Active |
Открывает и закрывает соединение с таблицей.
Если в режиме проектирования значение свойства установить в true, то можно увидеть "живые данные" таблицы, что во многих случаях является удобным для разработчика приложения. Но в законченном приложении во всех таблицах это свойство нужно установить в false, а в событии OnCreate() формы приложения поместить код с установлением этого свойства в true, что откроет соединение с соответствующей таблицей.
В событии OnDestroy() формы приложения нужно установить значение свойства вновь в false, что обеспечит закрытие соответствующих файлов базы данных и предотвратить неоправданный расход ресурсов в системе, а при работе в сети - устранит преграду доступа к таблице со стороны других пользователей. |
|
Определяет способ вычислений с использованием полей |
|
- показывает, находится ли курсор таблицы перед первой записью, Eof - показывает, находится ли курсор таблицы после последней записи. Эти свойства принимают значение true только тогда, когда курсор выходит за пределы строк таблицы при вызове методов или Next(). При открытии таблицы свойство также устанавливается в true автоматически. |
CachedUpdates |
Определяет, будут ли кэшироваться обновленные данные |
DatabaseName |
Определяет псевдоним , используемый для соединения с базой данных. |
Exclusive |
Определяет, могут ли другие пользователи обращаться к данной таблице |
|
Возвращает количество полей в таблице |
|
Содержит редактируемый список используемых в приложении полей таблицы |
Fields |
Возвращает указанное по индексу поле со всеми характеристиками |
Filter |
Определяет выражение, используемое для фильтрации записей |
Filtered |
Определяет, какой способ фильтрации используется: указанный в Filter или |
|
Управляет работой фильтров |
|
Выдает информацию об индексах базы |
IndexFieldCount |
Возвращает число полей в текущем индексном ключе |
|
Указывает поля, используемые в качестве индексного ключа |
IndexName |
Указывает имя используемого индекса |
IndexFields |
Возвращает указанное по индексу массива поле индексного файла со всеми характеристиками |
KeyExclusive |
Инвертирует действие функций поиска и установки диапазона |
KeyFieldCount |
Указывает количество ключевых полей, используемых для поиска |
MasterFields |
Указывает главные поля в отношении "главный/подчиненный |
MasterSource |
Указывает главный источник в отношении "главный/подчиненный" |
Modified |
Показывает, была ли данная запись изменена с момента последнего обновления базы методами Post или Cancel |
ReadOnly |
Устанавливает режим только чтения данных из источника |
|
Возвращает количество записей в источнике данных |
SessionName |
Указывает, какой компонент используется для соединения с базой данных |
State |
Возвращает состояние источника данных |
TableName |
Указывает |
TableType |
Указывает тип локальной таблицы |
UpdateMode |
Определяет тип SQL, используемый для изменения данных |
UpdateObject |
Определяет компонент UpdateSQL для использования совместно с кэшируемыми изменениями |
Основные методы компонента Table | |
|---|---|
| Метод | Описание |
AddIndex() |
Создает новый индекс |
Append() |
Добавляет пустую строку к источнику данных, и переводит его в режим редактирования |
|
Добавляет строку, используя указанные значения |
ApplyRange() |
Активизирует диапазон, установленный методами Set() или EditRange() |
|
Сохраняет кэшированные изменения в базе данных |
BatchMove() |
Копирует группу строк из одного источника в другой |
Cancel() |
Отменяет ожидаемое изменение текущей строки |
CancelRange() |
Отменяет установки, сделанные методами Set() или EditRange() |
CancelUpdates() |
Отменяет ждущие изменения, занесенные в кэш |
|
Устанавливает для полей текущей строки значения по умолчанию |
Close() |
Закрывает источник данных |
CommitUpdates() |
Уведомляет кэш о сохранении изменений |
CreateTable() |
Создает новую таблицу |
Delete() |
Удаляет в таблице текущую запись |
DeleteIndex() |
Удаляет вторичный индекс |
DeleteTable() |
Удаляет соответствующую физическую таблицу в базе данных |
Edit() |
Переводит источник данных в режим редактирования |
EditKey() |
Позволяет изменять значения ключа поиска |
EditRangeEnd() |
Позволяет изменять верхний ключевой предел диапазона |
EditRangeStart() |
Позволяет изменять нижний ключевой предел диапазона |
EmptyTable() |
Удаляет все строки в источнике данных, оставляя только заголовок |
EnableControls() |
Разрешает использование интерфейсных компонентов визуализации и управления |
FetchAll() |
Считывает все ожидающие своей очереди строки базы данных |
|
Возвращает объект типа TField, используя имя поля в базе данных |
|
Осуществляет поиск первой записи по условию фильтрации |
|
Осуществляет поиск следующей записи, соответствующей заданному критерию. |
FindKey() |
Выполняет точный поиск в источнике данных |
FindNearest() |
Выполняет приближенный поиск с частичным совпадением в источнике данных |
GetFieldNames() |
Возвращает список полей в источнике данных |
GetIndexNames() |
Возвращает список открытых индексов |
GotoKey() |
Выполняет точный поиск в источнике данных по ключу |
GoteNearest() |
Выполняет приближенный поиск в источнике данных по ключу |
Insert() |
Вставляет пустую строку перед текущей и позволяет ее редактировать |
|
Вставляет строку, используя заданные значения столбцов |
Locate() |
Осуществляет поиск записи |
|
Блокирует локальную таблицу для монопольного использования |
Lookup() |
Осуществляет поиск записи в источнике и возвращает значения ее полей |
MoveBy() |
Перемещает логический курсор источника данных на заданное количество записей |
Open() |
Открывает источник данных |
Post() |
Сохраняет ждущие изменения текущей строки, очищая кэш |
RenameTable() |
Переименовывает локальную таблицу |
RevertRecord() |
Отменяет кэшированные изменения текущей строки |
SetKey() |
Переводит источник данных в режим поиска по ключу |
SetRange() |
Переводит источник данных в режим поиска по диапазону |
SetRangeEnd() |
Устанавливает верхний предел диапазона |
SetRangeStart() |
Устанавливает нижний предел диапазона |
|
Разблокирует локальную таблицу от монопольного использования |
Основные события компонента Table | |
|---|---|
| Событие | Условие возникновения |
AfterCancel |
После вызова Cancel |
AfterClose |
После закрытия источника данных |
AfterDelete |
После вызова Delete |
AfterEdit |
После вызова Edit |
AfterInsert |
После вызова Insert |
AfterOpen |
После открытия источника данных |
AfterPost |
После вызова Post |
BeforeCancel |
Перед выполнением Cancel |
BeforeClose |
Перед закрытием источника данных |
BeforeDelete |
Перед выполнением Delete |
BeforeEdit |
Перед выполнением Edit |
BeforeInsert |
Перед выполнением Insert и Append |
BeforeOpen |
Перед открытием источника данных |
BeforePost |
Перед выполнением Post |
|
При необходимости ввода значений в вычисляемые поля |
OnDeleteError |
При ошибке удаления записи |
OnEditError |
При ошибке редактирования записи |
|
В режиме фильтрации, когда источник данных требует строку |
|
При добавлении новой записи в источник данных |
OnPostRecord |
При ошибке сохранения записи |
OnUpdateError |
При ошибке во время сохранения кэшированных изменений |
OnUpdateRecord |
При сохранении каждой строки с помощью |
Создадим приложение, в котором реализуем управление созданными ранее таблицами, входящими в состав базы данных.
Создайте новый проект и сразу сохраните его в своем каталоге выполнения лабораторной работы. Для этого имя файла user1.cpp измените на uAppBDE, а имя проекта Project1.bpr измените на AppBDE. Это имя в дальнейшем будет иметь исполнимый файл проекта приложения
Поместите на новую форму следующие компоненты| Компонент | Вкладка |
|---|---|
MainMenu |
Standard |
Table |
|
DataSource |
Data Access |
|
|
Настройте свойства компонентов, как приведено в таблице Таблица свойств главной формы приложения AppBDE | ||
|---|---|---|
| Элемент управления | Свойство | Значение |
| Главная форма | Name |
MainForm |
Caption |
Приложение управления базой данных | |
Width |
555 | |
Height |
375 | |
| ----------------------------------------------------------------------------------------------------- | ||
MainMenu |
Name |
MainMenu |
TMenuItem |
Name |
File |
Caption |
Файл | |
| ----------------------------------------------------------------------------------------------------- | ||
Table |
Name |
School |
DatabaseName |
DBSchool |
|
TableName |
SCHOOL.DBF |
|
Active |
true |
|
| ----------------------------------------------------------------------------------------------------- | ||
DataSource |
Name |
School DataSource1 |
DataSet |
||
| ----------------------------------------------------------------------------------------------------- | ||
|
Name |
DBGrid1 |
DataSource |
DataSource1 |
|
Align |
alClient |
|
Отредактируйте заголовки полей таблицы. Для этого через контекстное меню компонента
Редактор полей заполнится списком полей таблицы. Выделяя последовательно каждое поле в редакторе полей, измените свойство
SCHOOL FieldDisplayLabelСУБД - система управления базой данных. Создадим приложение, обеспечивающее управление данными по успеваемости школьников гипотетической школы на локальном компьютере, используя механизм - процессор баз данных.
BDE должен быть поставлен на компьютер пользователя вместе с приложением, работающем на его основе. Иначе приложение не сможет связаться с базой данных и не будет работать.
Пользователем этого приложения должен быть работник школы (лучше - секретарь директора), в обязанность которого входит:
Наша задача, как разработчиков, проанализировать задачу с привлечением работников школы, а затем реализовать ее по следующему плану:
В таблицах, составляющих базу данных, первичный ключ будем выделять жирным синим цветом, а внешний - жирным черным подчеркнутым. Первичные ключи, являющиеся также внешними ключами, будем обозначать синим цветом с подчеркиванием. Таблицы должны выглядеть так
Список учеников SCHOOL | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_SCHOOL |
Numeric |
4 | Идентификатор ученика |
NAME |
Character |
30 | ФИО ученика |
NUM_CLASS |
Character |
2 | Номер класса |
SUB_CLASS |
Character |
1 | Индекс класса |
ADDRESS |
Character |
20 | Домашний адрес |
BIRTHDAY |
Date |
Дата рождения | |
Список телефонов PHONE | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
PHONE |
Character |
20 | Связанный с учеником телефон |
ID_SCHOOL |
Numeric |
4 | Идентификатор ученика |
OWNER |
Character |
20 | Чей телефон |
CONNECT |
Logical |
1 | Участвует ли в процессе обслуживания |
Список предметов TOPIC | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_TOPIC |
Numeric |
4 | Идентификатор предмета |
TOPIC |
Character |
20 | Изучаемый предмет |
NUM_CLASS |
Character |
2 | Номер класса |
SUB_CLASS |
Character |
1 | Индекс класса |
ID_TUTOR |
Numeric |
3 | Идентификатор учителя |
|
Character |
20 | Учитель |
TERM |
Numeric |
1 | Учебная четверть |
Список оценок по предметам VALUATION | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_SCHOOL |
Numeric |
4 | Идентификатор ученика |
DATE |
Date |
Текущая дата | |
ID_TOPIC |
Numeric |
4 | Идентификатор предмета |
VALUATION |
Numeric |
4 | Оценка |
При формировании таблиц базы данных следует соблюдать три общепринятых принципа, которые обеспечивают приведение структуры к нормальным формам
Прежде, чем начать разработку приложения, нужно сделать так, чтобы при запуске оно автоматически узнавало логическое имя своей базы данных. Это логическое имя называется псевдонимом ( Alias ) . Оно необходимо для обеспечения работы механизма . Использование логического имени позволяет перемещать каталог с базой на новое место или другой компьютер, а для подключения к исполнимому коду приложения достаточно эту базу зарегистрировать внешней утилитой, указав место размещения, поддерживаемый драйвер и тот же псевдоним. В самом же приложении ничего переделывать не нужно.
Механизм действует как интерфейс между базой данных и приложением, обеспечивая работу невидимых компонентов доступа. реализован в виде набора DLL -файлов. Взаимодействие программных элементов приложения не зависит от конкретной реализации базы данных благодаря , который обеспечивает доступ к данным на нижнем уровне иерархии управления данными.

Псевдоним аналогичен источнику данных ODBC фирмы Microsoft. Это набор параметров, определяющих способ установления связи с базой данных или СУБД, который разработчик должен настроить при его создании. В этом случае приложению безразлично, где физически раположена та или иная база данных, а часто безразлична и СУБД, создавшая и обслуживающая эту базу данных. При переносе базы администратору базы достаточно внести соответствующую информацию в псевдоним.
имеется собственный драйвер, соответствующий СУБД, то связывается через него с базой данных и с нужной таблицей в ней, обрабатывает запрос пользователя и возвращает в приложение результаты обработки. поддерживает естественный доступ к таким базам данных, как Microsoft Access, FoxPro, Paradox, dBase.
При работе с базами данных часто применяется кэширование всех изменений. Это означает, что все изменения данных (вставка/удаление записей), проводимые пользователем, вначале выполняются не с самой базой, а с виртуальной таблицей в оперативной памяти или виртуальном диске. И только после окончательных проверок пользователь может сохранить изменения в базе или отказаться от сохранения.
При сбросе кэша в базу используется механизм транзакций (логически связанных операций, которые должны рассматриваться как единая группа, в которой при сбое хотя бы одной операции действия всей группы отменяются и происходит откат состояния данных в позицию, которая была до начала транзакции).
Имеются три альтернативных пути создания, просмотра и редактирования псевдонимов с помощью трех различных программ, которые можно вызвать из главного меню оболочки:
Tools/Database Desktop Tools/BDE Administrator Database/Explore Программы являются самостоятельными утилитами и их можно вызвать напрямую, а при настройке базы на другом компьютере их нужно взять с собой и запускать там. Они расположены
C:\Program Files\Common Files\Borland Shared\Database Desktop\dbd32.exe |
C:\Program Files\Common Files\Borland Shared\ |
C:\Program Files\Borland\CBuilder6\Bin\dbexplor.exe |
Вспомните, что для запуска Администратора ODBC фирмы Microsoft необходимо запустить odbcad32.
Прежде, чем приступить к созданию новых псевдонимов, нужно упомянуть о двух псевдонимах, автоматически создаваемых . Эти псевдонимы размещаются в двух каталогах: рабочем ( working ) и частном ( private ).
Рабочий каталог используется для совместной работы всех пользователей. Database Desktop создает его в момент установки на компьютере средa C++Builder с путем
C:\Program Files\Common Files\Borland Shared\Database Desktop\WorkDir |
Он имеет псевдоним WORK. Изменить рабочий каталог можно с помощью Database Desktop, выполнив в нем команду меню File/.

Появится окно для смены места хранения псевдонима

При смене рабочего каталога псевдоним WORK автоматически будет подразумевать этот новый каталог. Если вы - единственный или основной пользователь Database Desktop, то полезно установить в качестве рабочего тот каталог, внутри которого или в подкаталогах которого сосредоточено большинство ваших баз данных.
Личный ( private ) каталог также создается автоматически при уcтановки Database Desktop там же, где и рабочий каталог. Он предназначен для хранения личных таблиц и других объектов пользователя, не предназначенных для всеобщего обозрения. Он имеет псевдоним PRIV. Изменить рабочий каталог также можно с помощью Database Desktop, выполнив в нем команду меню File/.
Псевдонимы баз данных могут создаваться в C++Builder двух видов:
C:\Program Files\Common Files\Borland Shared\BDE \IDAPI32.CFG IDAPI .CFG . Используя псевдонимы проекта, мы можем в разных каталогах разместить файлы конфигурации с разными псевдонимами и в зависимости от того, какой каталог мы назначим рабочим, будем иметь разные наборы псевдонимов.Псевдонимы можно просматривать и создавать в Database Desktop, выполнив в этой программе команду меню Tools/Alias Manager (Диспетчер псевдонимов)

Появится окно диспетчера псевдонимов, вид которого зависит от того, псевдоним какой базы данных просматривается.

Индикатор Public alias (открытый псевдоним) в верхней части окна показывает, будет ли создаваться открытый псевдоним или псевдоним проекта. Выпадающий список Database alias позволяет выбрать псевдоним из уже созданных. То, какие псевдонимы в нем видны, определяется группой радиокнопок справа.
| Группа радиокнопок | |
|---|---|
Show public aliases only |
В списке отображаются только открытые псевдонимы |
Show project aliases only |
В списке отображаются только псевдонимы проекта |
Show all aliases |
В списке отображаются псевдонимы обоих типов |
Кнопка Browse позволяет установить путь размещения таблиц базы данных. Кнопка Remove удаляет выбранный псевдоним. Кнопка Save as... позволяет перезаписать копию псевдонима на новое место и под другим именем.
Для создания псевдонима с помощью Database Desktop нужно выполнить следующие шаги:
Public aliasDriver typeBrowse путь размещения таблиц базыNew и в окне редактирования Database alias ввести имя нового псевдонима (если создается псевдоним базы с однотипными характеристиками, то выгоднее вначале выбрать существующий псевдоним, а затем изменить его имя и щелкнуть по кнопке Keep New, чтобы сохранить новую информацию)Save as.., и выйти из диалогаПрограмма позволяет просматривать, редактировать и создавать псевдонимы баз данных различных типов, подключая к ним информацию о драйверах и их настройку.
Окно программы имеет две страницы (вкладки): Databases - базы данных и Configuration - конфигурация. На вкладке Databases в левой панели расположено дерево псевдонимов баз данных. Справа представлены характеристики выделенного псевдонима, число и смысл которых зависит от закрепленного за этим псевдонимом драйвера.

Для драйвера типа STANDARD набор характеристик псевдонима минимальный. Тип драйвера STANDARD можно использовать для таблиц Paradox, dBase, FoxPro и для текстов ASCII (Американский стандартный код обмена информацией).
Характеристики драйвера типа STANDARD | |
|---|---|
DEFAULT DRIVER |
Можно установить подключение одного из следующих драйверов: PARADOX - таблицы в файлах *.db DBASE - таблицы в файлах *.dbf FOXPRO - таблицы в файлах *.dbf ASCIIDRV - таблицы в файлах *.txt |
ENABLE |
Определяет, должен ли механизм транслировать числовые поля в значения с плавающей точкой, или в коды . позволяет избежать ошибок округления. Если ENABLE установить в TRUE, то поля типа Numeric и Decimals преобразуются в коды . |
PATH |
Путь к месту размещения таблиц базы данных |

В правой панели можно изменить значения только тех параметров, имена которых не выделены жирным шрифтом. После задания значений параметров через контекстное меню правой панели окна можно сохранить изменения командой Apply (Прменить) команда Delete удаляет псевдоним, команда Save as... копирует измененный псевдоним.
Вкладка Configuration (конфигурация) позволяет изменить какие-то параметры выбранного драйвера и установить системные параметры, определяющие, как преобразовываются строки с обозначением дат, времени и чисел в соответствующие значения.
Вызов этой программы осуществляется из главного меню C++Builder командой Database/Explore. Окно программы также состоит из двух панелей

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

При этом вначале будет показано диалоговое окно выбора драйвера, а затем появится диалоговое окно, ничем не отличающееся от рассмотренного ранее в .
Однако возможности по просмотру и модификации не ограничиваются только псевдонимами. Выбрав в левой панели интересующий псевдоним, можно посмотреть, что хранится в закрепленной за ним базе данных (таблицы, индексы и др.) и даже редактировать записи.
Создадим псевдоним для нашей базы данных.
Войдите в место размещения своей лабораторной работы и создайте в нем подчиненный каталог для хранения таблиц базы данных с именем BaseSchool. Это имя мы в дальнейшем будем использовать как имя базы данных.
Запустите из меню оболочки утилиту
Через меню
После нажатия кнопки
Справа установите параметр PATH окна псевдонима в значение каталога предполагаемого размещения файлов с данными
В правой панели для параметра DEFAULT DRIVER установите значение FOXPRO
Нажмите кнопку Физическая структура базы данных зависит от типа СУБД, который мы принимаем для хранения данных и управления ими. Обычно имя базы данных совпадает с каталогом, где хранятся все таблицы, составляющие эту базу. Создадим структуру базы, которая будет основой для наполнения данными. Структуру таблиц можно создадим с помощью инструмента Database Desktop оболочки C++Builder 6 через меню Tools. Если на вашем компьютере его там нет, то присоедините его к оболочке через команду Tools/.
Вызовите через меню В появившемся подменю имеются три команды
Пункты меню File/New | |
|---|---|
| Командаменю | Пояснения |
|
Визуальный построитель запросов и запись этих запросов в файл |
SQL File |
Создание запроса на SQL и запись его в файл |
Table |
Создание новой таблицы |
Выполните команду После нажатия кнопки OK появится диалоговое окно для задания параметров структуры создаваемой таблицы. Для каждого поля таблицы выбранного типа dBASE IV указывается
Field Name - идентификатор поляType - тип данных поляSize - размер хранимых данныхDecimals - число значащих цифр после запятойТип поля можно выбирать из контекстного меню для этого поля, щелкнув правой кнопкой мыши на значении типа, или вводом с клавиатуры начальных символов типа

Создайте структуру таблицы
SCHOOL Field Name Type Size ID_SCHOOLNumericNAMECharacterNUM_CLASSCharacterSUB_CLASSCharacterADDRESSCharacterBIRTHDAYDate
Щелкните по кнопке Опция Display table обеспечивает немедленное автоматическое открытие таблицы после ее сохранения. Вторая опция Add data to new table доступна в случае, если производилось не создание таблицы, а изменение ее структуры.
После щелчка по кнопке Сохранить в созданном ранее каталоге BaseSchool появится файл таблицы SCHOOL.dbf. Проверьте это.
Подобным же образом создайте файлы для остальных таблиц разработанной структуры, заполнив диалоговые окна мастера так, как показано ниже Список телефонов PHONE | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
PHONE |
Character |
20 | Связанный с учеником телефон |
ID_SCHOOL |
Numeric |
4 | Идентификатор ученика |
OWNER |
Character |
20 | Чей телефон |
CONNECT |
Logical |
1 | Участвует ли в процессе обслуживания |

Список предметов TOPIC | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_TOPIC |
Numeric |
4 | Идентификатор предмета |
TOPIC |
Character |
20 | Изучаемый предмет |
NUM_CLASS |
Character |
2 | Номер класса |
SUB_CLASS |
Character |
1 | Индекс класса |
ID_TUTOR |
Numeric |
3 | Идентификатор учителя |
|
Character |
20 | Учитель |
TERM |
Numeric |
1 | Учебная четверть |

Список оценок по предметам VALUATION | |||
|---|---|---|---|
Field Name |
Type |
Size |
Пояснения |
ID_SCHOOL |
Numeric | 4 | Идентификатор ученика |
DATE |
Date | Текущая дата | |
ID_TOPIC |
Numeric |
4 | Идентификатор предмета |
VALUATION |
Numeric |
4 | Оценка |

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

Для быстрого поиска нужных записей в таблице часто применяют индексные файлы. В них содердится информация о значениях одного или нескольких полей, упорядоченная по значениям этих полей. Одновременно содержится и номер записи в основной таблице, где содержится соответствующее значение поля или полей. Такие файлы небольшие и автоматически сортируются для поддержки актуального состояния. Это избавляет от необходимости физически сортировать саму таблицу с данными. Зато можно создавать несколько индексных файлов для одной и той же таблицы, где записи будут упорядочены по нужному полю для быстрой их выборки из основного поля.
Если индекс создается по ключевому полю, то он называется первичным, индексы для других полей называются вторичными.
Создадим несколько индексных файлов для таблицы SCHOOL.dbf.
Через меню Tools запустите утилиту Database Desktop и выполните команду File/Open/Table.
В появившемся диалоговом окне Open Table в раскрывающемся списке установите псевдоним ( Alias ) в значение DBSchool
Выделите файл-таблицу SCHOOL.dbf и щелкните по кнопке Открыть. Откроется таблица SCHOOL, созданная нами ранее.
Выполните команду меню
Проверьте, чтобы в выпадающем списке Индикатор обеспечивает режим автоматического изменения индекса при редактировании связанной таблицы.
После щелчка по кнопке OK появится окно с предложением определить имя индекса

Оставьте значение по умолчанию, равное имени индексируемого поля.
Аналогичным образом создайте индекс для поля BIRTHDAYПосле создания двух индексов окно Database Desktop должно выглядеть так

Щелкните по кнопке Save и сохраните результаты редактирования.
Зайдите в каталог размещения базы и убедитесь, что появился новый файл для хранения созданных индексов
Взаимодействие с базой данных обеспечивается рядом визуальных и невизуальных (неотображаемых во время выполнения программы) компонентов, размещенных во вкладках C++Builder 6. Главным посредником, осуществляющим обмен информацией между компонентами визуализации данных и компонентами, непосредственно связанными с базой данных, является компонент DataSource (источник данных). Он находится во вкладке Data Access

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

Связь этих компонентов друг с другом и локальной базой данных можно представить схемой

Компоненты "Наборы данных" ( ) непосредственно связываются с базой, руководствуясь информацией псевдонима, в котором вместе с местом расположения таблиц указан тип используемого драйвера. К этой группе относятся такие компоненты как Table, Query, StoredProc, BDEClientDataSet. Они находятся во вкладке .
Нам не потребуются компоненты Query или StoredProc до тех пор, пока мы не начнем писать свои собственные SQL -процедуры или обращаться к процедурам, хранимым на сервере. Можно и без SQL открывать таблицы баз данных в любом из локальных или удаленных форматов, поддерживаемых C++Builder, используя только компонент Table.
Компонент "Источник данных" ( data source ) осуществляет обмен информацией между компонентами "Наборы данных" и компонентами визуализации и управления данными. Этот компонент так и называется DataSource (вкладка Data Access ). С данными базы непосредственно работают компоненты набора данных, но они не могут передать данные непосредственно интерфейсным компонентам. Эта передача осуществляется через посредника - DataSource.
К интерфейсным компонентам визуализации и управления данными относятся DataSource.
Помимо указанных компонентов в приложении может размещаться компонент Database. Этот компонент в основном используется в сетевых приложениях, работающих на платформе клиент/сервер. Он обеспечивает некоторые дополнительные возможности, которые мы вольны использовать или неиспользовать, такие как: общение с удаленным сервером, реализацию транзакций и работу с паролями. Но в то же время он не является неотъемлемой частью приложения, работающего с базой данных. C++Builder автоматически создает экземпляр Database для каждой используемой в приложении базы данных, как и экземпляр компонента Session. Оба этих компонента находятся во вкладке .
Нам не потребуется компонент Session до тех пор, пока мы не начнем разрабатывать многопоточные приложения для работы с базами данных. Многопоточные приложения открывают одновременно несколько каналов выполнения. Это означает, что несколько операций могут выполняться в одно и то же время. Обычно приложения, работающие с базами данных, не делают многопоточными, поэтому редко приходится создавать и использовать компонент Session явно.
Основным компонентом, непосредственно работающим с данными, является Table. Он устанавливает соединение между приложением и таблицей с данными, а также используется для добавления, изменения и удаления строк в таблице базы данных. Имеет свойства, часть из которых доступна в режиме проектирования, а часть - программно при выполнении приложения.
Основные свойства компонента Table | |
|---|---|
| Свойство | Описание |
Active |
Открывает и закрывает соединение с таблицей.
Если в режиме проектирования значение свойства установить в true, то можно увидеть "живые данные" таблицы, что во многих случаях является удобным для разработчика приложения. Но в законченном приложении во всех таблицах это свойство нужно установить в false, а в событии OnCreate() формы приложения поместить код с установлением этого свойства в true, что откроет соединение с соответствующей таблицей.
В событии OnDestroy() формы приложения нужно установить значение свойства вновь в false, что обеспечит закрытие соответствующих файлов базы данных и предотвратить неоправданный расход ресурсов в системе, а при работе в сети - устранит преграду доступа к таблице со стороны других пользователей. |
|
Определяет способ вычислений с использованием полей |
|
- показывает, находится ли курсор таблицы перед первой записью, Eof - показывает, находится ли курсор таблицы после последней записи. Эти свойства принимают значение true только тогда, когда курсор выходит за пределы строк таблицы при вызове методов или Next(). При открытии таблицы свойство также устанавливается в true автоматически. |
CachedUpdates |
Определяет, будут ли кэшироваться обновленные данные |
DatabaseName |
Определяет псевдоним , используемый для соединения с базой данных. |
Exclusive |
Определяет, могут ли другие пользователи обращаться к данной таблице |
|
Возвращает количество полей в таблице |
|
Содержит редактируемый список используемых в приложении полей таблицы |
Fields |
Возвращает указанное по индексу поле со всеми характеристиками |
Filter |
Определяет выражение, используемое для фильтрации записей |
Filtered |
Определяет, какой способ фильтрации используется: указанный в Filter или |
|
Управляет работой фильтров |
|
Выдает информацию об индексах базы |
IndexFieldCount |
Возвращает число полей в текущем индексном ключе |
|
Указывает поля, используемые в качестве индексного ключа |
IndexName |
Указывает имя используемого индекса |
IndexFields |
Возвращает указанное по индексу массива поле индексного файла со всеми характеристиками |
KeyExclusive |
Инвертирует действие функций поиска и установки диапазона |
KeyFieldCount |
Указывает количество ключевых полей, используемых для поиска |
MasterFields |
Указывает главные поля в отношении "главный/подчиненный |
MasterSource |
Указывает главный источник в отношении "главный/подчиненный" |
Modified |
Показывает, была ли данная запись изменена с момента последнего обновления базы методами Post или Cancel |
ReadOnly |
Устанавливает режим только чтения данных из источника |
|
Возвращает количество записей в источнике данных |
SessionName |
Указывает, какой компонент используется для соединения с базой данных |
State |
Возвращает состояние источника данных |
TableName |
Указывает |
TableType |
Указывает тип локальной таблицы |
UpdateMode |
Определяет тип SQL, используемый для изменения данных |
UpdateObject |
Определяет компонент UpdateSQL для использования совместно с кэшируемыми изменениями |
Основные методы компонента Table | |
|---|---|
| Метод | Описание |
AddIndex() |
Создает новый индекс |
Append() |
Добавляет пустую строку к источнику данных, и переводит его в режим редактирования |
|
Добавляет строку, используя указанные значения |
ApplyRange() |
Активизирует диапазон, установленный методами Set() или EditRange() |
|
Сохраняет кэшированные изменения в базе данных |
BatchMove() |
Копирует группу строк из одного источника в другой |
Cancel() |
Отменяет ожидаемое изменение текущей строки |
CancelRange() |
Отменяет установки, сделанные методами Set() или EditRange() |
CancelUpdates() |
Отменяет ждущие изменения, занесенные в кэш |
|
Устанавливает для полей текущей строки значения по умолчанию |
Close() |
Закрывает источник данных |
CommitUpdates() |
Уведомляет кэш о сохранении изменений |
CreateTable() |
Создает новую таблицу |
Delete() |
Удаляет в таблице текущую запись |
DeleteIndex() |
Удаляет вторичный индекс |
DeleteTable() |
Удаляет соответствующую физическую таблицу в базе данных |
Edit() |
Переводит источник данных в режим редактирования |
EditKey() |
Позволяет изменять значения ключа поиска |
EditRangeEnd() |
Позволяет изменять верхний ключевой предел диапазона |
EditRangeStart() |
Позволяет изменять нижний ключевой предел диапазона |
EmptyTable() |
Удаляет все строки в источнике данных, оставляя только заголовок |
EnableControls() |
Разрешает использование интерфейсных компонентов визуализации и управления |
FetchAll() |
Считывает все ожидающие своей очереди строки базы данных |
|
Возвращает объект типа TField, используя имя поля в базе данных |
|
Осуществляет поиск первой записи по условию фильтрации |
|
Осуществляет поиск следующей записи, соответствующей заданному критерию. |
FindKey() |
Выполняет точный поиск в источнике данных |
FindNearest() |
Выполняет приближенный поиск с частичным совпадением в источнике данных |
GetFieldNames() |
Возвращает список полей в источнике данных |
GetIndexNames() |
Возвращает список открытых индексов |
GotoKey() |
Выполняет точный поиск в источнике данных по ключу |
GoteNearest() |
Выполняет приближенный поиск в источнике данных по ключу |
Insert() |
Вставляет пустую строку перед текущей и позволяет ее редактировать |
|
Вставляет строку, используя заданные значения столбцов |
Locate() |
Осуществляет поиск записи |
|
Блокирует локальную таблицу для монопольного использования |
Lookup() |
Осуществляет поиск записи в источнике и возвращает значения ее полей |
MoveBy() |
Перемещает логический курсор источника данных на заданное количество записей |
Open() |
Открывает источник данных |
Post() |
Сохраняет ждущие изменения текущей строки, очищая кэш |
RenameTable() |
Переименовывает локальную таблицу |
RevertRecord() |
Отменяет кэшированные изменения текущей строки |
SetKey() |
Переводит источник данных в режим поиска по ключу |
SetRange() |
Переводит источник данных в режим поиска по диапазону |
SetRangeEnd() |
Устанавливает верхний предел диапазона |
SetRangeStart() |
Устанавливает нижний предел диапазона |
|
Разблокирует локальную таблицу от монопольного использования |
Основные события компонента Table | |
|---|---|
| Событие | Условие возникновения |
AfterCancel |
После вызова Cancel |
AfterClose |
После закрытия источника данных |
AfterDelete |
После вызова Delete |
AfterEdit |
После вызова Edit |
AfterInsert |
После вызова Insert |
AfterOpen |
После открытия источника данных |
AfterPost |
После вызова Post |
BeforeCancel |
Перед выполнением Cancel |
BeforeClose |
Перед закрытием источника данных |
BeforeDelete |
Перед выполнением Delete |
BeforeEdit |
Перед выполнением Edit |
BeforeInsert |
Перед выполнением Insert и Append |
BeforeOpen |
Перед открытием источника данных |
BeforePost |
Перед выполнением Post |
|
При необходимости ввода значений в вычисляемые поля |
OnDeleteError |
При ошибке удаления записи |
OnEditError |
При ошибке редактирования записи |
|
В режиме фильтрации, когда источник данных требует строку |
|
При добавлении новой записи в источник данных |
OnPostRecord |
При ошибке сохранения записи |
OnUpdateError |
При ошибке во время сохранения кэшированных изменений |
OnUpdateRecord |
При сохранении каждой строки с помощью |
Создадим приложение, в котором реализуем управление созданными ранее таблицами, входящими в состав базы данных.
Создайте новый проект и сразу сохраните его в своем каталоге выполнения лабораторной работы. Для этого имя файла user1.cpp измените на uAppBDE, а имя проекта Project1.bpr измените на AppBDE. Это имя в дальнейшем будет иметь исполнимый файл проекта приложения
Поместите на новую форму следующие компоненты| Компонент | Вкладка |
|---|---|
MainMenu |
Standard |
Table |
|
DataSource |
Data Access |
|
|
Настройте свойства компонентов, как приведено в таблице Таблица свойств главной формы приложения AppBDE | ||
|---|---|---|
| Элемент управления | Свойство | Значение |
| Главная форма | Name |
MainForm |
Caption |
Приложение управления базой данных | |
Width |
555 | |
Height |
375 | |
| ----------------------------------------------------------------------------------------------------- | ||
MainMenu |
Name |
MainMenu |
TMenuItem |
Name |
File |
Caption |
Файл | |
| ----------------------------------------------------------------------------------------------------- | ||
Table |
Name |
School |
DatabaseName |
DBSchool |
|
TableName |
SCHOOL.DBF |
|
Active |
true |
|
| ----------------------------------------------------------------------------------------------------- | ||
DataSource |
Name |
School DataSource1 |
DataSet |
||
| ----------------------------------------------------------------------------------------------------- | ||
|
Name |
DBGrid1 |
DataSource |
DataSource1 |
|
Align |
alClient |
|
Отредактируйте заголовки полей таблицы. Для этого через контекстное меню компонента
Редактор полей заполнится списком полей таблицы. Выделяя последовательно каждое поле в редакторе полей, измените свойство
SCHOOL FieldDisplayLabelДля получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.