Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_Rab_BD / LAB2 / METOD2_2.doc
Скачиваний:
18
Добавлен:
20.04.2015
Размер:
477.7 Кб
Скачать

Кнопки в компоненте tdbNavigator.

Класс TDBNavigator является потомком класса TCustomPanel. Отмети одно из основных свойств класса TDBNavigator, которые он добавляет к наследуемым от класса TCusomPanel:

DataSource - свойство типа TDataSource, определяет набор данных, для которого будут выполняться команды при нажатии кнопок в компоненте DBNavigator.

Метка, отображающая значение поля записи БД (DBText):

Метка DBText класса TDBText является аналогом компоненты Label. Метки используются для размещения на экране текстовой информации, предназначенной для различных пояснений. Метки в Delphi принадлежат классу TLabel, который, в свою очередь, является потомком класса TCustomLabel. Именно в классе TCustomLabel и сосредоточены все особенности меток. Это класс является непосредственным потомком класса TGraphicControl и поэтому реагирует только на события от мыши.

Метка же DBText предназначена для отображения значения из БД, без возможности непосредственно внести в него изменения, подобно надписи в обычной метке. Это полезно, если требуется только просматривать информацию и использовать значения из БД в форме пояснительной надписи.

Строка ввода, отображающая значение поля записи БД (DBEdit):

Строка ввода DBEdit класса TDBEdit, отображающая значение поля записи БД, является аналогом для компоненты TMaskEdit. Строка ввода с маской класса TMaskEdit позволяет вводить информацию в соответствии с заданной маской, которая определяет, какие символы могут быть в том или ином месте текста. Такой ввод удобен, когда необходимо ввести данные в соответствии с общепринятым шаблоном. Компонента DBEdit предназначена для отображения и редактирования значения в конкретном поле записи БД. Она является основной компонентой для работы с наборами данных из БД, т.к. позволяет гибко настроить условия доступа и ввода информации в поле, а также эффективно разместить отображаемую информацию на форме.

Класс TDBEdit является потомком класса TCustomMaskEdit и добавляет следующие основные свойства к наследуемым:

DataField - свойство типа string определяет имя поля, значение из которого будет отображаться в компоненте DBEdit. В инспекторе объектов оно выбирается из списка полей определенного набора данных.

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

и т.д.

Отображение полей типа Memo и BLOB в текстовом редакторе (DBMemo):

Компонента DBMemo класса TDBMemo является аналогом компоненты Memo (очень напоминает строку ввода, только может редактировать не одну, я любое число строк; является непосредственным потомком класса TCustomMemo, который, в свою очередь, является потомком класса TCustomEdit). Эта компонента предназначена для отображения информации из полей, предназначенных для хранения данных большого объема, хотя в ней можно отображать данные и других типов. К полям для хранения большого объема информации относятся поля Memo и BLOB. В полях типа Memo храниться текстовая информация, а в полях типа BLOB - объекты в двоичном представлении; здесь может храниться различная информация: тексты, графические объекты, OLE. Независимо от природы информации в компоненте DBMemo информация из поля BLOB будет отображена в виде текста.

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

Класс TDBMemo является потомком класса TCustomMemo и вводит следующие основные свойства к наследуемым:

DataField - свойство типа string, определяет имя поля, значение которого будет отображаться в компоненте DBMemo. В инспекторе объектов оно выбирается из списка полей определенного набора данных.

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

и т.д.

Отображение рисунков из БД (DBImage):

Компонента DBImage класса TDBImage предназначена для отображения рисунков из БД. По своему назначению она аналогична компоненте класса TImage. В последнее время БД позволяют хранить информацию не только в виде цифр и чисел, но и рисунков (графическая информация) и мультимедийных данных. Рисунки в БД хранятся в полях типа BLOB. Компонента DBImage требуется для отображения рисунков, содержащихся в этих полях в графическом виде. Он также используется для изменения содержимого этих полей.

Класс TDBImage является потомком класса TCustomControl.

Список значений поля БД (DBListBox):

Компонента DBListBox класса TDBListBox, предназначенная для отображения списка значений поля таблицы БД, аналогична компоненте ListBox, которая предназначена для отображения на экране списка строк, может быть, с ассоциированными с ними изображениями, и непосредственным предком которой является класс TCustomListBox, который, в свою очередь, является потомком класса TWinControl. Компонента DBListBox позволяет определить конкретное значения поля в той или иной записи, а при необходимости поместить в это поле значение из списка. Этот список значений определяется свойством Items. Работа этой компоненты зависит от значения свойства логического типа ReadOnly. Если это свойство имеет значение True, то в списке значений компоненты выделяется значение, соответствующее значению поля активной записи. Если же свойство ReadOnly имеет значение False, то и в этом случае первоначально в списке будет выделено то значение, которое соответствует значению активного поля записи. Однако можно в списке активизировать другое значение, тогда при переходе к другой записи в старой записи значение поля изменится на выделенное.

Класс TDBListBox является потомком класса TCustomListBox.

Комбинированная строка ввода значений поля БД (DBComboBox):

Комбинированная строка ввода значений поля БД DBComboBox класса TDBComboBox аналогична компоненте ComboBox, которая объединяет в себе свойства обычной строки ввода класса TEdit и списка наподобие списка класса TListBox. Она предназначена для ввода или выбора из списка значения в поле БД, причем исходное значение, которое находится в поле БД, помещается в строку ввода. Эта компонента позволяет организовать более удобный или менее подверженный ошибкам способ ввода значений в БД, чем в случае компоненты DBEdit. Она фактически представляет собой объединение компонент DBEdit и DBListBox.

Класс TDBComboBox является потомком класса TCustomComboBox.

Выключатель для полей БД логического типа (DBCheckBox):

Выключатель для полей БД логического типа DBCheckBox класса TDBCheckBox является аналогом компоненты CheckBox. Эта компонента предназначена для задания одного из двух (или трех) состояний. Она представляет собой выключатель, который устанавливается в зависимости от значения поля БД. Изображается выключатель в виде прямоугольника. Во включенном состоянии в этот прямоугольник помещается символ “галочка”, в выключенном состоянии прямоугольник пуст. В нейтральном состоянии, если оно допустимо, “галочка” имеет серый цвет. Обычно справа от прямоугольника находится название выключателя.

Класс TDBCheckBox является потомком класса TCustomCheckBox. Он определяет следующие новые свойства в дополнение к наследуемым:

DataField - свойство определяет имя поля, значение из которого будет отображаться в компоненте DBCheckBox. В инспекторе объектов оно выбирается из списка полей определенного набора данных.

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

и т.д.

Набор варианта значения поля БД (DBRadioGroup):

Компонента выбора варианта значения поля БД DBRadioGroup класса TDBRadioGroup является аналогом компоненты RadioGroup (является непосредственным потомком класса TCustomRadioGroup, который, в свою очередь, является потомком класса TCustomGroupBox). Она включает в себя несколько переключателей, каждый из которых задает определенной значение поля БД. Эту компоненту целесообразно применять вместо компоненты DBListBox для определения значения в числовом поле, когда числу ставится в соответствие какое-нибудь текстовое (смысловое) значение.

Класс TDBRadioGroup является потомком класса TCustomRadioGroup.

Виды форм БД и их создание:

Формы БД различаются по способу представления информации. Существую следующие виды форм:

  • Список-форма. Она похожа на таблицу, где записи расположены одна под другой, и перемещение по ним осуществляется не только с помощью компоненты DBNavigator, но и с помощью скроллинга. Следует отметить, что для создания такой формы используется компонента DBGrid. Как правило, все поля записи в этой форме размещаются в одну строку. С этой формой очень удобно работать, когда записи короткие.

  • Бланк-форма. Эта форма похожа на анкету, где все поля одной записи расположены на одном листе. В этом случае перемещение по записям осуществляется при помощи компоненты DBNavigator. Такая форма используется при отображении больших записей из БД, например анкетной информации о человеке, и позволяет создать очень информативное представление данных за счет дополнительных элементов.

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

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

Одной из важных задач при создании приложения для работы с БД является создание качественных форм БД. Простое, понятное расположение компонент не только повышает эффективность работы, но и позволяет минимизировать ошибки ввода.

Пример 1: Создание формы БД с подформой для работы с информацией из БД “Телефонная книжка”.

Выполнив данный пример, вы сразу же увидите и почувствуете преимущество ввода данных посредством формы.

1. Откроем новый проект с помощью команды главного меню File|New Application. Изменим свойство Caption (Заголовок) формы Form1 на “Информация о людях”. Фактически этот заголовок формы будет являться названием БД.

2. Сразу же сохраним форму Form1 в файле, MyExunitDB.pas, а сам проект - в файле MyExampleDB.dpr. Для этого выполним следующие действия:

2.1. Выполним команду главного меню File|Save As. При этом появится окно выбора имени файла, в котором выберем для модуля папку, и зададим модулю имя MyExUnitDB

2.2. Выполним команду главного меню File|Save Project As. При этом также появится окно выбора имени файла, в котором выберем для модуля папку, и зададим модулю имя MyExampleDB

3. Добавим в проект новый модуль, используя команду главного меню File|New Data Module. В результате появится новое окно DataModulе1.

4. Поместим в модуль DataModule1 компоненты для связи с таблицей БД, находящейся в файле People.db:

4.1. В палитре компонент откроем страницу BDE, выделив мышью одноименную закладку

Из страницы BDE палитры компонент перенесем с помощью мыши в модуль DataModule1 компоненту Table (Таблица). В результате в модуле появится компонента, которая получит имя Table1. Она обеспечивает связь с таблицей БД и изображается в виде квадратной кнопки (ее размеры не меняются).

С помощью инспектора объектов выберем свойство DatabaseName и установим для него значение, определяющее папку, в которой находится таблица БД. Затем выберем свойство TableName и для него зададим значение People.db, используя выпадающий список. Таки образом устанавливается связь приложения с таблицей БД People.db.

Для того, чтобы отображаемые компоненты могли выводить на экран данные из этой таблицы, зададим свойству Active компоненты Table1 значение True.

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

4.2. В странице DataAccess палитры компонент с помощью мыши перенесем в модуль DataModule1 компоненту DataSource (Источник данных). В результате здесь появится компонента, которая получит имя DataSource1. Она обеспечивает связь отображаемых компонент с набором данных и изображается в виде квадратной кнопки (ее размеры также не меняются).

Зададим для свойства DataSet компоненты DataSource1 значение Table1 (используя выпадающий список у этого свойства в инспекторе объектов). После этого отображаемые компоненты, размещение которых в проекте будет описано ниже, получат доступ к данным из таблицы БД People.db. расположение компонент в модуле не существенно.

5. Поместим в модуль DataModule1 компоненты для связи с таблицей БД, находящейся в файле Tel.db, для чего выполним операции, аналогичные операциям в предыдущем пункте, только компоненты Table под именем Table2 и DataSource под именем DataSource2 будут связаны с таблицей Tel.db через свойство DatabaseName и DataSet соответственно.

6. Установим взаимосвязь между наборами данных для создания формы с подформой, отображающей данные из двух таблиц БД.

Для этого выделим компоненту Table2 в форме DataModule1 - инспектор объектов отобразит информацию о ней.

Установим для ее свойства MasterSource значение DataSource1, используя выпадающий список этого свойства в инспекторе объектов.

Активизируем мышью значение свойства MasterFields этой же компоненты. В появившемся окне редактора связей между таблицами нужно сделать следующие действия. В комбинированной строке ввода Available Index (Используемые индексы) выберем значение IDPeopleIndex, т.к. взаимосвязь таблиц устанавливается с помощью индексированных полей. Затем в левом списке выберем значение IDPeople (поле в подчиненной таблице Tel, в данном примере оно единственное) и в правом списке выберем значение IDPeople (поле в главной таблице People). Нажмем кнопку Add - установленное соединение отображается в нижней части окна. Если установлена ошибочная связь, ее следует выделить в нижнем окне и нажать кнопку Delete, находящуюся справа от окна. Завершается настройка взаимосвязи таблиц нажатием кнопки ОК. В результате свойство IndexName включает название вторичного индекса - IDPeopleIndex, а MsterFields содержит имя поля в главной таблице, участвующего во взаимосвязи, - IDPeople.

7. Сохраним модуль с описанием доступа к БД в файле с именем MyExUnitDMDB.pas таким же образом как в п. 2.

8. Установим связь формы Form1 с модулем DataModule1. Для этого с помощью мыши перейдем к форме Form1, затем с помощью команды главного меню View|Toggel Form/Unit (или же с помощью мыши, или же с помощью клавиши F12) перейдем к тексту формы - модулю Unit. (Аналогично осуществляется переход от модуля к форме.) Далее в секции implementation формы Form1 сразу же после объявления секции введем строку USES MyExUnitDMDB;

9. Поместим в форму Form1 компоненты, предназначенные для отображения данных из БД. Для этого выполним следующие действия:

9.1. Из страницы Standart палитры компонент поместим в левый верхний угол формы Form1 метку Label (Метка). Появившаяся компонента получит в тексте модуля имя Label1. Изменим с помощью инспектора объектов ее свойство Caption на «Фамилия, имя, отчество».

9.2. Используя страницу DataControls палитры компонент, поместим в форму Form1 3 компоненты DBEdit (Строка ввода значений в БД) под размещенной меткой Label1 в один ряд. В тексте модуля имена появившихся компонент будут: DBEdit1, DBEdit2, DBEdit3. Для всех компонент зададим свойству DataSource значение DataModule1.DataSource1 (здесь также можно воспользоваться выпадающим списком этого свойства в инспекторе объектов), а в свойстве DataField для каждой из этих строк ввода выберем соответственно из списка значения Family, Name и SecName.

9.3. Со страницы Standart палитры компонент поместим в форму еще одну метку Label. Разместим ее под компонентой DBEdit1. Появившаяся компонента получит в тексте модуля имя Label2. Изменим ее свойство Caption на «День рождения».

9.4. Правее этой метки со страницы DataControls палитры компонент поместим строку ввода DBEdit, которая получит в тексте модуля имя DBEdit4. Зададим ее свойству DataSource значение DataModule1.DataSource1, а в свойстве DataField выберем из списка значение Birthday.

9.5. Правее этой строки ввода со страницы DataControls палитры компонент поместим компоненту DBCheckBox (Выключатель значения в БД). Компонента получит в тексте модуля имя DBCheckBox1. Изменим свойство Alignment (Расположение) у компоненты DBCheckBox1 На taLeftJustify, а Caption - на «Пол». Затем зададим ее свойству DataSource значение DataModule1.DataSource1, а в свойстве DataField выберем из списка значение Sex.

9.6. Ниже метки Label2 поместим со страницы Standart палитры компонент еще одну метку Label. Она получит в тексте модуля название Label3. Изменим ее свойство Caption на «Комментарий».

9.7. Под этой меткой поместим со страницы DataСontrols палитры компонент компоненту DBMemo (Редактор в БД). Увеличим ее по горизонтали на всю величину формы, а вертикальный размер несколько уменьшим. Компонента получит в тексте модуля название DBMemo1. Зададим ее свойству DataSource значение DataModule1.DataSource1, а в свойстве DataField выберем из списка значение Notes.

9.8. В правую верхнюю часть формы Form1 поместим со станицы DataControls компоненту DBNavigator (Навигатор по записям БД). Записью в таблице БД является строка. Компонента получит в тексте модуля название DBNavigator1. Зададим свойству DataSource значение DataModule1.DataSopurce1.

10. Поместим в форму Form1 со страницы DataControls компоненту DBGrid (Таблица отображения БД). Поместим ее ниже всех компонент, уже размещенных в форме, и несколько уменьшим по вертикали. Появившаяся компонента получит в тексте модуля имя DBGrid1. С помощью инспектора объектов зададим ее свойству DataSource значение DataModule1.DataSource2, используя выпадающий список. Если все указанные выше действия были выполнены верно, в компоненте DBGrid1, сразу будет выведено содержимое таблицы Tel.db.

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

11.1. Активизируем мышью свойство Columns, тем самым вызвав редактор списка полей таблицы Editing DBGrid1.Columns.

11.2. В этом редакторе нажмем кнопку AddNew. Выделим появившееся название «0-TColumn». С помощью инспектора объектов дадим свойству FieldName значение Number. Для сложного свойства Titel дадим его параметру Caption значение «Номер». В результата текущее значение в списке столбцов изменится на «0-Number».

11.3. В окне редактора списка поле нажмем кнопку AddNew. Выделим появившееся название «1-TColumn». С помощью инспектора объектов дадим свойству FieldName значение Type. Активизируем свойство PickList и в появившемся текстовом редакторе введем три строки:

дом.

раб.

моб.

После этих операций нажмем кнопку ОК. Таким образом мы задали список, из значений которого можно определять тип телефона. Затем для сложного свойства Titel дадим его параметру Caption значение «Тип». В результате текущее значение в списке столбцов изменится на «1-Type». Можно заметить, что отображаемые столбцы появляются в компоненте DBGrid1 по мере их определения.

11.4. Чтобы завершить работу с редактором столбцов таблицы, достаточно его закрыть, воспользовавшись стандартной кнопкой на границе окна.

12. Со страницы Standart палитры компонент поместим в форму Form1 метку Label. Разместим ее над компонентой DBGrid1 в левой части. Появившаяся метка получит в тексте модуля имя Label4. Изменим свойство Caption на «Телефоны».

13. Перенесем со страницы DataControls в форму Form1 еще один навигатор DBNavigator. Разместим его над компонентой DBGrid1 в правой части. Компонента получит в тексте модуля название DBNavigator2. Зададим свойству DataSource этого навигатора значение DataModule1.DataSource2.

14. Структура взаимосвязи компонент, используемых в приложении, показана на рисунке.

Структура взаимосвязи компонент проекта.

15. Запустим программу с помощью главного меню Run|Run.

16. При вводе информации в форму с подформой имеются определенные особенности. Чтобы отметить их, введем информацию в форму. Для этого выполним следующие действия:

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

16.2. Нажмем кнопку «Плюс» на панели верхнего навигатора по записям БД. После этого создается новая запись в таблице People, куда внесем информацию о новом человеке.

В 3 строки ввода под меткой «Фамилия, имя, отчество» последовательно введем значения «Хромов», «Олег», «Львович».

В строку ввода рядом с меткой «День рождения» введем 14.01.1979.

Выключатель с надписью «Пол» должен быть включен.

Нажмем кнопку «Галочка» на верхней панели навигатора по записям. Созданная запись о человеке сохраняется в таблице People. Сохранить данные о человеке необходимо до начала ввода его телефонов, иначе они не будут соответствовать этому человеку, а в БД окажется столько лишних записей, сколько в этом случае введено телефонов.

16.3. Нажмем кнопку «Плюс» на панели нижнего навигатора по записям. Создается новая запись в таблице Tel.

Введем в первую ячейку первой строки, находящуюся под меткой «Номер», текст «232-00-20».

Выберем во второй ячейке первой строки , находящейся под меткой «Тип», элемент «дом.» из выпадающего списка.

16.4. Нажмем кнопку «Плюс» на панели нижнего навигатора по записям. Кнопку «Галочка» нажимать для сохранения записи необязательно: при вводе последовательно нескольких телефонов и переходе на новую запись данные о телефоне автоматически сохраняются в таблице, и в этой же таблице создается новая запись.

Введем в первую ячейку первой строки, находящуюся подметкой «Номер», текст «234-50-40».

Выберем во второй ячейке первой строки, находящейся под меткой «Тип», элемент «раб.» Из выпадающего списка.

Нажмем кнопку «Галочка» на панели нижнего навигатора по записям. Созданная запись о телефоне сохраняется в таблице Tel.

17. Если теперь с помощью верхнего навигатора перемещаться по разным записям, в компоненте DBGrid1 будут отображаться телефоны соответствующего человека.

18. Завершим работу программы нажатием стандартной кнопки закрытия окна на границе формы.

19. Сохраним все изменения проекта с помощью команды File|Save All.

Примечания: Если нужно будет удалить какую-либо запись из компоненты Dbgrid1, следует выделить соответствующую строку и нажать у нижнего навигатора кнопку «Минус». Для изменения же какой-либо записи компоненты DBGrid1 следует выделить эту запись, нажать кнопку «Стрелка вверх» нижнего навигатора, выполнить соответствующие изменения и нажать кнопку «Галочка».

Создание форм с помощью эксперта-построителя форм БД - FormWizard:

FormWizard - эксперт, содержащий диалоговые окна, в которых требуется определить, как и какую информацию из БД следует отобразить в создаваемом окне формы БД. Этот эксперт позволяет создавать формы на основе локальных БД, которые поддерживают форматы файлов с расширениями .db и .dbf. На любом шаге работы с ним можно получить справку по работе с текущим диалоговым окном. Прервать процесс создания формы БД можно в любой момент, нажав кнопку Cancel, и из любого диалогового окна (кроме первого) можно вернуться к предыдущим, нажав кнопку <Back. В левом верхнем углу диалогового окна схематично отображается вид создаваемой формы. Перемещается к следующему окну эксперта можно, нажимая кнопку Next>.

Вызвать данный эксперт можно командой меню DataBase|FormWizard или операцией File|New|Other|в появившемся окне перейти на закладку Business|выбрать DataBase Form Wizard.