Seite 1 von 2
gelöst: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Mi 20. Dez 2023, 13:54
von MartinS
Hiho,
Ich möchte mit einem Makro das DAtum eines Datumfeldes in einem Formular auslesen und in die Datenbank (MySQL) schreiben.
Mit normalen Textfeldern klappt das z.b. ganz gut.
ausschnitt aus dem Code:
DIM dDate AS Date
.
.
.
oFeld = oForm.getByName("Datum")
dDate = oFeld.GetCurrentValue()
.GetCurrentValue() ist wohl falsch --> "Falscher Wert für Eigenschaft."
.Value() geht auch nicht. --> "Eigenschaft oder Methode nicht gefunden: Value."
Wie könnte das denn gehen und wo finde ich überhaupt informationen über die Eigenschaften eines Objects?
Grüße,
MArtinS
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Mi 20. Dez 2023, 17:08
von F3K Total
Moin,
... wo finde ich überhaupt informationen über die Eigenschaften eines Objects?
Ich mache das immer mit MRI oder XRAY.
Aber du kannst dich auch hier durchwühlen:
https://api.libreoffice.org/docs/idl/re ... Field.html
Für dich interessant:
getDate()
Wobei du darauf achten musst, dass es sich hier um ein
com.sun.star.util.Date, also ein Struct mit drei Werten, TAG, MONAT und JAHR handelt.
Also angenommen du schreibst:
Code: Alles auswählen
oFeld = oForm.getByName("Datum")
dDate = oFeld.GetDate()
Dann bekommst du die einelnen Komponenten mit
Code: Alles auswählen
nDay = dDate.Day
nMonth = dDate.Month
nYear = dDate.Year
die du dann wieder zum entsprechenden Datum für deine MYSQL DB zusammenbauen musst.
Oder du nutzt die interne Function
um das Struct in einen Wert umzuwandeln.
Gruß R
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Do 21. Dez 2023, 08:45
von MartinS
Danke,
aber das funktioniert leider nicht:
Code: Alles auswählen
DIM oFeld_2 AS OBJECT
DIM dDate AS DATE
oFeld_2 = oForm.getByName("Inv_Datum")
dDate = oFeld_2.GetDate()
ergibt
Code: Alles auswählen
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: GetDate.
Libreoffice ist hier 7.3 auf ner OpenSuse-Kiste
MartinS
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Do 21. Dez 2023, 15:44
von F3K Total
Tja,
könnte drei Gründe haben:
- ist falsch, wenn, dann müsste es
heißen.
- du hast kein Datumsfeld benutzt
- deine LibreOffice Version ist uralt
Gruß R
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Fr 22. Dez 2023, 08:18
von RobertG
geht natürlich auch über
usw.
Das sind aber Zahlenwerte. Wenn daraus ein SQL-Datum werden soll müssten die Tages und Monatsangaben zweistellig gemacht werden.
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Fr 22. Dez 2023, 12:32
von MartinS
also:
Code: Alles auswählen
oFeld2 = oForm.getByName("Inv_Datum")
dDate = oFeld2.getDate()
funktioniert (unabhängig davon, wie dDate definiert ist) nicht. --> "Eigenschaft oder Methode nicht gefunden: GetDate."
(Und ja, es ist ein Datumsfeld)
Code: Alles auswählen
oFeld2 = oForm.getByName("Inv_Datum")
dDate = oFeld2.CurrentValue.Day
liefert etwas, muss ich noch schauen, wie ich das zusammenbastel.
Grüße,
MartinS
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Fr 22. Dez 2023, 13:01
von MartinS
Ok, wie im tollen Handbuch beschrieben, funzt es ein bisserl besser:
Code: Alles auswählen
DIM dTag AS STRING
DIM dMonat AS STRING
DIM dJahr AS STRING
DIM dDatum AS DATE
oFeld2 = oForm.getByName("Inv_Datum")
dTag = Right (Str(0) & Str(oFeld2.CurrentValue.day),2 )
dMonat = Right (Str(0) & Str(oFeld2.CurrentValue.month),2 )
dJahr = Right (Str(0) & Str(oFeld2.CurrentValue.year),4 )
dDatum = CDateFromIso ( dJahr & dMonat & dTag)
CDateFromISO macht so aber aus dem 27.12.2022 in der Datenbank den 20.12.2027 (aus dem 31.12.2023 entsprechend den 20.12.2031
naja, ein stückchen weiter.
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Fr 22. Dez 2023, 13:16
von F3K Total
Oje,
habe gerade gemerkt, dass
tatsächlich auch bei mir nicht funzt.
Nimm stattdessen:
Code: Alles auswählen
oFeld2 = oForm.getByName("Inv_Datum")
dDate = oFeld2.Date
Gruß R
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Fr 22. Dez 2023, 13:20
von MartinS
HRHRHRHRHRHRHRHRHR...
Vor einigen Jahren hatte ich schon mal das Problem:
viewtopic.php?f=10&t=16046&p=41137#p41134
Code: Alles auswählen
DIM dDatum AS STRING
oFeld2 = oForm.getByName("Inv_Datum")
dTag = Right (Str(0) & Str(oFeld2.CurrentValue.day),2 )
dMonat = Right (Str(0) & Str(oFeld2.CurrentValue.month),2 )
dJahr = Right (Str(0) & Str(oFeld2.CurrentValue.year),2 )
dDatum = dJahr & "-" & dMonat & "-" & dTag
So funzt es!
Aber da sieht man mal wie lange der Mist schon im Produktiven Einsatz (größtenteils läuft

)
Grüße,
MartinS
Re: Datumsfeld per Macro auslesen und in DB schreiben.
Verfasst: Sa 23. Dez 2023, 17:26
von F3K Total
Moin,
geht auch kürzer:
Code: Alles auswählen
DIM dDatum AS STRING
oFeld2 = oForm.getByName("Inv_Datum")
dDatum = Format(cDatefromUnoDate(oFeld2.date),"YY-MM-DD")
oder vielleicht besser:
Code: Alles auswählen
DIM dDatum AS STRING
oFeld2 = oForm.getByName("Inv_Datum")
dDatum = Format(cDatefromUnoDate(oFeld2.date),"YYYY-MM-DD")
Gruß R