Динамічний запит формується чи змінюється при виконанні додатка. Параметричний запит також є динамічним. Його виділяють в окремий клас через наявність спеціального програмного апарата, що підтримує виконання параметричних запитів. Такий запит звичайно застосовується, якщо його текст залежить від дій користувача. Розглянемо приклад: сформувати динамічний запит для сортування даних по полю Name чи полю BirthDay. Також передбачити сортування по зростанню чи убуванню. Помістимо на форму два компоненти RadioGrup і кнопку Button. В оброблювачі подій onClick для кнопки Button помістимо код:
Query1.Sql.Close;
Query1.Sql.Clear;
Query1.Add(‘Select * From Kadr’);
Str:=’ ’;
Case RadioGrup1.ItemIndex of
0:str:=’ Order By Name’;
1:str:=’ Order By BirthDay’;
end;
Case RadioGrup2.ItemIndex of
0:str:=str+’ ’;
1:str:=str+’ Desc’;
end;
Query1.Add(str);
Query1.Prepare;
Query1.Open;
Динамічний запит іншого роду можна використовувати для рішення такої задачі: потрібно видати список з таблиці товарів Tovar для заданого найменування товару з визначеними атрибутами, що можуть задаватися або цілком чи частково. Атрибути, що уточнюють запит: назва фірми-постачальника, кількість штук поставки, дата поставки. Усі ці дані вводяться в компонентах Edit. Якщо не задана назва товару, то потрібно видати повідомлення. Якщо задані уточнюючі атрибути, то їх потрібно включити в запит. Ситуація трохи ускладнюється необхідністю вказувати різні роздільники у випадку різних запитів( пробіл або ключове слово AND) у ключовому слові Where. Також варто врахувати, що символьні константи і дати в запиті потрібно вказувати у подвійних лапках.
Var
Str:string;{Текст запиту}
Begin
If Edit1.Text=’ ‘ then
begin
{Не введена назва товару}
ShowMessage('Не введена назва товару!');
Edit1.SetFocus;{Перейти у вікно для введення назви товару}
Exit;
end;
Query1.Close;
Query1.Clear;
Str:='Select * From Tovar Where Name='+'”'+Edit1.Text+'”';
{Починаємо формувати текст запиту. У полі запиту умова з назвою товару є завжди, це поле не порожнє, це вже перевірено вище. Воно повинно бути вказане в подвійних лапках}
If Edit2.text<>' ' then Str:=Str+'AND Firma='+'”'+Edit2.Text+'”';
{Уведена назва фірми}
If Edit3.text<>' ' then Str:=Str+'AND Data='+'”'+Edit3.Text”+';
{Уведена дата постачання}
If Edit4.text<>' ' then Str:=Str+'AND KOL='+Edit4.Text;