Смекни!
smekni.com

Модуль данных (стр. 3 из 4)

function (const KeyFields: String;

const KeyValues: Variant;

ResultFields: String): Variant

В параметре KeyFields указывается список полей, по которым необходимо осуществить поиск (если задается значение по нескольким полям, соседние поля разделяются точкой с запятой).

Параметр KeyValues определяет поисковые значения полей, список которых содержится в параметре KeyFields.

В параметре ResultFields перечисляются поля, значения которых требуется получить в случае успешного поиска. Тип результата поиска – Variant или вариантный массив.

Если имеется несколько поисковых полей, каждому i-му полю в KeyFields ставиться в соответствие i-e значение в KeyValues. Если поиск ведется по одному полю, его поисковое значение можно указывать в качестве KeyValues непосредственно; в случае нескольких полей их необходимо приводить к типу вариантного массива при помощи функции преобразования VarArrayOf.

Как и в методе Locate, в качестве поисковых полей можно указывать поля как входящие в какой-либо индекс, так и не входящие в него. Если в результате поиска запись не найдена, метод Lookup возвращает Null.

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

Пример. Добавьте следующие компоненты: TEdit, 2 компонента TLabel, TButton – в свойстве Caption наберите слово «Найти».

Добавьте обработчик события OnClick и напишите в нем следующее:

procedure TForm2.Button1Click (Sender: TObject);

varLookupResult:variant;

begin

LookupResult := dm.Airplains.Lookup ('BOARD_ID', Edit2.Text, 'MODEL;DATE_MAKE');

if VarType (LookupResult) = varNull then

ShowMessage('Нет самолета с номером ' + Edit2.Text)

else if VarType (LookupResult) = varEmpty then

ShowMessage ('Поиск не произведен')

else if VarIsArray (LookupResult) then

begin

Label1.Caption:= LookupResult[0];

Label2.Caption:= LookupResult[1];

end;

end;

Задание:

1. Реализовать сортировку данных.

2. Реализовать алгоритмы навигации для прохода по НД от конца к началу.

3. Придумать несколько примеров на фильтрацию записей.

4. Продемонстрировать работу методов Locateи Lookup.


Лабораторная работа 6 (2 часа)

Тема: «Добавление, редактирование и удаление записей»

Цель работы: изучить способы добавления, редактирования и удаления записей.

Теоретические сведения

1. Добавление записей

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

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

Добавление новых записей проще осуществлять в отдельных формах программы.

Для создания такой формы можно использовать следующие компоненты: Label, Edit, ComboBox, CheckBox, RadioButton, RadioGroup, ListBox и т.д.

Форма для заполнения таблицы «Рейсы» может выглядеть следующим образом:

Данные о маршруте берутся из таблицы «Маршрут», о модели самолета – из таблицы «Самолеты», о экипаже – из таблицы «Состав экипажа». Получается, если вводить эти сведения по кодам (ID данных полей), то обычный пользователь не сможет запомнить такое количество кодов. А открывать и работать одновременно с несколькими таблицами будет не удобно.

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

Процесс записи данных из полей формы в таблицу:

DataModule1.Table1.Insert– добавляет пустую запись в набор данных Table1;

DataModule1.Table1.Fields[1].AsString := Edit1.Text – выбирается значение из поля формы;

DataModule1.Table1.Post – метод, который записывает изменения в БД.

Пример. Добавить в таблицу «Trip» новую запись о рейсе:

procedure TForm4.BitBtn2Click (Sender: TObject);

begin

DM.Trip.Insert;

DM.Trip.Fields[0].AsInteger:= StrToInt(LabeledEdit1.Text);

DM.Trip.Fields[1].AsInteger:= StrToInt(LabeledEdit2.Text);

DM.Trip.Fields[2].AsString:= LabeledEdit3.Text;

DM.Trip.Fields[3].AsString:= ComboBox4.Text;

DM.Trip.Fields[4].AsDateTime:= dateTimePicker1.Date;

DM.Trip.Fields[5].AsDateTime:= dateTimePicker2.Time;

DM.Trip.Fields[6].AsDateTime:= dateTimePicker3.Time;

if CheckBox1.Checked then

DM.Trip.Fields[7].AsString:= 'да'

else DM.Trip.Fields[7].AsString:= 'нет';

DM.Trip.Post;

end;

2. Изменение записей

Для модификации данных используется метод Edit:

DataModule1.Table1. Edit

Пример. Изменить запись о рейсе:

procedure TForm4.BitBtn3Click(Sender: TObject);

begin

DM.Trip.Edit;

DM.Trip.Fields[0].AsInteger:= StrToInt(LabeledEdit1.Text);

DM.Trip.Fields[1].AsInteger:= StrToInt(LabeledEdit2.Text);

DM.Trip.Fields[2].AsString:= LabeledEdit3.Text;

DM.Trip.Fields[3].AsString:= ComboBox4.Text;

DM.Trip.Fields[4].AsDateTime:= dateTimePicker1.Date;

DM.Trip.Fields[5].AsDateTime:= dateTimePicker2.Time;

DM.Trip.Fields[6].AsDateTime:= dateTimePicker3.Time;

if CheckBox1.Checked then

DM.Trip.Fields[7].AsString:= 'да'

else DM.Trip.Fields[7].AsString:= 'нет';

DM.Trip.Post;

end;

3. Удаление записей

Для удаления данных используется метод Delete:

DataModule1.Table1. Delete

Задание

1. Организовать добавление, редактирование и удаление данных с помощью контекстного меню.

2. Создать одну форму для добавления и модификации данных таблицы, связанной с несколькими (2-3).

2. Организовать удаление данных из БД.


Лабораторная работа 7 (2часа)

Тема: «Компонент TQuery»

Цель работы: изучить особенности компонента TQuery.

Теоретические сведения.

Элемент TQuery позволяет получать доступ к одной или более таблиц из базы данных, используя SQL-запросы. Также его можно использовать для работы с различными серверами баз данных (Sybase, SQL Server, Oracle, Informix, DB2, и InterBase), с локальными таблицами (Paradox, InterBase, dBASE, Access и FoxPro), а также БД, которые совместимы с ODBC. Компонент TQuery удобно использовать для одновременного доступа к строкам и столбцам нескольких таблиц.

Компонент TQuery может выполнять не более одного SQL-запроса одновременно. Синтаксис самого запроса зависит от используемой базы данных, которые в своем большинстве совместимы со стандартом SQL-92.

Пример.

Поместите на модуль данных элемент TQuery и DataSource. В свойстве SQL элемента TQuery напишите необходимый запрос.

Создайте новую форму и поместите на нее элемент TDBGrid. Для обеспечения вывода значений таблиц в размещенный на форме элемент DBGrid следует присвоить значение DataSource созданного запроса свойству DataSource.

Также можно организовать выполнение данного запроса по нажатию кнопки.

Для этого разместим на форме компонент TMemo и кнопку Button, при нажатию на которую будет совершаться отсылка запроса элементу TQuery. Для этого нужно добавить обработчик события OnClick и в него следующие строки:

procedure TForm32.Button1Click (Sender: TObject);

begin

dm.Q_Post.SQL := memo1.Lines;

dm.Q_Post.Active := true;

dm.Q_Post.Open;

end;

После написания текста запроса в поле Memo, по нажатию кнопки будет выполнен данный запрос.

Задание:

1. Продемонстрировать работу компонента TQuery.


Лабораторная работа №8 (2 часа)

Тема: «Создание отчётов. Технология Quick Report»

Цели работы:

1. установка пакета компонентов Qreport;

2. принципы построения отчёта.

Теоретические сведения

В большинстве случаев данные, которые хранятся в таблицах БД, необходимо тем или иным способом опубликовать, создавая так называемые отчёты, В Delphi имеется набор компонентов, предназначенных для решения этой задачи. Чтобы ознакомиться с их списком, можно взглянуть на вкладку QReport, где находится порядка двадцати компонентов. По умолчанию, данные компоненты не устанавливаются. Если вы хотите работать с технологией Quick Report, то вам необходимо установить пакет DCLQRT70.BPL. Для этого выберите команду Component → Install Packages, щёлкните на кнопке Add и укажите этот файл, который находится в папки BIN каталога размещения Delphi.

Центральным компонентом при построении отчёта является компонент TQuickRep, определяющий свойства отчёта в целом. Этот компонент всегда помещается на отдельную форму, образуя с её помощью визуальную среду конструирования отчёта.

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

Выполнить:

1. Создайте в проекте пустую форму, расположите на ней компонент TQuickRep, измените имя формы на fmPrint и сохраните в файле fmPrintU. Эта форма не будет создаваться автоматически в момент старта программы, поэтому после её присоединения к проекту выберите команду Project -> Options и перенесите её в список доступных форм Avialable forms.

2. С помощью команды File → Use unit свяжите новую форму с модулем данных, после чего поместите в свойство DataSet компонента QuickReport значение DM.Move. Следует заметить, что это свойство всегда должно быть заполнено и указывать на ту таблицу, которая будет содержать основную информацию.

3. Поместите на отчёт полосу TQRBand. Эта полоса по умолчанию имеет тип rbTitle, то есть появляется всего один раз в самом начале отчёта. Используем её для размещения заголовка накладной, для чего установим её высоту Height=99 и поместим на неё следующие комопненты:

TQRLabel со свойством Caption = Товарная накладная №, Тор = 8, Left = 176, Font.Size = 16, Font.Style.fsBold = True;

TQRDBText со свойствами DataSet = DM.Nakls, DataField = NakllD, Top = 8, Left = 424, Font.Size = 16, Font.Style.fsBold = True;

TQRDBText : Caption = от, Top = 8, Left = 472, Font.Size = 16, Font.Style.fsBold =true

TQRDBText: DataSet = DM.Nakls, DataField = NDate, Top = 8, Left = 504, Font.Size = 16, Font.Style.fsBold = True;

TQRLabel: Caption = Отправитель, Top = 40, Left =16, Font.Size =12, Font.Style.fsBold = True;

TQRLabel: Caption = Получатель, Top = 64, Left = 16, Font.Size = 12, Font.Style.fsBold = True;

TQRDBText: DataSet = DM.Nakls, DataField = Firm, Top = 64, Left = 120, Font.Size =10, Font.Style.fsUnderline = True.