Выполнение запросов к базам данных
Для выполнения запросов к базе данных используется тег DBQUERY.
Этот тег имеет следующий синтаксис:
<DBQUERY NAME="имя запроса"
DATASOURCE="имя источника данных odbc"
SQL="sql выражение"
TIMEOUT=n MAXROWS=n DEBUG>
Атрибут NAME определяет имя
запроса, которое используется далее для отображения результата
выполнения запроса. Имя запроса должно начинаться с буквы и может
содержать буквы и цифры (пробелов быть не должно).
Атрибут DATASOURCE задает
имя источника данных ODBC,
который должен быть создан с помощью интерфейса администратора
Cold Fusion.
Ключевым атрибутом тега DBQUERY,
является атрибут SQL, который
собственно и определяет запрос к базе данных на языке SQL
(для улучшения читабельности, допускается расположение значения
атрибута SQL на нескольких
строках).
Создавая SQL запрос, следует
помнить, что конкретная база данных может иметь свои особенности
в синтаксисе SQL, использование
которых ограничивается этой базой данных. Чтобы проверить, является
ли конкретное SQL выражение
совместимым с ODBC и независимым
от конкретной базы данных, лучше всего использовать Microsoft
Query, входящий в состав Microsoft
Office. Для этого нужно в меню Microsoft
Query выбрать "Файл/Выполнить
SQL", в появившемся
окне диалога ввести предложение SQL,
выбрать источник данных ODBC,
нажав на кнопку "Источники...",
после чего нажать на кнопку "Выполнить".
Этот продукт можно также использовать и для создания SQL
- выражений, используя для этого визуальные средства создания
запросов. Получить SQL - выражение
созданного таким образом запроса можно нажав на кнопку "SQL"
в панели инструментов.
Атрибут MAXROWS является необязательным
и определяет максимальное количество записей, которые могут быть
возвращены в результате выполнения запроса.
Атрибут TIMEOUT также является
необязательным и определяет максимальное количество миллисекунд
для выполнения запроса, до выдачи сообщения об ошибке.
Заметим,
что этот атрибут поддерживается только некоторыми ODBC
- драйверами (например, драйвером
для MS SQL Server 6.0).
Атрибут DEBUG используется
для отладки запросов. При наличии этого атрибута пользователю
отправляется дополнительная информация о выполнении этого запроса,
такая как текст выполненного SQL
- запроса, число возвращенных записей и др.
Приведем пример запроса с именем 'AllPersons',
который возвращает все записи таблицы 'Persons'
из базы данных, с которой связан источник данных ODBC
с именем 'Person DB':
<DBQUERY NAME="AllPersons"
DATASOURCE="Person DB"
SQL="select * from Persons">
Для динамической настройки SQL -
выражения можно использовать параметры, переданные в шаблон. Это
могут быть параметры, переданные из формы, URL,
а также переменные CGI. Параметры,
используемые внутри SQL -
выражения, должны быть обрамлены символом "#"
(например #Name#).
При обработке запроса Cold
Fusion ищет параметр с таким именем среди параметров, полученных
из формы, в URL или среди
переменных CGI. При нахождении
подходящего параметра его значение подставляется вместо соответствующей
ссылки на параметр.
Примеры использования параметров в SQL
-выражении
Пример 1
Предположим что обрабатывается URL
"/cgi-shl/dbml.exe?Template=prs.dbm&Id=22",
а атрибут SQL в DBQUERY
имеет вид
SQL="select * from Persons
where Id = #Id#",
тогда в базу данных будет передано следующее SQL - выражение:
select * from Persons where Id
= 22 .
Пример 2
Предположим, что в шаблон передан параметр FirstLetters
и нужно найти в таблице Persons
записи, в которых первые
буквы в поле FullName совпадают
со значением этого параметра. Значение атрибута SQL
в этом случае будет следующим:
SQL="select * from Persons
where FullName like '#FirstLetters#%'"
Следует обратить внимание на то, что маска, состоящая из параметра
и символа '%', в отличие от
предыдущего примера, обрамлена одинарными кавычками.Это связано
с тем, что поле Id из примера
1 имеет числовой тип, а поле
FullName - текстовый тип (синтаксис
SQL требует, чтобы текстовые
значения всегда были обрамлены одинарными кавычками).
Для того чтобы задать маску, в примере использовался символ '%',
который в SQL - запросах соответствует
произвольной последовательности символов. Также для определения
маски может использоваться символ '_'
(подчерк), соответствующий одному
произвольному символу.