Данная работа позволяет организовать взаимодействие с базами данных через Интернет. Смысл ее в том, что пользователь может открыть удаленный сайт и «залезть» в базу данных удаленного компьютера, разумеется, при отсутствии ограничений, устанавливаемых браузером. По мере изложения теоретического материала будем «продвигаться» в изучении 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, то это означает, что поиск закончился неудачей.