Frontpage
Erstellen einer Tabelle in FrontPage basierend auf einer Access-Datenbank

Erstellen einer Tabelle in FrontPage basierend auf einer Access-Datenbank

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:

  • AddDBTableToPage - erstellt eine neue Tabelle,
  • AddDBRow - fügt auf der Webseite eine Zeile ein,
  • AddMemo - ruft die Memos aus der Access-Datenbank ab, gibt diese als Textmarken am Fuß der Seite unterhalb der neuen Tabelle zurück und gibt den URL zur jeweiligen Textmarke zurück.

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