Параметризованные запросы

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Как мне передать переменную в запрос?

Сначала вы должны создать запрос, использующий переменную.

Select Test.»FName», Test.»Salary Of Employee»

From Test

Where Test.»Salary of Employee» > :val

Примечание: Если вы просто пишете имя поля как «Salary of Employee», вы получите ошибку «Capability Not Supported». Это должно быть просто Test.»Salary of Employee».

В нашем случае имя переменной «val», но это может быть любое другое (естественно). Затем вы переходите к свойству TQuery’s params и устанавливаете параметр «val» в зависимости от требуемого типа. В нашем примере мы используем тип integer.

Затем вы должны создать код, устанавливающий значение параметра. Для задания значения мы будем использовать компонент TEdit.

procedure TForm1.Button1Click(Sender: TObject);

begin

with Query1 do

begin

Close;

ParamByName(‘val’).AsInteger := StrToInt(Edit1.Text);

Open;

end;

end;

Примечание: рекомендуем в качестве меры предосторожности разместить приведенный выше код в блоке try..except.

Если в своем запросе вы хотите использовать ключевое слово LIKE, то вы можете сделать это так:

Примечание: Следующий код использует таблицу пользователя, расположенную в каталоге \delphi\demos\data. При этом также возможно использование псевдонима DBDEMOS.

Код SQL для свойства TQuery.SQL:

SELECT * FROM CUSTOMER

WHERE Company LIKE :CompanyName

Код Delphi:

procedure TForm1.Button1Click(Sender: TObject);

begin

with Query1 do

begin

Close;

ParamByName(‘CompanyName’).AsString := Edit1.Text ‘%’;

Open;

end;

end;

Альтернативный способ передачи параметра (с последующим использованием ParamByName) — params[TheParameterNumber].

Вот демонстрация такого способа:

ParamByName(‘CompanyName’).AsString := Edit1.Text ‘%’;

или, в качестве альтернативы:

Params[0].AsString := Edit1.Text ‘%’;

Хитрость шаблона — в конкатенирующем знаке процента в конце параметра.

{/codecitation}

Добавить комментарий