PDA

Vollständige Version anzeigen : Datumsberechnung im Bericht


Caleb79
24.01.2008, 08:57
Hallo,

ich verzweifle langsam und mir rennt die Zeitdavon.

Ich habe eine DB, in der ich diverse Sachen vermiete.
Für die vermieteten möchte ich natürlich auch Geld haben, aber um dies zu bekommen, brauche ich natürlich auch einen Nachweis, diesen kreiere ich gerade.

In einem Bericht habe ich das Objekt als solches, einen Mietbeginn und das evtl. Mietende. Des weiteren frage ich nach einem Stichtag (zur Abrechnung).
Nun muss ich herausfinden, ob der Kunde das Objekt schon mehr als 1 Monat hat oder nur ein paar Tage, also möchte ich berechnen, wieviel Tage der Kunde das Objekt hat.
Ich habe nun schon eine Weile gesucht und dabei immer die DateDiff Funktion gefunden. Leider will das ganze nicht so wie ich will, kurzum es kommt immer: #Fehler.
Vielleicht könnt ihr mir helfen, denn ich brauche das ganze mehr als dringend.
Evtl. geht es ja auch anders, ich selber weiß aber nicht wie.

Zur besseren erläuterung hier noch die Funktion und die Daten mit Formaten:

Fkt.:

Private Sub datum_brechnen(Cancel As Integer)

Me!Stichtag.Value = Format(Date, "dd,mm,yyyy")
Me!used_days = DateDiff("d", Me!Nutzungsbeginn, "31.12.2008")
End Sub

Hierbei weiß ich nichtmal, ob die Formatierung sein muss, oder nicht.

Daten:
Nutzungsbeginn - Datum/Uhrzeit
Stichtag - wird beim öffnen des Berichts erfragt, also müsste man es ja doch in Form bringen, oder?

ebs17
24.01.2008, 09:31
Wenn es nur um Tage geht, genügt eine einfache Differenz:
Me!used_days = Me!Nutzungsende - Me!Nutzungsbeginn
' bzw. bei noch laufender Nutzung
Me!used_days = Date - Me!Nutzungsbeginn

Siehe auch hier:
Grundsätzliches und Zusammenfassendes über den Datum/Uhrzeit-Datentyp (http://www.ms-office-forum.net/forum/showthread.php?t=206125)

Caleb79
24.01.2008, 09:56
ok, das seh ich ein, aber beim testen kommt in meinem Falle eine Zahl raus, mit der ich absolut nix anfangen kann.

Ein Beispiel:

Mietbeginn ist der 22.01.2008
Mein Stichtag ist der 31.01.2008

als Ergebnis von Stichtag - Mietbeginn bekomme ich 30972774

Nu hab ich gedacht, das sind die Sekunden, aber wenn ich es durch 3600 dividiere, komme ich immer noch nicht auf 9 Tage. Ich kann mir eigentlich nur noch vorstellen, dass die Formate nicht zusammen harmonieren, oder?

Lanz Rudolf
24.01.2008, 10:24
Hallo
versuche es einmal mit DateValue
so (auch bei Federn)
Datediff("d",Datevalue("22.01.2008"),Datevalue("31.01.2008"))

Resultat bei mir = 9

ebs17
24.01.2008, 10:27
Als Differenz kommt die Anzahl der Tage raus.

Ich habe gerade noch einmal getestet: Die Differenz zweier Formularfelder (Format Datum, kurz) ergibt in einem weiteren (unformatierten) Feld 9.
Übrigens ergibt der 22.01.2008 als Zahl 39469, da kann bei einer Differenz kaum der von Dir genannte Wert herauskommen.

Daher überprüfe die Formatierungen, ggf. erstelle die Felder neu.

Caleb79
24.01.2008, 10:30
@ebs17: Leider doch, aber die Lösung von Lanz Rudolf hat es gebracht, nun kommt wirklich 9 raus.

Danke erstmal.

SHeyer
24.01.2008, 10:59
Nutzt man in VBA eigentlich nicht so ein Format #12/31/2006#, sprich englisches Datum (Monat/Tag/Jahr)?

Damit hatte ich bis jetzt immer Erfolg gehabt, aber ich lasse mich gerne eines besseren belehren.

FW
24.01.2008, 11:17
... s. hierzu Grundsätzliches und Zusammenfassendes über den Datum/Uhrzeit-Datentyp (http://www.ms-office-forum.net/forum/showthread.php?t=206125)...

Lanz Rudolf
24.01.2008, 11:34
Hallo
die Felder zb. Me!Nutzungsbeginn müssten ev auch noch auf NULL oder isDate geprüft werden oder
Nz(Me!Nutzungsbeginn,Vorgabedatum)

22.01.2008 -> 39469 39469 ist warscheindlich die Differenz zu 0

die zahl 30972.774 gibt ein Datum vom 17.10.1984 18:34:34
Den Dezimalpunkt musste ich eifügen zahl sonst zu grosss
der Dezimalpunkt ist die trennung zwischen Datum und Zeit

@Ebs17 ein parameter ist ein String "31.12.2008" und den muss man auch in ein Datum converdieren und dazu verwende ich immer DateValue.
oder dann etwas wie das machen "#01.12.2008#"

@SHeyer kannman mit Format auch erreichen
hier was dazu
SQL braucht das amerikanische Datumsformat (mm/dd/yy) oder das ISO-Format (yyyy-mm-dd).

Beide zu vergleichende Datümer sollten gleich sein nun das heist beide Datum und nicht
eines Datumzeit sein sonst kann es zu Unstimmikeiten führen.
Ein Datumsliteral muss durch das Zeichen (#) eingeschlossen sein, zum
Beispiel: #January 1, 1993# oder #1 Jan 93# oder #01 01 93#.

ebs17
24.01.2008, 12:04
Nutzt man in VBA eigentlich nicht so ein Format #12/31/2006#

Man sollte unterscheiden zwischen einem Format (= Darstellungsart) und dem Wert.
24.01.2008 gleich 24. Jan 2008 usw. (viele Formen darstellbar)
= 39471 (interner Zahlenwert)

Das amerikanische Datumsformat wird erwartet in SQL (= String), sicher, weil hier nur dieses Format als Datum erkannt und verwendet werden kann. Oder eben auch Str(CDbl(DeinDatumsfeld)) - siehe www.donkarl.com?FAQ6.8.

FW
24.01.2008, 12:11
...Das amerikanische Datumsformat wird erwartet in SQL Das ist so nicht ganz richtig! Auch in SQL wird ein Wert, also z. B. ein Long oder Double, erwartet. Wird stattdessen ein Format-String benutzt, so versucht SQL diesen als Datums-Wert (Zahl) zu interpretieren, was nur bedingt gelingt. Das amerikanische Datumsformat, kann halt richtig interpretiert werden, andere aber auch (z. B. yyyy-mm-dd)...

Caleb79
24.01.2008, 12:25
ich hab nun ein weiteres Problem mit den Datümse (lustig).

Wenn nun ein Objekt innerhalb des laufenden Monats zurückgegeben wird, dann muss ich trotzdem am Ende des Monats, die Gebühren berechnen.
Ich wollte es mit einer Wenn Funktion machen:

Wenn(Stichtag-Nutzungsende>31; 0; wenn(stichtag-Nutzungsbeginn>31; monatliche_Rate; (stichtag-Nutzungsbeginn)*tägliche Rate))

Allerdings funktioniert das nur bei den Sachen, die wirklich ausgegeben sind und länger als einen Monat. Iss manchmal echt schwierig.

ebs17
24.01.2008, 12:56
31 Tage und Kalendermonat (so verstehe ich Dich) passt nicht wirklich zusammen. Auch im Schaltjahr hat der Februar nur 29 Tage.

Schau Dich mal hier (http://www.kulpa-online.com/tipps-vb-datumsfunktionen.html) zu Datumsfunktionen um. Da bist Du einer Lösung schon recht nahe.

Caleb79
24.01.2008, 14:40
der link ist absolut Top.

Ich habe es aber etwas anders gemacht.
Und zwar habe ich eine Abfrage erstellt, die mir die Anzahl der Objekte ausgibt, die schon länger dabei sind (am Stichtag mehr als einen monat) und eine andere Abfrage, die mir die Anzahl der Objekte ausgibt, die nur in dem Zeitraum liegen (zwischen zwei von dem Nutzer einzutragenen Tagen).

Diese beiden Abfragen, wollte ich nun in einen Bericht bringen und mit weiteren Informationen versehen. Leider geht das nicht, ich kann diese beiden Abfragen nicht zusammen in einen Bericht legen. Kann mir jemand sagen, wie ich es bewerkstelligen kann?

Oder geht es auch, dass ich die Abfragen zusammen packe und quasi eine kombinierte Abfrage habe. (Habe soetwas noch nicht probiert, deshalb die Frage).

Vielen Dank schonmal

Lanz Rudolf
24.01.2008, 14:57
Hallo
Haben die beiden abfragen die gleichen Felder ?
wenn Ja versuche es mit einer Union-Abfrage

Syntax
[TABLE] Abfrage1 UNION [ALL] [TABLE] Abfrage2 [UNION [ALL] [TABLE] AbfrageN [ ... ]]

s. OH

Caleb79
25.01.2008, 07:42
ihr schreibt immer was von einer Online-Hilfe, wo finde ich diese?

gpswanderer
25.01.2008, 08:23
Hallo,
ihr schreibt immer was von einer Online-Hilfe, wo finde ich diese?Damit ist die ganz normale Access Hilfe gemeint, die man kontextbezogen mit der Taste F1 erreicht, oder aus dem Menü aufruft und dann gezielt sucht.

Caleb79
25.01.2008, 08:24
aso, *schäm* ;)

Caleb79
25.01.2008, 08:40
ich habe nun die UNION Abfrage erstellt, sie funktioniert auch erstmal (auch wenn noch nicht ganz). Aber wenn ich nun einen Bericht erstellen möchte kommt immer ein Fehler, er kann keinen beziehung finden (siehe Anhang).

Woran liegt das, denn wenn es so nicht klappen soll, dann seh ich bald alt aus.