Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_РиЭУБД.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
4.09 Mб
Скачать

2. Свойство Parameters

В Delphi для создания SQL-запроса «на лету» можно использовать динамические запросы. Динамические запросы допускают использование параметров. Для определения параметра в запросе используется двоеточие, за которым следует имя праметра.

Для изменения SQL-запроса во время выполнения приложения параметры необходимо связать. Параметры могут изменяться, запрос выполняться повторно, а данные обновляться. Для непосредственного редактирования значения параметра используется свойство Parameters и метод ParamByName:

ADOQuery1.Parameters.ParamByName(‘Имя_параметра’).Value:=значение

Рассмотрим предыдущий пример с использованием динамического запроса.

На вкладке ADO найдите компонент ADOQuery и расположите его на форме. Примерный внешний вид формы к этому моменту приведен на Рис.11.1.

Лабораторная работа №12 Фильтрация записей

Цель работы:

- научиться осуществлять фильтрацию записей в приложениях, использующих технологию ADO;

- изучить свойства компонента ADOQuery Filter и Filtered;

Теоретическая часть

Изучите теоретический материал, загрузив из папки файл ADOQuery.pps

Практическая часть

Ход работы

  1. Создайте в своей папке на жестком диске Student папку с названием «ЛР_12».

  2. Скопируйте созданную в предыдущих лабораторных работах заполненную базу Books.dbf.

  3. Разместите на Форме следующие компоненты и установите их свойства, согласно Таблице 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.

  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;

  1. Напишите обработчик события 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;

  1. Запишите обработчик события, происходящего при закрытии формы OnClose:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

ADOQuery1.Close;

end;

  1. Для компонентов 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;

  1. Для кнопки Button1 (Обновить) выберите на вкладке Events событие OnClick и выберите из выпадающего списка событие RadioGroup1Click.

  2. Сохраните проект в своей папке.

  3. Запустите проект на выполнение. При появлении сообщения об ошибке нажмите ОК и выберите команду RunProgram Reset (Ctrl+F2).

  4. Выйдите из среды Delphi 7, и, запустив exe-файл, проверьте работоспособность приложения.

В ид работающего приложения приведен на Рис.12.2.