1 1 1 1 1 1 1 1 1 1 Rating 0.00 (0 Votes)

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

Funktionsweise:
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

Dateien:
(0 Stimmen)

Beispiel für einen Belegungsplan

ab A00

Die Zip-Datei enthält eine Version ab A00
Datum 05.02.2018
Dateigröße 27.43 KB
Download 1.953


Ähnliche Artikel