Access und die entsprechende Tabelle müssen geöffnet sein
In der folgenden Prozedur werden Objekte aus dem Page-Objektmodell und dem Web-Objektmodell kombiniert, um Daten aus einer geöffneten Microsoft Access-Datenbank abzurufen und diese in eine Tabelle auf einer FrontPage-basierten Webseite einzufügen. Die Prozedur ParseDBTable stellt die Parameter für die Funktion ParseAccessTable bereit, mit der die folgenden Funktionen zum Erstellen und Auffüllen der Tabelle aufgerufen werden:
Anmerkung Für dieses Beispiel wurde die Access-Datenbank Nordwind.mdb verwendet. Um dieses Beispiel ausführen zu können, müssen Sie im Visual Basic-Editor über Verweise auf die Microsoft DAO 3.6-Objektbibliothek und die Microsoft Access-Objektbibliothek verfügen. Darüber hinaus müssen Sie eine Access-Datenbank öffnen, bevor Sie das Beispiel ausführen, und Sie müssen dem aktiven Web eine leere temporäre Datei mit Namen tmp.htm hinzufügen. Wenn Sie eine andere Datenbank als Nordwind.mdb verwenden, müssen Sie den Datenbanknamen und die Tabelle in der ParseDBTable-Prozedur angeben.
Function AddDBTableToPage(myPage As PageWindowEx, _
myTableName As String, myFields As Integer)
Dim myTable As FPHTMLTable
Dim myHTMLString As String
Dim myCount As Integer
myHTMLString = "<table border=""2"" id=""myRecordSet_" & _
myTableName & """>" & vbCrLf
myHTMLString = myHTMLString & "<tr>" & vbCrLf
For myCount = 1 To myFields
myHTMLString = myHTMLString & "<td id=""myDBField_" & _
myCount & """> </td>" & vbCrLf
Next myCount
myHTMLString = myHTMLString & "</tr>" & vbCrLf
myHTMLString = myHTMLString & "</table>" & vbCrLf
Call myPage.Document.body.insertAdjacentHTML("BeforeEnd", _
myHTMLString)
End Function
Function AddDBRow(myDBTable As FPHTMLTable)
Dim myHTMLString As String
Dim myTableRow As FPHTMLTableRow
Set myTableRow = myDBTable.rows(0)
myHTMLString = myTableRow.outerHTML
Call myDBTable.insertAdjacentHTML("BeforeEnd", myHTMLString)
End Function
Function AddMemo(myCurrentPage As PageWindowEx, myDBMemo As String, _
myBkMarkField As String, myIndex) As String
Dim myHTMLString As String
Dim myMemoBkMark As String
Dim myBookMark As FPHTMLAnchorElement
myMemoBkMark = myBkMarkField & "_" & myIndex
myHTMLString = "<a name=""" & myMemoBkMark & """> Memo #" & _
myIndex & "</a>" & vbCrLf
'Add the bookmark to the page.
Call myCurrentPage.Document.body.insertAdjacentHTML("BeforeEnd", _
myHTMLString)
Set myBookMark = myCurrentPage.Document.all(myMemoBkMark)
'Add the memo text to the page.
Call myCurrentPage.Document.body.insertAdjacentHTML("BeforeEnd", _
myDBMemo)
AddMemo = "<a href=""#" & myBookMark.Name & """>"
End Function
Function ParseAccessTable(myDBName As String, myTableName As String)
'Access/DAO Declarations.
Dim myDBApp As Access.Application
Dim myRecordSet As DAO.recordset
Dim myDBField As DAO.Field
'FrontPage Page object model declarations.
Dim myPage As PageWindowEx
Dim myTable As FPHTMLTable
Dim myTableRow As FPHTMLTableRow
Dim myTableCell As FPHTMLTableCell
'Function declarations.
Dim myCount As Integer
Dim myFieldValue As String
Dim myRecordCount As Integer
myRecordCount = 0
'Function constants.
Const myTempPage = "tmp.htm"
'Get the current Access database.
On Error GoTo AccessNotThereYet
Set myDBApp = GetObject(, "Access.Application")
'Get the database table.
On Error Resume Next
Set myRecordSet = myDBApp.CurrentDb.OpenRecordset(myTableName)
'Add a new page to the current web.
Set myPage = ActiveWeb.LocatePage(myTempPage)
myPage.SaveAs myTableName & ".htm"
'Delete the temporary file from web.
ActiveWeb.LocatePage(myTempPage).File.Delete
'Add a database-ready table to the page with the proper number of fields.
AddDBTableToPage myPage, myTableName, myRecordSet.Fields.Count
'Get a reference to the table.
Set myTable = myPage.Document.all.tags("table").Item(0)
'Populate the first row.
For myCount = 0 To myRecordSet.Fields.Count - 1
myTable.rows(0).cells(myCount).innerHTML = "<b>" & _
Trim(myRecordSet.Fields(myCount).Name) & "</b>"
Next
'Populate the rest of the table.
While Not (myRecordSet.EOF)
AddDBRow myTable
Set myTableRow = myTable.rows(myTable.rows.Length - 1)
For myCount = 0 To myRecordSet.Fields.Count - 1
Set myTableCell = myTableRow.cells(myCount)
If IsNull(myRecordSet.Fields(myCount)) Then
myFieldValue = "None"
Else
myFieldValue = Trim(myRecordSet.Fields(myCount).Value)
End If
If myRecordSet.Fields(myCount).Type = DAO.dbMemo Then
myFieldValue = AddMemo(myPage, _
myRecordSet.Fields(myCount).Value, _
myRecordSet.Fields(myCount).Name, myRecordCount)
End If
myTableCell.innerHTML = myFieldValue
Next myCount
myRecordSet.MoveNext
myRecordCount = myRecordCount + 1
Wend
myPage.Save
myDBApp.Quit
Exit Function
AccessNotThereYet:
Debug.Print Err.Number & ":" & Err.Description
Resume
End Function
Private Sub ParseDBTable()
Sub ParseDBTable()
Call ParseAccessTable("Northwind.mdb", "Products")
End Sub