🙏 Helfen Sie mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

gelöst: Datumsfeld per Macro auslesen und in DB schreiben.

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
MartinS
Beiträge: 41
Registriert: So 27. Jan 2013, 21:58

gelöst: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von MartinS » Mi 20. Dez 2023, 13:54

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
Zuletzt geändert von MartinS am Sa 23. Dez 2023, 18:16, insgesamt 1-mal geändert.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von F3K Total » Mi 20. Dez 2023, 17:08

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
Windows 11: AOO, LO Linux Mint: AOO, LO

MartinS
Beiträge: 41
Registriert: So 27. Jan 2013, 21:58

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von MartinS » Do 21. Dez 2023, 08:45

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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von F3K Total » Do 21. Dez 2023, 15:44

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
Windows 11: AOO, LO Linux Mint: AOO, LO

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von RobertG » Fr 22. Dez 2023, 08:18

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.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

MartinS
Beiträge: 41
Registriert: So 27. Jan 2013, 21:58

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von MartinS » Fr 22. Dez 2023, 12:32

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

MartinS
Beiträge: 41
Registriert: So 27. Jan 2013, 21:58

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von MartinS » Fr 22. Dez 2023, 13:01

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.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von F3K Total » Fr 22. Dez 2023, 13:16

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
Windows 11: AOO, LO Linux Mint: AOO, LO

MartinS
Beiträge: 41
Registriert: So 27. Jan 2013, 21:58

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von MartinS » Fr 22. Dez 2023, 13:20

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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Datumsfeld per Macro auslesen und in DB schreiben.

Beitrag von F3K Total » Sa 23. Dez 2023, 17:26

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
Windows 11: AOO, LO Linux Mint: AOO, LO


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten