gnaps hat geschrieben:Die Berechnung sollte über ein Makro gehen, wenn ich das Laufzeit-Eingabefeld verlasse.
Das ist eine der Möglichkeiten. (Ich würde persönlich die Berechnung in der Datenbank vorziehen; aber wenn die Laufzeit im Formular als Jahreszahl eingegeben wird, ist das auch ein sinnvolles Verfahren.)
Dein Hauptproblem ist folgende Festlegung:
Hier habe ich schon einen Code
Date ist der Datentyp, den StarBasic verwendet. Der Formular-Designer benutzt einen anderen Datentyp; und die Funktionen müssen die Werte richtig zuordnen. Ein Lösungsweg geht so:
Code: Alles auswählen
dim dDate as new com.sun.star.util.Date ' beachte den speziellen Datentyp und das "new"
dDate = oForm.getDate(5) ' hole den Wert als Datum aus dem Formular, nicht aus dem Feld
dDate.year = dDate.year + oForm.getInt(6) ' hole den Wert als Integer und addiere die Jahre
oForm.updateDate(7, dDate) ' übertrage diesen Wert in das Formular
In den meisten Fällen ist per Makro das Lesen und Schreiben von Werten in Formularfelder besser, praktischer und sicherer über die Spalten des aktuellen Datensatzes im Formular. Vor allem beim Speichern direkt in die Formularfelder muss man sehr genau aufpassen (und "Klimmzüge" machen), um die Werte richtig zu konvertieren und zum richtigen Zeitpunkt (!) einzutragen.
Richtg wäre ja:
Hier bekomme ich eine Fehlermeldung.
Grundsätzlich: Wir wollen solche Fehlermeldungen nicht erraten, sondern sie ist möglichst konkret anzugeben!!! Aber es ist ja klar: oJahr ist das Feld und nicht die Zahl.
Nebenbei: In den meisten Fällen kann auf getByName verzichtet werden, vor allem bei so schönen Bezeichnern (ohne Umlaute, ohne Sonderzeichen),
Das ist kein Fehler, erleichtert aber das Schreiben von Code und macht ihn leichter lesbar.
Code: Alles auswählen
oForm = thisComponent.drawpage.forms.MainForm
oFeld = oForm.UebernahmeDatum
Gruß Jürgen
PS. Ich sehe gerade, dass Robert inzwischen geantwortet, während ich meinen Text geschrieben habe. Seine Hinweise sind immer richtig und wichtig; er hat auch mir viel beigebracht. Mein obiger Vorschlag basiert vor allem auf seiner Hilfe.
[quote="gnaps"]Die Berechnung sollte über ein Makro gehen, wenn ich das Laufzeit-Eingabefeld verlasse.[/quote]
Das ist eine der Möglichkeiten. (Ich würde persönlich die Berechnung in der Datenbank vorziehen; aber wenn die Laufzeit im Formular als Jahreszahl eingegeben wird, ist das auch ein sinnvolles Verfahren.)
Dein Hauptproblem ist folgende Festlegung:
[quote]Hier habe ich schon einen Code
[code] Dim dDate As Date[/code][/quote]
Date ist der Datentyp, den StarBasic verwendet. Der Formular-Designer benutzt einen anderen Datentyp; und die Funktionen müssen die Werte richtig zuordnen. Ein Lösungsweg geht so:
[code]dim dDate as new com.sun.star.util.Date ' beachte den speziellen Datentyp und das "new"
dDate = oForm.getDate(5) ' hole den Wert als Datum aus dem Formular, nicht aus dem Feld
dDate.year = dDate.year + oForm.getInt(6) ' hole den Wert als Integer und addiere die Jahre
oForm.updateDate(7, dDate) ' übertrage diesen Wert in das Formular[/code]
In den meisten Fällen ist per Makro das Lesen und Schreiben von Werten in Formularfelder besser, praktischer und sicherer über die Spalten des aktuellen Datensatzes im Formular. Vor allem beim Speichern direkt in die Formularfelder muss man sehr genau aufpassen (und "Klimmzüge" machen), um die Werte richtig zu konvertieren und zum richtigen Zeitpunkt (!) einzutragen.
[quote]Richtg wäre ja:
[code] dDate = CDate(datevalue(oFeld.text))+(oJahr)*365)[/code]
Hier bekomme ich eine Fehlermeldung.[/quote]
Grundsätzlich: Wir wollen solche Fehlermeldungen nicht erraten, sondern sie ist möglichst konkret anzugeben!!! Aber es ist ja klar: oJahr ist das Feld und nicht die Zahl.
Nebenbei: In den meisten Fällen kann auf getByName verzichtet werden, vor allem bei so schönen Bezeichnern (ohne Umlaute, ohne Sonderzeichen), [i]Das ist kein Fehler, erleichtert aber das Schreiben von Code und macht ihn leichter lesbar.[/i]
[code]oForm = thisComponent.drawpage.forms.MainForm
oFeld = oForm.UebernahmeDatum[/code]
Gruß Jürgen
PS. Ich sehe gerade, dass Robert inzwischen geantwortet, während ich meinen Text geschrieben habe. Seine Hinweise sind immer richtig und wichtig; er hat auch mir viel beigebracht. Mein obiger Vorschlag basiert vor allem auf seiner Hilfe.