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

Code: Alles auswählen

cDateFromUNODate(dDate)
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:
  • Code: Alles auswählen

    DIM dDate AS DATE
    ist falsch, wenn, dann müsste es

    Code: Alles auswählen

    dim dDate as new com.sun.star.util.Date
    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

Code: Alles auswählen

oFeld_2.CurrentValue.Day
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

Code: Alles auswählen

.getDate()
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