
- •Лабораторная работа №6 (8 часов) Работа с локальными базами данных и несвязанными таблицами
- •6.1. Приложение для работы с локальной базой данных
- •6.1.1. Цель работы
- •6.1.2. Задание на выполнение работы
- •6.1.3. Процесс разработки приложения
- •6.1.4. Создание псевдонима базы данных
- •6.1.5. Разработка структуры записи таблицы базы данных
- •6.1.6. Разработка основной формы и ее компонентов для работы с бд
- •6.1.6.1. Размещение и настройка основных компонентов
- •6.1.6.2. Размещение и настройка панелей
- •6.1.6.3. Настройка компонента dbGrid1
- •6.1.6.4. Формирование вычисляемого поля
- •6.1.6.5. Дополнение формы окнами из редактора полей таблицы
- •6.1.7. Формирование основного меню
- •6.1.8. Методы подменю Показать данные
- •6.1.9. Методы для сортировки данных
- •6.1.10. Методы для поиска данных
- •6.1.11. Выполнение команд подменю ‘Вычислить:’
- •6.1.12. Метод команды меню Трафик' и настройка графика
- •6.1.13. Выполнение команд подменю Отчет
- •6.1.13.1. Формирование отчета
- •6.1.13.2. Методы подменю Отчет
- •6.1.14. Листинги примера проекта
- •6.1.15. Варианты заданий на работу с локальными базами данных
- •6.1.16. Контрольные вопросы
- •6.2. Приложение для соединения данных двух таблиц 1:1
- •6.2.1. Цель и задание на выполнение работы
- •6.2.2. Процесс разработки приложения
- •1) Установка русификатора для работы с таблицами типа Paradox7;
- •6.2.4. Контрольные вопросы
- •6.3. Приложение для формирования, слияния и разъединения однотипных таблиц баз данных
- •6.3.1. Цель и задание на выполнение работы
- •6.3.2. Процесс разработки приложения
- •6.3.3. Метод для работы с данных двух таблиц
- •6.3.4. Контрольныевопросы
6.1.16. Контрольные вопросы
1 Что такое база данных, таблица базы данных?
2 Какова структура приложений, работающих с базой данных?
3 Каково назначение BDE (BorlandDatabaseEngine - машины баз данных)?
4 Каково назначение системы BDEAdministrator?
5 Как установить драйвер языка с помощью системы BDEAdministrator?
6 Каковы назначение и основные возможности системы DataBaseDesktop (DBD)?
7 Как создать новый псевдоним и файл конфигурации базы данных с помощью системы DBD?
8 Как разработать структуру записи таблицы базы данных с помощью системы DBD?
9 Каково назначение первичного и вторичных индексов таблицы базы данных?
10 Как определить основной и вторичный индексы таблицы базы данных?
11 Поясните назначение и основные свойства компонентов типа ТТаblе и TQuery.
12 Поясните назначение и основные свойства компонента типа TDataSource.
13 Поясните назначение и основные свойства компонента типа TDBNavigator.
14 Поясните назначение и основные свойства компонентов типа TDBGrid, TDBEdit, TDBImage.
15 Как настроить цвет фона и шрифт заголовков и данных столбцов компонента типа TDBGrid?
16 Как заполнить компонент типа TDBImage?
17 Как сформировать вычисляемое поле и поместить его в компонент типа TDBGrid?
18 Как настроить компонент типа TQuery со статическим запросом для отбора данных в таблицу типа TDBGrid?
19 Как настроить компонент типа TQuery с динамическим запросом - по условию, которое формируется в процессе выполнения приложения? Как передать фактическое значение в оператор SELECT компонента?
20 Как задать сортировку по одному из индексов?
21 Как вычислить сумму элементов столбца таблицы при непосредственном доступе к ее записям?
6.2. Приложение для соединения данных двух таблиц 1:1
6.2.1. Цель и задание на выполнение работы
Целью является разработка приложения, с помощью которого осуществляется выбор данных из двух таблиц, не связанных на этапе разработки приложения Таблицы содержат данные о студентах:
- в 1-й таблице - сведения о студентах;
- во 2-й таблице - сведения об успеваемости студентов.
В обеих таблицах в качестве основного индекса используется поле Fio - с фамилией и инициалами студента. Надо разработать приложение, в котором при нажатии кнопки формируется набор данных, в котором в каждой строке содержатся все сведения о каждом студенте: из первой и второй таблиц.
Для выполнения работы и подготовки к ответам на контрольные вопросы надо проработать материал разделов 9.1.4.4. и 9.5.2.3.
6.2.2. Процесс разработки приложения
Для разработки приложения создать каталог с именем, например, SV_STUD. В нем - подкаталог для размещения БД, например, с именем BASE.
Процесс разработки приложения включает следующие этапы:
1) Установка русификатора для работы с таблицами типа Paradox7;
2) создание псевдонима новой базы данных и файла конфигурации, например, STUS с помощью подсистемы Desktop;
3) разработка структуры (полей) записи для двух таблиц базы данных;
4) разработка формы в составе:
- по 2 компонента типа Table, DataSource, DBGrid, DBNavigator и StringGrid,
- компонент Query,
- компонент типа Button со свойством Caption = Объединить.
Первые 3 пункта выполняются аналогично изложенному в разделах 6.1.3, 6.1.4 и 6.1.5.
Имя набора данных 1-й таблицы - с данными о студентах = STUD.DB.
Состав полей 1-й таблицы:
Fio - фамилия и инициалы, основной ключ;
Adres - домашний адрес;
God_R - год рождения;
Tel - телефон.
Имя набора данных с данными 2-й таблицы - об успеваемости студентов = USPEV.DB.
Состав полей 2-й таблицы:
Fio - фамилия и инициалы, основной ключ;
Mat- оценка по математике;
Fiz - оценка по физике;
Progr - оценка по программированию.
Установить свойство формы:
Caption = Формирование набора данных из двух таблиц
Установить выбором из списков свойства компонентов:
1) Table1: DataBaseName = STUS; TableName = STUD.DB; Active = True;
2) Table2: DataBaseName = STUS; TableName =USPEV.DB; Active = True;
3) Query1: DataBaseName = STUD; его свойство DataSource оставить в виде пустой строки;
4) DataSource1: Data Set = Table1; DataSource2: Data Set = Table2;
5) для DBGrid1 и DBNavigator1: Data Source = DataSource1;
6) для DBGrid2 и DBNavigator2: Data Source = DataSource2.
He устанавливать русские наименования заголовков таблиц типа DBGrid!
Отбор данных из двух таблиц осуществляется с помощью компонента Query1. Установить его свойство SQL:
SELECT * FROM STUD, USPEV WHERE STUD.FIO = USPEV.FIO
В соответствии с ним в одну строку формируемого набора данных будут отобраны значения из 1-й и 2-й таблиц, у которых совпадают значения полей с фамилиями, т.е. STUD.FIO = USPEV.FIO.
В процессе настройки компонентов DBGrid не изменять заголовки столбцов, установленные по умолчанию.
Запустить приложение и заполнить таблицы несколькими записями с помощью компонентов DBNavigator1 и DBNavigator2.
6.2.3. Метод для объединения данных двух таблиц
С помощью метода ButtonIClick надо:
- определить типизированную константу С из массива строк с наименованиям заголовков компонента DBGrid1, в котором будут отражены значения полей отобранных и сформированных строк данных;
- активизировать компонент Query1 оператором: Query1.ACTIVE := TRUE
- подключить Query1 к компоненту DataSource1 для отображения отобранных данных оператором: DataSource1.DataSet := Query1;
- вывести тексты заголовков столбцов таблицы из массива С оператором:
DBGrid1.Columns[i].Title.Caption := C[i].
Вид формы на этапе разработки приложения после размещения и настройки ее компонентов и после заполнения таблиц несколькими записями дан на рис. 6.10.
Вид формы после объединения данных двух таблиц на этапе выполнения приложения дан на рис.6.11.
В верхней таблице-компоненте (DBGrid1) в каждой строке представлены данные из 1-й и 2-й таблиц о каждом студенте, фамилия которого есть ив 1-й, и во 2-й таблице.
Рис. 6.10. Вид формы после настройки компонентов и заполнения таблиц
Рис. 6.11. Вид формы после объединения данных двух таблиц
Листинг 6.5. Текст модуля основной формы приложения для объединения данных двух таблиц
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBTables, DBCtrls, Grids, DBGrids, DB, ExtCtrls,
XPMan, Buttons;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
DataSource2: TDataSource;
Table1: TTable;
Table2: TTable;
Query1: TQuery;
XPManifest1: TXPManifest;
Panel1: TPanel;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DBNavigator1: TDBNavigator;
DBNavigator2: TDBNavigator;
Button1: TButton;
BitBtn1: TBitBtn;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
Const C: Array[0..7] of string[10] =
('Фио', 'Адрес', 'Год Рожд', 'Телефон', '' , 'Матем', 'Физика', 'Прогр' );
Var i:byte;
begin
if Query1.Active = false then Query1.Active := true;
DataSource1.DataSet:=Query1;
DBGrid1.Columns[4].Visible:=False;
for i:=0 To 7 do
DBGrid1.Columns[i].Title.Caption:=C[i];
end; end.