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