Считывание данных из гостевой книги

Теоретическое введение Секрет, как стать
профессиональным разработчиком программ на 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, т.е. с командами, операторами, функциями и ключевыми
словами. Оператор End Sub заканчивает процедуру. Оператор Set связывает
ссылку на объект с переменной или свойством. Цикл If … Then … Else выполняет
команду (инструкцию) или блок команд в зависимости от значения
выражения. Функция InStr возвращает позицию
первой найденной подстройки в строке. Оператор Mid замещает определённое
количество символов в строке на символы из другой строки. Функция Lcase возвращает строку в нижнем регистре. Оператор With
выполняет последовательность команд для конкретного объекта или переменной
специализированного типа. Оператор Print записывает
форматированные данные в файл. Итак,
переменная представляет собой временное хранилище для данных в нашей программе.
Кто учился информатике в школе, наверное, помнит, что "переменные - это такие
ящички в которых содержится информация...". В тексте программы мы можем
использовать сколько угодно переменных. Особая польза от них - это то, что мы
присваиваем нужным данным короткий и легко запоминающийся идентификатор.
Ярлычок, так сказать. Если мы присвоим переменной UserName значение "Иванов Пётр
Иванович", то в дальнейшем использовать восемь символов легче, чем восемнадцать
!!! Переменные могут содержать практически любую информацию. Чтобы грамотно
использовать переменную, нужно её сначала объявить, зарезервировать под неё
память. Для этого используются следующие ключевые слова: Dim, Private, Public,
Static, Global. Переменные можно объявлять на уровне модуля и на уровне
процедуры. Под уровнем модуля подразумевается часть формы General и стандартный
модуль, а под уровнем процедуры подразумевается Sub, Function и т.д.
Пояснение использования Static. Описывает переменные только на уровне
процедуры. Переменная, описанная на уровне процедуры, "живёт" только в пределах
этой процедуры на протяжении работы приложения. Пояснение использования Dim.
Описывает переменные как на уровне модуля так и на уровне процедуры. Переменная,
описанная на уровне процедуры, живёт только в пределах этой процедуры и
прекращает работу по окончанию процедуры. Её мы чаще всего и применяем как
счётчик, т.к. он и нужен то нам всего в данной процедуре. Переменная, описанная
на уровне модуля, доступна для всех процедур данного модуля. Т.е. если нам нужна
переменная, которую видят все функции и процедуры, тo её надо объявить со словом
Dim на уровне модуля. Пояснение использования Public. Описывает переменные на
уровне модуля. Таким образом переменная стаёт глобальной, но на уровне формы и
доступна всем остальным модулям Конечно, при переходе в другую форму
переменная будет пустой, неизвестной для второй формы! Чтобы избежать этого
нужно объявить переменную в стандартном модуле со словом Public или Global.
Тогда переменная будет доступна и известна каждой форме. Пояснение
использования Private. Описывает переменные как на уровне модуля так и на уровне
процедуры. Переменная, описанная на уровне процедуры, живёт только в пределах
этой процедуры. Переменная, описанная на уровне модуля, доступна лишь модулю, в
котором она объявлена. Объявление всех переменных считается хорошей
привычкой. В помощь забывчивым и незабывчивым есть инструкция Option Explicit.
Помещать эту инструкцию нужно на уровне модуля и потом она проверяет каждую
переменную объявлена ли она или нет? Если нет - выскакивает ошибка. Размер
отводимой памяти под переменную зависит от вида этой переменной. Основные виды
переменных указаны в Long Integer
(Длинное целое) 4 байтa Double - precision Floating point
(Двойной точности с плавающей десятичной точкой) от -
922337203685477.5808 до 922337203685477.5807 от 0 до 65 535 символов True (Истина)
или False (Ложь) от January (Январь)1, 100, до
December (Декабрь) 31, 9999 16 байт (для чисел); 22 байт на символ (для
строк) Описание разработанной программы, области
применения, методы использования. Набор процедур, включенных в эту
курсовую, был специально создан для сайта THE TECH REPUBLIC ( Этот
набор процедур разработан для считывания данных из Гостевой книги, созданной в
приложении FrontPage, в однотабличную базу данных, созданную в приложении
Access. Сейчас очень широко используется Интернет. Существует огромное
количество сайтов, на которых очень часто можно встретить страничку с Гостевой
книгой. Там можно не только просто зарегистрироваться, заполнив необходимые
формы, но и оставить свой комментарии по тому или иному вопросу, подписаться на
всевозможные электронные журналы и газеты и многое другое. Рассматриваемый
набор процедур работает с простой Гостевой книгой. Увидеть эту страничку и
зарегистрироваться вы можете по адресу- Эта Гостевая книга была создана
в приложении FrontPage. Это – новое приложение расширенного пакета Microsoft
Office2000. Сейчас в этом приложении создавать веб-узлы стало еще проще.
Приложения пакета Office 2000 и FrontPage 2000 используют общие панели
инструментов, темы, меню, а также некоторые инструментальные средства, такие как
фоновая проверка орфографии и "Формат по образцу" (Format Painter). FrontPage
2000 также упрощает использование форм и баз данных на веб-узлах. FrontPage 2000 обеспечивает разработчиков веб-узлов простыми и мощными
инструментальными средствами. FrontPage не изменяет импортированный код HTML и
дает пользователям возможность самостоятельно настраивать его форматирование.
Работая в режиме редактирования HTML, пользователи могут ускорить процесс
создание страниц, используя кнопки и элементы меню. FrontPage 2000
облегчает совместную работу. Пользователи приложений пакета Microsoft Office
могут сохранять документы непосредственно на веб-узлах, созданных с помощью
FrontPage, а система резервирования документов и отчеты по проекту помогают
осуществлять совместную работу над веб-страницами. FrontPage 2000 прост в
обслуживании и эксплуатации. В нем используется та же программа установки, что и
в приложениях Microsoft Office. Эта программа позволяет производить установку по
требованию, запускать приложения с сервера и восстанавливать программное
обеспечение. Гостевые книги используются в разнообразных целях, на пример
для получения статистических данных или для создания базы данных пользователей
этого сайта. Для создания такой базы данных и был создан данный набор процедур,
который считывает данные Гостевой книги, сохранённые в локальном файле, и
записывает их в базу данных. Используя в
дальнейшем возможности базы данных приложения Access, можно создавать различные
запросы и отчёты, на пример отчёт о количестве пользователей сайта за
определённый месяц, отчёт по регионам о месте проживания пользователей сайта и
т.д. Для VBA существуют соглашения о наименовании Реддика
(RVBA), которые предоставляют указания по присвоению имён объектам в языке
Microsoft Visual Basic for Applications (VBA). Наличие соглашений необходимо для
любого программного проекта. При использовании соглашений имя объекта несёт в
себе информацию о его назначении. Предлагаемые соглашения стандартизируют
обозначения в сфере программирования. Язык VBA разработан для взаимодействия
с базовым приложением, например с MS Access, Visual Basic, MS Excel, MS Project.
Соглашения RVBA применимы ко всем разработкам на языке VBA, независимо от
базового приложения. Соглашения RVBA основаны на Венгерской нотации. Цель
этой нотации – лаконичное и эффективное представление информации об объекте в
его имени. Единственной обязательной частью имени объекта является признак –
короткий набор символов, обычно мнемонический, который указывает тип объекта.
Признак должен состоять из строчных букв и обычно выбирается из стандартного
списка признаков, указанного в Currency В данном наборе процедур используется
Венгерская нотация. Все переменные и объекты имеют в своём имени признак,
который соответствует типу этих переменных и объектов. Набор рассматриваемых
процедур состоит из двух частей: процедуры LookForNameStart и процедуры
ProcessContact. Перед написанием кода процедур, оператор Dim объявляет
переменные txtobj1 как объект, имеющий доступ к файловой системе
компьютера(Scripting) и считывающий текст файла потоком(FileStream); strTemp как
строковую переменную и rst1 как встроенный объект(Recordset) ADO базы данных
(см. Рис7) и выделяет под эти переменные часть памяти. Объявление переменных до
написания самого кода процедур необходимо для того, чтобы эти переменные были
доступны более чем одной процедуре. Оператор Dim резервирует часть памяти под
переменную fs , которая будет иметь доступ к системному файлу. Оператор Set
связывает ссылку на новый объект, имеющий доступ к системному файлу с переменной
fs. Также этот оператор связывает ссылку на новый объект fs, в котором
открывается файл Myformrstl.htm(См.Рис.12) для чтения ( с помощью оператора
Open) с диска F: на локальном компьютере с объектомt xtobj1. Он также связывает
rst1 с новым встроенным объектом ADO базы данных. Потом в объекте rst1
открывается таблица "tblContacts" в текущем проекте
CurrentProject.Connection. Цикл Do Until … Loop выполняется до тех пор пока не
будет найдена строка, которая находится прямо перед строкой "X_FirstName". Для
этого используется ещё один цикл If …Then … Else … End If, который проверяет
является ли читаемая строка txtobj1.ReadLine файла Myformrstl.htm строкой "
X_FirstName ". Это осуществляется при помощи функции InStr , которая возвращает
позицию искомой строки "X_FirstName". И если она является таковой, то
выполняется вторая процедура ProcessContact нашего проекта, если же нет – то
продолжается цикл Do ... Loop. Для очистки ресурсов используется метод Close
для объектов txtobj1и rst1 и оператор Set, который ссылается на пустые объекты
txtobj1 и rst1. Оператор On … GoTo в случае ошибки
заставляет перепрыгивать программу на строку MyErrorTrap. Оператор Dim
объявляет переменные strFname, strLname, strCName, strSt1, strSt2, strCity,
strRegion, strPostalCode, strCountry, strEmailAddr как строковые переменные;
intFirst и intLen как числовые переменные и cmd1 как встроенный объект ADO базы
банных. С помощью цикла If …Then … Else … End If в этой процедуре проверяются
строки с введёнными данными из Гостевой книги, которые сохранены в файле
Myformrstl.htm. Цикл If …Then … Else … End If с помощью функции InStr проверяет
наличие в строке специального знака "&nbsp" и если его нет, то присваивает
переменной intFirst номер позиции символа + 1, с которого будет производиться
запись. Затем переменной intLen присваивается значение длины записи, т.е.
сколько символов будет записано – 1. Переменным strFName и strLName
присваиваются значения с помощью функций Ucase, Lcase и Mid символа с большой
буквы под номером, который присвоен переменной intFirst строки strTemp и
символов, с номерами, следующими за intFirst из той же строки, длиной intLen –
1. Если условие не выполняется то строка остаётся пустой. По такому же
принципу переменным strCName, strSt1 и strSt2 присваиваются значения, но при
этом вместо функций Ucase, Lcase используется функция CleanText, которая создана
в этом проекте. Она убирает все лишние символы из строки. В присвоении
переменным strCity, strRegion, strPostalCode, strCountry, strEmailAddr
используются практически те же способы, но вместо цикла If …Then … Else … End If
применяется упрощённый цикл, который записывается в одну строку If …Then. И он
поверял лишь наличие спецсимволов в очередной строке, и если они есть то Эти
переменные остаются пустыми. Также здесь используется только функция Mid и
функции Left для strRegion, которая возвращает определённое количество символов
с начала строки. Для
отладки программы используется объект Debug со свойством Print. Далее все считанные данные будут
последовательно вписана в таблицу tblContacts нашей базы данных. Процедура
проверяет пустые или нет переменные strFName , strLName и strEmailAddr если нет,
то она использует оператор With для объекта rst1 для заполнения полей таблицы,
проверяя наличие записи в каждой строковой переменной нашей процедуры. Каждая стандартная ошибка имеет свой номер. При ошибке –
214721887 объект cmd1 ссылается на новый встроенный объект ADO базы данных и с
помощью оператора With связывается с текущим проектом, меняет некоторые свойства
этого объекта, выполняет их и за оператором With следует функция восстановления
Resume,т.е. запускается с самого начала Sub LookForNameStart. Если же номер
ошибки другой , то в окне отладки появляется номер и описание этой ошибки и
программа возвращается к метке MyExit. Экранные копии этапов разработки с
разъяснениями каждого изображения. Для выполнения этого проекта необходимо
было установить приложение MSFrontPage, который находится в пакете MSOffice2000.
Его установочный пакет находится на компьютере User7 нашей локальной сети. При
запуске установочного файла мы выбираем "add or remove Features"(См. Рис.1)
Затем мы выбрали FrontPage в списке и дали команду на
установление.(См.Рис.2 и Рис.3) С помощью FrontPage Wizard я создал Гостевую
книгу (см.Рис.4), которую потомустановили на сервере нашей локальной сети.
Получив файл с данными, полученными через эту Гостевую книгу, я приступил к
выполнению второй части проекта: создание однотабличной базы данных и написанию
кода процедур. Частью любого проекта VBA является набор ссылок на библиотеку
типов всех компонентов IDE, которые применяются в данном проекте. Простые
проекты содержат небольшое количество ссылок, которые применяются VBA,
интерфейсом автоматизации и базовым приложением. Ссылками можно управлять
интерактивно посредствам диалогового окна Ссылки(См.Рис.5) или программным
путём, посредствам Rferences класса VBProject. Welcome to my first web page State/Province
Затем я создал однотабличную базу данных и подключил
несколько библиотек, необходимых для работы проекта.(См. Рис.5 и
Рис.6) Так как у создателей этого набора процедур, по-видимому, была
несколько другая Гостевая книга, то мне пришлось внести некоторые изменения в
код процедур: поменять адрес файла, с которого считываются данные, изменить имя
первой строки этого файла и отменить несколько команд – "пропустить строку"(См.
Рис.7 - 11). Как показано на рисунке 8 программа не работала, т.к. не находил
необходимый файл. При этом появляется диалоговое окно с указанием номера ошибки
и её описанием (См.Рис.9) X_LastName:
Chishinev Рис.12 'Объявите переменные глобально, так чтобы они были
доступны больше чем одной 'процедуре; Dim txtobj1 As
Scripting.TextStream Dim fs As Scripting.FileSystemObject ' на локальном файле, который содержит регистр Гостевой
книги rst1.Open
"tblContacts", CurrentProject.Connection, adOpenKeyset,_
adLockOptimistic Do Until
txtobj1.AtEndOfStream Loop Set fs = Nothing Dim strLname As String Dim strRegion
As String Dim intLen As Integer If InStr(1, strTemp, " ") = 0 Then intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst strFname =
"" If InStr(1,
strTemp, "&nbsp;") = 0 Then
strLname = UCase(Mid(strTemp, intFirst, 1)) & _ 'Извлечь
Organization Name в любом
регистре If InStr(1, strTemp, "&nbsp;") = 0 Then intLen = InStr(InStr(1, strTemp, ">"),
strTemp, "<") - intFirst 'Извлечь строки с первым и вторым
адресами intFirst = InStr(1, strTemp, ">") + 1 strSt1
= CleanText(Mid(strTemp, intFirst, intLen)) If InStr(1, strTemp,
"&nbsp;") = 0 Then strSt2 =
CleanText(Mid(strTemp, intFirst, intLen)) strTemp = txtobj1.ReadLine strCity = Mid(strTemp, intFirst, intLen) intFirst = InStr(1, strTemp, ">") + 1 strRegion =
Left(Mid(strTemp, intFirst, intLen), 20) intFirst =
InStr(1, strTemp, ">") + 1 strPostalCode = Mid(strTemp, intFirst,
intLen) intFirst = InStr(1,
strTemp, ">") + 1 strCountry = Mid(strTemp, intFirst, intLen) 'Извлечь Email address ; Использовать
как строкe в VBA proc, но это добавляется к 'таблице как
гиперсвязь intFirst = InStr(1, strTemp, ">") + 1 strEmailAddr =
Mid(strTemp, intFirst, intLen) 'Debug.Print 'Debug.Print
strSt2 'Debug.Print strEmailAddr "" And strLname <> "" And strEmailAddr <> "" Then If strLname <> "" Then .Fields("LastName") = strLname If strSt1
<> "" Then .Fields("Address") = strSt1 If strCity <> "" Then .Fields("City") =
strCity If strPostalCode <> "" Then .Fields("PostalCode") =
strPostalCode If strEmailAddr <> "" Then .Fields("EMailName") =
strEmailAddr 'Перехватчик
дублирует ключевую ошибку и заменяет запись
.CommandText = "DELETE * " & "FROM tblContacts " & _ End With Function
CleanText(strText As String) CleanText = Replace(strText,
"&amp;", "&") Как описывалось выше этот набор процедур используется
в приложении Access, для считывания данных с файла с расширением html. В этом
файле хранятся данные о пользователях Гостевой книги.