Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Failid.DOC
Скачиваний:
14
Добавлен:
31.03.2015
Размер:
266.24 Кб
Скачать

6.3. Параметры в программах на sql

Описанный в § 6.2 способ изменения программы на 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).

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

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;

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

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

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

Обращаем внимание на строку

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

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

- 84-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]