Seite 1 von 1
Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: Do, 08.03.2012 13:10
von arkadiuszpaluszek
Hallo!
Habe hier eine Tabelle, welche unter anderem die Felder "Artikelnummer" und "Artikelbezeichnung" hat. Mein Anliegen ist einfach - wenn ich die Artikelnummer im Kombinationsfeld ändere, soll sich auch die Artikelbezeichnung anpassen - oder umgekehrt. Das Makro, welches die Felder mit entsprechenden Werten füllt habe ich schon.
Allerdings tue ich mir damit schwer es einem Ereignis zuzuordnen. Dem Programm muss klar sein, ob gerade die Artikelnummer oder die Bezeichnung neu ausgewählt worden sind - deshalb habe ich versucht das Makro dem Ereignis "Text verändert" des entsprechenden Feldes zuzuordnen - dann passiert aber eigenartigerweise gar nichts. Also bin ich auf "Status geändert" übergegangen mit folgendem Ergebnis:

- Beispiel.jpg (23.42 KiB) 2272 mal betrachtet
Wie man sieht, im Feld Artikelnummer ist zwar eine "1" ausgewählt worden, folgender Code
Code: Alles auswählen
oDoc=thisComponent
oForm=oDoc.Drawpage.forms.GetByName("Formular1")
oForm=oForm.GetByName("Formular1.1")
oTabelle=oForm.getByName("Abrechnungsfeld")
oElement=oTabelle.GetByName("Artikelnummer")
artikelnummer=oElement.text
if artikelnummer<>"" then
msgbox(artikelnummer)
else
msgbox("Artikelnummer leer:"+artikelnummer)
end if
gibt aber zurück, dass das Feld noch leer wäre. Ich bekomme immer den letzten Wert der im Feld noch vor der Veränderung stand. Wenn ich jetzt in ein anderes Feld klicke, dann zurück zur Artikelnummer gehe und dort eine zwei eintrage, bekomme ich den Rückgabewert 1.
Daraufhin habe ich versucht nach
oElement=oTabelle.GetByName("Artikelnummer")
noch
oElement.commit(true)
einzufügen damit der Wert nicht mehr nur optisch, sondern "tatsächlich" im entsprechenden Feld steht, nutzt nichts. Ich frage mich, wo mein Fehler ist?
Viele Grüße
Arek
Re: Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: Do, 08.03.2012 16:15
von komma4
Dein Screenshot suggeriert mehr, dass es um die Tabellen einer Datenbank (odb) geht.
Dort brauchst Du i.d.R. kein Makro um abhängige Felder in einem Formular zu aktualisieren.
Die eben gemachte Einschränkung betrifft Listenfelder, bei denen ein Ereignis "ausgewählter Wert geändert" nicht weiter gegeben wird.
Dort arbeite ich mit einer Schaltfläche zum Aktualisieren abhängiger Listenfelder.
Schau' Dir mal in
diesem Post das Beispiel an.
Kommst Du damit weiter?
Re: Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: Do, 08.03.2012 16:30
von arkadiuszpaluszek
Hallo Winfried,
vielen Dank, aber es trifft nicht ganz mein Problem. Ja, natürlich handelt es sich um eine Datenbank - im Bild siehst Du den Ausschnitt aus einem Writerdokument, welches ein Tabellenelement beinhaltet.
Die im Bild angezeigte Tabelle "Leistungsabrechnung" ist kein Subformular zur Artikelliste. Vielmehr gibt es ein übergeordnetes Formular "Kunde", weil die entsprechenden Leistungen einem ganz bestimmten Kunden zugeordnet werden. Hier gibt es keinerlei Probleme.
Die Kombinationsfelder werden mit SQL-Abfragen gefüllt - eine Abfrage fragt eben die Artikelnummer ab, die andere die Artikelbezeichnung. Es sollen beim Kunden mehrere verschiedene Artikel in die Abrechnung eingetragen werden können, deshalb scheidet Formular/Unterformular - Struktur aus, sonst würde er mir in der Tabelle gleichzeitig nur den Verkauf dieses Artikels anzeigen, der auch im Masterformular ausgewählt ist.
Das Kombinationsfeld scheint zudem auch das Ereignis "Status geändert" weiter zu geben - sonst würde das Makro ja nicht ausgelöst werden. Was mich verwundert, ist vielmehr, dass obwohl das Ereignis weitergegeben wird, das Makro aus dem Tabellenelement immer noch den alten Wert heraus liest.
Gruß
Arek
Re: Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: Do, 08.03.2012 18:59
von F3K Total
Hallo Arek,
es handelt sich um das gleiche Problem wie hier schon einmal für dich beantwortet:
viewtopic.php?f=18&t=52570#p196759
Du siehst an dem Bleistift, das der Datensatz noch nicht gespeichert ist, da du das Feld nicht "von Hand" verläßt benötigst Du als Ersatz das
Gruß R
Re: Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: Do, 08.03.2012 22:55
von arkadiuszpaluszek
Ich wäre ja wohl absolut lernunfähig, wenn ich Deinen Tipp vom anderen Beitrag hier nicht zumindest versucht hätte!

Und ich betreibe es ja geradezu exzessiv:
1. Zuerst gehe ich in das Feld Artikelnummer und "verlasse" es .mit commit(true)
2. Gehe dann auch wirklich in ein anderes Feld - in diesem Fall die Artikelbezeichnung, und um ganz sicher zu gehen dass ich auch wirklich da war folgt auch hier commit(true)
3. Dann gehe ich erst zurück zur Artikelnummer.
Code: Alles auswählen
Sub Felder_fuellen
dim oDoc as Object
dim oForm as Object
dim oTabelle as Object
dim oElement as Object
' AUSLESEN DES FELDES ARTIKELNUMMER
oDoc=thisComponent
oForm=oDoc.Drawpage.forms.GetByName("Formular1")
oForm=oForm.GetByName("Formular1.1")
oTabelle=oForm.getByName("Abrechnungsfeld")
oElement=oTabelle.GetByName("Artikelnummer")
oElement.commit(true)
oElement=oTabelle.GetByName("Artikelbezeichnung")
bezeichnung=oElement.text
oElement.commit(true)
oElement=oTabelle.GetByName("Artikelnummer")
oElement.commit(true)
artikelnummer=oElement.text
if artikelnummer<>"" then
msgbox(artikelnummer)
else
msgbox("Artikelnummer leer:"+artikelnummer)
end if
End Sub
Das Ergebnis ist aber das Gleiche - wieder habe ich zunächst keinen Wert, bis ich aus dem Feld mit der Hand rausgehe und dann wieder rein und es erneut anklicke!
Das Formular findest Du im Ordner Formulare. Das Makro wird im Augenblick durch einen einfachen Klick auf das Feld "Artikelnummer" ausgelöst.
Das Makro findest Du im selbigen Dokument in der Standardbibliothek.
Wenn Du Zeit und Lust hast reinzuschauen, würde ich mich freuen! Die Datenbank muss angemeldet sein damit der Basic-Code richtig ablaufen kann,
Gruß
Arek
Re: Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: Fr, 09.03.2012 13:59
von arkadiuszpaluszek
Habe schließlich das Makro dem Ereignis "Fokusverlust" zugeordnet und es geht! Dass ich es bis dahin nicht ausprobiert habe, lag daran, dass ich es mit "Maus innerhalb" gleichgesetzt habe, ist es ja aber nicht. Jetzt wird das Makro ausgeführt sobald ich z.B. per Tabtaste das Feld verlasse und es wird der korrekte Wert abgelesen.
Danke all den, die sich mit mir gemeinsam den Kopf zerbrochen haben!
Viele Grüße
Arek
Re: Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: Fr, 09.03.2012 20:27
von F3K Total
Hallo Arek,
der Weg über die Kontrollfelder ist schwierig zu beherrschen, im Prinzip gibst Du per Makro etwas ins Feld ein, was dann noch in die DB geschrieben werden muß.
Meiner Meinung nach geht es besser, wenn Du die Spalten der dem Formular zugrundeliegenden Tabelle direkt ansprichst.
Folgendes Makro dem Ereignis "Maustaste losgelassen" zugeordnet funktioniert ohne zusätzlichen Klick oder die Tab Taste.
Code: Alles auswählen
Sub S_Insert_Artikel
oform = thiscomponent.drawpage.forms.Formular1.getbyname("Formular1.1")
oTabelle=oForm.getByName("Abrechnungsfeld")
oElement=oTabelle.GetByName("Artikelnummer")
controller = thisComponent.CurrentController
Control = Controller.getControl(oTabelle)
Control.commit(true)
nselected_Artikelnr = oElement.Text
ncolArtikelbezeichnung = oform.findcolumn("artikel")
ncolAbrechnungseinheit = oform.findcolumn("einheit")
ncolEinzelpreis = oform.findcolumn("einzelpreis")
ocon = oform.activeconnection
sql_statement=ocon.createstatement
ssql="SELECT ""artikel_bezeichnung"", ""artikel_einheit_FK"", ""artikel_preis"" FROM ""artikel_liste"" where ""artikelnummer""= " + nselected_Artikelnr
sql_result=sql_statement.executequery(ssql)
if sql_result.next then
sArtikelbezeichnung = sql_result.getstring(1)
sAbrechnungseinheit = sql_result.getstring(2)
dEinzelpreis = sql_result.getdouble(3)
endif
oform.updatestring(ncolArtikelbezeichnung,sArtikelbezeichnung)
oform.updatestring(ncolAbrechnungseinheit,sAbrechnungseinheit)
oform.updatedouble(ncolEinzelpreis,dEinzelpreis)
oform.updaterow
End Sub
Wenn du dann noch eine Abfrage "qKunden_Leistungen" von der Tabelle "kunden_leistungen" erzeugst, kannst Du den Gesamtpreis gleich nach Eingabe der "Menge" automatisch ausrechnen lassen, siehe Formular1 im Beispiel anbei.
Gruß R
Re: Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: Sa, 17.03.2012 22:56
von arkadiuszpaluszek
Danke! So ähnlich hatte ich es auch bereits programmiert, allerdings hast Du es etwas eleganter gelöst, muss mir Dein Skript genauer anschauen...
Viele Grüße
Arek
Re: Makro zum Auslesen eines Inhaltes zum Ereignis zuordnen
Verfasst: So, 18.03.2012 07:22
von F3K Total
Moin,
damit das o.a. Makro beim Anlegen eines neuen Datensatzes nicht auf einen Fehler läuft, ändere die vorletzte Zeile wie folgt:
Code: Alles auswählen
if oform.isnew then oform.insertrow else oform.updaterow
Gruß R