- •Задания и методические указания к выполнению лабораторных работ
- •Содержание
- •Лабораторная работа №1 Создание приложения по технологии bde на основе заимствованных таблиц
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №2 Разработка приложений с использованием технологии bde на основе создания собственных таблиц
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №3 Использование мастера конструирования форм
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №4 Отбор записей в таблице базы данных
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №5 Динамически создаваемые псевдонимы
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №6 Создание запросов с использованием компонента tQuery
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №7 Работа с одной таблицей. Создание подключения к базе данных
- •Лабораторная работа №8 Связь таблиц
- •Лабораторная работа №9 Метод GetTableNames
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №10 Сортировка записей
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №11 Компонент tadoQuery и его свойства
- •Теоретическая часть
- •Практическая часть
- •1. Свойство sql
- •2. Свойство Parameters
- •Лабораторная работа №12 Фильтрация записей
- •Теоретическая часть
- •Практическая часть
- •Задание для самостоятельного выполнения
- •Лабораторная работа №13 Создание отчетов
- •Теоретическая часть
- •Практическая часть
- •Лабораторная работа №14 Управление транзакциями в sql Server
- •Лабораторная работа №15 Использование доменов и хранимых процедур
- •Список рекомендуемой литературы
2. Свойство Parameters
В Delphi для создания SQL-запроса «на лету» можно использовать динамические запросы. Динамические запросы допускают использование параметров. Для определения параметра в запросе используется двоеточие, за которым следует имя праметра.
Для изменения SQL-запроса во время выполнения приложения параметры необходимо связать. Параметры могут изменяться, запрос выполняться повторно, а данные обновляться. Для непосредственного редактирования значения параметра используется свойство Parameters и метод ParamByName:
ADOQuery1.Parameters.ParamByName(‘Имя_параметра’).Value:=значение
Рассмотрим предыдущий пример с использованием динамического запроса.
На вкладке ADO найдите компонент ADOQuery и расположите его на форме. Примерный внешний вид формы к этому моменту приведен на Рис.11.1.
Лабораторная работа №12 Фильтрация записей
Цель работы:
- научиться осуществлять фильтрацию записей в приложениях, использующих технологию ADO;
- изучить свойства компонента ADOQuery Filter и Filtered;
Теоретическая часть
Изучите теоретический материал, загрузив из папки файл ADOQuery.pps
Практическая часть
Ход работы
Создайте в своей папке на жестком диске Student папку с названием «ЛР_12».
Скопируйте созданную в предыдущих лабораторных работах заполненную базу Books.dbf.
Разместите на Форме следующие компоненты и установите их свойства, согласно Таблице 12.1:
ADOConnection1 (вкладка ADO);
ADOQuery1 (вкладка ADO);
DataSource1 (вкладка Data Access);
DBGrid1 (вкладка Data Control);
DBNavigator1 (вкладка Data Control);
RadioGroup1 (вкладка Standard);
Combobox1, Combobox2, Combobox3, Combobox4, Button1, Label1…Label11 (вкладка Standard);
SpinEdit1, SpiEdit2, SpinEdit3, SpiEdit4 (вкладка Sapmles).
Таблица 12.1. Свойства компонентов приложения «Фильтрация записей»
Компонент |
Свойство |
Значение |
|
Form1 |
Caption |
Фильтрация записей |
|
Color |
По своему усмотрению |
||
Font |
По своему усмотрению |
||
BorderStyle |
bsSingle |
||
BorderIcons |
biMinimize |
False |
|
biMaximize |
False |
||
ADOConnection1 |
ConnectionString |
Установите связь с каталогом (папкой) таблиц баз данных Books |
|
LoginPrompt |
False |
||
DataSource1 |
DataSet |
ADOQuery1 |
|
ADOQuery1 |
Connection |
ADOConnection1 |
|
DBGrid1 |
DataSource |
DataSource1 |
|
DBNavigator1 |
DataSource |
DataSource1 |
|
RadioGroup1 |
Caption |
Фильтрация |
|
Items |
Нет Издательство Автор Книга Тираж Магазин Стоимость Все |
||
Label1 |
Caption |
Стоимость |
|
Label2 |
Caption |
Издательство |
|
Label3 |
Caption |
Автор |
|
Label4 |
Caption |
Магазин |
|
Label5 |
Caption |
Книга |
|
Label6 |
Caption |
Тираж |
|
Label7 |
Caption |
Min |
|
Label8 |
Caption |
Max |
|
Label9 |
Caption |
Min |
|
Label10 |
Caption |
Max |
|
Label11 |
Caption |
Информация о книгах |
|
Combobox1 |
Name |
Izdatelstvo |
|
Combobox2 |
Name |
Avtor |
|
Combobox3 |
Name |
Kniga |
|
Combobox4 |
Name |
Magazin |
|
SpinEdit1
|
Name |
MinSt |
|
MaxValue |
200000 |
||
MinValue |
50 |
||
Value |
50 |
||
SpinEdit2
|
Name |
MaxSt |
|
MaxValue |
200000 |
||
MinValue |
50 |
||
Value |
200000 |
||
SpinEdit3
|
Name |
MinTir |
|
MaxValue |
500000 |
||
MinValue |
1 |
||
Value |
1 |
||
SpinEdit4
|
Name |
MaxTir |
|
MaxValue |
500000 |
||
MinValue |
1 |
||
Value |
500000 |
||
Button1 |
Caption |
Обновить |
|
Примерный внешний вид проектируемой формы представлен на Рис.12.1.
Напишите обработчик щелчка по компоненту RadioGroup1:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
case radiogroup1.ItemIndex of
0: ADOQuery1.Filter:='';
1: ADOQuery1.Filter:='Izdatel='''+Izdatelstvo.Text+'''';
2: ADOQuery1.Filter:='Avtor='''+Avtor.Text+'''';
3: ADOQuery1.Filter:='KNIGA='''+ Kniga.Text+'''';
4: ADOQuery1.Filter:='(Tirag>='+IntToStr(MinTir.Value)+') and (Tirag<='+IntToStr(MaxTir.Value)+')';
5: ADOQuery1.Filter:='Magazin='''+ Magazin.Text+'''';
6: ADOQuery1.Filter:='(Stoimost>='+IntToStr(MinSt.Value)+') and (Stoimost<='+IntToStr(MaxSt.Value)+')';
7: ADOQuery1.Filter:='(Izdatel='''+Izdatelstvo.Text+''') and (Avtor='''+Avtor.Text+''') and (KNIGA='''+ Kniga.Text+''') and (Tirag>='+#13 +IntToStr(MinTir.Value)+') and (Tirag<='+IntToStr(MaxTir.Value)+') and (Magazin='''+ Magazin.Text+''') and (Stoimost>='+IntToStr(MinSt.Value)+') and (Stoimost<='+IntToStr(MaxSt.Value)+')';
//В зависимости от типа выбранного фильтра компонента Combobox1
//формируем значение свойства Filter компонента ADOQuery с помощью оператора Case
end;
ADOQuery1.Filtered:=true; //Включаем созданный фильтр
end;
Напишите обработчик события OnCreate, происходящего при запуске приложения:
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOQuery1.Open;
ADOQuery1.First;
While not ADOQuery1.Eof do
Begin
Izdatelstvo.Items.Add(ADOQuery1['IZDATEL']);
ADOQuery1.Next;
end;
if ADOQuery1.Eof then
begin
ADOQuery1.First;
While not ADOQuery1.Eof do
Begin
Avtor.Items.Add(ADOQuery1['AVTOR']);
ADOQuery1.Next;
end;
end;
if ADOQuery1.Eof then
begin
ADOQuery1.First;
While not ADOQuery1.Eof do
Begin
MAGAZIN.Items.Add(ADOQuery1['MAGAZIN']);
ADOQuery1.Next;
end;
end;
if ADOQuery1.Eof then
begin
ADOQuery1.First;
While not ADOQuery1.Eof do
Begin
Kniga.Items.Add(ADOQuery1['KNIGA']);
ADOQuery1.Next;
end;
end;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from Books');
ADOQuery1.Open;
Izdatelstvo.ItemIndex:=0;
Avtor.ItemIndex:=0;
Magazin.ItemIndex:=0;
Kniga.ItemIndex:=0;
DBGrid1.Columns[0].Title.caption:='Издательство';
DBGrid1.Columns[1].Title.caption:='Книга';
DBGrid1.Columns[2].Title.caption:='Автор';
DBGrid1.Columns[3].Title.caption:='Тираж';
DBGrid1.Columns[4].Title.caption:='Обложка';
DBGrid1.Columns[5].Title.caption:='Магазин';
DBGrid1.Columns[6].Title.caption:='Цена';
end;
Запишите обработчик события, происходящего при закрытии формы OnClose:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADOQuery1.Close;
end;
Для компонентов SpinEdit1..SpinEdit4 (MinSt, MasSt, MinTir, MaxTir) запишите обработчики событий OnMouseDown и OnChange:
procedure TForm1.MinStMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
minst.MaxValue:=maxst.Value;
end;
procedure TForm1.MaxStMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
maxst.MinValue:=minst.Value;
end;
procedure TForm1.MinTirMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
mintir.MaxValue:=maxtir.Value;
end;
procedure TForm1.MaxTirMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
maxtir.MinValue:=mintir.Value;
end;
procedure TForm1.MaxTirChange(Sender: TObject);
begin
maxtir.MinValue:=mintir.Value;
end;
procedure TForm1.MinTirChange(Sender: TObject);
begin
mintir.MaxValue:=maxtir.Value;
end;
procedure TForm1.MaxStChange(Sender: TObject);
begin
maxst.MinValue:=minst.Value;
end;
procedure TForm1.MinStChange(Sender: TObject);
begin
minst.MaxValue:=maxst.Value;
end;
Для кнопки Button1 (Обновить) выберите на вкладке Events событие OnClick и выберите из выпадающего списка событие RadioGroup1Click.
Сохраните проект в своей папке.
Запустите проект на выполнение. При появлении сообщения об ошибке нажмите ОК и выберите команду Run → Program Reset (Ctrl+F2).
Выйдите из среды Delphi 7, и, запустив exe-файл, проверьте работоспособность приложения.
В
ид
работающего приложения приведен на
Рис.12.2.
