online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon gisi91 vom 07.02.2022, 09:37 Options

Lösung

access vba datumswerte vergleichen

Hallo!
ich habe folgendes Problem:
ich möchte eine datenbank für eine immobilienvermietung (Hütte und Appartment)
erstellen. in einem formular soll man das anreise- und abreisedatum eingeben. (die
eingebenen daten werden in eine abfrage geschrieben). und hier mein frage an euch:

wie mache ich das, das das programm kontrolliert, ob ein bestimmter zeitraum schon
reserviert ist oder nicht?

ich hoffe auf eure unterstützung! danke...

mfg gisi91


Antwort schreiben

Antwort 1 von RaHi vom 07.02.2022, 15:10 Options

Hallo Gisi91,

das ist eigentlich kein großes Problem. Du musst abhängig von dem Objekt (Hütte oder Appartment) prüfen, ob das neue Anreisedatum zwischen den schon getätigten Buchungen liegt, ebenfalls für das Abreisedatum. Das könnte z.B. so aussehen:


if isnull( Dlookup("*","Buchungen", "(" & Anreisedatum & " between  DatumVon and DatumBis 
or " & Abreisedatum & " between DatumVon and DatumBis 
or DatumBis between " & Anreisedatum & " and " & Abreisedatum & ")
AND Objekt = '" & AppOrHut & "'")) then 
   msgbox "Buchung nicht möglich"
  else
   msgbox "Buchung möglich."
end if

Das nur mal als grober Ansatz, der auch noch sehr benutzerunfreundlich ist, da ich nicht sage, was korrigiert werden muss. Bei einer neuen Buchung kann
1. Das Anreisedatum zwischen den Datumsangaben von einer bestehenden Buchung liegen oder das Abreisedatum zwischen den Datumsangaben einer bestehenden Buchung liegen oder eine bestehende Buchung liegt innerhalb der neuen An-und Abreisedaten. Alle andren Szenarien sollten damit abgedeckt sein. An- und Abreisedatum müssen in obigem Beispiel als #MM/DD/YYYY# vorliegen. Die Kriterien oben bitte ohne Zeilenumbruch schreiben.
Falls du konkretere Vorstellung hast, poste mal.

Gruß
Ralf

Antwort 2 von gisi91 vom 07.02.2022, 17:46 Options

Danke für deine rasche Hilfe!
aber noch ne frage: ich habe eine optionsgruppe für die Auswahl Appartment oder Hütte, bei
der 1 oder 2 ausgegeben wird.. wie schreibe ich das in den code?
und lt deinen code heißt die abfrage buchung, ist das korrekt?
ich bin noch ziemliche anfängerin auf diesem gebiet...

mfg gisi91

Antwort 3 von RaHi vom 07.02.2022, 18:28 Options

Hallo Gisi91,

irgendwas musste ich ja einsetzen, ja meine (fiktive) Tabelle mit den Buchungen heisst "buchungen". Diese Tabelle hat bei mir zwei Datumsfelder "DatumVon" und "DatumBis", sowie ein Feld "Objekt" für das Appartment bzw. Hütte. Wenn du statt der Zeichenkette einen Wert aus dem Optionsfeld verwenden willst, gehe ich davon aus, dass es ein Feld (bei mir "Objekt") als integer existiert. Dann brauchst du nur den Teil

Objekt = '" & AppOrHut & "'" 
durch

Objekt = " & me!optionsfeld
zu ersetzen. Wenn du noch nicht so fit mit VBA/Access bist, dann beschreibe doch mal genau wie deine Tabellen, Felder und Formulare aussehen oder lade deine MDB auf einen Fileserver (Z:b: http://www.file-upload.net/) und poste die Adresse.

Gruß
Ralf

Antwort 4 von gisi91 vom 07.02.2022, 18:50 Options

tja, bei mir funktioniert das nicht so richtig...

habs da raufgeladn...

http://www.file-upload.net/delete-2236581/64h1pv.html

is vl nur mehr ein kleiner fehler...
vielen dank für alles!

mfg gisi91

Antwort 5 von RaHi vom 07.02.2022, 19:20 Options

Hallo,

das ist der Link zum Löschen! Falls du mit Access 2007 arbeitest, konvertiere nach 2003, sonst kann ich nix laden.

Gruß
Ralf

Antwort 6 von gisi91 vom 07.02.2022, 19:42 Options

sry...

hier ist der neue, richtige link!

http://www.file-upload.net/download-2236788/Immobilienvermietung.mdb.html

mfg gisi91

Antwort 7 von RaHi vom 07.02.2022, 20:09 OptionsLösung

Lösung
Hallo Gisi91,

doch gar nicht so schlecht! Hier der Code der funktioniert:
Private Sub Bef_Reservierung_Click()
     
Dim datVon As String
Dim datBis As String

datVon = "#" & Format(txt_an, "MM\/DD\/YYYY") & "#"
datBis = "#" & Format(txt_ab, "MM\/DD\/YYYY") & "#"

    If txt_ab < txt_an Then
        Beep
        MsgBox "Das von Ihnen geünschte Datum liegt vor dem Anreisedatum!", vbCritical, "Immobilienvermietung Schoiswohl"
        txt_ab = Null
        txt_ab.SetFocus
       Else
        If IsNull(DLookup("ResNr", "Reservierung", "(" & datVon & " between Anreisedatum and Abreisedatum or " & _
                                                         datBis & " between Anreisedatum and Abreisedatum or " & _
                                                         "Abreisedatum between " & datVon & " and " & datBis & ") " & _
                                                         "AND Objekt = '" & Me!optAuswahl & "'")) Then
            MsgBox "Buchung erfolgreich"
            DoCmd.GoToRecord , , acNewRec
         Else
            MsgBox "Buchung nicht möglich."
        End If
    End If
             
End Sub

Probiere es aus. Du solltest aber dem Anwender ein bißchen mehr Komfort gönnen ;-)

Gruß
Ralf

Antwort 8 von gisi91 vom 08.02.2022, 07:55 Options

Vielen Herzlichen Dank!! Hast mich echt gerettet!!!
Funktioniert echt super!!
werde mich noch bemühe, es benutzerfreundlicher gestalten... ;)

mfg
gisi91

Ähnliche Themen

Access SQL-Statement - Zeilen vergleichen
ChrisWI05  21.08.2008 - 25 Hits - 1 Antwort

Access Uhrzeiten vergleichen!
Steffenistratlos  12.09.2008 - 10 Hits - 1 Antwort

VBA in Access
worm77  04.12.2008 - 70 Hits - 1 Antwort

Access VBA: Navigationsbutton schneller Vorlauf
ralf2307  25.03.2009 - 293 Hits - 2 Antworten

autostart access über vba
rolandaa  30.07.2009 - 880 Hits - 3 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026