Как показано на рисунке 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:
22222222
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 = ""
End If
’Извлечь 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 strSt2
'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. В этом файле хранятся данные о пользователях Гостевой книги.