Теоретические сведения. Данная работа позволяет организовать взаимодействие с базами данных через Интернет

Данная работа позволяет организовать взаимодействие с базами данных через Интернет. Смысл ее в том, что пользователь может открыть удаленный сайт и «залезть» в базу данных удаленного компьютера, разумеется, при отсутствии ограничений, устанавливаемых браузером. По мере изложения теоретического материала будем «продвигаться» в изучении VBS.

Создадим следующий сайт:

<HTML>

<H3><Font Color=White>ЛАБА VBS</Font><H3>

<HR>

<SCRIPT LANGUAGE="VBScript">

<!--

Option Explicit

Dim blnValue, strUserName, xCustomer

sub showAccess

Dim objacc, strConnection, strDataBase, rs,sfio

Set objacc = CreateObject("ADODB.Connection")

strConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

strdataBase="d:\german\JULIA_CIT_COURSE\ЛАБЫ\my.mdb"

objacc.Open strConnection & strDatabase

Set rs = objacc.Execute("Select * from stud")

Do until rs.EOF

sfio = rs("fio")

msgbox sfio

rs.MoveNext

Loop

end sub

-->

</SCRIPT>

<BODY bgcolor=0x1255AA>

<form name="frm">

<br>

<br>

<center>

<br>

<br>

<input type="Button" name="b3" value="ShowACCESS" onClick="call showAccess">

</center>

</form>

</BODY>

</HTML>

Внешний вид этого сайта показан на рисунке:

Мы пишем обработчик для кнопки в скрипте:

sub showAccess

Dim objacc, strConnection, strDataBase, rs,sfio

Set objacc = CreateObject("ADODB.Connection")

strConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

strdataBase="d:\german\JULIA_CIT_COURSE\ЛАБЫ\my.mdb"

objacc.Open strConnection & strDatabase

Set rs = objacc.Execute("Select * from stud")

Do until rs.EOF

sfio = rs("fio")

msgbox sfio

rs.MoveNext

Loop

end sub

База данных ACCESS размещена по адресу

"d:\german\JULIA_CIT_COURSE\ЛАБЫ\my.mdb"

Она содержит таблицу stud с полями fio и age. Для подключения к базе мы используем строку соединения

strConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

На основе этого соединения осуществляется выборка записей по команде SELECT.

Теперь мы усовершенствуем свой сайт, разместив в нем другие элементы:

Текст документа приведен ниже:

<HTML>

<H3><Font Color=White>ЛАБА VBS</Font><H3>

<HR>

<SCRIPT LANGUAGE="VBScript">

<!--

Option Explicit

Dim blnValue, strUserName, xCustomer,objacc, strConnection, strDataBase, rs,sfio

sub showAccess

Set objacc = CreateObject("ADODB.Connection")

strConnection= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

strdataBase="d:\german\JULIA_CIT_COURSE\ЛАБЫ\my.mdb"

objacc.Open strConnection & strDatabase

Set rs = objacc.Execute("Select * from stud")

document.frm.tfio.value=rs("fio")

document.frm.tage.value=rs("age")

end sub

-->

</SCRIPT>

<BODY bgcolor=0x1255AA>

<form name="frm">

<H1> Information about collegues</h1>

<hr>

FIO:<Input type="TextField" name="tfio" value="" size=20>

<br>

AGE<Input type="TextField" name="tage" value="" size=10>

<br>

<center>

<br>

<br>

<table bgcolor=0x55aadd border=2>

<tr>

<td><input type="Button" name="b3" value="OpenACCESS" onClick="call showAccess"></td>

<td><input type="Button" name="b4" value="Forward" ></td>

<td><input type="Button" name="b5" value="Back"></td>

</tr>

</table>

</center>

</form>

</BODY>

</HTML>

Пока все еще работает одна кнопка. Запрограммируем кнопку движения по записям вперед и назад (они по сути идентичны).

Движение вперед:

sub forward

Dim h

on Error resume next

if rs.eof=false then

rs.movenext

if rs.eof=false then

if Err.Number<>0 then

msgbox Err.Description

exit sub

end if

else

rs.movefirst

end if

else

'rs.movefirst

end if

document.frm.tfio.value=rs("fio")

document.frm.tage.value=rs("age")

end sub

Движение вперед выполняет команда rs.movenext. Чтобы двигаться вперед, следует проверить достижение конца набора записей. VBScript (как, собственно и Visual Basic) требует такую проверку выполнять дважды:

if rs.eof=false then

rs.movenext

if rs.eof=false then

Это приводит к усложнению понимания программы, но что поделать? Кнопку движения назад запрограммируйте самостоятельно. Проверка того, что достигнуто начало набора записей реализует метод rs.bof. Команда движения назад – это rs.moveprevious.

Теперь следует добавить в приложение поисковик. Будем искать запись по имени. Для этого несколько переделаем форму:

В таблице появилась новая кнопка, что достигнуто следующей перекодировкой:

<table bgcolor=0x55aadd border=2>

<tr>

<td><input type="Button" name="b3" value="OpenACCESS" onClick="call showAccess"></td>

<td><input type="Button" name="b4" value="Forward" onClick="call forward"></td>

<td><input type="Button" name="b5" value="Back"></td>

</tr>

<tr>

<td colspan=3 align=center><input type="Button" name="b6" value=" Find "></td>

</tr>

</table>

Заметим, что строка

<td colspan=3 align=center><input type="Button" name="b6" value=" Find ">

объединяет три столбца в один, где мы и помещаем кнопку для поиска.

Программу для кнопки поиска мы реализовали таким образом:

sub findrec

Dim sq

on Error resume next

rs.close

if Err.Number<>0 then

msgbox Err.Description

exit sub

end if

Set rs=nothing

sq="Select * from stud where fio="""+document.frm.tfio.value+""""

Set rs = objacc.Execute(sq)

if Err.Number<>0 then

msgbox Err.Description

exit sub

end if

document.frm.tfio.value=rs("fio")

document.frm.tage.value=rs("age")

end sub

Обратим внимание на обилие двойных кавычек в строке

sq="Select * from stud where fio="""+document.frm.tfio.value+""""

Дело в необходимости строковые параметры брать в двойные кавычки, т.е. запрос должен иметь вид

Select * from stud where fio="peter"

Поэтому чтобы программа правильно нас поняла, следует удваивать двойные кавычки.

ЗАДАНИЕ.

1. Запрограммировать команды вставки и удаления записей из БД

2. Отображать при переходе на новую запись фотографию коллеги в компоненте <img>, изменяя его свойство src. Для этого изменить структуру таблицы и хранить в ней адрес файла с фотографией.

3. Попытайтесь осуществить приближенный поиск по части имени. Используйте для этого функцию InStr(n,S1,S2) которая возвращает позицию подстроки S2 в строке S1, начиная просмотр с позиции n в строке S2. Если функция возвращает значение 0, то это означает, что поиск закончился неудачей.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: