Считывание данных из гостевой книги
Набор процедур VBA - Считывание данных из гостевой
книги frontpage 2000 в таблицу access 2000.
Теоретическое введение
Секрет, как стать профессиональным разработчиком программ
на Visual Basic, состоит в том, чтобы писать программы, требующие от нас
применения самых разнообразных возможностей Visual Basic. Среди них:
доскональное знание и способность на практике применять стандартные средства
управления панелью инструментов и компоненты ActiveX; умение правильно
устанавливать и манипулировать свойствами, функциями и событиями объекта;
способность писать ясный и чёткий программный код с возможностью повторного
использования некоторых сегментов программы в дальнейшем; умение создавать наглядный
и эффективный интерфейс пользователя.
Для работы над этой курсовой мне потребовалось изучить
приложение FrontPage, а также изучить некоторые возможности Visual Basic в
приложении Access.
Microsoft FrontPage 2000 включает все необходимые средства
для эффективной разработки и эксплуатации веб-узлов. Пользователи могут легко
создавать качественно оформленные веб-страницы, выбирая наиболее удобный способ
разработки. FrontPage 2000 позволяет придавать законченный и профессиональный
вид веб-узлам, импортировать и редактировать код HTML любым из существующих
способов и применять новейшие веб-технологии. С помощью FrontPage 2000 можно
легко выполнять обновление веб-страниц, а также пользоваться гибкими средствами
для управления узлами Интернета и интрасетей. FrontPage 2000 позволяет
создавать и поддерживать узлы, следить за их работой и производить
периодические обновления. Рабочие группы и команды специалистов могут
использовать веб-узлы для совместной работы, а компании - осуществлять
развертывание и администрирование FrontPage 2000 в масштабах предприятия.
FrontPage 2000 помогает сэкономить время пользователям пакета Microsoft Office.
Этот продукт работает по принципу приложений Microsoft Office, что упрощают его
освоение.
Моя задача состояла в том, чтобы в приложении FrontPage
создать гостевую книгу. Затем в приложении Access создать однотабличную базу
данных и в модуле Visual Basic набрать и отладить код программ, которые бы
считывали данные из гостевой книги в базу данных.
Для того чтобы набрать и отладить программу необходимо
ознакомиться с элементами, составляющими основу программирования на Visual
Basic, т.е. с командами, операторами, функциями и ключевыми словами.
Операторы и функции
Оператор Sub объявляет имя, параметры и тело процедуры.
Оператор End Sub заканчивает процедуру.
Оператор Dim объявляет переменные и выделяет память под
них.
Оператор Set связывает ссылку на объект с переменной или
свойством.
Цикл Do Until … Loop повторяет блок команд, пока условие не
станет верным.
Цикл If … Then … Else выполняет команду (инструкцию) или
блок команд в зависимости от значения выражения.
Оператор On … GoTo передаёт на одну из нескольких
определённых строк, в зависимости от значения выражения.
Функция InStr возвращает позицию первой найденной подстройки
в строке.
Функция Ucase возвращает строку, преобразованную в верхний
регистр.
Оператор Mid замещает определённое количество символов в
строке на символы из другой строки.
Функция Mid возвращает определённое количество символов с
определённой позиции строки.
Функция Lcase возвращает строку в нижнем регистре.
Функция Left возвращает определённое количество символов с
начала строки.
Оператор With выполняет последовательность команд для
конкретного объекта или переменной специализированного типа.
Функция Resume продолжает выполнение программы после
завершения процедуры обработчика ошибок.
Оператор Print записывает форматированные данные в файл.
Оператор Function объявляет имя, аргументов и код
подпрограммы, возвращающей значение (функции).
Переменные
Итак, переменная представляет собой временное хранилище для
данных в нашей программе. Кто учился информатике в школе, наверное, помнит, что
"переменные - это такие ящички в которых содержится информация...". В
тексте программы мы можем использовать сколько угодно переменных. Особая польза
от них - это то, что мы присваиваем нужным данным короткий и легко
запоминающийся идентификатор. Ярлычок, так сказать. Если мы присвоим переменной
UserName значение "Иванов Пётр Иванович", то в дальнейшем использовать
восемь символов легче, чем восемнадцать !!! Переменные могут содержать
практически любую информацию.
Чтобы грамотно использовать переменную, нужно её сначала
объявить, зарезервировать под неё память. Для этого используются следующие
ключевые слова: Dim, Private, Public, Static, Global.
Переменные можно объявлять на уровне модуля и на уровне
процедуры. Под уровнем модуля подразумевается часть формы General и стандартный
модуль, а под уровнем процедуры подразумевается Sub, Function и т.д.
Пояснение использования Static. Описывает переменные только
на уровне процедуры. Переменная, описанная на уровне процедуры,
"живёт" только в пределах этой процедуры на протяжении работы
приложения.
Пояснение использования Dim. Описывает переменные как на
уровне модуля так и на уровне процедуры. Переменная, описанная на уровне
процедуры, живёт только в пределах этой процедуры и прекращает работу по
окончанию процедуры. Её мы чаще всего и применяем как счётчик, т.к. он и нужен
то нам всего в данной процедуре. Переменная, описанная на уровне модуля,
доступна для всех процедур данного модуля. Т.е. если нам нужна переменная,
которую видят все функции и процедуры, тo её надо объявить со словом Dim на
уровне модуля.
Пояснение использования Public. Описывает переменные на
уровне модуля. Таким образом переменная стаёт глобальной, но на уровне формы и
доступна всем остальным модулям
Конечно, при переходе в другую форму переменная будет
пустой, неизвестной для второй формы! Чтобы избежать этого нужно объявить
переменную в стандартном модуле со словом Public или Global. Тогда переменная
будет доступна и известна каждой форме.
Пояснение использования Private. Описывает переменные как
на уровне модуля так и на уровне процедуры. Переменная, описанная на уровне
процедуры, живёт только в пределах этой процедуры. Переменная, описанная на
уровне модуля, доступна лишь модулю, в котором она объявлена.
Объявление всех переменных считается хорошей привычкой. В
помощь забывчивым и незабывчивым есть инструкция Option Explicit. Помещать эту
инструкцию нужно на уровне модуля и потом она проверяет каждую переменную
объявлена ли она или нет? Если нет - выскакивает ошибка. Размер отводимой
памяти под переменную зависит от вида этой переменной. Основные виды переменных
указаны в Таблице 1 .
Таблица1
Основные виды переменных
Тип
данных
|
Размер
|
Диапазон
значений
|
Integer
(Целое)
|
2
байта
|
от
-32 768 до 32 767
|
Long
Integer (Длинное целое)
|
4
байта
|
от
-2 147 483 648 до 2 147 483 647
|
Single
- precision Floating point (Одинарной точности с плавающей десятичной точкой)
|
4
байтa
|
от
-3.402823E38 до 3.402823E38
|
Double
- precision Floating point (Двойной точности с плавающей десятичной точкой)
|
8
байт
|
от
-1.79769313486232D308 до 1.79769313486232D308
|
Currency
(Денежные единицы)
|
8
байт
|
от
-922337203685477.5808 до 922337203685477.5807
|
String
(Строка)
|
1
байт на символ
|
от
0 до 65 535 символов
|
Boolean
(Логический)
|
2
байт
|
True
(Истина) или False (Ложь)
|
Date
(Дата)
|
8
байт
|
от
January (Январь)1, 100, до December (Декабрь) 31, 9999
|
Variant
(Вариант)
|
16
байт (для чисел); 22 байт на символ (для строк)
|
для
всех типов данных
|
Описание разработанной программы, области применения,
методы использования.
Набор процедур, включенных в эту курсовую, был специально
создан для сайта THE TECH REPUBLIC (www.techrepublic.com).
Этот набор процедур разработан для считывания данных из
Гостевой книги, созданной в приложении FrontPage, в однотабличную базу данных,
созданную в приложении Access.
При работе с Гостевой книгой очень удобно использовать
этот набор процедур.
Рассматриваемый набор процедур работает с простой Гостевой
книгой. Увидеть эту страничку и зарегистрироваться вы можете по адресу-
#"65720.files/image001.jpg">
Рис.1
Затем мы выбрали FrontPage в списке и дали команду на
установление.(См.Рис.2 и Рис.3)
С помощью FrontPage Wizard я создал Гостевую книгу
(см.Рис.4), которую потом установили на сервере нашей локальной сети. Получив
файл с данными, полученными через эту Гостевую книгу, я приступил к выполнению
второй части проекта: создание однотабличной базы данных и написанию кода
процедур.
Частью любого проекта VBA является набор ссылок на
библиотеку типов всех компонентов IDE, которые применяются в данном проекте.
Простые проекты содержат небольшое количество ссылок, которые применяются VBA,
интерфейсом автоматизации и базовым приложением. Ссылками можно управлять
интерактивно посредствам диалогового окна Ссылки(См.Рис.5) или программным
путём, посредствам Rferences класса VBProject.
Рис.2
Рис.3
Guest
Book
Welcome
to my first web page
Please
enter your private information:
Bottom of Form
Рис.4
Затем я создал однотабличную базу данных и подключил
несколько библиотек, необходимых для работы проекта.(См. Рис.5 и Рис.6)
Следующий этап разработки - написание кода(См.Рис.7) Затем
отладка процедур.
Так как у создателей этого набора процедур, по-видимому,
была несколько другая Гостевая книга, то мне пришлось внести некоторые
изменения в код процедур: поменять адрес файла, с которого считываются данные,
изменить имя первой строки этого файла и отменить несколько команд –
“пропустить строку”(См. Рис.7 - 11).
Как показано на рисунке 8 программа не работала, т.к. не
находил необходимый файл. При этом появляется диалоговое окно с указанием
номера ошибки и её описанием (См.Рис.9)
Рис.5
Рис.6
Рис.7
Рис.8
Рис.9
Рис.10
Рис.11
X_FirstName:
Sasha
X_LastName:
Sergheev
X_Organization:
College
X_WorkAddress:
A Russso 1
X_Address2:
A Russo 1
X_City:
Chishinev
X_State:
Moldova
X_ZipCode:
X_Country:
Moldova
X_Email:
sergheev@mail.md
Рис.12
Тексты программ в виде текстового файла и описание их
подключения к системе MSOffice
'Объявите переменные глобально, так чтобы они были доступны
больше чем одной ‘процедуре;
' Txtobj1 и объекты fs требуют ссылки на библиотеку
Microsoft Scripting RunTime
Dim txtobj1 As Scripting.TextStream
Dim strTemp As String
Dim rst1 As ADODB.Recordset
Sub LookForNameStart()
Dim fs As Scripting.FileSystemObject
' Формируйте ссылку к системе файла, и используйте это,
чтобы 'открыть текстовый ‘объект, основанный
' на локальном файле, который содержит регистр Гостевой
книги
Set fs = New Scripting.FileSystemObject
Set txtobj1 = fs.OpenTextFile (“ F:\formrslt.htm",
ForReading)
' Откройте recordset на tblContacts таблице
Set rst1 = New ADODB.Recordset
rst1.Open "tblContacts",
CurrentProject.Connection, adOpenKeyset,_ adLockOptimistic
' Пройти цикл через текстовый объект для нахождения линии
как раз ‘перед ‘FirstName полем
Do Until txtobj1.AtEndOfStream
strTemp = txtobj1.ReadLine
If InStr(1, strTemp, "X_FirstName") <> 0
Then
ProcessContact
End If
Loop
‘Очистить ресурсы
rst1.Close
Set rst1 = Nothing
txtobj1.Close
Set txtobj1 = Nothing
Set fs = Nothing
End Sub
Sub ProcessContact()
On Error GoTo MyErrorTrap
Dim strFname As String
Dim strLname As String
Dim strCname As String
Dim strSt1 As String
Dim strSt2 As String
Dim strCity As String
Dim strRegion As String
Dim strPostalCode As String
Dim strCountry As String
Dim strEmailAddr As String
Dim intFirst As Integer
Dim intLen As Integer
Dim cmd1 As ADODB.Command
’Извлечь First Name в нужном регистре
strTemp = txtobj1.ReadLine
If InStr(1, strTemp, " ") = 0 Then
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strFname = UCase(Mid(strTemp, intFirst, 1)) &_
LCase(Mid(strTemp, intFirst + 1, intLen - 1))
Else
strFname = ""
End If
’Извлечь Last Name в нужном регистре
txtobj1.SkipLine
strTemp = txtobj1.ReadLine
If InStr(1, strTemp, " ") = 0 Then
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strLname = UCase(Mid(strTemp, intFirst, 1)) & _
LCase(Mid(strTemp, intFirst + 1, intLen - 1))
Else
strLname = ""
’Извлечь Organization Name в любом регистре
txtobj1.SkipLine
’txtobj1.SkipLine
’txtobj1.SkipLine
strTemp = txtobj1.ReadLine
If InStr(1, strTemp, " ") = 0 Then
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strCname = CleanText(Mid(strTemp, intFirst, intLen))
Else
strCname = ""
End If
’Извлечь строки с первым и вторым адресами
txtobj1.SkipLine
strTemp = txtobj1.ReadLine
If InStr(1, strTemp, " ") = 0 Then
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strSt1 = CleanText(Mid(strTemp, intFirst, intLen))
Else
strSt1 = ""
End If
txtobj1.SkipLine
strTemp = txtobj1.ReadLine
If InStr(1, strTemp, " ") = 0 Then
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strSt2 = CleanText(Mid(strTemp, intFirst, intLen))
Else
strSt2 = ""
End If
’Извлечь City, Region, Postal Code, and Country
txtobj1.SkipLine
strTemp = txtobj1.ReadLine
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strCity = Mid(strTemp, intFirst, intLen)
If strCity = " " Then strCity =
""
txtobj1.SkipLine
strTemp = txtobj1.ReadLine
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strRegion = Left(Mid(strTemp, intFirst, intLen), 20)
If strRegion = " " Then strRegion =
""
txtobj1.SkipLine
strTemp = txtobj1.ReadLine
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strPostalCode = Mid(strTemp, intFirst, intLen)
If strPostalCode = " " Then
strPostalCode = ""
txtobj1.SkipLine
strTemp = txtobj1.ReadLine
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strCountry = Mid(strTemp, intFirst, intLen)
If strCountry = " " Then strCountry =
""
’Извлечь Email address ; Использовать как строкe в VBA
proc, но это добавляется к ‘таблице как гиперсвязь
txtobj1.SkipLine
txtobj1.SkipLine
txtobj1.SkipLine
strTemp = txtobj1.ReadLine
intFirst = InStr(1, strTemp, ">") + 1
intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst
strEmailAddr = Mid(strTemp, intFirst, intLen)
If strEmailAddr = " " Then strEmailAddr
= ""
' Используйте этот набор печати для отладки целей
'Debug.Print
'Debug.Print strFname & " " & strLname
'Debug.Print strCname
'Debug.Print strSt1
'Debug.Print strCity & ", "; strRegion &
" " & strPostalCode
'Debug.Print strCountry
'Debug.Print strEmailAddr
' Добавьте запись, если это имеет допустимый первичный
ключ- клавишу
If strFname <> _
"" And strLname <> "" And
strEmailAddr <> "" Then
With rst1
.AddNew
If strFname <> _
"" Then .Fields("FirstName") =
strFname
If strLname <> "" Then
.Fields("LastName") = strLname
If strCname <> "" Then
.Fields("CompanyName") = strCname
If strSt1 <> "" Then
.Fields("Address") = strSt1
If strSt2 <> "" Then
.Fields("Address1") = strSt2
If strCity <> "" Then
.Fields("City") = strCity
If strRegion <> "" Then
.Fields("StateOrProvince") = strRegion
If strPostalCode <> "" Then
.Fields("PostalCode") = strPostalCode
If strCountry <> "" Then
.Fields("Country") = strCountry
If strEmailAddr <> "" Then
.Fields("EMailName") = strEmailAddr
.Update
End With
End If
MyExit:
Exit Sub
MyErrorTrap:
If Err.Number = -2147217887 Then
'Перехватчик дублирует ключевую ошибку и заменяет запись
Set cmd1 = New ADODB.Command
With cmd1
.ActiveConnection = CurrentProject.Connection
.CommandText = "DELETE * " & "FROM
tblContacts " & _
"WHERE tblContacts.EMailName " & "=
'" & strEmailAddr & "'"
.CommandType = adCmdText
.Execute
End With
Resume
Else
Debug.Print Err.Number; Err.Description
Resume MyExit
End If
End Sub
Function CleanText(strText As String)
' Замените специальные символы HTML типа & with
& и " with "
CleanText = Replace(strText, "&",
"&")
CleanText = Replace(CleanText, """,
"""")
End Function
Как описывалось выше этот набор процедур используется в
приложении Access, для считывания данных с файла с расширением html. В этом
файле хранятся данные о пользователях Гостевой книги.