Seite 1 von 1
Gibt es berechnete Felder in Base? (gelöst)
Verfasst: Do, 24.11.2011 22:32
von Noebian
Hallo erstmal,
ich möchte in einem Formular ein Feld haben, das das Lebensalter einer Person basierend auf deren Geburtsdatum (worauf auch sonst

) anzeigt.
In Access kann man in ein Textfeld einfach eine Formel einfügen, die dann entsprechend ausgerechnet wird.
Ist das in Base auch möglich?
Ich habe in den Eigenschaften des Textfeldes "Daten" > Datenfeld den Eintrag "Geburtsdatum" ausgewählt und dann eine Formel drumherum gestrickt. Ergebnis: keine Anzeige - ist das ein Fehler in meiner Formel oder geht das grundsätzlich nicht?
Wie gelange ich am besten an mein Ziel?
Re: Gibt es berechnete Felder in Base?
Verfasst: Do, 24.11.2011 23:03
von gogo
Lass Dir diesen Wert in der Datenquelle als Feld berechnen - dann kannst Du dieses dem Textfeld einfach zuweisen.
Re: Gibt es berechnete Felder in Base?
Verfasst: Do, 24.11.2011 23:27
von F3K Total
... und das ist nicht ganz einfach ...mit der embedded HSQLDB
viewtopic.php?f=8&t=13861#p162786
gruß R
Re: Gibt es berechnete Felder in Base?
Verfasst: Do, 24.11.2011 23:50
von Noebian
Das heißt also, mit einem Text- oder Irgendwas-anderes-Feld geht es nicht?
Re: Gibt es berechnete Felder in Base?
Verfasst: Fr, 25.11.2011 09:09
von gogo
es gibt noch die Möglichkeit das über ein Makro zu lösen:
Das Feld mit dem Geburtsdatum heißt bei mir: "datGeburtstag"
Erstelle weiters ein ungebundenes Numerisches Feld in Deinem Formular mit dem Namen "Alter_in_Tagen"
Dann folgendes Makro dem Ereignis "Nach dem Datensatzwechsel" des Formulars, bzw. dem Ereignis "Nach dem Aktualisierem" des Kontrollelementes "datGeburtstag" zuweisen:
Code: Alles auswählen
sub NACH_DatensatzWechsel
oForm = thisComponent.drawpage.forms.getbyindex(0)
select case oForm.getByName("datGeburtstag").date
case null,0,""
oForm.getByName("Alter_in_Tagen").value = 0
case else
sGebDatum = cstr(oForm.getByName("datGeburtstag").date)
oForm.getByName("Alter_in_Tagen").value = datevalue(date) - datevalue(left(sGebDatum,4) & "." & mid(sGebDatum,5,2) & "." & right(sGebDatum,2))
end select
end sub
Der Weg dorthin: Datevalue kann mit dem long-Wert den die .date Property des Geburtstagsfeldes liefert nichts anfangen - also wird dieser in einen String umgewandelt, zerlegt und mit Punkten versehen und dann erst mit Datevalue umgerechenet etc. Welchen Sinn es hat, dass .date einen long-Wert zurückgibt darfst Du mich aber nicht fragen
Diese Berechnung berücksichtigt auch Schaltjahre!
Re: Gibt es berechnete Felder in Base?
Verfasst: So, 27.11.2011 18:53
von Noebian
Moin, moin und danke schön.
Ich habe es jetzt ähnlich gelöst - allerdings interessiert mich schlicht das aktuelle Alter in Jahren.
Das sieht bei mir jetzt so aus:
Code: Alles auswählen
sub Alter_nach_Datensatz_wechsel
dim oForm as Object
dim sDatum as String
dim iJahr, iMonat, iTag, iAlter as Integer
oForm = thisComponent.drawpage.forms.getbyindex(0)
sDatum = oForm.getByName("datGebDatum").date
if sDatum = "" then
oForm.getbyName("Alter").text =""
exit sub
end if
iJahr = cint(left(sDatum,4))
iMonat = cint(mid(sDatum,5,2))
iTag = cint(right(sDatum,2))
If iMonat < month(date()) then ' in diesem Jahr bereits Geburtstag gehabt
iAlter = year(date()) - iJahr
end if
If iMonat > month(date()) then ' in diesem Jahr noch nicht Geburtstag gehabt
iAlter = year(date()) - iJahr - 1
end if
If iMonat = month(date()) then ' in diesem Monat Geburtstag
if iTag <= day(date()) then ' bereits Geburtstag gehabt
iAlter = year(date()) - iJahr
else
iAlter = year(date()) - iJahr - 1
end if
end if
oForm.getbyName("Alter").text = cstr(iAlter)
End Sub