Problemstellung:
Wie kann ich Daten grafisch darstellen?
z.B. einen Belegungsplan für eine Pension, Autovermietung, Maschinenbelegung o.ä.
Dieses Bsp. zeigt nur die grafische Umsetzung und stellt kein Buchsprogramm usw. dar!
Voraussetzungen:
Das Bsp ist ab A00 lauffähig
So in etwa soll das Ergebnis aussehen:
Hier im Bsp. habe ich mal eine kleine Pension abgebildet die 4 Etagen hat.
Oben im Formular wird das Datum angezeigt.
Sind Zimmer am gewählten Datum Frei sind diese grün, gelb bedeutet Reserviert und Rot ist belegt.
3 Tabellen sind erforderlich und eine ist optional.
Tabelle "tbl_Zimmer", "tbl_Kunden" und "tbl_Belegung"
Die Tabelle "tbl_Art" enthalt die Farbcodes für den jeweiligen Status. Das könnte aber auch im Code übergeben werden.
Das Form ist recht simpel gehalten, wobei ich nicht auf den oberen Teil mit dem Datum und den Buttons eingehe da
diese selbst erklärend sind.
Für jedes Zimmer wird ein Bezeichnungsfeld anlegt und erhält als Beschriftung die Zimmernummer und als Farbhintergrund "Grün"
Wichtig ist die Benennung der Bezeichnungsfelder. Hier im Bsp. habe ich den Präfix "z" und die Zimmernummer gewählt.
Warum das so ist dazu kommen wir jetzt.
1. Holen der Farbe für die freien Zimmer (Funktion "fcDomWert" s. Modul "mod_Tool"):
Option Compare Database Option Explicit Dim nFreeColor As Long Private Sub Form_Load() nFreeColor = fcDomWert("ArtCol", "tbl_Art", "[ArtArt]=" & "'Frei'", ltDLookup) End Sub
2. Reset der Felder:
Private Sub ResetBelegung() Dim frm As Form, ctl As Control Set frm = Me For Each ctl In frm.Controls If ctl.ControlType = acLabel And Left(ctl.Name, 1) = "z" Then ctl.BackColor = nFreeColor End If Next End Sub
Es werden alle Controls im Form durchlaufen und ist es ein Bezeichungsfeld und beginnt mit "z" dann wird die Backcolor auf "Frei" gesetzt.
3. Einfärben der Label
Private Sub Belegung() Dim sDate As String Dim sSQL As String Dim vSet As Variant Dim rsBelegung As DAO.Recordset 'SQL konformes Datum sDate = Sqldatum(Me.txt_Dat) sSQL = "SELECT tbl_Zimmer.ID_Zimmer, tbl_Zimmer.ZimmerNr, tbl_Belegung.ID_Kunde, tbl_Belegung.Datum_Von, tbl_Belegung.Datum_Bis, tbl_Art.ArtCol " & _ "FROM tbl_Art INNER JOIN (tbl_Kunden INNER JOIN (tbl_Zimmer INNER JOIN tbl_Belegung ON tbl_Zimmer.ID_Zimmer = tbl_Belegung.ID_Zimmer) " & _ "ON tbl_Kunden.KundenID = tbl_Belegung.ID_Kunde) ON tbl_Art.ArtID = tbl_Belegung.BelegungArt " & _ "WHERE (((tbl_Belegung.Datum_Von) <=" & sDate & ") AND ((tbl_Belegung.Datum_Bis) >=" & sDate & "));" Set rsBelegung = CurrentDb.OpenRecordset(sSQL) 'durchlaufen der Label und Einfärben Do While Not rsBelegung.EOF vSet = "z" & rsBelegung!ZimmerNr If Not IsNull(rsBelegung!ArtCol) Then Me(vSet).BackColor = rsBelegung!ArtCol Else Me(vSet).BackColor = nFreeColor End If rsBelegung.MoveNext Loop rsBelegung.Close End Sub
Hier wird ein Recordset geöffnet das alle Termine enthält die am gewählten Datum vorhanden sind und die Label entsprechend einfärbt.
4. Aufruf der Prozeduren
Private Sub Form_Current() Call ResetBelegung Call Belegung End Sub
Beispiel für einen Belegungsplan
ab A00
Ähnliche Artikel
Weiterlesen...