Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. - Базы данных. Учебник для высших учебных заведений (6-е изд.) - 2009
.pdf/ I. Borland С++ Builder |
4 1 3 |
• |
M e s s a g e |
типа S t r i n g (текст сообщения, характеризующего возникшую |
|
|
ошибку); |
|
|
• |
E r r o r C o d e типа D B I R e s u l t (код ошибки), тип D B I R e s u l t соответствует |
||
|
типу W o r d ; |
|
|
• |
C a t e g o r y |
типа B y t e |
(категория исключения); |
• |
S u b C o d e |
типа B y t e |
(группа, или подкод, исключения); |
• |
N a t i v e E r r o r типа L o n g i n t (код ошибки, возвращаемой сервером) — если |
||
|
значение этого свойства равно нулю, то исключение произошло не на |
||
|
сервере. |
|
|
Класс E D B C I i e n t отличается от класса E D B E n g i n e E r r o r в основном тем, что предназначен для обработки ошибок, возникающих при работе с различными механизмами доступа к данным (не только с процессором баз данных BDE) в операциях с сетевыми базами архитектуры «клиент-сервер».
Генерируемые при работе с БД исключения обрабатывают глобальные и локальные обработчики. Кроме того, используемые для доступа к данным компоненты имеют специальные события для обработки исключений.
Например, для набора данных T a b l e такими событиями являются:
• |
O n E d i t E r r o r |
(ошибка редактирования или вставки записи); |
• |
O n P o s t E r r o r |
и O n U p d a t e E r r o r (ошибка закрепления изменений в записи); |
• |
OnDeleteError (ошибка удаления записи). |
|
Класс E D B E d i t E r r o r используется в случаях, когда вводимые в поле данные несовместимы с маской ввода, заданной с помощью свойства EditMask этого поля. Отметим, что для проверки вводимых в поле значений можно также использовать события O n S e t T e x t , O n V a l i d a t e и
11.7. Создание таблиц базы данных
Работа по созданию информационной системы включает два основных этапа: создание БД и создание приложения. Продемонстрируем возможности С++ Builder по работе с БД на примере создания простой информационной системы. Эту информационную систему можно разработать даже без написания кода: все необходимые операции выполняются с помощью программы Database Desktop, Конструктора формы и Инспектора объектов.
В простейшем случае БД состоит из одной таблицы. Если таблицы уже имеются, то первый этап не выполняется. Отметим, что совместно с С++ Builder поставляется большое количество примеров приложений, в том числе и приложений БД. Файлы таблиц для этих приложений находятся в каталоге c:\Program Files\Common Files\Borland Shared\Data. Готовые таблицы также можно использовать для своих приложений.
Для работы с таблицами БД при проектировании приложения удобно использовать программу Database Desktop, которая позволяет:
/ I. Borland С++ Builder |
4 1 5 |
•описание нолей;
•задание ключа;
•задание индексов;
•определение ограничений на значения полей;
•определение условий (ограничений) ссылочной целостности;
•задание паролей;
•задание языкового драйвера;
•задание таблицы для выбора значений.
В этом списке обязательным является только первое действие, т. е. каждая таблица должна иметь хотя бы одно поле. Остальные действия выполняются при необходимости. Часть действий, такие как задание ключа и паролей, производится только для таблиц определенных форматов, например, для таблиц Paradox.
После определения структуры таблицы ее необходимо сохранить, нажав кнопку S a v e A s и указав расположение таблицы на диске и ее имя. В результате па диск записывается новая таблица, первоначально пустая, при этом все необходимые файлы создаются автоматически.
Описание полей
Центральной частью окна определения структуры таблицы является список Field r o s t e r ( С п и с о к п о л е й ) , в котором указываются поля таблицы. Для каждого поля задаются:
• имя поля — в столбце Field N a m e ;
•тип поля — в столбце Туре;
•размер поля — в столбце Size .
Имя поля вводится по правилам, установленным для выбранного формата таблиц.
Тип поля можно задать, непосредственно указав соответствующий символ, например, А для символьного или I для целочисленного поля, или выбрать его в списке, раскрываемом нажатием клавиши <пробел> или щелчком правой кнопки мыши в столбце Туре. Список содержит все типы полей, допустимые для заданного формата таблицы. В списке подчеркнуты символы, используемые для обозначения соответствующего типа, при выборе типа эти символы автоматически заносятся в столбец Туре.
Размер ноля задается не всегда, необходимость его указания зависит от типа поля. Для полей определенного типа, например, автоинкрементного (+) или целочисленного (I), размер поля не задается. Для поля строкового типа размер определяет максимальное число символов, которые могут храниться в поле.
Добавление к списку полей новой строки выполняется переводом курсора вниз на несуществующую строку, в результате чего эта строка появляется в конце списка. Вставка новой строки между существующими строками с уже
4 1 6 Часть 3. Современные СУБД и их применение
описанными полями выполняется нажатием клавиши <Insert>. Новая строка вставляется перед строкой, в которой расположен курсор. Для удаления строки необходимо установить курсор на эту строку и нажать комбинацию клавиш <Ctrl>+<Delete>.
Ключ создается указанием его полей. Для указания ключевых полей в столбце ключа (Key) нужно установить символ *, переведя в эту позицию курсор и нажав любую алфавитно-цифровую клавишу. При повторном нажатии клавиши отметка принадлежности поля ключу снимается. В структуре таблицы ключевые поля должны быть первыми, т. е. верхними в списке полей. Часто для ключа используют автоинкрементное поле (см. рис. 11.19).
Напомним, что для таблиц Paradox ключ также называют первичным индексом (Primary Index), а для таблиц dBase ключ не создается, и его роль выполняет один из индексов.
Для выполнения остальных действий по определению структуры таблицы используется комбинированный список T a b l e p r o p e r t i e s ( С в о й с т в а т а б - л и ц ы ) , содержащий следующие пункты:
• |
V a l i d i t y C h e c k s (проверка правильности ввода значений полей) — вы- |
||
|
бирается по умолчанию; |
||
• |
Table Lookup (таблица выбора); |
||
• |
S e c o n d a r y |
I n d e x e s |
(вторичные индексы); |
• |
R e f e r e n t i a l |
I n t e g r i t y |
(ссылочная целостность); |
• |
Password Security |
( п а р о л и ) ; |
|
• |
T a b l e L a n g u a g e (язык таблицы, языковой драйвер); |
||
• |
D e p e n d e n t |
T a b l e s (подчиненные таблицы). |
|
После выбора какого-либо пункта этого списка в правой части окна определения структуры таблицы появляются соответствующие элементы, с помощью которых выполняются дальнейшие действия.
Состав данного списка зависит от формата таблицы. Так, для таблицы dBase он содержит только пункты и T a b l e L a n g u a g e .
Задание индексов
Задание индекса сводится к определению:
•состава полей;
•параметров;
•имени.
Эти элементы устанавливаются или изменяются при выполнении операций создания, изменения и удаления индекса. Напомним, что для таблиц Paradox индекс называют также вторичным индексом.
Для выполнения операций, связанных с заданием индексов, необходимо выбрать пункт S e c o n d a r y I n d e x e s ( В т о р и ч н ы е и н д е к с ы ) списка T a b l e
p r o p e r t i e s ( С в о й с т в а |
т а б л и ц ы ) , при этом под списком появляются кнопки |
D e f i n e ( О п р е д е л и т ь ) |
и M o d i f y ( И з м е н и т ь ) , список индексов и кнопка E r a s e |
4 1 8 Часть 3. Современные СУБД и их применение
Изменить порядок следования полей в индексе можно с помощью кнопок с изображением вертикальных стрелок, имеющих общее название C h a n g e o r d e r ( И з м е н и т ь п о р я д о к ) . Д л я п е р е м е щ е н и я п о л я ( п о л е й ) необходимо его (их) выделить и нажать нужную кнопку.
Флажки, расположенные в нижней части окна задания индекса, позволяют указать следующие параметры индекса:
• |
U n i q u e — индекс требует для составляющих его полей уникальных зна- |
|
|
чений; |
— задается автоматическое обслуживание индекса; |
• |
M a i n t a i n e d |
|
• |
C a s e s e n s i t i v e — для полей строкового типа учитывается регистр сим- |
|
|
волов; |
|
• |
D e s c e n d i n g |
— сортировка выполняется в порядке убывания значений. |
Так как у таблиц dBase нет ключей, для них использование параметра Unique является единственной возможностью обеспечить уникальность записей на физическом уровне (уровне организации таблицы), не прибегая к программированию.
После задания состава индексных полей и нажатия кнопки ОК появляе тся окно S a v e I n d e x As, в котором нужно указать имя индекса. Для удобства обращения к индексу в его имя можно включить имена полей, указав какой-нибудь префикс, например ind. Нежелательно образовывать имя индекса только из имен полей, т. к. для таблиц Paradox подобная система именования используется при автоматическом образовании имен для обозначения ссылочной целостности между таблицами. После повторного нажатия кнопки ОК сформированный индекс добавляется к таблице, и его имя появляется в списке индексов.
Созданный индекс можно изменить, определив новый состав полей, параметров и имени индекса. Изменение индекса практически не отличается от его создания. После выделения индекса в списке и нажатия кнопки M o d i f y снова открывается окно задания индекса (см. рис. 11.20). При нажатии кнопки ОК появляется окно сохранения индекса, содержащее имя изменяемого индекса, которое можно исправить или оставить прежним.
Для удаления индекса его нужно выделить в списке индексов и нажать кнопку Erase . В результате индекс удаляется без предупреждающих сообщений.
Кнопки M o d i f y и E r a s e доступны, только если индекс выбран в списке.
Задание ограничений на значения полей
Задание ограничений на значения полей заключается в указании для полей:
•требования обязательного ввода значения;
•минимального значения;
•максимального значения;
•значения по умолчанию;
•маски ввода.
/ I. Borland С++ Builder |
4 1 9 |
Установленные ограничения задаются на физическом уровне (уровне таблицы) и действуют для любых программ, выполняющих операции с таблицей: как для программ типа Database Desktop, так и для приложений, создаваемых в С++ Builder. Дополнительно к этим ограничениям или вместо них в приложении можно задать программные ограничения.
Для выполнения операций, связанных с заданием ограничений на значения полей, нужно выбрать пункт V a l i d i t y C h e c k s ( П р о в е р к а з н а ч е н и й ) ком-
бинированного списка T a b l e |
p r o p e r t i e s |
(см. рис. 11.19). |
Задание |
ссылочной |
целостности |
Понятие ссылочной целостности относится к связанным таблицам и проявляется в следующих вариантах взаимодействия таблиц:
•запрещается изменять поле связи или удалять запись главной таблицы, если для нее имеются записи в подчиненной таблице;
•при удалении записи в главной таблице автоматически удаляются соответствующие ей записи в подчиненной таблице (каскадное удаление).
Для выполнения операций, связанных с заданием ссылочной целостности, необходимо выбрать пункт R e f e r e n t i a l I n t e g r i t y комбинированного списка T a b l e p r o p e r t i e s (см. рис. 11.19).
Задание паролей
Пароль позволяет задать права доступа пользователей (приложений) к таблице. Если для таблицы установлен пароль, то он будет автоматически запрашиваться при каждой попытке открытия таблицы.
Пароль действует на физическом уровне и его действие распространяется на все программы, выполняющие доступ к таблице: как на программы типа Database Desktop, так и на создаваемые приложения С++ Builder.
Для выполнения операций, связанных с заданием пароля, нужно выбрать строку P a s s w o r d S e c u r i t y в комбинированном списке T a b l e p r o p e r t i e s окна определения структуры таблицы (см. рис. 11.19).
Задание языкового драйвера
Для задания языкового драйвера нужно выбрать пункт T a b l e L a n g u a g e (Язык таблицы) комбинированного списка T a b l e p r o p e r t i e s окна определения структуры таблицы (см. рис. 11.19).
Изменение структуры таблицы
Структуру существующей таблицы можно изменить, выполнив команду T a b l e \ R e s t r u c t u r e после предварительного выбора таблицы в окне программы Database Desktop. В результате открывается окно определения структуры таблицы, и дальнейшие действия не отличаются от действий, выполняемых при создании таблицы.
4 2 0 |
Часть 3. Современные СУБД и их применение |
При изменении структуры таблицы с ней не должны работать другие приложения, в том числе С++ Builder. Поэтому предварительно необходимо закрыть С++ Builder или приложение, в котором компоненты T a b l e связаны с перестраиваемой таблицей. Другим вариантом является отключение активности компонентов T a b l e , связанных с перестраиваемой таблицей, для чего свойству A c t i v e этих компонентов через Инспектор объектов устанавливает-
ся значение false.
Переименование таблицы следует выполнять из среды программы Database Desktop, а не из среды Windows, например, с помощью Проводника. Для этого при работе со структурой таблицы можно нажать кнопку S a v e a s и задать новое имя таблицы. В результате в указанном каталоге диска появятся все необходимые файлы таблицы. При этом старая таблица также сохраняется. Информация о названии таблицы используется внутри ее файлов, поэтому простое переименование всех файлов таблицы приведет к ошибке при попытке доступа к ней.
Если необходимо просто ознакомиться со структурой таблицы, то выполняется команда T a b l e \ l n f o S t r u c t u r e . В результате появляется окно определения структуры таблицы, но элементы, с помощью которых в структуру таблицы могут быть внесены изменения, заблокированы. Просмотр структуры возможен также для таблицы, с которой связаны другие приложения.
11.8. Создание приложения BDE
Для примера рассмотрим создание приложения, использующего механизм доступа BDE и позволяющего перемещаться по записям таблицы БД, просматривать и редактировать поля, удалять записи из таблицы, а также вставлять новые. Файл проекта приложения обычно не требует от разработчика выполнения каких-либо действий. Поэтому при создании приложения главной задачей является конструирование форм, в простейшем случае — одной формы.
Вид формы приложения на этапе проектирования показан на рис. 11.21, где в форме размещены компоненты T a b l e l , D a t a S o u r c e l , D B G r i d l и
D B N a v i g a t o r l .
Компонент T a b l e 1 обеспечивает взаимодействие с таблицей БД. Для связи с требуемой таблицей нужно установить в соответствующие значения свойство D a t a B a s e N a m e , указывающее путь к БД, и свойство T a b l e N a m e , указывающее имя таблицы. После задания таблицы для открытия набора данных свойству A c t i v e должно быть установлено значение t r u e .
Свойству A c t i v e нужно устанавливать значение true после задания таблицы БД, т. е. после установки нужных значений свойств и
T a b l e N a m e .
/ I. Borland С++ |
Builder |
|
|
|
|
|
|
421 |
I (\П, Form2 |
|
|
|
|
|
|
|
|
NAME |
|
SIZE |
|
WEIGHT |
шщ |
|
Is** |
|
[Angel Fish |
| |
2 |
1 |
2' |
== |
• |
||
|
• Ш |
|||||||
r " |
i ' 1 |
" I |
м |
A |
j |
j 4Ч | с j |
|
|
|
|
|
|
|
||||
Рис. 11.21. Форма приложения для работы с БД
Имя таблицы лучше выбирать в раскрывающемся списке в поле значения свойства T a b l e N a m e . Если путь к БД (свойство D a t a B a s e N a m e ) задан правильно, то в этом списке отображаются главные файлы всех доступных таблиц.
В рассматриваемом приложении использована таблица животных, входящая в состав поставляемых с С++ Builder примеров, ее главный файл — Animals.dbf. Файлы этой и других таблиц примеров находятся в каталоге, путь к которому указывает псевдоним dbdemos. Настройка псевдонима может быть выполнена с помощью программы BDE Administrator.
Компонент D a t a S o u r c e l является промежуточным звеном между компонентом T a b l e 1, соединенным с реальной таблицей БД, и визуальными ком-
понентами D B G r i d l |
и D B N a v i g a t o r l , с помощью которых пользователь взаи- |
модействует с этой |
таблицей. На компонент T a b l e 1, с которым связан |
компонент D a t a S o u r c e l , указывает свойство D a t a S e t последнего. |
|
Компонент D B G r i d l отображает содержимое таблицы БД в виде сетки, в которой столбцы соответствуют полям, а строки — записям таблицы. По умолчанию пользователь может просматривать и редактировать данные. Компонент D B N a v i g a t o r l позволяет пользователю перемещаться по таблице, редактировать, вставлять и удалять записи. Компоненты D B G r i d l и D B N a v i g a t o r l связываются со своим источником данных — компонентом D a t a S o u r c e l — через свойства D a t a S o u r c e .
Взаимосвязь компонентов приложения и таблицы БД и используемые при этом свойства компонентов показаны на рис. 11.22.
Форма приложения
Рис. 11.22. Взаимосвязь компонентов приложения и таблицы БД
