BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Wert einer Tabelle per Makro auslesen und in eine andere speichern

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Robs123
Beiträge: 20
Registriert: Mo 7. Aug 2017, 09:49

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von Robs123 » Do 17. Aug 2017, 10:20

Hi Robert,
das mit dem Speicher lag daran, dass nicht nur in den Formular-Elementen "Eingabe erforderlich" auf nein gesetzt werden musste, sondern zusätzlich in der Hinterliegenden Tabelle - damit hatte ich nicht gerechnet.

Jetzt bekomme ich allerdings in folgender Zeile eine Fehlermeldung:

Code: Alles auswählen

oFormNew = oDrawpageNew.forms.getByIndex(0)	'Zugriff auf das neue Formular in dem Formulardokument - Annahme: Formular ist das einzige/erste Formular.
Fehler:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.lang.IndexOutOfBoundsException
Message: .
Ich habe folgendes probiert:

Code: Alles auswählen

oFormNew = oDrawpageNew.forms.getByName( "Hauptformular" )
Ich bin davon ausgegangen, dass hier das Hauptformular angesprochen wird, da das zu öffnende Formular bereits darüber über die Variable stNewForm angesprochen wird, und dein Index ja auch auf 0 stand.

Hier noch einmal der ganze code zur Klarheit:

Code: Alles auswählen

Sub Formularsprung(oEvent AS OBJECT)
	oButton = oEvent.Source.Model	'Button wird über das auslösende Ereignis bestimmt.
	oForm = oButton.Parent	' Formular wird über den Button bestimmt
	IF oForm.getLong(1) > 0 THEN	'Das erste Feld der Tabelle ist hier grundsätzlich das Primärschlüsselfeld, Integer in HSQLDB, Long in Basic
		IF oForm.isNew THEN	'Abspeichern - bei neuem Datensatz insert, bei bestehendem Datensatz update
			oForm.insertRow()
		ELSE
			oForm.updateRow()
		END IF
		loID = oForm.getLong(1)	'Wert des ersten Feldes auslesen
		stNewForm = oButton.Tag	'Zielformular aus den Zusatzinformationen des Buttons auslesen
		oFormDocNew = ThisDatabaseDocument.FormDocuments.getByName(stNewForm).open	'Neues Formular öffnen und das Object des Formular weiter nutzen
		oDrawpageNew = oFormDocNew.drawpage
		oFormNew = oDrawpageNew.forms.getByIndex(0)	'Zugriff auf das neue Formular in dem Formulardokument - Annahme: Formular ist das einzige/erste Formular.
		oFormNew.filter = """ID"" = '" + loID + "'"	'Filter definieren und setzen
		oFormNew.ApplyFilter = TRUE
		oFormNew.reload()	'Formular mit Filter neu laden. Jetzt würde nur noch der Datensatz mit gleicher ID angezeigt
		Wait 100	'Wenn zu schnell versucht wird einen Wert zu schreiben ist das Formular noch nicht geladen - Wartezeit 0,1 Sekunden
		IF oFormNew.getLong(1) <> loID THEN	'Wenn das ID-Feld ungleich der ID ist, die weitergegeben wurde, dann ist dort kein Wert drin (Filter!)
			oFormNew.updateLong(1, loID)
		END IF
	END IF
End Sub
Viele liebe Grüße,
Rob

Edit:
Zusatzfrage: Wie finde ich die Indexnummer eines Formulars heraus?

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von RobertG » Do 17. Aug 2017, 11:20

Hallo Robs123,

kann das Problem vielleicht viel früher liegen:
Wie heißt denn das Formulardokument vom Namen her, das in der Base-Datei liegt?
Nach der Meldung IndexOutOfBounds dürfte ja der Index 0 bei dem Formulardokument für ein Formular gar nicht vergeben sein. Dann wäre das Ganze ja ein Writerdokument ohne ein Formular darin.
Du müsstest, wenn das Formular zum Bearbeiten geöffnet wurde, den Formularnavigator (5. Button unten links) öffnen. Dann siehst Du zumindest den Formularnamen, den Du vergeben hast. In dem Moment kannst Du auch mit dem Namen des Formulars (in dem Formulardokument) arbeiten, so wie Du das in dem Codebeispiel mit getByName gemacht hast.

Versuche gegebenenfalls auch einmal

Code: Alles auswählen

oFormNew = oDrawpageNew.forms(0)
Nach der Fehlermeldung dürfte das aber auch nicht zum Erfolg führen.

Code: Alles auswählen

oForms = oDrawpageNew.getForms
FOR n = 0 to oForms.count -1
	oForm = oForms.getByIndex(n)
	msgbox oForm.Name
NEXT
Das müsste alle Formulare eines Formulardokumentes ausgeben - aber bei Dir fehlt ja bereits 0!

Gruß

Robert
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

Robs123
Beiträge: 20
Registriert: Mo 7. Aug 2017, 09:49

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von Robs123 » Do 17. Aug 2017, 11:52

Hallo Robert, danke für die schnelle Antwort.

Das formular, wie es in der Datenbank erscheint, heißt in etwas: "testä test test (T0)"
Im Formularnavigator heißt das Formular einfach MainForm. Ich habe es mit getByName ("MainForm") probiert - gleicher Fehler.
Ich habe das Formular umbenannt zu 'Formular', auch keine änderung. (Ich dachte es läge vielleicht am 'ä' oder dem '(T0)')

Im übrigen - bevor das Makro den Fehler an besagter Stelle ausgibt, wird der Datensatz korrekt gespeichert und auch das zweite Formular im Hintergrund geöffnen - nur dass sich der Fehler dann darüber schiebt.

Den code habe ich versucht auszuführen:

Code: Alles auswählen

Sub Main
oForms = oDrawpageNew.getForms
FOR n = 0 to oForms.count -1
	oForm = oForms.getByIndex(n)
	msgbox oForm.Name
NEXT
End Sub
Fehler: Objectvariable nicht belegt (oForms)
oben Dim oForms as Object eingefügt - gleicher Fehler.
Oder muss ich den code anders ausführen?

Ich Verstehe beim besten Willen nicht woran es liegen kann, ich deiner Beispiel DB ging es doch.

Gruß,
Rob

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von RobertG » Do 17. Aug 2017, 15:17

Hallo Rob,

der Code war dafür gedacht, dass er an der Stelle in das bisherige Makro eingebaut wird, an der

Code: Alles auswählen

oFormNew = oDrawpageNew.forms.getByIndex(0)
bisher steht und den Fehler auswirft. Aber das bringt sicher auch nichts, weil der Fehler irgendwo anders liegt.

Du kannst mir gerne Deine Datenbank entweder hier, frei von irgendwelchen besonderen Daten, hoch laden. Dann schaue ich mir das an.

Wenn Du bereits zu viele Daten drin hast, dann könntest Du die DB gegebenenfalls auch an meine Mailadresse senden. Denn ohne das entsprechende Beispiel stochern wir jetzt wohl im Nebel, es sei denn, Du hast xray installiert und kannst das Objekt oDrawpageNew damit einmal untersuchen - denn da wird es haken.

Gruß

Robert
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

Robs123
Beiträge: 20
Registriert: Mo 7. Aug 2017, 09:49

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von Robs123 » Do 17. Aug 2017, 16:23

Ich muss klären in wie weit ich das darf - ich melde mich morgen.
vielen dank trotzdem schonmal für das nette Angebot.
LG
Rob

Lateva
Beiträge: 3
Registriert: Di 19. Sep 2017, 10:37

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von Lateva » Fr 22. Sep 2017, 13:23

Hallo,

ich klinke mich hier mal mit ein, denn ich habe die gleiche Fragestellung:

Zunächst habe ich das Makro von gogo getestet, hier bekomme ich eine Fehlermeldung bzgl. des ".currentValue". Außerdem verstehe ich auch nicht ganz, was ich bei "sGewuenschteID=..." eintragen soll.

Nun habe ich es mit dem Makro von RobertG versucht. Es scheitert jedoch leider in der Ausführung. Ich habe das Makro 1 zu 1 kopiert und in einen Button im Hauptformular eingebettet und auch den Namen des zu öffnenden Formulars in den Zusatzinfos hinterlegt. Wenn ich nun auf den Button klicke, passiert gar nichts?! Habe ich etwas wichtiges vergessen?

Der unterschied zu der DB von Robs123 ist, dass ich nicht mit libreoffice, sondern mit OpenOffice arbeite und meine ID nicht manuell, sondern als Autowert eingefügt wird. Ansonsten habe ich den gleichen Wunsch:

Bei Klick auf eine Schaltfläche soll sich das neue Formular öffnen und die ID aus dem Hauptformular ausgelesen werden. Bei einem neuen Datensatz sollte natürlich auch das 2. Formular leer sein, bei bestehenden Datensätzen sollten die Daten der entsprechenden ID angezeigt werden.

Ich habe versucht, die entsprechende Datei hier einzufügen, hat aber nicht geklappt und ich weiß leider auch nicht, wie das geht (werde mich mal dazu schlaulesen)

Ich hoffe, ihr könnt mir helfen und danke schon jetzt für eure Mühe!

LG
Lateva

Lateva
Beiträge: 3
Registriert: Di 19. Sep 2017, 10:37

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von Lateva » Fr 22. Sep 2017, 13:32

Hier nochmal der Versuch, die entsprechende Datei anzuhängen:
TestDB - Kopie.zip
(21.59 KiB) 310-mal heruntergeladen

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von RobertG » Fr 22. Sep 2017, 16:59

Hallo Lateva,

dass sich bei dem Makro nichts tut liegt daran, dass der erste Datensatz Deines Formulars die ID '0' hat. Gehe einmal zum 2. Datensatz - dann klappt der Sprung. Gegebenenfalls musst Du hier das Makro anpassen. Es liest nämlich ein Feld mit getLong aus - und selbst wenn das Feld leer ist würde '0' dabei geliefert, denn eine Zahl muss dabei entstehen.

Was nicht klappen wird:
Du möchtest alle Tabellen mit dem gleichen Schlüsselwert versehen. Das klappt nur, wenn Du maximal einer Tabelle den AutoWert zuweist. Die anderen Tabellen müssen den Wert dann von der ersten Tabelle übernehmen.

Gruß

Robert
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

Lateva
Beiträge: 3
Registriert: Di 19. Sep 2017, 10:37

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von Lateva » Fr 22. Sep 2017, 18:56

Hallo RobertG,

ja, genau das waren die beiden Probleme. Nun klappt es einwandfrei!
Vielen lieben Dank!

homeedition
Beiträge: 2
Registriert: Di 22. Feb 2022, 18:14

Re: Wert einer Tabelle per Makro auslesen und in eine andere speichern

Beitrag von homeedition » Di 22. Feb 2022, 18:20

Hallo,

ich weiß das Thema ist schon sehr lange her :|
Ich wäre aber sehr an dem Makro von Lateva intersessiert, das würde mir helfen.

Danke :)

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten