Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Инженерное грунтоведение

Begin

Использование в приложениях модуля данных

Приложение с одной формой

Создание приложения

Изменение структуры таблицы

Просмотр списка подчиненных таблиц

Задание таблицы для выбора значений

Задание языкового драйвера

Задание паролей

Задание ссылочной целостности

Задание ограничений на значения полей

Задание индексов

 

Задание индекса сводится к определению

§ состава полей;

§ параметров;

§ имени.

 

Эти элементы устанавливаются или изменяются при выполнении операций соз­дания, изменения и удаления индекса.

Для выполнения операций, связанных с заданием индексов, необходимо вы­брать пункт Secondary Indexes (Вторичные индексы) комбинированного списка, при этом под списком появляются кнопки Define (Определить) и Modify (Изменить), список индексов и кнопка Erase (Удалить). В списке индексов вы­водятся имена созданных индексов, на рис. 5.2 это индекс indName.

Напомним, что для таблиц Paradox индекс также называют вторичным индексом.

Создание нового индекса начинается с нажатия кнопки Define, являющейся всегда доступной. Это приводит к появлению окна Define Secondary Index (Задание вторичного индекса), в котором задаются состав полей и параметры индекса (рис. 5.5).

В списке Fields окна выводятся имена всех полей таблицы, включая и те, кото­рые нельзя включать в состав индекса, например, графическое поле или поле комментария. В списке Indexed Fields (Индексные поля) содержатся поля, кото­рые включаются в состав создаваемого индекса. Перемещение полей между списками выполняется выделением нужного поля (полей) и нажатием располо­женных между списками кнопок с изображением горизонтальных стрелок. Имена полей, которые нельзя включать в состав индекса, выделяются в левом списке серым цветом. Поле не может быть повторно включено в состав индек­са, если оно уже выбрано и находится в правом списке.

 

Замечание

При работе с записями индексные поля обрабатываются в порядке следования этих полей в составе индекса. Это нужно учитывать при указании порядка по­лей в индексе.

 

Рис. 5.5. Окно задания индекса

 

Изменить порядок следования полей в индексе можно с помощью кнопок с изображением вертикальных стрелок, имеющих общее название Change order (Изменение порядка). Для перемещения поля (полей) необходимо его (их) вы­делить и нажать нужную кнопку.

Переключатели, расположенные в нижней части окна задания индекса, позво­ляют указать следующие параметры индекса:

§ Unique — индекс требует для составляющих его полей уникальных значений;

§ Maintained — если таблица открыта, индекс автоматически не модифициру­ется;

§ Case sensitive — для полей строкового типа учитывается регистр символов;

§ Descending — сортировка выполняется в порядке убывания значений.

 

Так как для таблиц dBase нет ключей, то для них использование параметра Unique является единственной возможностью обеспечить уникальность записей на физическом уровне (уровне организации таблицы), не прибегая к програм­мированию.

После задания состава индексных полей и нажатия кнопки ОК появляется окно Save Index As, в котором указывается имя индекса (рис. 5.6). Для удобства об­ращения к индексу в его имя можно включить имена полей, указав какой-нибудь префикс, например ind. Нежелательно образовывать имя индекса только из имен полей, т. к. для таблиц Paradox подобная система именования исполь­зуется при автоматическом образовании имен для обозначения ссылочной цело­стности между таблицами. После повторного нажатия ОК сформированный ин­декс добавляется к таблице, и его имя появляется в списке индексов.

Рис. 5.6. Задание имени индекса

 

Созданный индекс можно изменить, определив новый состав полей, параметров и имени индекса. Изменение индекса не отличается от процесса его создания. После выделения индекса в списке и нажатия кнопки Modify снова открывается окно задания индекса (рис. 5.5). При нажатии кнопки ОК появляется окно сохранения индекса (рис. 5.6), содержащее имя изменяемого индекса, которое можно исправить или оставить прежним.

Для удаления индекса его нужно выделить в списке индексов и нажать кнопку Erase. В результате индекс удаляется без предупреждающих сообщений.

Кнопки Modify и Erase доступны, только если индекс выбран в списке.

 

Задание ограничений на значения полей заключается в указании для полей:

  • требования обязательного ввода значения;
  • минимального значения;

§ максимального значения;

§ значения по умолчанию;

§ маски ввода.

 

Замечание

Установленные ограничения задаются на физическом уровне (уровне таблицы) и действуют для любых программ, выполняющих операции с таблицей: как для систем типа Database Desktop, так и для приложений, создаваемых в Delphi. Дополнительно к этим ограничениям или вместо них в приложении можно так­же задать программные ограничения.

 

Для выполнения операций, связанных с заданием ограничений на значения по­лей, нужно выбрать пункт Validity Checks (Проверка значений) комбинирован­ного списка Table Properties (рис. 5.2), при этом под списком появляются пе­реключатель Required Field (Обязательное поле), поля редактирования Minimum Value, Maximum Value, Default Value, Picture (Маска ввода) и кнопка Assist (Помощь). Переключатель и поля редактирования отображают установки для поля таблицы, которое выбрано в списке (курсор находится в строке этого поля).

Требование обязательного ввода значения означает, что поле не может быть пустым (иметь значение Null). Это требование действует при добавлении к таб­лице новой записи. До того как изменения в таблице будут подтверждены, поле должно получить какое-либо непустое значение, в противном случае генериру­ется ошибка. Ошибка может также возникнуть при редактировании записи, ко­гда будет удалено старое значение поля и не присвоено новое.

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

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

Для полей некоторых типов, в первую очередь числовых, денежных, строковых и даты, иногда удобно задавать диапазон возможных значений, а также значение по умолчанию. Диапазон определяется минимально и максимально возможны­ми значениями, которые вводятся в полях редактирования Minimum Value и Maximum Value. После их задания выход значения поля за указанные границы не допускается при вводе и редактировании любым способом.

Значение поля по умолчанию указывается в редакторе Default Value. Это значе­ние устанавливается при добавлении новой записи, если при этом для поля не указано какое-либо значение.

Отметим, что задание диапазона и значений по умолчанию возможно не для всех полей, например, они не определяются для графического поля и поля ком­ментария. Для этих полей соответствующее поле редактирования блокируется.

В строке редактирования Picture можно задать маску (шаблон) для ввода значе­ния поля. Ввод по маске поддерживается, например, для таких типов полей, как числовой или строковый. Его удобно использовать для ввода информации опре­деленных форматов, например, телефонных номеров или почтовых индексов.

Для маски используются следующие символы:

§ # — цифра;

§? — любая буква (регистр не учитывается);

§ & — любая буква (преобразуется к верхнему регистру);

§ - — любая буква (преобразуется к нижнему регистру);

§ @ — любой символ;

§! — любой символ (преобразуется к верхнему регистру);

§; — за этим символом следует буквенный символ;

§ число повторов следующего символа;

§ [abc] или {а,b,с} — любой из приведенных символов (а, b, или с), значения
перечисляются через запятую без пробелов.

 

Маску можно ввести в строке Picture вручную или использовать для этого окно Picture Assistance, вызываемое нажатием кнопки Assist (рис. 5.7).

 

Рис. 5.7. Окно формирования маски

 

Указанное окно помогает ввести, выбрать или откорректировать маску, а также проверить ее функционирование.

 

Список Sample pictures содержит образцы масок, которые выбираются нажатием кнопки Use. Выбранная маска помещается в поле редактирования Picture и дос­тупна для изменения. Для модификации списка образцов масок служат кнопки Add to list и Delete from list: первая добавляет к списку маску, содержащуюся в поле Picture, а вторая удаляет из списка выбранную маску.

Проверка синтаксиса маски выполняется по нажатию кнопки Verify Syntax, ре­зультат проверки выводится в информационном поле. Кнопка Restore Original (Вернуть исходную) служит для восстановления начального (т. е. до начала ре­дактирования) значения маски.

Функционирование маски можно проверить, введя в строку редактирования Sample value значение поля таблицы. По нажатию кнопки Test Value выполняет­ся проверка введенного значения, результат проверки выводится в информаци­онной панели.

 

Понятие ссылочной целостности относится к связанным таблицам и проявляет­ся в следующих вариантах взаимодействия таблиц:

§ запрещается изменение поля связи или удаление записи главной таблицы,
если для нее имеются записи в подчиненной таблице;

§ при удалении записи в главной таблице автоматически удаляются соответствующие ей записи в подчиненной таблице (каскадное удаление).

 

Для выполнения операций, связанных с заданием ссылочной целостности, не­обходимо выбрать пункт Referential Integrity комбинированного списка Table Properties (рис. 5.2). При этом, как и в случае задания индексов, появляются кнопки Define, Modify, Erase и список, в котором выводятся имена созданных условий ссылочной целостности.

Условие ссылочной целостности задается для подчиненной таблицы и опреде­ляется следующими элементами:

§ полями связи подчиненной таблицы;

§ именем главной таблицы;

§ полями связи главной таблицы;

§ параметрами.

 

Разработчик может создать, изменить или удалить условие ссылочной целост­ности.

Для задания условия ссылочной целостности нужно нажать кнопку Define, по­сле чего появляется окно Referential Integrity (рис. 5.8).

 

Всписке Fields следует выбрать поле связи и нажатием кнопки со стрелкой вправо перевести его в список Child Fields (Дочерние поля). Если полей связи несколько, то эти действия выполняются для каждого из них. Кнопка со стрел­кой влево удаляет выбранное поле из списка полей связи.

В списке Table указывается главная таблица, имена таблиц выбираются из рабо­чего каталога программы Database Desktop (каталог, определенный как Working Directory, его задание описано в лекции 6). После выбора таблицы и нажатия кнопки со стрелкой влево (рядом со списком таблиц) в список Parent's key ав­томатически заносятся ключевые поля главной таблицы.

Рис. 5.8.Задание условия ссылочной целостности

 

Замечание

Главная таблица должна быть закрыта и не использоваться другими програм­мами, включая Database Desktop. В противном случае при попытке сохранить структуру таблицы возникает ошибка.

Параметры ссылочной целостности выбираются переключателями. Группа Update rules (Правила изменения) определяет вид взаимодействия таблиц при изменениях в главной таблице. Переключатель Cascade устанавливает режим каскадного удаления записей в подчиненной таблице при удалении соответст­вующей записи главной таблицы. Переключатель Prohibit устанавливает режим запрещения изменения поля связи или удаления записи главной таблицы, для которой имеются записи в подчиненной таблице.

Переключатель Strict referential Integrity (Жесткая ссылочная целостность) уста­навливает защиту таблиц от модификации с использованием ранних версий программы Database Desktop (под DOS), которые не поддерживают ссылочную целостность.

После установки нужных флагов и нажатия кнопки ОК появляется окно Save Referential Integrity As, в котором указывается имя условия (рис. 5.5). Напом­ним, что для таблиц Paradox условия ссылочной целостности именуются. Для удобства обращения к условию в его имя можно включить имена полей и таб­лиц, задав при этом некоторый префикс, например, ri. После нажатия ОК сформированное условие ссылочной целостности добавляется к таблице, и его имя появляется в списке условий.

Замечание

Условия ссылочной целостности задаются на физическом уровне и действуют для любых программ, выполняющих операции с таблицей: как для программ типа Database Desktop, так и для приложений, создаваемых в Delphi.

 

Рис. 5.5. Задание имени для условия ссылочной целостности

 

Созданное условие ссылочной целостности можно изменить, определив новый состав полей и новые значения параметров. Изменение условия ссылочной це­лостности не отличается от процесса его создания: после выделения имени условия в списке и нажатия кнопки Modify открывается окно определения ссы­лочной целостности (рис. 5.8). При нажатии кнопки ОК измененное условие ссылочной целостности сохраняется под тем же именем.

Для удаления условия ссылочной целостности нужно выделить его в списке и нажать кнопку Erase. Удаление производится без выдачи предупреждающих со­общений.

Кнопки Modify и Erase доступны только, если выбрано условие в списке.

 

Пароль позволяет задать права доступа пользователей (приложений) к таблице. Если для таблицы установлен пароль, то он будет автоматически запрашиваться при каждой попытке открытия таблицы.

Замечание

Пароль действует на физическом уровне и его действие распространяется на все программы, выполняющие доступ к таблице: как на программы типа Database Desktop, так и на создаваемые приложения Delphi.

Для выполнения операций, связанных с заданием пароля, нужно выбрать строку Password Security в комбинированном списке Table Properties окна определения структуры таблицы (см. рис. 5.2). При этом под списком появляются кнопки Define и Modify. Нажатие кнопки Define вызывает окно Password Security (рис. 5.10), в котором задается пароль.

Рис. 5.10.Задание главного пароля

 

Пароль таблицы вводится два раза — в полях Master password (Главный пароль) и Verify master password (Подтвердить главный пароль). При нажатии кнопки ОК оба значения сверяются, и при их совпадении пароль принимается. Когда пароль определен, кнопка Define блокируется и становится доступной кнопка Modify изменения пароля. Ее нажатие снова вызывает окно задания пароля (рис. 5.10), в котором появляются кнопки Change и Delete, а поля редактиро­вания заблокированы.

Нажатием кнопки Delete пароль удаляется, после чего его можно ввести заново. Если в качестве значения пароля указана пустая строка, то пароль для таблицы не задан. Нажатием кнопки Change поля редактирования разблокируются и зна­чение пароля можно изменить (в обоих полях). При этом название кнопки Change изменяется на Revert (Возврат), и ее повторное нажатие возвращает зна­чение пароля, которое было до начала редактирования.

Рассмотренный пароль считается главным паролем, который предоставляет пользователю полные права доступа к таблице, включая изменение записей и структуры таблицы, в том числе смену пароля. Кроме главного пароля, можно задать для таблицы дополнительные пароли, устанавливающие пользователю ограниченные права доступа к таблице. Для задания дополнительных паролей нажатием кнопки Auxiliary Passwords вызывается одноименное окно (рис. 5.11).

Рис. 5.11. Задание дополнительных паролей

 

В списке Passwords выводятся действующие дополнительные пароли. Группа переключателей Table rights определяет для пароля права доступа к таблице в целом. Они могут быть следующими:

§ All — полные права, включая изменение записей и структуры таблицы;

§ Insert & delete — разрешены вставка и удаление, а также редактирование записей,

запрещено изменение структуры таблицы;

§ Date entry — разрешены редактирование и вставка записей, запрещены из­менение

структуры таблицы и удаление записей;

§ Update — разрешены только просмотр (чтение) записей и редактирование

неключевых полей;

§ Read only — разрешен только просмотр (чтение) записей.

 

Права доступа к таблице действуют на все ее поля, кроме того, для каждого по­ля можно установить отдельные права доступа, не зависящие от прав доступа к другим полям. Права доступа к полям выводятся слева от имени поля в списке Fields rights и содержат следующие позиции:

§ All — чтение и изменение значения поля;

§ Read only — только чтение значения поля;

§ None — доступ к полю запрещен.

 

Смена права доступа к полю выполняется выбором поля в списке и нажатием кнопки Fields rights, при котором право циклически устанавливается очередным значением списка (All, Read only и None).

Создание пароля начинается нажатием кнопки New, после чего его имя указы­вается в поле редактирования Current password (Текущий пароль) и устанавли­ваются права доступа к таблице и ее полям. Нажатие кнопки Add заносит па­роль в список дополнительных паролей.

Нажатие кнопки Change переводит выбранный в списке пароль в режим редак­тирования, при этом появляются кнопки Accept (Подтвердить) и Revert, а также разблокируется кнопка Delete. В процессе редактирования пароль можно изме­нить, удалить или оставить без изменений. После смены имени пароля и права доступа внесенные изменения утверждаются нажатием кнопки Accept. Для вы­хода из режима редактирования и возврата к прежним установкам пароля необ­ходимо нажать кнопку Revert. Удаляется пароль нажатием кнопки Delete.

Отметим, что из приложения паролями можно управлять с помощью методов компонента session. Управление паролями заключается в их добавлении и удалении:

процедура AddPassword (const Password: string) добавляет но­вый пароль, заданный параметром Password;

процедура RemovePassword (const Password: String) удаляет указанный пароль;

процедура RemoveAllPasswords — удаляет все пароли.

 

Для задания языкового драйвера нужно выбрать пункт Table Language (Язык таблицы) комбинированного списка Table Properties окна определения структу­ры таблицы (см. рис. 5.2). При этом под списком становится доступной кнопка Modify, открывающая окно Table Language (рис. 5.12). Под языком таблицы по­нимается языковой драйвер, используемый для этой таблицы. Вполе списка Language отображается текущий драйвер.

Рис. 5.12. Выбор языкового драйвера

 

В списке можно выбрать драйвер нужного языка, для русского языка это драй­вер Pdox ansi Cyrillic, который корректно отображает символы русского алфа­вита и выполняет с ними операции сортировки.

По умолчанию языковой драйвер определяется установками процессора баз данных BDE, поэтому целесообразно установить его (параметр langdriver) в нужное значение, например, с помощью программы Administrator BDE. Пара­метры BDE и вопросы, связанные с их настройкой, рассматриваются в лекции 6.

 

Часто возникает ситуация, когда в поле должны заноситься значения из какого-либо набора, который может формироваться различными способами. Одним из часто используемых является вариант, когда эти значения содержатся в поле другой таблицы, а совокупность значений всех записей этого поля образует на­бор допустимых значений.

Для полей некоторых типов, например, строкового, числового или даты, можно определить некоторую таблицу (таблицу выбора), поля которой будут использо­ваться для формирования набора допустимых значений. Если для поля задана таблица выбора, то в него можно ввести только значение, содержащееся в таб­лице выбора (в указанном поле любой записи). Задание таблицы выбора гаран­тирует, что в поле не будет введено недопустимое значение.

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

Замечание

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

В любом случае допустимым является пустое значение (Null), если, конечно, не задано ограничение, что поле не может быть пустым.

Для выполнения операций, связанных с полями выбора, предназначен пункт Table Lookup (Таблица выбора) комбинированного списка Table Properties окна определения структуры таблицы (см. рис. 5.2). При этом под списком стано­вится доступной кнопка Define, нажатие которой открывает окно Table Lookup (рис. 5.13).

В Списке Fields выводятся имена всех полей таблицы, при этом имена полей, которые не допускают создание таблицы выбора, выделены серым цветом (например, поле автоинкрементного типа).

Рис. 5.13. Окно задания таблицы выбора

 

Имя поля, для которого задается таблица выбора, отображается в области Field name, для его указания следует выделить в списке Fields нужную строку и на­жать кнопку с изображением стрелки вправо. Если указать другое поле и нажать кнопку, то имя этого поля перейдет в область Field name и заменит имя преды­дущего поля.

В списке Lookup table задается таблица выбора, имя которой (имя главного файла) появляется в поле редактирования над списком. В списке Drive (or Alias) задается диск или псевдоним, которые определяют расположение таблица выбо­ра. Название каталога, таблицы которого содержатся в списке Lookup table, ото­бражается справа от названия списка Drive (or Alias). Таблицу также можно за­дать в окне Select File, вызываемом нажатием кнопки Browse (Просмотр).

После задания таблицы выбора нажатие кнопки с изображением стрелки влево переводит имя первого ее поля, значения которого будут использованы для фор­мирования набора допустимых значений, в область Lookup field (Поле выбора). Типы полей обеих таблиц должны совпадать, в противном случае в информаци­онной панели выдается сообщение об ошибке.

С помощью группы переключателей Lookup type (Тип выбора) можно задать способ взаимодействия обеих таблиц. Если включен переключатель Just current field (Только текущее поле), то таблица выбора задается только для поля, ука­занного в области Field name. Переключатель All corresponding fields назначает таблицу выбора не только указанному полю, но и всем соответствующим полям. Имена и типы этих полей должны совпадать с соответствующими полями таб­лицы выбора.

Группа переключателей Lookup access (Доступ к таблице выбора) определяет, каким образом пользователем используются значения из таблицы выбора.

Если включен переключатель Fill no help (Вставка без помощи), то при редакти­ровании поля, для которого определена таблица выбора, пользователь должен знать допустимые значения этого поля. При этом термин "выбор" не совсем точно отражает взаимосвязь полей таблиц, т. к. пользователю не предлагается список возможных значений, из которых он может выбрать нужное ему. Поль­зователь сам вводит значение в поле, при этом на уровне таблицы выполняется проверка, является ли это значение допустимым. Если значение отсутствует в указанном поле таблицы выбора, то оно не принимается.

В этом случае может помочь отображение рядом с редактируемой таблицей таб­лицы выбора, например, как показано на рис. 5.14.

Рис. 5.14. Функционирование поля, для которого задана таблица выбора

 

В приведенном на этом рисунке примере в окне программы Database Desktop таблица Personnel содержит данные о сотрудниках организации, в ней опреде­лены поля кода (P_Сode), фамилии (P_Name), должности (P_Position), оклады (P_Salary) и примечания (P_Note). В строковое поле должности можно вводить только допустимое название должности. Перечень всех должностей содержится в единственном поле Position таблицы Position. Для предотвращения ввода в таблицу Personnel неправильных значений ее полю P_Position назначена табли­ца выбора Position и ее поле Position. В таблице Personnel для первых трех сотрудников введены должности, имеющиеся в таблице Position. Попытка за­дать для четвертого сотрудника должность Бухгалтер блокируется, т. к. эта должность не является разрешенной для ввода. При необходимости эту долж­ность сначала нужно ввести в таблицу Position, после чего она станет доступ­ной также и для таблицы Personnel.

Установка переключателя Help and fill (Помощь и вставка) позволяет не только ввести значение в поле, как описано выше, но и действительно выбрать значе­ние из списка. Список, сформированный на основании значений поля (полей) таблицы выбора (рис. 5.15), появляется при нажатии комбинации клавиш <Ctгl>+<Пробел> в редактируемом поле. После выбора нужного значения и нажатия кнопки ОК оно заносится в поле.

Рис. 5.15. Список выбора

 

Замечание

Из таблицы выбора могут быть удалены значения. Если эти значения содер­жатся в полях таблицы, использующей таблицу выбора, то при переходе в ре­жим ее редактирования возникает ошибка. При использовании программы типа Database Desktop таблицу нельзя вывести из режима редактирования, пока все ее значения не приведены в соответствие с новыми значениями таблицы вы­бора. При доступе к таблице, использующей значения, которые удалены из таблицы выбора, во время выполнения приложения генерируется исключи­тельная ситуация.

 

После задания для поля таблицы выбора в окне определения структуры таблицы (см. рис. 5.2) появляются кнопки Modify и Erase, а также список, в котором отображается имя этой таблицы.

Нажатие кнопки Modify вновь открывает окно задания таблицы выбора, в кото­ром можно ввести новые данные. Кнопка Erase служит для отмены использова­ния таблицы выбора и связанных с ней ограничений на значения поля.

Отметим, что объекты поля типа TFieid наборов данных Tablе и Query, а также компонент DBGrid позволяют определить для поля список выбора, который так­же дает возможность пользователю выбирать значения при редактировании. Они задаются на программном уровне, и их действие распространяется только на свое приложение. Определение и использование подобных списков выбора рассмотрено в главах 17 и 18.

 

Таблица, связанная с другими таблицами, является либо главной, либо подчи­ненной. Выше мы рассмотрели задание ссылочной целостности для подчинен­ной таблицы. Для главной таблицы можно просмотреть список подчиненных таблиц, отображаемый при выборе пункта Dependent Table (Подчиненная табли­ца) все того же комбинированного списка Table Properties (см. рис. 5.2). Этот список содержит имена всех таблиц, имеющих условия ссылочной целостности с участием данной таблицы.

 

 

Структуру существующей таблицы можно изменить, выполнив команду Table/Restructure... после предварительного выбора таблицы в окне программы Database Desktop. В результате открывается окно определения структуры табли­цы, и дальнейшие действия не отличаются от действий, выполняемых при соз­дании таблицы.

 

 

Замечание

При изменении структуры таблицы с ней не должны работать другие приложе­ния, в том числе Delphi. Поэтому предварительно необходимо закрыть Delphi или приложение, в котором компоненты Table связаны с перестраиваемой таб­лицей. Другим вариантом является отключение активности компонентов Table, связанных с перестраиваемой таблицей, для чего свойству Active этих компо­нентов через Инспектор объектов устанавливается значение False.

Переименование таблицы следует выполнять из среды программы Database Desktop, а не из среды Windows, например, с помощью Проводника. Для этого при работе со структурой таблицы можно нажать кнопку Save as... и задать но­вое имя таблицы. В результате в указанном каталоге диска появятся все необ­ходимые файлы таблицы. При этом старая таблица также сохраняется. Ин­формация о названии таблицы используется внутри ее файлов, поэтому про­стое переименование всех файлов таблицы приведет к ошибке при попытке доступа к ней.

 

Если необходимо просто ознакомиться со структурой таблицы, то выполняется команда Table/Into Structure.... В результате появляется окно определения структуры таблицы, но элементы, с помощью которых в структуру таблицы мо­гут быть внесены изменения, заблокированы. Просмотр структуры возможен также для таблицы, с которой связаны другие приложения.


 

Дл я примера рассмотрим создание приложения, позволяющего перемещаться по записям таблицы БД, просматривать и редактировать поля, удалять записи из таблицы, а также вставлять новые. Файл проекта приложения обычно не требует от разработчика выполнения каких-либо действий. Поэтому при создании при­ложения главной задачей является конструирование форм, в простейшем случае — одной формы.

 

Вид формы приложения на этапе проектирования показан на рис. 5.16, где на форме размещены компоненты Tablel, DataSourcel, DBGridl и DBNavigatorl.

Компонент Tablel обеспечивает взаимодействие с таблицей БД. Для связи с требуемой таблицей нужно установить соответствующее значение свойствам DataBaseName, указывающему путь к БД, и TableName, указывающему имя табли­цы. После задания таблицы для открытия набора данных свойству Active долж­но быть установлено значение True.

Рис. 5.16. Форма приложения для работы с БД

 

Замечание

Значение True свойству Active нужно устанавливать после задания таблицы БД, т. е. после установки нужных значений свойств DataBaseName и TableName.

Имя таблицы лучше выбирать из раскрывающегося списка в поле значения свойства TableName. Если путь к БД (свойство DataBaseName) задан правильно, то в этом списке отображаются главные файлы всех доступных таблиц.

В рассматриваемом приложении использована таблица клиентов, входящая в состав поставляемых с Delphi примеров, ее главный файл — clients.dbf. Файлы этой и других таблиц примеров находятся в каталоге, путь к которому указывает псевдоним dbdemos.

Компонент DataSource1 является промежуточным звеном между компонентом Table1, соединенным с реальной таблицей БД, и визуальными компонентами DBGrid1 и DBNavigatorl, с помощью которых пользователь взаимодействует с этой таблицей. На компонент Table1, с которым связан компонент DataSourcel, указывает свойство DataSet последнего.

Компонент DBGridl отображает содержимое таблицы БД в виде сетки, в кото­рой столбцы соответствуют полям, а строки — записям таблицы. По умолча­нию пользователь может просматривать и редактировать данные. Компонент DBNavigatorl позволяет пользователю осуществлять перемещение по таблице, редактировать, вставлять и удалять записи. Компоненты DBGridl и DBNavigatorl связываются со своим источником данных — компонентом DataSourcel — через свойства DataSource.

Взаимосвязь компонентов приложения и таблицы БД и используемые при этом свойства компонентов показаны на рис. 5.17.

При разработке приложения значения всех свойств компонентов можно задать с помощью Инспектора объектов. При этом требуемые значения либо непосред­ственно вводятся в поле, либо выбираются из раскрывающихся списков. В по­следнем случае приложение создается с помощью мыши и не требует набора каких-либо символов с клавиатуры. В табл. 5.1 приведены компоненты, ис­пользуемые для работы с таблицей БД, основные свойства и их значения.

Рис. 5.17.Взаимосвязь компонентов приложения и таблицы БД

 

Таблица 5.1

Значения свойств компонентов

Компонент Свойства Значения
Tablel DataBaseName TableName Active dbdemos clients.dbf true
DataSourcel DataSet Tablel
DBGridl DataSource DataSourcel
DBNavigatorl DataSource DataSourcel

Рис. 5.18. Окно Database Form Wizard

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

Для автоматизации процесса создания формы, использующей компоненты для операций с БД, можно вызвать Database Form Wizard (Мастер форм баз дан­ных), показанный на рис. 5.18. Этот Мастер расположен на странице Business Хранилища объектов.

Мастер позволяет создавать формы для работы с отдельной таблицей и со свя­занными таблицами, при этом можно использовать наборы данных Table или Query.

 

При конструировании формы невизуальные компоненты, используемые для доступа к данным, такие как Datasource или Table, размещаются на форме, но при выполнении приложения эти компоненты не видны. Поэтому их можно размещать в любом удобном месте формы, выступающей для них контейне­ром — модулем. Кроме того, для размещения невизуальных компонентов, через которые осуществляется доступ к данным, предназначен специальный объект — модуль данных.

Существует три типа модуля данных:

§ простой модуль данных;

§ удаленный модуль данных;

§ Web-модуль.

Ниже рассматривается простой модуль данных, который представлен объектом DataModule. Использование удаленного модуля данных и Web-модуля изучается при рассмотрении трехуровневых приложений и публикации БД в Интернете.

Если применяется простой модуль данных, то взаимосвязь компонентов прило­жения и таблицы БД имеет вид, показанный на рис. 5.15.

Рис. 5.15. Взаимосвязь компонентов приложения и таблицы БД

при использовании модуля данных

 

Модуль данных, как и форма, является контейнером для своих невизуальных компонентов, и для него создается модуль кода с расширением PAS. Добавле­ние модуля данных к проекту выполняется командой File/New/DataModule главного меню Delphi. В окне модуля компоненты размещаются таким же обра­зом, как и на форме (рис. 5.20). При выборе объекта в Инспекторе объек­тов отображаются его свойства, значения которых можно просматривать и из­менять.

Рис. 5.20. Модуль данных

 

При обращении к содержащимся в модуле данных компонентам для них указы­вается составное имя, в которое, кроме имени компонента, входит также имя модуля данных. Составное имя имеет формат

<Имя модуля данных>.<Имя компонента>

Ниже приводится пример кода, в котором осуществляется обращение к компо­нентам модуля данных.

 

procedure TForml.FormCreate(Sender: TObject);

DataModule2.Tablel.DatabaseName: ='dbdemos';

DataModule2.Tablel.TableName: ='clients.dbf';

DataModule2.DataSourcel.DataSet:=DataModule2.Tablel;

DBGridl.DataSource:=DataModule2.DataSourcel;

DBNavigatorl.DataSource:=DataModule2.DataSourcel;

DataModule2.Tablel.Active:=true;

end;

 

Для компонентов выполняется установка значений свойств, связывающих меж­ду собой эти компоненты и таблицу БД. Значения свойств устанавливаются ди­намически в процессе выполнения приложения, для чего использован обработ­чик события создания главной формы приложения. В составных именах компо­нентов доступа к данным, которыми являются источник данных DataSourcel и набор данных Tablel, указывается имя модуля данных DataModule2.

Чтобы обеспечить возможность доступа к компонентам модуля данных в модуле формы, в список uses раздела implementation необходимо включить ссылку на модуль данных:

uses unit2;

Ссылкуна другой модуль можно написать самостоятельно, но Delphi дает воз­можность вставить ее автоматически. При выборе команды File/Use Unit... появляется диалоговое окно Use Unit (рис. 5.21). После выбора нужного модуля и нажатия кнопки ОК он добавляется в список.

Рис. 5.21. Окно выбора модуля

 

Если ссылка на требуемый модуль отсутствует, но в коде используется имя мо­дуля данных, то при компиляции приложения появляется диалоговое окно Information (рис. 5.22). В нем сообщается о том, что форма ссылается на дру­гую форму, объявленную в модуле, отсутствующем в списке uses формы. Для автоматического добавления модуля в список достаточно нажать кнопку Yes.

Рис. 5.22. Диалог добавления модуля в список uses

 

Помимо компонентов доступа к данным, которыми являются session, Database, Table, Query, storedProc, BatchMove и др., в модуле данных можно размещать также невизуальные компоненты, не имеющие прямого отношения к БД, на­пример, ImageList, OpenDialog или Timer.

 

Замечание

При работе с модулем данных в Палитре компонентов доступны только неви-зуальные компоненты.

 

Модуль данных позволяет:

§ отделить управление БД от обработки данных;

§ создать модуль, совместно используемый несколькими приложениями.

Основным назначением модуля данных является централизованное хранение компонентов доступа к данным, а также кода для этих компонентов, в част­ности, обработчиков событий. В модуле данных удобно размещать код, выпол­няющий управление БД, например, реализацию бизнес-правил.

Использование простого модуля данных несколькими приложениями позволяет ускорить разработку приложений, т. к. готовый модуль данных впоследствии можно включать в новые приложения. Кроме того, управление БД через общий модуль дает возможность определить для всех пользователей одинаковые режи­мы и правила работы с базой, а также делает более простым изменение этих режимов и правил.

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

Удаленный модуль данных предназначен для работы с удаленными БД в трех­уровневой архитектуре "клиент-сервер" и используется для создания сервера приложения — промежуточного уровня между приложением и сервером БД. Удаленный модуль данных будет рассмотрен в теме 3.

Web-модуль предназначен для работы с БД в сети Интернет и является посред­ником между браузером (программой просмотра Web-документов) и сервером БД. Использование Web-модуля будет рассмотрено в теме 4.

<== предыдущая лекция | следующая лекция ==>
Описание полей | Грунтов различного генезиса
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 605; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.025 сек.