Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания лабы БД программисты.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
797.7 Кб
Скачать

Лабораторная работа №11 Тема: Запросы с параметром. Динамический запрос

Цель: Изучить язык SQL, организацию отбора данных; изучить запрос с параметром, динамический запрос.

Задание:

  1. Изучить язык SQL.

  2. Изучить динамический способ создания запросов.

  3. Изучить параметрический способ создания запросов.

  4. Создать динамический запрос и запрос с параметром для приложений с базами данных Paradox и MS Access.

SQL - запрос, создаваемый при проектировании приложения, называется статическим. Кроме этого, существует возможность формировать или изменять запрос в ходе выполнения приложения. Такой запрос называется динамическим. Применяются динамические запросы в тех случаях, когда возникает необходимость изменять их в зависимости от определенных действий пользователя, например, если поле для сортировки определяется тем, какой переключатель RadioButton выбирает пользователь в процессе работы в тот или иной момент времени.

Динамический запрос формируется путем изменения свойства SQL компонента Query.

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

Следует также обратить внимание на то, что перед динамическим изменением SQL - запроса необходимо закрыть набор данных, вызвав метод Close, а затем очистить содержимое свойства SQL, используя метод Clear.

Параметрический запрос.

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

Параметры - это специальные переменные, значение которых заранее не известно. Как и для обычных переменных, в ходе выполнения программы вместо параметра подставляется его значение. В тексте запроса перед именем параметра ставится двоеточие.

Параметры, указанные в SQL - запросе, автоматически добавляются в список параметров, являющийся значением свойства Params компонента Query. С помощью данного свойства можно получить доступ к каждому параметру при разработке или выполнении приложения. Обращение к параметру осуществляется по его номеру (индексу) или по его имени.

При выполнении приложения перед вызовом запроса вместо параметра нужно подставить его значение. Необходимо также указать тип параметра с помощью одного из свойств вида AsХХХХ (AsString, AsInteger и т.д.), после чего подставляемое значение преобразовать к данному типу.

Таким образом, можно передавать различные параметры в SQL - запрос, не изменяя сам текст запроса. Поскольку текст параметрического запроса не меняется, его можно предварительно подготовить, используя метод Prepare. Данный метод обычно вызывается при создании формы. Применение этого метода позволяет ускорять выполнение параметрических, а также статических запросов. Анализируя свойство Prepared, можно определить, был ли запрос предварительно подготовлен. После подготовки запроса методом Prepare данному свойству устанавливается значение True.

Если текст подготовленного запроса был изменен (присвоение значений параметрам изменением не считается), то автоматически вызывается метод UnPrepare и свойству Prepared устанавливается значение False.

Создание динамического и параметрического запросов:

Создаём форму следующего вида:

Для первого запроса с параметром прописываем в свойстве SQL:

Для второго запроса с параметром прописываем в свойстве SQL:

Код программы:

procedure TForm17.BitBtn2Click(Sender: TObject);

begin

Form17.Hide;

end;

procedure TForm17.TabSheet1Show(Sender: TObject);

begin

DBGrid1.DataSource:=DataSource1;

ComboBox1.Items.Clear;

ComboBox1.Text:='';

RadioGroup1.ItemIndex:=-1;

RadioGroup2.ItemIndex:=-1;

with DataModule2 do

begin

TGryppa.First;

while not TGryppa.Eof do

begin

ComboBox1.Items.Add(TGryppa.fieldbyname('nazvanie_gr').AsString);

TGryppa.Next;

end;

end;

end;

procedure TForm17.BitBtn1Click(Sender: TObject);

var gr:string[4];

forma:string;

begin

Query2.Close;

Query2.SQL.Clear;

Query2.SQL.Add('SELECT *');

Query2.SQL.Add('FROM stydent');

gr:=ComboBox1.Text;

case RadioGroup2.ItemIndex of

0: forma:='бюджет';

1: forma:='коммерция';

end;

Query2.SQL.Add('WHERE (nazvanie_gr='''+gr+''')and');

Query2.SQL.Add('(forma_ob='''+forma+''')');

case RadioGroup1.ItemIndex of

0: Query2.SQL.Add('ORDER BY FIO');

1: Query2.SQL.Add('ORDER BY FIO DESC');

end;

Query2.Open;

DBGrid1.DataSource:=DataSource2;

end;

procedure TForm17.TabSheet2Show(Sender: TObject);

begin

DBGrid2.DataSource:=DataSource1;

DBGrid3.DataSource:=DataSource5;

Edit1.Text:='';

Edit2.Text:='';

end;

procedure TForm17.BitBtn3Click(Sender: TObject);

var kod:string;

sym:Currency;

begin

if (Edit1.Text<>'')and(edit2.Text<>'')then

begin

Query3.Close;

Query3.ParamByName('kod').AsString:=Edit1.Text;

Query3.Open;

DBGrid2.DataSource:=DataSource3;

Query5.Close;

Query5.ParamByName('sym').AsCurrency:=StrToCurr(Edit2.Text);

Query5.Open;

DBGrid3.DataSource:=DataSource6;

end

else MessageDlg('Необходимо заполнить все поля!',mtInformation,[mbOK],0);

end;

procedure TForm17.FormShow(Sender: TObject);

begin

PageControl1.ActivePageIndex:=0;

end;

procedure TForm17.BitBtn4Click(Sender: TObject);

begin

DBGrid1.DataSource:=DataSource1;

DBGrid2.DataSource:=DataSource1;

DBGrid3.DataSource:=DataSource5;

Edit1.Text:='';

Edit2.Text:='';

end;