Im Zeitalter des Internets wächst der Wunsch vieler Anwender, bestimmte Daten im WWW auf der eigenen Homepage zu veröffentlichen. Dieser Workshop zeigt, wie sich die Daten als HTML-Report darstellen lassen. Hierzu werden ein- oder mehrere HTML-Dateien erzeugt, welche durch Navigations-Links entsprechend miteinander verknüpft sind. Ein einführendes Beispiel Nehmen wir an, Sie verwalten in Ihrer Anwendung Fachbücher zu einem bestimmten Themengebiet. Hierzu haben Sie eine Datenbank erstellt, in der alle Informationen, wie Titel, Erscheinungsjahr, Kurzbeschreibung usw. eingetragen werden können. Nun möchte Sie eine Liste aller Datenbank-Einträge auf Ihrer Homepage veröffentlichen - im HTML-Format. Da Sie die Datenbank regelmässig aktualisieren, sollen die HTML-Informationen natürlich ebenfalls immer aktuell sein.Also liegt es doch nahe, eine entsprechende Funktion in die Anwendung einzubauen, welche das Erstellen der HTML-Datei vollautomatisch vornimmt. Und da die Datenbank mit der Zeit immer umfangreicher wird, möchten Sie, daß die Informationen nicht auf einer einzigen HTML-Seite, sondern aufgeteilt in mehrere Seiten angezeigt werden, welche dann durch entsprechende Navigationsbefehle miteinander verknüpft sein sollen. Genau hier setzt unser Workshop an. Wir zeigen Ihnen, wie sich eine solche HTML-Report-Funktion realisieren lässt. Die benötigten Prozeduren und Funktionen sollen so universell als möglich gehalten werden, so dass sich diese auch für andere Anwendungsbeispiele einsetzen lassen. Vorbereitung Welche Funktionen soll der HTML-Report bieten. Zunächst muss festgelegt werden, in welchem Format die Daten der Funktion zur Verfügung gestellt werden sollen. Hierzu eignet sich am besten das Recordset-Objekt, da Sie dann sowohl eine gesamte Tabelle mit allen Feldinhalten berücksichtigen können, als auch eine gezielte SQL-Abfrage unter Berücksichtigung ausgewählter Tabellenfelder. Aufbau einer HTML-Datei Um die Informationen in einer HTML-Datei anzuzeigen, ist es notwendig, den elemtaren Aufbau einer HTML zu kennen. Eine HTML-Datei besteht im wesentlichen aus nur zwei Teilen:
<HTML> <HEAD> <TITLE>Titel der Datei</TITLE> </HEAD> <BODY TEXT=#000000 BGCOLOR=#FFFFFF> ... ... ... </BODY> </HTML> Umsetzung Die Umsetzung des HTML-Reports besteht aus mehreren Prozeduren: Einer Aufruf-Prozedur, welche alle erforderlichen und optionalen Paramater entgegennimmt und ein paar weitere Hilfsroutinen, die von der Haupt-Prozedur aufgerufen werden.Zunächst die Haupt-Prozedur ' Auslesen einer Datenbank-Tabelle ' und Erstellen eines HTML-Berichts. ' ' Die Tabellen-Feldnamen dienen gleichzeitg ' der Benennung der Spalten in der HTML-Tabelle ' ' Optional: ' Titel Titel der HTML-Seite (erscheint in der ' Titelleiste des Browsers) ' Vorgabe: Tabellen-Name der Datenbank ' ' tabTitel Tabellen-Überschrift ' Vorgabe: Tabellen-Name der Datenbank ' ' ItemsPerPage Anzahl Datensätze (Zeilen) pro Seite ' (Wird ItemsPerPage nicht angegeben, ' wird nur eine einzige Datei erzeugt) ' '====================================================== Public Sub dbTableToHTML(Tabelle As Recordset, _ ByVal Filename As String, _ Optional ByVal Titel As String = "", _ Optional ByVal tabTitel As String = "", _ Optional ByVal ItemsPerPage As Integer = 0) Dim F As Integer Dim I As Integer Dim nRows As Long Dim Row As Long Dim tCount As Long Dim nPages As Integer Dim Page As Integer Dim Ext As String ' Standardvorgaben If Titel = "" Then Titel = Tabelle.Name If tabTitel = "" Then tabTitel = Tabelle.Name ' HTML-Extension Ext = Mid$(Filename, InStrRev(Filename, ".")) Filename = Left$(Filename, Len(Filename) - Len(Ext)) ' Anzahl benötigter Seiten (Dateien) Page = 1: nRows = Tabelle.RecordCount If (ItemsPerPage > 0) Then nPages = Int(nRows / ItemsPerPage) If nRows Mod ItemsPerPage <> 0 Then nPages = nPages + 1 End If End If ' HTML-Datei öffnen, Header und Überschrift schreiben F = HTMLOpenFile(Filename, Ext, Titel, tabTitel, _ Page, nPages) ' Feldnamen dienen als Spaltenbezeichner für die Tabelle HTMLBegTableDef F, Tabelle ' Datensätze durchlaufen With Tabelle Do While Not .EOF ' aktuelle Anzahl Datensätze pro Datei mitzählen Row = Row + 1 If Row > ItemsPerPage And ItemsPerPage > 0 Then ' Jetzt neue HTML-Seite HTMLEndTableDef F, Filename, Ext, tCount, _ Page, Page + 1 HTMLCloseFile F Page = Page + 1 Row = 1 F = HTMLOpenFile(Filename, Ext, Titel, tabTitel, _ Page, nPages) HTMLBegTableDef F, Tabelle End If ' Tabellen-Spalten füllen tCount = tCount + 1 Print #F, "<TR>"; For I = 0 To .Fields.Count - 1 Print #F, " <TD>"; Print #F, txt2html(.Fields(I).Value); Print #F, "</TD>" Next I Print #F, "</TR>"; .MoveNext Loop End With ' Tabellendefintion abschliessen HTMLEndTableDef F, Filename, Ext, tCount, _ Page, nPages HTMLCloseFile F End Sub Wie arbeitet die Prozedur jetzt genau? Die benötigten Hilfsroutinen ' API-Aufruf zum Anzeigen des HTML-Reports ' im Standard-Browser Private Declare Function ShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" ( _ ByVal hWnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long ' Öffnet eine HTML-Datei und schreibt die ' HTML-Header-Informationen Private Function HTMLOpenFile(ByVal Filename As String, _ ByVal Ext As String, ByVal Titel As String, _ ByVal tabTitel As String, ByVal Page As Integer, _ ByVal nPages As Integer) As Integer Dim F As Integer F = FreeFile Open Filename & IIf(Page > 1, "-" + Format$(Page), _ "") & Ext For Output As #F ' Header-Informationen Print #F, "<HTML>" Print #F, "<HEAD>" Print #F, "<TITLE>" & Titel & "</TITLE>" Print #F, "</HEAD>" Print #F, "<BODY TEXT=#000000 BGCOLOR=#FFFFFF>" Print #F, "<FONT NAME=""ARIAL"">" Print #F, "<H1>" & tabTitel & "</H1>" ' Ggf. Seite x von y ausgeben If nPages > 1 Then Print #F, "<P><B>Seite " & Format$(Page, "0") & _ " von " & Format$(nPages, "0") & "</B></P>" End If HTMLOpenFile = F End Function ' Tabellen-Definition in HTML-Datei schreiben ' Feldnamen der Tabelle dienen gleichzeitig der ' Bezeichnung der HTML-Tabellenspalten Private Sub HTMLBegTableDef(F As Integer, _ Tabelle As Recordset) Dim I As Integer Print #F, "<TABLE WIDTH=100% CELLPADDING=0 " & _ "CELLSPACING=2 BORDER=0>" With Tabelle Print #F, "<TR BGCOLOR=#D7D7D7>" For I = 0 To .Fields.Count - 1 Print #F, " <TH>"; Print #F, .Fields(I).Name; Print #F, "</TH>" Next I Print #F, "</TR>" End With End Sub ' Tabellen abschließen ' GGf. autom. Links zum Blättern einfügen Private Sub HTMLEndTableDef(F As Integer, _ Filename As String, Ext As String, _ ByVal tCount As Long, ByVal Page As Integer, _ Optional ByVal PageNext As Integer = 0) Print #F, "</TABLE>" Print #F, "<P><B>Anzahl Datensätze: " & _ Format$(tCount) & "</B></P>" ' Navigationsleiste unterhalb der Tabelle If Page > 1 Or PageNext <> 0 Then Print #F, "<HR SIZE=1>" Print #F, "<P>"; ' Link zum Zurückblättern If Page > 1 Then Print #F, "<A HREF=""" & Filename & _ IIf(Page - 1 <> 1, "-" & Format$(Page - 1), "") & _ Ext & """>Zurück</A>"; Print #F, " | "; End If ' Link zum Vorblättern If PageNext <> 0 Then Print #F, "<A HREF=""" & Filename & "-" & _ Format$(PageNext) & Ext & """>Weiter</A>"; End If Print #F, "</P>" End If End Sub ' HTML-Datei abschließen Private Sub HTMLCloseFile(F As Integer) Print #F, "</BODY>" Print #F, "</HTML>" Close #F End Sub ' HTML-Report im Standard-Browser anzeigen Public Sub HTMLShowReport(ByVal hWnd As Long, _ ByVal Filename As String) ShellExecute hWnd, "open", Filename, vbNullString, _ vbNullString, vbNormalFocus End Sub ' Text in HTML-Text umwandeln Private Function txt2html(sText As String) As String ' Text-Datei zeilenweise einlesen ' und Sonderzeichen, wie Umlaute und spitze ' Klammern durch HTML-Steuercodes ersetzen sText = Replace(sText, "ä", "ä") sText = Replace(sText, "Ä", "A") sText = Replace(sText, "ö", "ö") sText = Replace(sText, "Ö", "Ö") sText = Replace(sText, "ü", "ü") sText = Replace(sText, "Ü", "Ü") sText = Replace(sText, "ß", "ß") sText = Replace(sText, ">", ">") sText = Replace(sText, "<", "<") sText = Replace(sText, Chr$(34), """) txt2html = sText End Function Aufruf der HTML-Report Funktion Um nun die HTML-Report Funktion in Ihrer eigenen Anwendung nutzen zu können, fügen Sie den gesamten oben abgedruckten Quellcode am besten in ein Modul ein und nennen dieses basHTMLReport.bas. In Ihrer Anwendung selbst wird die HTML-Report Funktion dann folgendermassen aufgerufen: ' Beispielsaufruf für das Erstellen eines ' mehrseitigen HTML-Reports Private Sub MakeHTMLReport() Dim Db As Database Dim rs As Recordset Dim SQL As String Dim HTMLFile As String ' Datenbank öffnen Set Db = Workspaces(0).OpenDatabase("LITERATUR.MDB") ' SQL-Abfragestring SQL = "SELECT Titel, Jahr, ISBN, Preis, Beschreibung " & _ " FROM Buecher WHERE Kat = "VB" ORDER BY Titel" Set rs = Db.OpenRecordset(SQL) ' HTML-Dateiname festlegen HTMLFile = App.Path & "\BUCHINFOS.HTML" ' Report erstellen (max. 15 Einträge pro Seite) dbTableToHTML rs, HTMLFile, "Fachbücher", _ "Fachbücher zu Visual-Basic", 15 rs.Close Db.Close ' Report im Standard-Browser anzeigen HTMLShowReport Me.hWnd, HTMLFile End Sub Wie Sie am Beispiel sehen können, wird nun mit nur einer einzigen Anweisung (dbTableToHTML) ein kompletter mehrseitiger HTML-Report über eine zuvor festgelegte Datenbankabfrage erstellt. Über eine weitere einzelne Anweisung (HTMLShowReport) wird der HTML-Report dann in den Standard-Browser geladen und angezeigt. Dieser Workshop wurde bereits 15.911 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevAniGif (VB/VBA) ![]() Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Tipp des Monats ![]() Manfred Bohn IndexOf für mehrdimensionale Arrays Die generische Funktion "IndexOf" ermittelt das erste Auftreten eines bestimmten Wertes in einem n-dimensionalen Array Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
|||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |