- •5.2. Связывание файлов. Проектирование базы данных
- •5.3. Реализация базы данных в Delphi
- •5.4. Обработка файлов
- •5.4.1. Представление данных в виде таблиц
- •5.4.2. Представление данных в виде форм
- •5.4.3. Совместное использование таблицы и формы
- •5.5. Внесение изменений в файл
- •6. Язык sql и его использование в Delphi
- •6.1. Элементы языка sql
- •6.2. Использование языка sql в Delphi
- •6.3. Параметры в программах на sql
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 и т. д. Попробуйте!
-