Übergabe Wert von Formular an Formular

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Übergabe Wert von Formular an Formular

Beitrag von F3K Total »

Hallo Puck,
mit

Code: Alles auswählen

oListenfeld2.ListSource=ssql
füllst du nur die Auswahlliste des Listenfeldes, mit refresh zeigst du sie an.
Weshalb verwendest du überhaupt ein Listenfeld, wenn du sowieso nur einen Wert je Feld in die DB eintragen möchtest? Das geht per Textfeld oder formatiertem Feld, aber noch einfacher, wenn du gleich die Daten in die Datengrundlage des Formulares schreibst, etwa so, wenn deine Spalten EmittentStA, ISIN_Stamm und Geschaeftsjahr heißen:

Code: Alles auswählen

.
.
.
newForm = newForms.drawpage.forms.MainForm
newForm.movetoinsertrow
newForm.Columns.EmittentStA.updatestring(s_selection)
newForm.Columns.ISIN_Stamm.updateint(s_selection2)
newForm.Columns.Geschaeftsjahr.updateint(s_selection3)
newForm.insertrow
newForm.reload
Das ist nur geschossen. Ich habe die Spaltennamen und den Spaltentyp angenommen, EmittentStA sei VARCHAR, die andern INTEGER.
Du kannst die DB ja mal verfremdet hier hochladen.
Gruß R
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Übergabe Wert von Formular an Formular

Beitrag von F3K Total »

Hallo Puck,
ja eine verfremdete Version ist besser, momentan hast du Kuddelmuddel...
Ah Sekunde, vermutlich gibt es das Problem, weil das strukturelle Formular noch nicht geladen ist. Füge mal

Code: Alles auswählen

do
    wait 10
loop until newForm.isloaded
über

Code: Alles auswählen

newForm.movetoinsertrow
ein.
Gruß R
Puck78
Beiträge: 3
Registriert: Mo, 02.01.2017 14:07

Re: Übergabe Wert von Formular an Formular

Beitrag von Puck78 »

Guten Morgen R,

ich habe das Makro wie beschrieben angepasst, erhalte aber nun eine andere Fehlermeldung. Zur Illustration habe ich eine verfremdete Version der Datenbank unter folgendem Link hinterlegt: https://www.dropbox.com/s/ou5bs2in2meyl ... P.odb?dl=0. Der Upload ins Forum ist leider daran gescheitert, dass ich keinen Weg gefunden habe, die Datenbank unter die Uploadbeschränkung zu komprimieren.
Der Testszenario ist wie folgt:
  • Formular frm_Emittent_Jahresabschluesse aufrufen
  • Emittent per Dropdown auswählen und per Tab zum Dropdown ISIN Stämme wechseln
  • Detailformular über Button Detaildaten erfassen aufrufen.
Die weiß hinterlegten Felder des Detailformulars sollen durch das Makro so befüllt werden, dass nur noch in die grau hinterlegten Felder Werte eingegeben werden müssen und der Datensatz dann gespeichert werden kann.

Noch einmal vielen herzlichen Dank für die Hilfsbereitschaft, beste Grüße

Puck1978
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Übergabe Wert von Formular an Formular

Beitrag von F3K Total »

Hey,
kann die Datei nicht nutzen, es fehlt die Tabelle "T_Emittent_Jahresabschluesse" an die das erste Formular gebunden ist.

Allerdings frage ich mich, wozu du in ein zweites Formular springen willst, das Erfassen der Jahresabschlüsse kann man doch in einem Formular erledigen. Oben werden Emittent, ISIN und Geschäftsjahr ausgewählt, unten die sechs weiteren Felder befüllt. Das geht mit einem strukturellen Unterformular sehr einfach und braucht kein Makro, nur eine Verknüpfung.
Gruß R
Puck78
Beiträge: 3
Registriert: Mo, 02.01.2017 14:07

Re: Übergabe Wert von Formular an Formular

Beitrag von Puck78 »

Guten Abend R

ich bitte um Entschuldigung, ich habe wohl eine falsche Version hochgeladen. Ich habe die Datei nun getauscht, der neue Link lautet:
https://www.dropbox.com/s/ygogyje2xweia ... P.odb?dl=0

Vielen Dank auch für Deinen Vorschlag mit dem Unterformular - dies hatte mir aber für folgende Anforderung keine befriedigende Lösung geliefert: Werden alle Daten in einer Tabelle erfasst, sind die Kennzahlen Ergebnis je Aktie und Dividende je Aktie nur für das jeweilige Jahr auf Basis der für dieses Jahr gültigen Aktienanzahl ermittelbar. Für Zeitreihen kann es aber notwendig sein, diese Kennzahlen auf Basis einer einheitlichen Aktienanzahl zu berechnen, da Aktiensplitts o.ä. andernfalls zu Verzerrungen führen. Hier erschien es mir das Einfachste, zwei Tabellen zu erstellen und die Daten über eine Query zusammenzuführen.
Gerne bin ich hier aber auch offen für einfachere Vorschläge.

Vielen Dank noch einmal und beste Grüße

Puck78
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Übergabe Wert von Formular an Formular

Beitrag von F3K Total »

Hey,
tut mir Leid, ich verstehe das nicht. Im Formular frm_Aktien_Umlauf_Stamm hast du ein Listenfeld lbEmittentStA an eine Spalte ID_Emittent gebunden, die in der Tabelle T_Aktien_Umlauf_Stamm nicht existiert. Siehe Bild:
Form.png
Form.png (28.06 KiB) 4345 mal betrachtet
Ausserdem hast du das Makro Makros_PCS.Makros_Kennzahlen_Wertpapiere.FormularClose nicht mitgeliefert.
Also irgendwie ist da der Wurm drin.
Gruß R
Puck78
Beiträge: 3
Registriert: Mo, 02.01.2017 14:07

Re: Übergabe Wert von Formular an Formular

Beitrag von Puck78 »

Hallo R,

entschuldige, wenn ich Dich nun zweimal umsonst bemüht habe. Ich habe anhand Deines ersten Hinweises und Deinen Anregungen aus diesem älteren Post (viewtopic.php?t=53803)
Re: Recordset des Formulars manipulieren
Beitrag von F3K Total » Fr, 15.06.2012 18:25
noch einmal herumprobiert und siehe da, es hat geklappt. Folgendes Makro liefert nun das gewünschte Ergebnis:

Code: Alles auswählen

Sub CallOrderFormStammTrans( oEvent as Object )

Dim adrForm as Object
Dim newForm as Object
Dim ssql(0) as string

adrForm = oEvent.Source.Model.Parent

oform = Thiscomponent.drawpage.forms.MainForm

oListenfeld1 = oform.getByName("lbEmittent")
s_selection = oListenfeld1.CurrentValue'Ausgewählten Wert aus Listbox 1 auslesen

oListenfeld2 = oform.getByName("lbStamm")
s_selection2 = oListenfeld2.CurrentValue'Ausgewählten Wert aus Listbox 2 auslesen

oListenfeld3 = oform.getByName("lbGeschaeftsjahr")
s_selection3 = oListenfeld3.CurrentValue'Ausgewählten Wert aus Listbox 3 auslesen

newForms = thisDatabaseDocument.FormDocuments.getByName("frm_Aktien_Umlauf_Stamm").open

newForm = newForms.drawpage.forms.MainForm

do
    wait 10
loop until newForm.isloaded

newForm.movetoinsertrow
newForm.Columns.ISIN.updatestring(s_selection2)
newForm.Columns.Geschaeftsjahr.updatestring(s_selection3)

oListenfeld1 = newForm.getByName("lbEmittentStA")
oListenfeld1.ListSourceType = 3'Sql
ssql(0)= "SELECT ""Name_Emittent"" FROM ""T_Stammdaten_Emittent"" WHERE ""Name_Emittent"" ='"+s_selection+"'"
oListenfeld1.ListSource=ssql'Sql Befehl eintragen

End Sub
Deine Codezeile

Code: Alles auswählen

newForm.insertrow
habe ich eliminieren müssen - anderenfalls hat das Makro in Verbindung mit den als NOT NULL definierten Spalten der Zieltabelle eine Fehlermeldung erzeugt. Zudem habe ich im Formular Änderungen zugelassen, sonst waren keine manuellen Eingaben möglich.
Falls Du hier noch etwas Eleganteres im Ärmel hast, bin ich für Vorschläge dankbar, kann aber mit der jetzigen Lösung gut weiterarbeiten.

Vielen Dank noch einmal für Deine Hilfe, beste Grüße und schönes Wochenende


Puck78
Antworten