8.9k Aufrufe
Gefragt in Datenbanken von
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

8 Antworten

0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
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
0 Punkte
Beantwortet von
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
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
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
0 Punkte
Beantwortet von
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
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo,

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

Gruß
Ralf
0 Punkte
Beantwortet von
sry...

hier ist der neue, richtige link!

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

mfg gisi91
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
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
0 Punkte
Beantwortet von
Vielen Herzlichen Dank!! Hast mich echt gerettet!!!
Funktioniert echt super!!
werde mich noch bemühe, es benutzerfreundlicher gestalten... ;)

mfg
gisi91
...