Supportnet / Forum / Datenbanken
Access: Zeitraum zwischen 2 Datumseingaben
Frage
Hallo,
ich habe folgendes Problem. Ich möchte eine Zeitdifferenz (in Tagen) zwischen 2 Datumseingaben berechnen. Das eine Datum steht in der Tabelle, das andere kommt aus einem Formular (Benutzereingabe). Das es irgendwie mit dem DatDiff-Befehl gehen wird ist mir klar, aber wie ? Wie komme ich an das vom Benutzer eingegebene Datum im Formular ran ?
Ich bin für jede Hilfe dankbar,
Gruss
stol0014
Antwort 1 von oliverV
Und nochmal Hallo :-),
verwende als VBA-Code sinngemäß folgendes:
[Code]Me.TageDifferenz = DateDiff("d", Me.Kaufdatum, Me.Enddatum)
Dabei ist es egal, ob [Kaufdatum] und [Enddatum] gebunden oder ungebunden sind.
Als Ereignis für den Code verwende das Formularereignis "Beim Anzeigen", sowie die "NachAktualisierungs"-Ereignisse der Felder [Kaufdatum] und [Enddatum].
(das erste Ereignis wird beim Formularöffnen und beim Datensatzwechsel ausgelöst; die anderen beiden Ereignisse...wie der Name schon sagt).
Gruß
Oliver
verwende als VBA-Code sinngemäß folgendes:
[Code]Me.TageDifferenz = DateDiff("d", Me.Kaufdatum, Me.Enddatum)
Dabei ist es egal, ob [Kaufdatum] und [Enddatum] gebunden oder ungebunden sind.
Als Ereignis für den Code verwende das Formularereignis "Beim Anzeigen", sowie die "NachAktualisierungs"-Ereignisse der Felder [Kaufdatum] und [Enddatum].
(das erste Ereignis wird beim Formularöffnen und beim Datensatzwechsel ausgelöst; die anderen beiden Ereignisse...wie der Name schon sagt).
Gruß
Oliver
Antwort 2 von stol0014
Hallo oliverV,
Danke für die Hilfe. Hab bloß noch ein Problem mit der Umsetzung, da das erste Datum aus einer Tabelle kommt und nicht vom Formular. Wie spreche ich das an ? Ist das so (Beispiel: Tabellenname.Kaufdatum) möglich ?
Gruss
stol0014
Danke für die Hilfe. Hab bloß noch ein Problem mit der Umsetzung, da das erste Datum aus einer Tabelle kommt und nicht vom Formular. Wie spreche ich das an ? Ist das so (Beispiel: Tabellenname.Kaufdatum) möglich ?
Gruss
stol0014
Antwort 3 von oliverV
Füge dein [Kaufdatum] einfach in dein Formular als gebundenes Feld ein. Mit dem Code beziehst du dich dann auf das Formularfeld.
Falls das [Kaufdatum] nicht im Formular angezeigt werden soll, kann du die Sichtbar-Eigenschaft auf "nein" stellen; funktioniert dennoch.
Ein direkter Bezug zur Tabelle bekommst du durch die Domänen-Funktionen, allerdings musst du dann eine Where-Klausel einfügen, denn du willst ja sicherlich eine bestimmtes Kaufdatum haben, sprich einen bestimmten Datensatz haben.
Diese Variante wäre ein großer Umweg, du solltest also den direkten 1. Weg gehen.
Gruß
Oliver
Falls das [Kaufdatum] nicht im Formular angezeigt werden soll, kann du die Sichtbar-Eigenschaft auf "nein" stellen; funktioniert dennoch.
Ein direkter Bezug zur Tabelle bekommst du durch die Domänen-Funktionen, allerdings musst du dann eine Where-Klausel einfügen, denn du willst ja sicherlich eine bestimmtes Kaufdatum haben, sprich einen bestimmten Datensatz haben.
Diese Variante wäre ein großer Umweg, du solltest also den direkten 1. Weg gehen.
Gruß
Oliver
Antwort 4 von stol0014
Hallo oliverV,
Nochmals danke für die Hilfe, aber ich glaube ich muss doch den 2.Weg gehen. Ich habe eine Tabelle mit vielen Geräte und Kaufdatums bzw. Prüfdatums. Und jetzt möchte ich mittels eine Formulareingabe (Abfrage_Prüf.Datum)prüfen, wieviel Zeit noch bis zur Prüfung bleibt bzw. ob eine Prüfung schon fällig ist (verbleibende Tage =0). Wie funktioniert das dann mit den Domänen-Funktionen ?
Nochmals danke für die Hilfe,
Gruss
stol0014
Nochmals danke für die Hilfe, aber ich glaube ich muss doch den 2.Weg gehen. Ich habe eine Tabelle mit vielen Geräte und Kaufdatums bzw. Prüfdatums. Und jetzt möchte ich mittels eine Formulareingabe (Abfrage_Prüf.Datum)prüfen, wieviel Zeit noch bis zur Prüfung bleibt bzw. ob eine Prüfung schon fällig ist (verbleibende Tage =0). Wie funktioniert das dann mit den Domänen-Funktionen ?
Nochmals danke für die Hilfe,
Gruss
stol0014
Antwort 5 von oliverV
Ok, jetzt wirds konkreter...
Die Domänen-Funktionen kannst du in dem Fall vergessen, da du damit nur einen Datensatz selektieren kannst.
Ich würde folgendermaßen vorgehen:
Erstelle ein Endlosformular mit deinen Geräten, Kauf- u. Prüfdatum.
Füge im Formularkopf ein ungebundenes Textfeld "Datumsabfrage" ein, stelle für dieses Feld ein Datumsformat ein (z.B. Datum, kurz).
Erweitere nun die Datenherkunft des Formulars um das Feld Fälligkeit; zur Berechnung der Fälligkeit verwende das Prüfdatum und einen Formularfeldbezug zu dem eben erstellten Feld. Sinngemäß dürfte die SQL-Ansicht ungefähr so aussehen:
Füge nun das Feld [Fälligkeit] in dein Formular ein.
Wenn du nun wieder in die Formularansicht wechselst, wird natürlich keine Fälligkeit angezeigt, da das Feld [Datumseingabe] noch leer ist, also die Basis für die Berechnung noch fehlt.
Nachdem du nun ein Abfragedatum eingegeben hast, musst du das Formular aktualisieren (die Grundlage der Datenherkunft hat sich ja jetzt geändert). Verwende dazu "NachAktualisierung" des Feldes [Datumsabfrage] folgenden VBA-Code:
[Code]Me.Requery[/Code]
Das sollte es dann gewesen sein; die Formularfelder im Detailbereich solltest du sperren um ein ungewolltes Überschreiben zu vermeiden.
Viel Erfolg beim Nachbauen
Oliver
Die Domänen-Funktionen kannst du in dem Fall vergessen, da du damit nur einen Datensatz selektieren kannst.
Ich würde folgendermaßen vorgehen:
Erstelle ein Endlosformular mit deinen Geräten, Kauf- u. Prüfdatum.
Füge im Formularkopf ein ungebundenes Textfeld "Datumsabfrage" ein, stelle für dieses Feld ein Datumsformat ein (z.B. Datum, kurz).
Erweitere nun die Datenherkunft des Formulars um das Feld Fälligkeit; zur Berechnung der Fälligkeit verwende das Prüfdatum und einen Formularfeldbezug zu dem eben erstellten Feld. Sinngemäß dürfte die SQL-Ansicht ungefähr so aussehen:
SELECT Tabelle1.Gerätebezeichnung, Tabelle1.Kaufdatum, Tabelle1.Prüfdatum, DateDiff("d",Formulare!Formular1!Datumsabfrage,[Prüfdatum]) AS Fälligkeit
FROM Tabelle1
ORDER BY DateDiff("d",Formulare!Formular1!Datumsabfrage,[Prüfdatum]) DESC;Füge nun das Feld [Fälligkeit] in dein Formular ein.
Wenn du nun wieder in die Formularansicht wechselst, wird natürlich keine Fälligkeit angezeigt, da das Feld [Datumseingabe] noch leer ist, also die Basis für die Berechnung noch fehlt.
Nachdem du nun ein Abfragedatum eingegeben hast, musst du das Formular aktualisieren (die Grundlage der Datenherkunft hat sich ja jetzt geändert). Verwende dazu "NachAktualisierung" des Feldes [Datumsabfrage] folgenden VBA-Code:
[Code]Me.Requery[/Code]
Das sollte es dann gewesen sein; die Formularfelder im Detailbereich solltest du sperren um ein ungewolltes Überschreiben zu vermeiden.
Viel Erfolg beim Nachbauen
Oliver
Antwort 6 von stol0014
Hallo oliverV,
Vielen Dank für die ausführliche Hilfe ! Werde ich gleich mal ausprobieren.
Gruss
stol0014
Vielen Dank für die ausführliche Hilfe ! Werde ich gleich mal ausprobieren.
Gruss
stol0014

