❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ 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. 🤗

Werte aus Tabelle in andere Tabelle kopieren

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
rene
Beiträge: 3
Registriert: Di 12. Jan 2016, 13:27

Werte aus Tabelle in andere Tabelle kopieren

Beitrag von rene » Mo 27. Feb 2017, 20:02

Hallo zusammen

Makro-Anfänger-Fragen:
In einem Formular habe ich zwei Tabellen dargestellt. Eine mit DokumentPositionen, die andere mit Artikeln.
Nun will ich Werte von Artikeln in die DokumentPositionen schreiben lassen (via Makro) - als neue Einträge.
Wie setze ich Variablen für die beiden Tabellen?
Wie spreche ich die Felder in den Tabellen an?

Dies meine kläglichen Gehversuche:

Code: Alles auswählen

Dim aID%
Dim aName$
Dim aPreis&
Dim aBeschreibung$

Sub ArtikelAlsPosition
	aForm = ThisDatabaseDocument.FormDocuments.getByName("Artikel")
	pForm = ThisDatabaseDocument.FormDocuments.getByName("DokumentPosition")

	aID = aForm.getbyname("ID")
	aName = aForm.getbyname("Name")
	aPreis = aForm.getbyname("Preis")
	aBeschreibung = aForm.getbyname("Beschreibung")
	...
End Sub
Anstelle der "..." sollte jetzt natürlich, meiner Vorstellung entsprechend, die Eröffnung eines neuen Datensatzes erfolgen, mit dem Beschreiben der entsprechenden Felder. Speichern, eventuell ein Refresh der Tabelle wenn nötig.. und fertig. So meine erste Vorstellung. :)
Ist es auch möglich, als erweiterte Frage, mehrere mit [Ctrl] markierte Datensätze (Artikel), als neue Einträge zu übertragen/kopieren?

So, jetzt sende ich das einfach mal los.. mit einem kleinen Schamgefühl über diese für Euch Gurus wohl peinlichen Einsteigerfragen. :roll:

Gruss
René

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

Re: Werte aus Tabelle in andere Tabelle kopieren

Beitrag von RobertG » Mo 27. Feb 2017, 21:47

Hallo Rene,

mit

Code: Alles auswählen

nName = aForm.findColumn("Name")
sName = aForm.getString(nName)
liest Du den Wert eines Feldes aus.
mit

Code: Alles auswählen

nName = pForm.findColumn("Name")
pForm.updateString(nName,sName)
fügst Du den Wert in das andere Formular ein.

Alternativ:

Code: Alles auswählen

aForm.getbyname("ID").CurrentValue
liefert den Inhalt des Feldes "ID".

Code: Alles auswählen

bForm.getbyname("bID").BoundField.UpdateInt(aForm.getbyname("ID").CurrentValue)
liest Du aus dem Feld von aForm den Wert aus und fügst ihn in bForm ein.

Natürlich musst Du zum Schluss noch abspeichern.

Das war jetzt natürlich die Kurzversion. Ansonsten schau einfach einmal im Handbuch nach. Grundsätzlich gilt: Duplizieren von Daten so weit wie möglich vermeiden.

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

rene
Beiträge: 3
Registriert: Di 12. Jan 2016, 13:27

Re: Werte aus Tabelle in andere Tabelle kopieren

Beitrag von rene » Di 28. Feb 2017, 12:24

DANKE Robert,

so erhalte ich schrittweise mehr Einblick in die Makrowelt.
Doch ich erhalte folgende Meldung von der Ersten Makrozeile:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message: Artikel.

Code: Alles auswählen

Dim aID%
Dim aName$
Dim aPreis&
Dim aBeschreibung$

Sub ArtikelAlsPosition

	aForm = ThisDatabaseDocument.FormDocuments.getByName("Artikel")
	bForm = ThisDatabaseDocument.FormDocuments.getByName("DokumentPosition")

	bForm.getbyname("bID").BoundField.UpdateInt(aForm.getbyname("ID").CurrentValue)
	bForm.getbyname("bName").BoundField.UpdateInt(aForm.getbyname("Name").CurrentValue)
	bForm.getbyname("bPreis").BoundField.UpdateInt(aForm.getbyname("Preis").CurrentValue)
	bForm.getbyname("bBeschreibung").BoundField.UpdateInt(aForm.getbyname("Beschreibung").CurrentValue)

End Sub
Ich weiss nicht welcher Name mit "Artikel" angesprochen wird. Die Tabelle heisst "Artikel", im Formular-Navigator habe ich das eingebundene Formular ebenfalls "Artikel" benannt, wie auch das Tabellen-Steuerelement. Ich interpretiere wohl die Meldung falsch.

Formular-Navigation-Hierarchie:
Tabelle: Dokument
Untertabelle: DokumentPosition
Unteruntertabelle: Artikel*

*Artikel funktioniert als eine Art Hilfstabelle, um Artikelinformationen in die Dokument-Positionen zu kopieren.

Die Schaltfläche mit dem Makro habe ich bereits auf allen Ebenen versucht. Wo mache ich meine Überlegungsfehler?

Gruss
René

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

Re: Werte aus Tabelle in andere Tabelle kopieren

Beitrag von RobertG » Di 28. Feb 2017, 21:09

Hallo Rene,

ich habe mir Deinen Code nicht so genau angesehen, aber mit

Code: Alles auswählen

aForm = ThisDatabaseDocument.FormDocuments.getByName("Artikel")
hast Du das gesamte Formular "Artikel", das so in der Datenbank stehen muss, also den Namen im Formularcontainer haben muss wie auch Abfragen und Tabellen einen Namen haben. Da bist Du nicht auf der Ebene, auf der sich der Formularnavigator eines Formulars bewegt.

Du meinst aber nicht das Dokument, sondern die Formulare, die zusammen auf einer Seite liegen, so etwas wie Hauptformular und Unterformular oder Formular und Nebenformular. Du kannst beide nebeneinander im Formularnavigator sehen.

Code: Alles auswählen

aForm = thisComponent.Drawpage.Forms.getByName("Artikel")
bringt Dich zu dem Formular.

Wenn Du nur etwas innerhalb eines Formulars machen willst, dann kannst Du auch den Button zum Auslösen zur Ermittlung des Formulars nutzen:

Code: Alles auswählen

SUB ArtikelAlsPosition(oEvent AS OBJECT)
aForm = oEvent.Source.Model.Parent
...
END SUB
Liegt der Button im Formular "Artikel", dann hast Du so das Formular direkt angesprochen.
oEvent > auslösendes Ereignis
Source > woher(Klick auf Button)
Model > der Button selbst
Parent > das Formular, in dem der Button liegt.
... und jetzt noch ein Parent drangehängt, dann bist Du noch eine Ebene höher und kannst von dort auf
getByName("DokumentPosition")
zugreifen.

Teste also ruhig einmal. Die Sache mit dem auslösenden Ereignis hat seine Vorteile besonders dann, wenn Du nur etwas innerhalb eines Formulars erledigen musst und der Name Dir egal sein kann.

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

rene
Beiträge: 3
Registriert: Di 12. Jan 2016, 13:27

Re: Werte aus Tabelle in andere Tabelle kopieren

Beitrag von rene » Mi 1. Mär 2017, 13:12

Salut Robert

Meine Versuche scheitern an meinem mangelnden Basiswissen zu Makros. Daher wende ich jetzt eine Zeit auf, um die Handbücher dazu durch zuarbeiten. Ansonsten stehe ich hier immer mit Fragen, die wohl nur in einem grösseren Rahmen und mit nötigem Basiswissen beantwortet werden können. Du hast mich angeschupst mich einzulesen, Danke dafür.

Hier mein aktueller Code der auf der Zeile "pForm.getByName("ArtNr")..." mit einer Fehlermeldung stoppt:

Code: Alles auswählen

Sub ArtikelAlsPosition

	Dim aForm as Object
	Dim pForm as Object

	aForm = thisComponent.Drawpage.Forms.getByName("Artikel")
	pForm = thisComponent.Drawpage.Forms.getByName("Dokument").getByName("DokumentPosition")
	pForm.moveToInsertRow()
	pForm.getByName("ArtNr").BoundField.UpdateInt(aForm.getByName("ID").CurrentValue)
	pForm.getByName("Name").BoundField.UpdateString(aForm.getByName("Name").CurrentValue)
	pForm.getByName("Preis").BoundField.updateDouble(aForm.getByName("Preis").CurrentValue)
	pForm.getByName("Beschreibung").BoundField.UpdateString(aForm.getByName("Beschreibung").CurrentValue)
	pForm.InsertRow()

End Sub
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message: .
So mach ich mich nun einmal ran an die Unterlagen! ;)

Danke Robert.
René

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

Re: Werte aus Tabelle in andere Tabelle kopieren

Beitrag von RobertG » Mi 1. Mär 2017, 15:46

Hallo Rene,

es handelt sich aber schon um ein gemeinsames Formulardokument? In dem Formulardokument müsste es jetzt nebeneinander die Formulare "Artikel" und "Dokument" geben. "DokumentPosition" ist ein Unterformular von "Dokument", korrekt?

Eventuell postest Du hier einmal ein Beispiel ohne Daten, aus dem hervorgeht, wo die Meldung NoSuchElement herkommt. Es scheint, dass irgendeins der Elemente, die Du aufrufst, so nicht bekannt ist.

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


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