Access VAB Vergleich der Einträge

Moderator: ModerationP

Access VAB Vergleich der Einträge

Beitragvon tutenchamun » 04. Mai 2021, 08:05

Guten Morgen
Habe eine Datenbank erstellt mit welcher ich eine Raumvergabe verwalte. Dabei werden die Felder für die Raumauswahl, das Belegungsdatum, die Startzeit und die Endzeit eintrage.
Damit ich keine doppelten Einträge erzeuge haben ich eine Kontrolle in VBA vorgesehen, die die vorhandenen Einträte mit dem aktuellen Eintrag vergleichen soll und das funktioniert.

Wenn z.B. bereits am 6. Mai im Raum 1 von 08:00 bis 12:00 ein Eintrag vorhanden ist, wird kein gleicher Eintrag zugelassen. Trage ich hingegen am 6.Mai im Raum 1 von 10:00 bis 14:00 Uhr einen Termin ein, bekomme ich keine Rückmeldung und der Eintrag wird gespeichert, obwohl sich die Stunden von 10:00 bis 12:00 überschneiden und das sollte nicht möglich sein. Ich denke das Probleme liegt an diesem Kodeteil. Leider komme ich einfach nicht drauf, wie ich Zeitüberschneidungen hier einbauen kann.

Vielleicht kann mir jemand dabei helfen,

SQLtxt = "SELECT tbl_belegung.Raumauswahl, tbl_belegung.be_datumbelegung, tbl_belegung.be_von, tbl_belegung.be_bis " & _
"FROM tbl_belegung " & _
"WHERE tbl_belegung.Raumauswahl = " & Strraum & " AND " & _
"tbl_belegung.be_datumbelegung = #" & Format(Strdatum, "yyyy-mm-dd") & "# AND " & _
"tbl_belegung.be_von = #" & Format(Strvon, "hh:mm") & "# AND " & _
"tbl_belegung.be_bis = #" & Format(Strbis, "hh.mm") & "#;"

Mit bestem Dank im voraus



Sub Kontrolle()

Dim db As Database
Dim rs As Recordset

Dim Strraum As Integer
Dim StrVerein As String
Dim Strdatum As Date
Dim Strvon
Dim Strbis

Dim SQLtxt As String
Dim anz As Integer
Dim ttt As Date

On Error Resume Next

Set db = CurrentDb 'Current
Strraum = Me.Raumauswahl
Strdatum = Me.be_datumbelegung
Strvon = Me.be_von
Strbis = Me.be_bis

If Strraum = 0 Then Exit Sub
If Strdatum = 0 Then Exit Sub
If Strvon = 0 Then Exit Sub
If Strbis = 0 Then Exit Sub

SQLtxt = "SELECT tbl_belegung.Raumauswahl, tbl_belegung.be_datumbelegung, tbl_belegung.be_von, tbl_belegung.be_bis " & _
"FROM tbl_belegung " & _
"WHERE tbl_belegung.Raumauswahl = " & Strraum & " AND " & _
"tbl_belegung.be_datumbelegung = #" & Format(Strdatum, "yyyy-mm-dd") & "# AND " & _
"tbl_belegung.be_von = #" & Format(Strvon, "hh:mm") & "# AND " & _
"tbl_belegung.be_bis = #" & Format(Strbis, "hh.mm") & "#;"




Set rs = db.OpenRecordset(SQLtxt)

anz = rs.RecordCount

If anz > 0 Then
MsgBox "ACHTUNG DOPPELTER EINTRAG:" & vbCr & vbCr & _
"Die gerade eingetragene Vormerkung ist bereits vorhanden.", vbInformation + vbOK, "Hinweis für: " & Environ("UserName")

MsgBox "AKTION ABGEBROCHEN:" & vbCr & _
"Der Eintrag wird nicht gespeichert.", vbInformation, "Hinweis für: " & Environ("UserName")
Me.Undo
Exit Sub
End If
End Sub
Benutzeravatar
tutenchamun
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 596
Registriert: 19. Jun 2005, 06:43
Wohnort: Südtirol

Re: Access VAB Vergleich der Einträge

Beitragvon Marco PB » 05. Mai 2021, 11:51

Ich hatte diese Lösung für Excel, du kannst sie für deine Abfrage anpassen.

Die Funktion Overlap() gibt die Überlappung in Minuten zurück, ist das Ergebnis null so gibt es keine Überlappung.
Alle Bezeichner in x- und y- sind double. Die Uhrzeiten sind also Zahlen und keine Zeichenketten, die Felder müssen also als Uhrzeit deklariert werden.
x1 und x2 sind die beiden Startzeiten, y1 und y2 die beiden Endzeiten. Ohne Excel musst du xMax() und xMin() neu schreiben.

Code: Alles auswählen
Function Overlap(x1, x2, y1, y2) As Double
   Overlap = xMax(0, xMin(y1, y2) - xMin(xMax(x1, x2), y1))
End Function

Function xMax(x1, x2)
   xMax = Application.WorksheetFunction.Max(x1, x2)
End Function

Function xMin(x1, x2)
   xMin = Application.WorksheetFunction.Min(x1, x2)
End Function


Die Lösung hatte ich aus diesem Artikel herausgearbeitet: https://www.herber.de/forum/archiv/636t ... ungen.html
Marco PB
 

Re: Access VAB Vergleich der Einträge

Beitragvon Mister Stringer » 05. Mai 2021, 13:20

Hallo,

wenn man keine Angabe über die Länge der Überschneidung braucht, sondern nur die Info "Überschneidung ja/nein", kann man das Ganze etwas einfacher berechnen. Als Grundlage möge folgende hochauflösende ASCII-Grafik dienen. B1 und B2 sind die Beginnzeiten, E1 und E2 die Endzeiten zweier Buchungen. Es gibt insgesamt 6 verschiedene Fälle:

Code: Alles auswählen
                        B2----------------E2
Fall 1:     B1----E1    |                 |              -> keine Überschneidung
Fall 2:     B1----------+----E1           |              -> Überschneidung
Fall 3:     B1----------+-----------------+----E1        -> Überschneidung
Fall 4:                 |    B1-------E1  |              -> Überschneidung
Fall 5:                 |    B1-----------+----E1        -> Überschneidung
Fall 6:                 |                 |    B1---E1   -> keine Überschneidung

Eine Überschneidung liegt also nicht vor, wenn E1 < B2 oder B1 > E2 ist.

Gruß
Klaus
21 ist nur die halbe Wahrheit.
Mister Stringer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 366
Registriert: 11. Aug 2010, 23:26

Re: Access VAB Vergleich der Einträge

Beitragvon tutenchamun » 05. Mai 2021, 15:15

danke an beide
werde mir das genauer ansehen
danke nochmals
Benutzeravatar
tutenchamun
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 596
Registriert: 19. Jun 2005, 06:43
Wohnort: Südtirol


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: PanSolo und 3 Gäste