Internet технологии Основная страница    Литература    Тематические ссылки
(конспект)
 Работа в Internet Основы HTML Web-дизайн Web-мастеринг
Введение
E-mail
Поиск информации
FTP
Введение
Ссылки и иллюстрации
Таблицы и списки
Фреймы и формы
Введение
DreamWeaver

HomeSite
Каскадные таблицы стилей CSS
Photoshop 5.5 для Web-дизайна
AdobeImageReady 2.0
Ulead GifAnimator 2.0
JavaScript
CGI
IIS 4.0
ASP. VBScript
>> Работа с БД
Perl
Java
Курс: Web-мастеринг
Работа с БД. Примеры
1. Введение
2. Microsoft Access-97
3. Подключение ODBC к БД
4. Формирование SQL-запроса. Операторы
   4.1. Оператор выбора записей из БД по определенному условию
   4.2. Оператор добавления новой записи в БД
   4.3. Изменение существующих записей в БД
   4.4. Удаление записи или группы записей из БД
5. ActiveX Data Object (ADO)
   5.1. Объект Connection
     5.1.1. Метод Execute
   5.2. Объект RecordSet
     5.2.1. Метод Open объекта RecordSet
     5.2.2. Метод Close объекта RecordSet
6. Пример чата
   6.1. Исходный текст ex3asp.html
   6.2. Пример ex3_1.asp
     6.2.1. Исходный текст ex3_1.asp
     6.2.2. Комментарии к ex3_1.asp
   6.3. Пример ex3_2.asp
     6.3.1. Исходный текст ex3_2.asp
     6.3.2. Комментарии к ex3_2.asp

.. ../ /

1. Введение.

Open Database Connectivity (ODBC).

БД SQL
>>
ODBC SQL
>>
Сервер
программа с ADO
Клиент
браузер

Открытая связь с БД.

БД - это определенным образом структурированный набор данных.
Обычно БД состоит из взаимосвязанных между собой таблиц.
Заголовки столбцов этих таблиц называются полями. А строки - записями.

ID name mess
     

На примере чата.

Количество записей в БД в общем случае неограничено. Не существует счетчика этих записей.

С БД можно проводить следующие операции:

  1. осуществлять выборку записей по какому-либо условию;
  2. добавлять новые записи в БД;
  3. изменять существующие записи в БД;
  4. удалять записи из БД.

Порядка 30% использования Internet - это бизнес-приложения, работа с БД.

Для обращения к БД нужно знать:
  1. псевдоним БД в ODBC;
  2. имена таблиц;
  3. имена полей в каждой из таблиц.
Средства разработки БД:

.. ../ /

2. Microsoft Access-97.

Основой БД является таблица.

Создать >> Режим конструктора

Имя таблицы data1

Ключевое поле - уникальный идентификатор записи.

!!! В Access обратиться к таблице можно только, если там есть хоть одна запись.

Связь с внешним миром осуществляется с помощью ODBC.

ODBC - это набор стандартных драйверов для управления.

Когда подключаем БД к ODBC вручную, указываем с каким драйвером работать.
Все запросы к БД из внешней среды делаются по единому стандарту.
Таким единым стандартом является язык Structured Query Language (SQL).
Программа на сервере формирует SQL-запрос в соответствии с тем драйвером, который подключен.

.. ../ /

3. Подключение ODBC к БД.

  1. Открываем ControlPanel.
  2. Запустить источники данных ODBC.
  3. Выбрать закладку системный DSN.
    Data Sourse Name (DSN) - имя источника данных, это и есть псевдоним БД (на сервере мы создавали псевдоним директории).
    Добавить - выбираем драйвер Microsoft Access Driver (*.mdb).
    webm
    aaa
    Select - реальный путь, выбрать db1 [OK]
    Можно задать логин и пароль.

.. ../ /

4. Формирование SQL-запроса. Операторы.

Это язык для обработки текстов, он узко специализированный, его назначение - формировать запросы к БД.
Здесь нет переменных, математических операций.
Язык является регистронезависимым.
Универсальный язык, который используется для всех БД в любых платформах под любыми ОС.

4.1. Оператор выбора записей из БД по определенному условию.

Выбрать определенные поля из таблицы для записей, удовлетворяющих условию:
Select имя_поля1, имя_поля2 form имя_таблицы where условие
имя_поля1 - name
имя_поля2 - mess
имя_таблицы - data1
where условие - необязательное условие (name=vasja)
Если считываем все поля, то поставить *:
Select * form …

Если условие не указано, то будут выбраны все записи, присутствующие в таблице.

4.2. Оператор добавления новой записи в БД.

Insert into имя_таблицы(имя_поля1,имя_поля2, …) 
		values значение_поля1, значение_поля2, …

Insert into data1(name,mess) values vasja, Hello

Можно добавить только одну запись одним оператором.
Значения полей могут быть только строковыми.

4.3. Изменение существующих записей в БД.

Update имя_таблицы set имя_поля1=значение_поля1, 
		имя_поля2=значение_поля2, … where условие
Условие: id=2
Если не указать условие, изменение произойдет по всей таблице.

4.4. Удаление записи или группы записей из БД.

Delete from имя_таблицы where условие

Удаляет из таблицы все записи, удовлетворяющие условию (например, time<12:00:00)
Здесь условие указывать обязательно.

.. ../ /

5. ActiveX Data Object (ADO).

Связь с БД осуществляется с помощью ADO.

Этот компонент состоит из ряда собственных объектов:

Commond - выполняет операции над источником данных ODBC (работает по умолчанию, прописывать его в явном виде в программе не обязательно).

Connection - устанавливает и разрывает связь с БД.

RecordSet - экземпляр объекта содержит набор записей, полученных от БД в результате выполнения SQL-запроса (массив).

Error - указывает (содержит) список ошибок, возникших при подключении к БД или выполнении SQL-операторов.

5.1. Объект Connection.

Для создания экземпляра объекта Connection необходимо выполнить метод

Set a=Server.CreateObject("ADODB.Connection")

a - экземпляр
ADODB.Connection - идентификатор
В результате отработки метода создается экземпляр объекта Connection.

Для открытия БД необходимо выполнить метод Open

a.Open "DSN_БД", "логин", "пароль"

DSN_БД - это псевдоним базы данных, который прописали в ODBC.
Рекомендуем исползовать именно такую запись, а не документированную в Хилайере (см. Литература), там другая запись со скобками.

5.1.1. Метод Execute.

В литературе почему-то не встречается.
Также относится к объекту Connection и осуществляет выполнение SQL-запроса к БД.

Set r=a.Execute(SQL-запрос)

Результатом выполнения метода Execute является создание экземпляра объекта RecordSet и в этот экземпляр будут занесены результаты запроса к БД.

Этот метод выполняет только 3 функции:

5.1.2. Метод Close.

После сеанса связи обязательно закрытие БД.

a.Close

Любая СУБД при ее открытии создает временный файл, в котором находится копия БД.
При сбое, из резервной копии восстанавливается БД.
БД может изменять только один пользователь в конкретный момент времени.
Закрытие нужно делать сразу после отработки, чтобы дать доступ другим пользователям.

5.2. Объект RecordSet.

Так же относится к компоненту ADO.

Set r=Server.CreateObject("ADODB.RecordSet")

r - экземпляр объекта RecordSet

5.2.1. Метод Open объекта RecordSet.

Что бы выполнить запрос к БД, можем применить метод Open объекта RecordSet

r.Open(SQL-запрос)

В результате применения метода Open производится запрос к БД и в переменную r помещаются результаты этого запроса.
Переменная r будет представлять собой таблицу с записями.

Для перемещения по записям в объекте RecordSet существует четыре метода:

Эти методы осуществляют перемещение по записям, которые являются результатами выполнения запроса.

5.2.2. Метод Close объекта RecordSet.

r.Close

Метод Close объекта RecordSet уничтожает созданный экземпляр r и удаляет все его содержимое из памяти компьютера. Выполнение Close RecordSet не является критичным (просто засорена память старыми запросами).

.. ../ /

6. Пример чата.

Сделать обновление и удаление старых сообщений.
Chat сделан в виде фреймованной структуры.

6.1. Исходный текст ex3asp.html.

	<HTML>
	<HEAD>
	 <TITLE>Доска сообщений</TITLE>
	</HEAD>
	<FRAMESET ROWS="80%,20%" FRAMEBORDER="NO" BORDER=0>
	  <FRAME SRC="ex3_1.asp#end" NAME="MESSAGES">
	  <FRAME SRC="ex3_2.asp" NAME="USER">
	</FRAMESET>
	</HTML>

6.2. Пример ex3_1.asp.

Считывание из БД и вывод ее в страницу HTML. Это собственно сам chat.

6.2.1. Исходный текст ex3_1.asp.

<HTML>
<HEAD>
  <META HTTP-EQUIV="Refresh" Content="60; URL=ex3_1.asp#end">
  <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</HEAD>
<BODY BGCOLOR=silver>
  <TABLE BORDER=1 ALIGN=center WIDTH=80%>
  <TH>ID</TH><TH>NAME</TH><TH>MESSAGE</TH>
<%Set a=Server.CreateObject("ADODB.Connection")
  a.Open "webm"
  sql="select * from data1"
  set r=a.Execute(sql)
  do while not r.EOF
     response.write("<TR><TD>"&r("ID")&"</TD>
	 		<TD>"&r("NAME")&"</TD>
			<TD BGCOLOR=white>"&r("MESS")&"</TD></TR>")
     r.MoveNext
  loop
  r.Close
  a.Close%>
  <TR><TD><A NAME="end"></A></TD></TR>
  </TABLE>
</BODY>
</HTML>

6.2.2. Комментарии к ex3_1.asp.

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

CONTENT="no-cache" - запрет броузеру запоминать страницы в памяти, чтобы не было "кеширования".

Set a=Server.CreateObject("ADODB.Connection")
В переменной a создается экземпляр объекта Connection.

a.Open"webm"
webm - псевдоним БД

С этого момента доступ другим пользователям запрещен.

Формируем SQL-запрос:

sql="select * from data1"

* - все поля

В переменной sql создаем текст запроса.
set r=a.Execute(sql)

Создаем экземпляр объекта RecordSet;
выполняем запрос к БД;
результаты этого запроса помещаются в переменную r, эта переменная находится на компьютере сервера, т.е. разнесено сервер-клиент.

Вторая задача - отобразить на HTML-странице.
do while not r.EOF
EOF - это стандартный метод, он указывает на конец файла или на конец записи.
Цикл выполняется, пока не будет достигнута последняя запись в переменной r.

response.write - выводит информацию в браузер клиента (в табличном виде).

r("ID") r - переменная от поля с именем "ID", здесь обращение к полям таблицы.

r.MoveNext - переходим на следующую запись.

r.Close
a.Close
Закрываем экземпляр объекта, закрываем БД.

NAME="end" - что бы прокрутка обновлялась.

6.3. Пример ex3_2.asp.

6.3.1. Исходный текст ex3_2.asp.

<HTML>
<HEAD>
  <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</HEAD>
<BODY BGCOLOR=silver>
<%Dim Hi
  Hi="Вошел в чат!"%>
<CENTER>
<FORM METHOD=GET ACTION="ex3_2.asp">
<%If Request.QueryString("user_name")="" Then%>
 Зарегестрируйтесь <B>name:</B>
 <INPUT TYPE="text" SIZE="10" NAME="user_name" VALUE="">
 <INPUT TYPE="hidden" NAME="user_mess" VALUE="<%=Hi%>">
<%Else%>
 <B><%=Request.QueryString("user_name")%></B>
 <INPUT TYPE="hidden" NAME="user_name" 
 		VALUE=<%=Request.QueryString("user_name")%>>
 Ваше сообщение:
 <INPUT TYPE="text" SIZE="20" NAME="user_mess" VALUE="">
<%End If%>
 <INPUT TYPE="reset" VALUE="Отмена">
 <INPUT TYPE="submit" VALUE="Добавить">
</FORM>
<%
  Sub InsertMessage(the_name, the_mess)
    Dim a, sql, r
    If (the_name="" Or the_mess="") Then
      Exit Sub
    Else
      Set a=Server.CreateObject("ADODB.Connection")
      a.Open "webm"
      sql="INSERT INTO Data1(name, mess) 
	  		VALUES ("&CHR(39)&the_name&CHR(39)&", 
	  		"&CHR(39)&the_mess&CHR(39)&")"
      set r=a.Execute(sql)
      a.Close
      
    End If
  End Sub

  InsertMessage Request.QueryString("user_name"), 
  		Request.QueryString("user_mess")
%>
</CENTER>
<%If Request.QueryString("user_mess")="" Then%>
<%Else%>
  <SCRIPT>
    parent.window.frames['MESSAGES'].location.href="ex3_1.asp#end"
  </SCRIPT>
<%End If%>
</BODY>
</HTML>

6.3.2. Комментарии к ex3_2.asp.

Как добавить новую запись в БД.

Скрытое поле в HTML используют как неявную переменную, чтобы запомнить данные. Т.е. имя запоминается в скрытом поле.

ACTION="ex3_2.asp"

Данные из формы передаются в этот же файл. Файл переобновляет сам себя.

Request.QueryString("user_name")

"user_name" - имя скрытого поля.
Считываем содержимое поля "user_name", и, если оно пустое, то предлагаем зарегистрироваться.
По "submit" при нажатии кнопки "Добавить" данные передались в эту же самую программу (указано в ACTION).
Страница перезагрузилась и попадаем на начало <%If …
Но поле уже не пустое, поэтому попадаем в блок <%Else%>.
Формируется поле под ввод сообщения.
"user_name" заносится в скрытое поле "hidden", чтобы запомнить имя пользователя.

Далее передача данных в БД.

<%
  Sub InsertMessage(the_name, the_mess)

Это подпрограмма, которая имеет два параметра: the_name и the_mess. Она будет добавлять содержимое в БД.

Dim a, sql, r - явное обновление переменных.
Если введены и имя и сообщение, то выполняется блок Else.

Set a=Server.CreateObject("ADODB.Connection")
Создаем экземпляр объекта Connection

a.Open "webm" - открываем БД.

sql="INSERT INTO Data1(name, mess)
		VALUES ("&CHR(39)&the_name&CHR(39)&", 
		"&CHR(39)&the_mess&CHR(39)&")"
Т.е. добавить в БД в поля значения "the_name", "the_mess":
sql="INSERT INTO Data1(name, mess) VALUES ("the_name", "the_mess")"

set r=a.Execute(sql)
Формируем sql-запрос. Добавляется новая запись.

a.Close - закрываем БД.

<SCRIPT>
    parent.window.frames['MESSAGES'].location.href="ex3_1.asp#end"
</SCRIPT>
Это оператор JavaScript.
Здесь нужно добавить автообновление, старые записи удалять по времени.

[ Home ] [ Top ] [ Web-дизайн ] [ Web-мастеринг ] [ Статьи, обзоры ] [ Литература ] [ Ссылки ]
[ Страничка юмора ] [ Гостевая книга ] [ E-Mail ]

ЦКО при МГТУ им.Н.Э.Баумана
Hosted by uCoz