Home page
Рус. Eng.  
Просто линия
/dbms

Работа с базами данных

icon Конфигурация сервера

icon Скрипт язык сервера

icon Параметры сервера в файле config.ini

Перечень следующих скрипт команд включает возможности работы с базами данных посредством стандартного подключения через ODBC.

Использование этих скрипт команд позволяет получать динамические страницы HTML с содержимым из баз данных и для формирования набора команд SQL.

Прежде всего необходимо настроить соединение с деобходимой БД или SQL сервером (Подключение базы данных - файл dbconfig.ini ) и включить опцию Включение DBMS .

Типы запросов к базе данных

Синтаксис запроса к базе данных:

<RCQcachename sql="sql-query"> 

Любое выражение SQL может быть использовано, например SELECT, INSERT, UPDATE , а так же встроенные процедуры и функции (например exec sp_who).

<RCQcachename sql="
SELECT custid,custname FROM customers 
WHERE custname like 'RC$name%' "> 

Внимание! Вы не можете использовать один тег в другом (например RC$name в предыдущем примере ), ограничители тега ( <93 >93 ) при подстановки переменной в тело запроса не используются. Так же длинна запроса sql может быть более 2 килобайт (в данном ограничении не включается суммарная величина значений переменных скрипта, а только собственно текст скрипт тега).

Возврат результата
Для обработки вывода результата запроса к базе данных могут быть использованы два метода. Простейший это обработка при помощи format аргумента:

<RCQtest sql="
SELECT name, phone FROM employees
" format="Name: %s Phone: %s<BR>" >


В примере, format аргумент использует команду sprintf для формирования формата вывода результата запроса. Все значения вывода приводятся к строковому эквиваленту, при помощи sprintf параметра %s . Максимальное значение данного скрипт параметра Sambar Server 4096 байт , а выводимого значения 8192 bytes. Внимание! Нарушение условий ограничения и формата вывода приводит к ошибкам сервера!

Аргумент maxrows может быть использован для ограничения количества строк вывода. В примере HTML имеет ограничение на 100 строк:

<RCQtest sql="
SELECT name,phone FROM employees
" format="Name: %s Phone: %s<BR>" maxrows=100 >

Второй аргумент, rowstart устанавливает первую строку для вывода результата запроса. Если параметр rowstart определен а количество строк вывода меньше, аргумент не действует.

Номер строки возвращаемой запросом (UPDATE, INSERT, DELETE), может быть получен при использовании RCErowsaffected скрипт тега. Эта переменная rowsaffected может быть использована в if/then условии, например: <RCif RCErowsaffected > 0> работает в любой строке вывода.

Второй тип обработки результата запроса RCFcachename скрипт тег. Эта fetch команда выборки может быть использована для получения следующей строки результата запроса. Значение каждого столбца будет присвоена переменным RCDcachename.1, RCDcachename.2 и т.д. (для 1 элемента первая колонка результата). Но RCFcachename требует после выполнения SQL операции заполнения полей строк, в отличае от использования метода с аргументом format.

<RCQtest sql="SELECT name,phone from employees" >
<RCwhile RCFtest = 1> 
Name: <RCDtest.1> Phone: <RCDtest.2><BR> 
<RCendwhile>

Цикл RCwhile вставляет значения вывода строк полей пока RCFtest возвращает значение 1. Этот fetch механизм возвращает значение 1 если есть информация для вывода, и 0 если резуьтата нет. Внимание! RC while не могут быть вложенными и имеют ограничение длинны 4000 bytes HTML, а так же иметь and/or условие!

Механизм fetch полезен когда требуется обработка результата запроса. Пример, возвращает только строки выборки имеющие значение первого столбца не равные "Bob Smith".

<RCQtest sql="
SELECT name,phone from employees
" >
<RCwhile RCFtest = 1> 
<RCif RCDtest.1 ! "Bob Smith">
Name: <RCDtest.1> Phone: <RCDtest.2><BR>
<RCendif>
<RCendwhile>

Если используется maxrows аргумент запроса, это скажется на результате работы fetch команд.

В данном примере, запрос возвращает только один результат, и может использоватся одна fetch команда.

<RCQtest sql="SELECT SUM(netcount) from netstats" >
<RCFtest> Network Count: <RCDtest.1>

В заключение showerror параметр можно использовать для получения текста ошибок (ODBC errors) и помещения их в HTML страницу. По умолчанию все ошибки ввводятся. В данном примере показано как отключить вывод ошибок:

<RCQtest sql="SELECT foo from bar" showerror=false>
<RCFtest> Foo is: <RCDtest.1>

RCQtest. Значение test - это имя кэша базы данных в конфигурации сервера. Кэш с именем test должен быть сконфигурирован при Подключение базы данных - файл dbconfig.ini.

Закрытие запроса/соединения с БД
Когда запрос к базе данных обработан, а результаты возвращаются броузеру клиента , подключение автоматически возвращается пулу кэша после того как результаты были обработаны. Любые запросы, которые не закончили обработку, а шаблон закончен (то есть выведены не все выбранные строки) обработка будет закончена автоматически.

Множественные запросы
Если в пределах одного шаблона необходимо произвести несколько отдельных запросов к базе данных, каждый из запросов должен иметь описание обработки запроса отдельного кэша, и сначала заканчиватся один, с обработкой результатов, а затем может начинаться описание запроса и вывода следующего запроса.

Указание Username/Password
По умолчанию, имя пользователя и пароль для DBMS соединения получаются из config/dbconfig.ini файла. Но, RCQ может включать и свои значения username и password соответствующими параметрами отличными от описаных в конфигурации кэша базы данных. Ограничение данного параметра сводится к тому что данный запрос не кэшируется, а приводит к следующему, новому соединению с базой данных.

<RCQtest 
username="foo" password="bar" 
sql="
SELECT name,phone from employees
" >

Внимание! Указание username и password устанавливает и заканчивает соединение. Это может быть полезно для соединений ODBC с DBase и Excel файлами.

Пример скрипта
Следующий пример от показывает как получить информацию из базы данных:

Для использования типового запроса с аргументами, и ответа сервера с помещением в страницу содержимого SQL запроса, сначала необходимо создать форму, как обычную html-страницу page1.htm:

page1.htm

<HTML>
<BODY>
<FORM action=page2.stm>
<INPUT type=text name="lastname" value="Epolit">
<INPUT type=submit>
</FORM>
</BODY>
</HTML>

Так же для формирования ответа сервера необходимо создать страницу скрипт-шаблона с расширением *.stm

page2.stm

<HTML>
<BODY>
<TABLE border=1>
<RCQtest sql="SELECT fname,lname,phone from employees where lname = 'RC$lastname' " format="<TR><TD>%s<TD>%s</TD><TD>%s</TD></TR>" >
</TABLE>
</BODY>
</HTML>

После нажатия отправки данных, форма page1.htm передает параметр lastname на сервер в виде запроса к странице page2.stm:

http://www.myserver.ru/page2.stm?lastname=Epolit

При получении данного запроса , сервер формирует SQL запрос к БД согласно шаблону страницы page2.stm с использованием значения переменной формы lastname.

SELECT fname,lname,phone FROM employees where lname = 'Epolit'

Формируется выборка из базы данных. Если в таблице employees были найдены значения равные слову Epolit, строки значений столбцов fname,lname,phone передаются для формирования вывода результата запроса, по шаблону

<TR><TD>%s<TD>%s</TD><TD>%s</TD></TR> 

где, %s - значения строк столбцов таблицы

Примечание: При использовании в SQL запросе строковах значений их необходимо помещать в ограничители - знак (' - одиночная кавычка). Для SQL базы данных значение переменной сервера в шаблоне страницы - это строковая константа.

Просто линия
  E-mail support@sambar.ru © 2001  Sambar.Ru
Last modifed: 2005-05-21 12:25 Распечатать страницу