Erzeugung von HTML-Seiten mittels Access-Datenbank
Alexander
- datenbank
Hallo,
erstmal möchte ich das Thema etwas relativieren, da es auch auf ein anderes, als mein nun folgendes, Problem schließen lässt. Zudem hoffe ich, daß es nicht ganz Off-Topic ist:
Ich habe bei meinen Hoster eine HP, die leider keine Datenbank-Anbindung enthält. Ich kann also nicht dynamisch auf dem Server aus einer Datenbank eine HTML-Datei erzeugen.
Ich habe nun eine ziemlich große FAQ-Sammlung, die ich in einer Access2000 Datenbank integriert habe. Nun ist es ja mit Access möglich, mittels Makros neue (HTML-)Dateien zu erstellen, die dann meine Daten aus der Datenbank enthalten.
Leider habe ich davon zu wenig Ahnung, um dies selber zu machen.
Ich habe allerdings so ein Makro schon für Excel, daß Datensätze aus einer Excel-Tabelle entnimmt und damit HTML-Dateien erzeugt.
Das Makro poste ich mal:
Option Explicit ' Variablen müssen vor Benutzung deklariert werden
Option Private Module ' Makro nicht unter "Extras - Makros" anzeigen lassen
' Die Startseiten schreiben
Sub RM_StartseiteSchreiben()
Dim iRow As Integer, iCnt As Integer
iCnt = 0 ' Startnummer für HTML-Seite
iRow = 3 ' Startzeile (1. Datensatz) in "Tabelle1"
' Solange Seiten erstellen, bis keine Daten (Leere Zeile) in Spalte gefunden
While Worksheets("Tabelle1").Range("A" & iRow).Value <> ""
' Datei erstellen (im gleichen Ordner wie diese Mappe)
iCnt = iCnt + 1
Open ActiveWorkbook.Path & "" & iCnt & ".htm" For Output As #1
' Seite schreiben
' Kopf
Print #1, "<html>"
Print #1, "<head>"
Print #1, " <meta http-equiv=""content-type"" content=""text/html;charset=iso-8859-1"">"
Print #1, " <meta name=""language"" content=""deutsch, de"">"
Print #1, " <meta name=""description"" content=""" & RM_String2Html(Worksheets("Tabelle1").Range("C" & iRow).Value) & """>"
Print #1, " <meta name=""keywords"" content=""" & RM_String2Html(Worksheets("Tabelle1").Range("D" & iRow).Value) & """>"
Print #1, " <meta name=""robots"" content=""index"">"
Print #1, ""
Print #1, " <title>" & RM_String2Html(Worksheets("Tabelle1").Range("A" & iRow).Value) & "</title>"
Print #1, "</head>"
Print #1, ""
' Body
Print #1, "<body text=""#000000"" bgcolor=""#ffffff"">"
Print #1, ""
Print #1, "<h2>" & RM_String2Html(Worksheets("Tabelle1").Range("A" & iRow).Value) & "</h2>"
Print #1, ""
Print #1, RM_String2Html(Worksheets("Tabelle1").Range("B" & iRow).Value)
Print #1, ""
Print #1, "<br><br>"
Print #1, "<a href=""" & RM_String2Html(Worksheets("Tabelle1").Range("E" & iRow).Value) & """> Link " & iCnt & "</a>"
Print #1, ""
Print #1, "<br><br>"
Print #1, "<font face=""arial,helvetica,sans-serif"" size=""1"" color=""#d0d0d0"">Stand: " & Format(Date, "dd.mm.yyyy") & "</font>"
Print #1, ""
Print #1, "</body>"
Print #1, "</html>"
' Datei schliessen
Close #1
' Hilfsvariable um eins erhoehen
iRow = iRow + 1
Wend
End Sub
' String HTML-konform machen
Function RM_String2Html(ByVal sName As String) As String
Dim iLength As Integer, i As Integer
Dim sTmp As String
sTmp = ""
iLength = Len(sName)
' Zeichen fuer Zeichen umwandeln und schreiben
For i = 1 To iLength
Select Case Mid(sName, i, 1)
Case "Ä"
sTmp = sTmp & "Ä"
Case "ä"
sTmp = sTmp & "ä"
Case "Ö"
sTmp = sTmp & "Ö"
Case "ö"
sTmp = sTmp & "ö"
Case "Ü"
sTmp = sTmp & "Ü"
Case "ü"
sTmp = sTmp & "ü"
Case "ß"
sTmp = sTmp & "ß"
Case "&"
sTmp = sTmp & "&"
Case "é"
sTmp = sTmp & "é"
Case "ñ"
sTmp = sTmp & "ñ"
Case "ë"
sTmp = sTmp & "ë"
Case """"
sTmp = sTmp & ""e;"
Case Else
sTmp = sTmp & Mid(sName, i, 1)
End Select
Next i
RM_String2Html = sTmp
End Function
An sich genau das, was ich suche. Nur Excel hat den Nachteil, daß es nun mal kein Datenbank-Programm sondern eine Tabellenkallkulation ist, ich deshalb zu einfachen Dateneingabe keine Formulare nutzen kann, oder Berichte erstellen kann.
Nun meine eigentliche Frage: Ist es möglich, das Makro so anzupassen, daß es unter Acces funktioniert?
Viele Grüße
Alexander
P.S.: Unter http://www.bike-pages.de/tmp/excel.xls steht zur Demo eine solche Excel-Tabelle.
Hi,
um aus Datensätzen in Access-Tabellen HTML-Seiten zu generieren gibt es eigentlich zwei Möglichkeiten:
Die eingebaute Export-Funktion benutzen und hierbei eine Vorlage (mit eigenen Style-Definitionen usw.) einsetzen (Details findest Du in der OH).
Dies ist der einfachste Weg, er erzeugt allerdings nicht gerade den schönsten Code...
Um das Ganze via "Makro" (besser VBA-Prozedur) zu erledigen, musst Du den Zugriff auf die einzelnen Datensätze auf die in Access gegebenen Zugriffsmöglichkeiten anpassen:
Bsp:
Dim db As Database
Dim rs As Recordset
Set db = CurrentDB()
Set rs = db.OpenRecordset ("SELECT * FROM tblTabelle")
'SQL-Statement oder Tabellennamen hier einsetzen
rs.MoveFirst 'zum ersten DS gehen
While Not rs.EOF 'jetzt gesamte Tabelle von oben nach unten durch
'Auf die einzelnen Datenfelder kannst Du jetzt mittels:
rs!DeinFeld
'zugreifen
rs.MoveNext 'nächster DS - ganz wichtig
Wend
Das ganze läuft allerdings darauf hinaus, dass Du Dein Excel-Makro fast komplett umschreiben musst :-(
Ansonsten schau Dich mal auf accessware.de um, dort müsste es ein fertiges Modul hierfür geben.
HTH
Daniel
Hi Daniel,
dank Deiner Hilfe konnte ich die VBA-Prozedur :) umschreiben, so daß sie jetzt auch unter Access super funktioniert.
Tausend Dank und noch schönes Wochenende...
Alexander
P.S.: Die Excel-Test-Datei hab ich wieder gelöscht, wer sie trotzdem (noch) haben möchte, meldet sich bitte bei mir ;)
Hallo,
hier als Alternative ein Tool:
http://www.access2web.dk/
Grüße,
Sebastian