Hallo,
Ich habe ein Endlosformular mit einer Tabelle über Eigenschaften verbunden, in der Tabelle gibt es Felder mit Namen: Geburtsdatum, Alter und Alteram. Wenn ich Geburtsdatum nicht kenne aber ungefähres alter kenne tippe ich nur alter in Feld "Alter " und aktuelles Datum in Feld "Alteram". mit den Jahren wird das alter nicht aktualisiert deswegen das Feld "Alteram" damit ich später ungefähres, aktuelles alter ausrechnen kann. nun die Frage, WIE.
ich habe mir sowas gedacht:
Private Sub Form_Load()
'Wenn Geburtsdatum nicht eingegeben ist
If IsNull(Me.Geboren) And Not IsNull(Me.Alter) Then
Me.Alter = Me.Alter + DateDiff("yyyy", Me.Alteram, Now)
End If
End Sub
das funktioniert nur bei den ersten Eintrag, soll aber natürlich für alle eintträge funktionieren
es soll nur das Jahr berücksichtigt werden.
weis jemand, wie man das in VBA lösen kann?
Du könntest das alles doch auch über ein berechnetes Steuerelement lösen.
ok..und was für Ausdruck soll ich da reinschreiben ?
Hallo,
wenn Du als Datenherkunft eine Abfrage hast, was hier sinnvoll ist, kannst du eine freie Spalte nehmen und
dort das Alter berechnen. Da dich nur die Jahre interessieren könnte die Spalte so aussehen:
AktAlter: Jahr(Datum()) - Jahr(Geboren)
oder wie Deine Felder auch immer benannt sind.
Achtung! Diese Form der Berechnung ist genauso wie mit DatDiff berechnet nicht genau
wenn jetzt jemand ab März Geburtstag hat machst Du ihn ein Jahr älter.
Gruß
Johann
Hallo Jonny,
danke für deine noch einfachere Lösung.
für das was ich vor hatte habe ich so gemacht.
AktAlter: [Alter]+Jahr(Datum())-Jahr([Alteram])
ZitatAchtung! Diese Form der Berechnung ist genauso wie mit DatDiff berechnet nicht genau
wenn jetzt jemand ab März Geburtstag hat machst Du ihn ein Jahr älter.
das macht nichts, denn das wollte ich auch so haben. (wollte ja nur ungefähres/aktuelles alter wissen)
Hallo T417 ,
ich würde auch gerne wissen wie du das mit berechnetes Steuerelement gemeint hast, also was man da eingeben muss.
Hallo, (wenn auch etwas verspätet)
mir schwebte etwas ähnliches wie Jonny vor.
Aber ich hatte kein Zeit zum testen, und ich wollte auch nichts falsches sagen. ;)
Gruß
T.
Hallo,
da habe ich mich aber zu früh gefreut :(
das Problem ist jetzt, wo das Geburtsdatum bekannt ist wird durch diese..
AktAlter: [Alter]+Jahr(Datum())-Jahr([Alteram])
..Berechnung überschrieben.
Ich brauche so eine Berechnung mit bedienung, ist sowas möglich ?
Hallo,
Wenn ich das jetzt richtig verstanden hab, sollte dir nz() weiterhelfen.
Du willst ja verhindern das vorhandene Werte überschreiben werden.
Gruß
T.
ich beschreibe das Problem lieber nochmal, bin mir nicht sicher ob du so verstanden hast was ich gemeint habe.
Ich habe eine Tabelle: tbl_Kontakt
mit Feldern
Vorname, Name, Alter, Geburtsdatum
einen Endlosformular Formular : frm_Kontakt
Vorname | Name | Alter | Geburtsdatum |
Dieses Formular wird nur zum Daten Anzeigen gedacht, nicht einfügen oder bearbeiten (Dafür ist ein anderes Formular gedacht).
also es geht jetzt nur um Daten Ausgabe !
wenn bei der eingabe kein Geburtsdatum bekann ist aber Alter, gibt man nur alter an. wenn Geburtsdatum bekannt, dann Alter und Geburtsdatum wird eingetragen.
so, ein Jahr später wenn ich im Formular die Daten anschaue, dann sind Altersangaben nicht mehr aktuell.
wie kann ich aktuelles Alter anzeigen lassen ?
Hmm,
das ist nicht getestet, aber in einen ungebundenen Steuerelement auf ein Formular mit deiner Tabelle als Datenherkunft:
=Summe(nz([Alter]+Jahr(Datum())-Jahr([Alteram])))
könnte funktionieren, falls Access es zulässt.
Gruß
T.
:D :D :D
ich habe jetzt in jedem Eintrag im Feld Alter die Zahl 60
:D Ähhh, :D
Also zumindestens bewirkt der Code etwas. ;D
Hast du das wirklich in einen ungebundenen Textfeld auf einen Formular (nicht Endlosformular), das als Datenherkunft deine Tabelle hat?
nein, ich habe das für Endlosformular benutzt was als Datenherkunft meine Tabelle hat
Hallo,
dann lass die Geschichte mit dem Steuerelementinhalt und berechne das Alter in einer Abfrage für das Formular....
http://www.donkarl.com/?FAQ2.7
Du kannst als Datensatzquelle des Formulars bereits eine SELECT-Anweisung angeben, z.B. wie folgt:
SELECT *, IIF(Geburtsdatum IS NULL;[Alter] + YEAR([Alteram])-YEAR([Alter]);[Geburtsdatum]) AS BerechnetesAlter FROM tblKontakt
Im Formular zeigst du dann im entsprechenden Feld den Wert von BerechnetesAlter an.
Hallo DF6GL, ja das hilft auch weiter aber,
ich habe eine Spalte mit Zwei Bedingungen,
wenn Geburtsdatum vorhanden dann dein Link und
wenn Geburtsdatum nicht vorhanden sonder nur Alter dann ???
Hallo,
wenn kein Geburtsdatum bekannt ist und nur das Alter eingetragen wird, ist es nicht möglich ein Jahr später das Alter aktualisieert zu sehen!
Zu dem Zweck musst du das Eintragungsjahr mitspeichern - oder wie sonst willst du denn feststellen wieviele Jahre du zum Alter dazurechnen musst?
Zitatich habe eine Spalte mit Zwei Bedingungen
nein, hast du nicht, das ist nur eine einzige
WENN Geburtsdatum vorhanden DANN dein Link SONST Alter + vergangene Jahre seit Eintrag
Hallo database,
soweit war ich auch schon, bin der Meinung dass ich so ziemlich das selbe im ersten Beitrag geschrieben habe.
kann man in einer Abfrage ein spalter erstellen z.B AktAlter: un dort IF ELSE bedienung benutzen ?
sowas wie AktAlter: [Alter]+Jahr(Datum())-Jahr([Alteram]) aber noch mit Bedingung If ELSE.
Hallo,
na klar kannst du das machen:
If Then Else gibts im Abfrageentwurf als solches nicht.
Verwende statt dessen die Wenn-Funktion!
Feldname: Wenn(Bedingung;Dann;Sonst)
NUN..die Lösung :
Trrrrrrrraaaaam daam dam daaaaaaaaaaaaaaaaaamm !!! ;D
AktAlter: Wenn([Geburtsdatum] Ist Null;[Alter]+Jahr(Datum())-Jahr([Alteram]);fgeburtstag([Geburtsdatum]))
fgeburtstag ist bei mir eine funktion die Alter ausrechnet wenn Geburtsdatum vorhanden ist
die Funktion habe ich auch aus diesem Forum.
'Automatisch Alter errechnen
Public Function fgeburtstag(gdatum As Date)
Dim geburtstag As Date
Dim Tagesdatum As Date
Dim Alter As Long
geburtstag = gdatum
Tagesdatum = Now
'Das aktuelle Datum wird in die Variable Tagesdatum gefüllt.
Select Case Month(geburtstag)
'Der Monat des Geburtstags wird mit der Funktion Month ausgewertet
'und abhängig vom Ergebnis verzweigt.
'Beginn der 1. Verzweigung
Case Is < Month(Tagesdatum)
'Falls der Monat des Geburtstags kleiner ist als der Monat des aktuellen Datums
Alter = DateDiff("yyyy", geburtstag, Tagesdatum)
'rechnet DateDiff richtig, wir können DateDiff einfach verwenden.
'DateDiff gibt als Rückgabewert die Differenz zwischen zwei Daten.
'Um das Alter in Jahren zurückzugeben, wird der Schalter "yyyy" verwendet.
Case Is > Month(Tagesdatum)
'Falls der Monat des Geburtstags größer ist als der Monat des aktuellen Datums
Alter = DateDiff("yyyy", geburtstag, Tagesdatum) - 1
'rechnet DateDiff falsch, nämlich 1 Jahr zuviel,
'deswegen verwenden wir DateDiff und subtrahieren 1 Jahr (- 1)
Case Is = Month(Tagesdatum)
'Falls der Monat des Geburtstags mit dem Monat des aktuellen Datums übereinstimmt
'also gleich ist, rechnet DateDiff falsch
Select Case Day(geburtstag)
'deswegen verzweigen wir den Code erneut
'und werten auch den Tag des Geburtstags mit der Funktion Day aus.
'Beginn der 2. (inneren) Verzweigung
Case Is <= Day(Tagesdatum)
'Falls der Tag des Geburtstags kleiner/gleich dem Tag des aktuellen Datums,
Alter = DateDiff("yyyy", geburtstag, Tagesdatum)
'rechnet DateDiff richtig, wir können DateDiff verwenden.
Case Is > Day(Tagesdatum)
'Falls der Tag des Geburtstags größer ist als der Tag des aktuellen Datums,
Alter = DateDiff("yyyy", geburtstag, Tagesdatum) - 1
'rechnet DateDiff falsch, deswegen subtrahieren wir 1 Jahr.
End Select
'Ende der 2. (inneren) Verzweigung
End Select
'Ende der 1. (äußeren) Verzweigung
'Zur Übersicht dienen die Einrückungen, Beginn und Ende stehen auf gleicher Höhe
fgeburtstag = Alter
'Das errechnete Alter wird mit der Funktion MsgBox ausgegeben
End Function
danke euch allen (http://www.fotos-hochladen.net/uploads/daumenhoch9johvf05p4.jpg)