Для начала регистрируем алиас для папки, в которой хранятся таблицы нашей БД, для ускорения доступа. Это делаем так: вызваем утилиту DataBase Desktop à меню Tools à Alias Manager. Далее выполняем щелчок по кнопке New вводим в окно Database Alias значение нового псевдонима (алиаса), в нашем случае Goryacheva. Затем необходимо выполнить щелчок по кнопке Browse и в дереве списка папок выбрать папку СУБД и нажать на кнопку OK. Нажимаем кнопку ОК в окне DirectoryBrowser и кнопку ОК в окне Alias Manager.
Далее создаем в утилите Database Desktop таблицы, которые потом будем погружать в наш проект. Создание новой таблицы выполняется при помощи команды File/New/Table. В этом проекте будут задействованы три таблицы. Структура первой таблицы выглядит так:
Вторая таблица имеет такой вид:
Третья таблица такова:
Теперь нужно связать таблицы между собой. Для этого нужно проиндексировать поля, по которым будет устанавливаться связь. Делаем это такие способом: открываем через утилиту Database Desktop таблицу, поле в которой надо проиндексировать и переводим ее в режим, отображающий структуру таблицы; выбраем из списка свойств Table properties, значение Secondary Index,а затемщелкаем по кнопке Define.Далее, воспользовавшись кнопкой со стрелкой è, переносим необходимое поле из списка полей Fields в список полей Index Fields. В нашем проекте индексируем поле Pol в первой таблице и поле Vid sorevnovansu во второй.
Индексированную таблицу необходимо сохранить, выполнив команду Save.
Теперь приступаем к созданию базы данных в среде Delphi. Запускаем среду Delphi и сохраняем еще пустой проект в созданную папку (File à SaveProjectAs). На первой форме поставлю три компонента Label куда внесу название базы данных и свои данные. Также поставлю Button, который будет перемещать нас на вторую форму, где располагается мой проект, для этого напишем такой программный код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
Переходим ко второй форме. Наношу набор следующих компонентов:
- Table1, DataSource1, DBGrid1, DBNavigator1;
- Table2, DataSource2, DBGrid2, DBNavigator3.
- Table3, DataSource3, DBGrid3, DBNavigator3.
Активизирую компонент Table1и в инспекторе объектов для перечисленных ниже свойств установлю значения:
- DataBaseName – тот алиас, который зарегистрировала на папку СУБД.
- TableName – имя таблицы ОТДЕЛЫ;
- Active à true.
Аналогично активизирую компоненты Table2 и Table3.Далее активизирую компоненты DataSource1, DataSource2, DataSource3 и в инспекторе объектов для свойства DataSet установлю значениеTable1, Table2, Table3 соответственно. Затем активизирую компонент DBGrid1, DBGrid2, DBGrid3 и в инспекторе объектов для свойства DataSource установлю значениеDataSource1, DataSource2, DataSource3 соответственно. Потом активизирую компонент DBNavigator1, DBNavigator2, DBNavigator3 и в инспекторе объектов для свойства DataSource установите значение соответственноDataSource1, DataSource2, DataSource3. Сохраняем командой SaveAll.
Теперь связываю таблицы между собой: выберу компонент Table2и в И/О выберу:
- свойство MasterSource à DataSource1;
- свойство MasterFields à … ;
Следующим шагом будет русифицирование полей. Для возможности русификации заголовков столбцов в DBGrid-е необходимо поля таблицы присоединить (подключить) к самому компоненту DBGrid. Это выполняется следующим образом:
- выполнить двойной щелчок по компоненту DBGrid1;
- в открывшемся окне EditingDBGrid1.Columns вызвать контекстное меню и выбрать пункт AddAllFields;
- после подключения всех полей к редактору EditingDBGrid1 необходимо мышкой выделить первое поле,при этом в инспекторе объектов отобразятся свойства именно этого поля;
- далее работаем со свойством + Title и вложенными в него свойствами: Alignment (выравнивание положения заголовка), Caption (надпись самого заголовка), Color (заливка заголовка цветом);
Далее будем организовывать поиск в первой таблице по фамилии. Для этого необходимо:
- установить на форму компонент Label1(он нужен для подписи действий, совершаемых в компоненте Edit1);
- установить на форму компонент Edit1;
- программная реализация процедуры поиска выполняется в обработчике события OnChange компонента Edit1:
procedure TForm1.Edit1Change(Sender: TObject);
begin
table1.SetKey;
table1.FieldByName('FIO').AsString:=Edit1.Text;
table1.GotoNearest;
end;
- для компонента Table1 в свойстве IndexName установлю имя вторичного индекса поля FIO.
В итоге мой проект имеет такой вид
Провожу фильтрацию данных
Фильтрация данных выполняется при помощи элемента управления ComboBox. Реализация фильтра осуществляется исполнением строк программы в процедуре обработки события OnChange (обработчик события обмена данными) этого компонента.
· Наношу на форму компоненты: GroupBox1, ComboBox1 и Button
· Потом соединяю таблицы между собой в соответствии с логической схемой.
· Для компонента ComboBox1 для свойства Items à … вношу следующее значение (строки):
С целью обеспечения доступа из программы к свойству Filter таблицы (Table2) необходимо присоединить к имени таблицы поля таблицы. Данная операция выполняется в следующей последовательности:
а) Выбрать в форме компонент Table2 и выполнить двойной щелчок указателем мыши по компоненту.
б) В открывшемся окне необходимо вызвать контекстное меню (правая кнопка мыши) и выполнить команду Add all Fields.
После выполнения данной команды в окне Form1 Table2 появится список всех полей таблицы.
Для компонента ComboBox1 в обработчик события OnChange внести следующую программу:
procedureTForm2.ComboBox1Change(Sender: TObject);
Begin
Table1.Filtered:= false;
Table1.Filter := 'Pol=' + ComboBox1.Text;
Table1.Filtered := true;
end;
Чтобы снять действие фильтра для кнопки Снять фильтр внесите следующую программу: