Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: asiat am Februar 23, 2011, 16:01:28

Titel: Recordset mit Bedingung ?
Beitrag von: asiat am Februar 23, 2011, 16:01:28
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?

Titel: Re: Recordset mit Bedingung ?
Beitrag von: T417 am Februar 23, 2011, 16:47:12
Du könntest das alles doch auch über ein berechnetes Steuerelement lösen.
Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am Februar 23, 2011, 21:24:58
ok..und was für Ausdruck soll ich da reinschreiben ?
Titel: Re: Recordset mit Bedingung ?
Beitrag von: Jonny am Februar 24, 2011, 17:35:09
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
Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am Februar 25, 2011, 09:24:01
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.
Titel: Re: Recordset mit Bedingung ?
Beitrag von: T417 am März 02, 2011, 14:22:12
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.
Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am März 03, 2011, 12:00:38
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 ?
Titel: Re: Recordset mit Bedingung ?
Beitrag von: T417 am März 03, 2011, 12:26:18
Hallo,

Wenn ich das jetzt richtig verstanden hab, sollte dir nz() weiterhelfen.
Du willst ja verhindern das vorhandene Werte überschreiben werden.

Gruß
T.

Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am März 03, 2011, 13:03:56
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 ?

Titel: Re: Recordset mit Bedingung ?
Beitrag von: T417 am März 03, 2011, 13:37:15
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.
Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am März 03, 2011, 13:59:45
 :D :D :D
ich habe jetzt in jedem Eintrag im Feld Alter die Zahl 60



Titel: Re: Recordset mit Bedingung ?
Beitrag von: T417 am März 03, 2011, 14:14:57
 :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?
Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am März 03, 2011, 14:21:35
nein, ich habe das für Endlosformular benutzt was als Datenherkunft meine Tabelle hat
Titel: Re: Recordset mit Bedingung ?
Beitrag von: DF6GL am März 03, 2011, 14:25:56
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
Titel: Re: Recordset mit Bedingung ?
Beitrag von: imp666 am März 03, 2011, 14:34:01
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.
Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am März 03, 2011, 14:40:07
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 ???
Titel: Re: Recordset mit Bedingung ?
Beitrag von: database am März 03, 2011, 16:47:52
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
Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am März 03, 2011, 21:49:08
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.
Titel: Re: Recordset mit Bedingung ?
Beitrag von: database am März 04, 2011, 19:51:14
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)
Titel: Re: Recordset mit Bedingung ?
Beitrag von: asiat am März 04, 2011, 21:00:50
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)