Суббота, 21.07.2018, 12:52
Приветствую Вас Гость

LabSoft

Меню сайта
Категории каталога
Статьи по кодингу [24]
Материалы по кодингу
КреатиFF [144]
Рассказы, истории, анекдоты...
Разное [8]
Советы, трюки, полезные рекомендации, статьи о новом и забытом старом...
Наш опрос
Оцените сайт:
Всего ответов: 19
Главная » Статьи » Статьи по кодингу

Запросы с динамическим параметров в Дельфи.
Я не раз убеждался, в удобстве создания и выполнения SQL - запросов в Дельфи. Сегодня мы познакомимся с созданием динамических запросов.

Динамические запросы использую параметры, которые определяются двоеточием, за которым стоит имя передаваемого параметра -> oklad=:oklad.

Пример:
select *
from Сотрудники, Отработка
where Сотрудники.tab=Отработка.tab and oklad=:oklad

Что делает это запрос?
Происходит вывод всех полей (select * - все поля!) из двух таблиц (Сотрудники и Отработка), при совпадении у записей табельных номеров и окладу равному введенному.

Для изменения SQL-запроса во время выполнения приложения, параметры необходимо связать. Параметры могут изменяться, запрос выполняться повторно, а данные обновляться. Для непосредственного редактирования значения параметра используется свойство Parameters, которое представляет из себя массив. Для того чтобы получить доступ к параметру, первым делом необходимо указать индекс и имя параметра:

Query1.Parameters[0].value:=0;
Query1.Parameters[0].name:=oklad;

Пробуем реализовать это хозяйство:
Создаем в Delphi новый запрос на основе таблиц MS SQL Server (я создал свою - Сотрудники). Запрос должен выводить все поля указанной таблицы, но только для тех записей, по которым оклад равен введенному (динамический параметр).

Добавляем на форму объекты Edit1.Text и Button. В событии кнопки на щелчок мыши заносим следующий код, который можно откорректировать его под свои данные.

procedure TForm1.Button2Click(Sender: TObject);
begin
Query1.close; //меры предосторожности
if not Query1.prepared then
Query1.prepared; //запрос подготовлен?
if length(edit1.text) <> 0 then //проверка, параметр не должен быть пустым!
Query1.Parameters[0].Value:=edit1.text
else
begin
Query1.Parameters[0].value:=0;
edit1.text:='0';
end;

try //вот здесь используем исключительные ситуации
Query1.Open; //GO, Go, Go...
except //обрабатываем ошибки в случае их возникновения
On Er: EDatabaseError do messageDlg(Er.message, mtError, [mbOK],0); //Er - дескриптор ошибки
end;
end;

Разбор полета.
При вызове метода prepared Delphi посылает SQL запрос на удаленный сервер. Сервер выполняет грамматический разбор и оптимизацию запроса. Преимущество такой подготовки запроса состоит в его предварительном разборе и оптимизации. Альтернативой здесь может служить подготовка сервером запроса при каждом его выполнении. Как только запрос подготовлен, подставляются необходимые новые параметры, и запрос выполняется.

Запросы с динамическими параметрами очень удобная вещь, бывают случаи, когда необходимо использовать несколько параметров. Удобство реализации таких запросов позволяет создавать очень сложные запросы без напрягов. (Хотя сказано утрировано...)

Категория: Статьи по кодингу | Добавил: Jimmy (10.03.2008)
Просмотров: 3291 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0