Выполнение запросов к базам данных

Выполнение запросов к базам данных. Для выполнения запросов к базе данных используется тег 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 - запросах соответствует произвольной последовательности символов. Также для определения маски может использоваться символ подчерк, соответствующий одному произвольному символу. 5.8