Параметры в программах на SQL


Описанный в предыдущей статье (использование языка SQL в Delphi) способ изменения программы на SQL во время выполнения приложения неудобен тем, что он предъявляет весьма высокие требования к квалификации пользователя приложения: он должен знать структуру файлов и владеть языком. Конечно, за это он имеет в своем распоряжении всю мощь языка и обширные возможности для поиска данных. Имеется и третья возможность: программа на SQL может содержать формальные параметры и пользователь приложения, не меняя структуру программы, может с помощью фактических параметров формулировать разные запросы.

Допустим, что необходимо из таблицы part выдать данные на основе запросов, содержащих ограничения по полям price и pvnum. Для этого в объекте Query2:
• в свойстве SQL пишем следующую программу:

SELECT pname,price
FROM part
WHERE (price BETWEEN :pr1 AND :pr2) AND pvnum=:num1

• свойство Active сохраняет значение False.

Как видно из примера, признаком формального параметра является двоеточие : на параметры можно ссылаться по имени и по номеру; нумерация начинается с нуля (:pr1 имеет номер 0).

Форма для работы с параметрами приведена на рис. 1. Реализация кнопки “Выполнить”

procedure TForm1.Button1Click(Sender: TObject);
begin
with Query2 do
begin{Свойство Active получит значение False, как всегда }
close; {перед внесением изменений}
{Обращение к параметрам по номеру}
Params[0].AsInteger:=StrToInt(Edit1.Text);
Params[1].AsInteger:=StrToInt(Edit2.Text);
{Обращение к параметру по имени}
ParamByName(‘num1’).AsString:=Edit3.Text;
Open; {Свойство Active получит значение True, как всегда }
{после внесения изменений}
end;
end;


Рис. 1. Работа с параметрами

На вопросы надежности при использовании SQL с параметрами необходимо обращать особое внимание. Во время создания приложения практически не проверяется соответствие между формальными и фактическими параметрами. Если после нажатия на кнопку “Выполнить” будет обнаружено несоответствие, то возникает программное прерывание.

Для уменьшения такого риска можно, например, пользоваться масками ввода. Параметры позволяют иногда и исключить проверку по какому-либо критерию: можно дать такие значения фактическим параметрам, что все записи файла удовлетворяют им. Легко видеть, что в нашем примере по цене такой диапазон выбрать можно, но по именам нет.

Напомним, что любое приложение в Delphi может иметь много окон, поэтому запрос на ввод параметров может быть целесообразно вынести в отдельное окно.

Обращаем внимание на строку
SQL.Add(Memo1.Text);{Подключаем новую программу на SQL}, которая была в одном из приведенных выше примеров. Строго говоря, этот оператор означает добавление операторов SQL в программу. Поэтому, если хорошо продумать, то можно синтезировать программу на SQL.

Например, используем для этого кнопки выбора: нажатое состояние кнопки означает добавление в программу дополнительного условия и запрос значения для него. Распределение текста в программах на SQL произвольное, поэтому можем разными группами кнопок составить разделы SELECT, FROM, WHERE и т. д. Попробуйте!


Комментарии запрещены.




Статистика