Base: Formeln in Formularen

Hallo Forum,

ich habe in Base zu einer Tabelle und einer Abfrage ein Formular als Eingabemaske erstellt. Da ich mit den eingegebenen Daten Berechnungen anstelle, habe ich als Quelle die Abfrage genommen. "Im Prinzip" klappt das gut, allerdings werden die Berechnungen erst durchgeführt, wenn ich auf den Buttom "Datensatz speichern" klicke. Da das Prog. erst mal erfahren muß, daß die Abfrage auch ausgeführt/aktualisiert werden soll, leuchtet mir das noch ein. Schöner fände ich es aber, wenn ich ins Formular Formelfelder setzen könnte, die gleich nach der Eingabe das Ergebnis anzeigen. Dazu finde ich aber keine Hinweise in der Hilfe und im Handbuch. Gibt es dazu evtl. auch eine Möglichkeit, die ich nur noch nicht gefunden habe?
Die Formeln sind im Prinzip ziemlich banal. Die Felder, in die Daten eingegeben werden, lauten z.B.
"Zellen je µl" und "Volumen in ml" und die Formel soll die absolute Zellzahl anzeigen, also ("Zellen je µl" * "Volumen in ml") gefolgt von einer Division durch ein paar Zehnerpotenzen, um in eine handliche Darstellung (Mio Zellen) zu gelangen. Ließe sich sowas auch unabhängig von der Abfrage direkt ins Formular setzen?
Schon mal vielen Dank für alle Tips
Jürgen

Hallo Jrgen,

Du knntest Deine Berechnungen direkt direkt in Deinen Abfragen ausfhren. Dazu msstest Du dich aber eventuell mit SQL auskennen. Das ist zwar ein anderer Weg als Du, aber vielleicht hilft es Dir ja doch.

Gru,

Ralf

Hallo Forum,ich habe in Base zu einer Tabelle und einer Abfrage ein Formular alsEingabemaske erstellt. Da ich mit den eingegebenen Daten Berechnungen anstelle,habe ich als Quelle die Abfrage genommen.Im Prinzipklappt das gut,allerdings werden die Berechnungen erst durchgefhrt, wenn ich auf den ButtomDatensatz speichernklicke. Da das Prog. erst mal erfahren mu, dadieAbfrage auch ausgefhrt/aktualisiert werden soll, leuchtet mir das noch ein.Schner fnde ich es aber, wenn ich ins Formular Formelfelder setzen knnte, diegleich nach der Eingabe das Ergebnis anzeigen. Dazu finde ich aber keineHinweise in der Hilfe und im Handbuch. Gibt es dazu evtl. auch eine Mglichkeit,die ich nur noch nicht gefunden habe?Die Formeln sind im Prinzip ziemlich banal. Die Felder, in die Daten eingegebenwerden, lauten z.B.Zellen jelundVolumen in mlund die Formel soll die absolute Zellzahlanzeigen, also (Zellen jel*Volumen in ml) gefolgt von einer Divisiondurch ein paar Zehnerpotenzen, um in eine handliche Darstellung (Mio Zellen) zugelangen. Liee sich sowas auch unabhngig von der Abfrage direkt ins Formularsetzen?Schon mal vielen Dank fr alle TipsJrgen--Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.orgProbleme?http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/Tipps zu Listenmails:http://wiki.documentfoundation.org/Netiquette/deListenarchiv:http://listarchives.libreoffice.org/de/users/Alle E-Mails an diese Liste werden unlschbarffentlich archiviert

Hallo Ralf,

danke für den Hinweis. Ich fürchte aber, daß das Einbinden von SQL-Befehlen (wenn ich das Handbuch richtig verstehe in den "Formular-Eigenschaften", Reiter "Daten", Feld "Art des Inhaltes" auf "SQL" und in "Inhalt" den SQL-Befehl) mich noch etwas überfordert. Vielleicht bekomme ich ja noch heraus, welche Teile des SQL-Befehls - z.B. aus der Abfrage - ich übernehmen kann, resp. was ich davon alles benötige...
Jürgen

Hallo Jürgen,

Du könntest Deine Berechnungen direkt direkt in Deinen Abfragen ausführen. Dazu müsstest Du dich aber eventuell mit SQL auskennen. Das ist zwar ein anderer Weg als Du, aber vielleicht hilft es Dir ja doch.

Gruß,

Ralf

Gesendet:Mittwoch, 19. Februar 2014 um 10:28 UhrVon:Jrgenjuergen.zingsem@uk-erlangen.deAn:users@de.libreoffice.orgBetreff:[de-users] Base: Formeln in Formularen
Hallo Forum,ich habe in Base zu einer Tabelle und einer Abfrage ein Formular alsEingabemaske erstellt. Da ich mit den eingegebenen Daten Berechnungen anstelle,habe ich als Quelle die Abfrage genommen.Im Prinzipklappt das gut,allerdings werden die Berechnungen erst durchgefhrt, wenn ich auf den ButtomDatensatz speichernklicke. Da das Prog. erst mal erfahren mu, dadieAbfrage auch ausgefhrt/aktualisiert werden soll, leuchtet mir das noch ein.Schner fnde ich es aber, wenn ich ins Formular Formelfelder setzen knnte, diegleich nach der Eingabe das Ergebnis anzeigen. Dazu finde ich aber keineHinweise in der Hilfe und im Handbuch. Gibt es dazu evtl. auch eine Mglichkeit,die ich nur noch nicht gefunden habe?Die Formeln sind im Prinzip ziemlich banal. Die Felder, in die Daten eingegebenwerden, lauten z.B.Zellen jelundVolumen in mlund die Formel soll die absolute Zellzahlanzeigen, also (Zellen jel*Volumen in ml) gefolgt von einer Divisiondurch ein paar Zehnerpotenzen, um in eine handliche Da

rstellung (Mio Zellen) zugelangen. Liee sich sowas auch unabhngig von der Abfrage direkt ins Formularsetzen?Schon mal vielen Dank fr alle TipsJrgen--Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.orgProbleme?http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/Tipps zu Listenmails:http://wiki.documentfoundation.org/Netiquette/deListenarchiv:http://listarchives.libreoffice.org/de/users/Alle E-Mails an diese Liste werden unlschbarffentlich archiviert

Hallo Jürgen,

ich habe in Base zu einer Tabelle und einer Abfrage ein Formular als
Eingabemaske erstellt. Da ich mit den eingegebenen Daten Berechnungen anstelle,
habe ich als Quelle die Abfrage genommen. "Im Prinzip" klappt das gut,
allerdings werden die Berechnungen erst durchgeführt, wenn ich auf den Buttom
"Datensatz speichern" klicke. Da das Prog. erst mal erfahren muß, daß die
Abfrage auch ausgeführt/aktualisiert werden soll, leuchtet mir das noch ein.

Das geht über die Abfrage nicht anders, weil die Daten ja erst hinterher
bei der Datenbank landen und dann die Daten aus der Datenbank für die
Abfrage wieder verwendet werden.

Die Möglichkeit, hierfür eine Abfrage zu verwenden, ist nicht geeignet
für Formulare, bei denen Du Daten in Einzelfelder eingibt. Dafür eignet
sich bei Datenänderungen und Neueingaben am besten das
Tabellenkontrollfeld. Dann siehst Du ja den gerade eingegebenen Datensatz.

Du musst so einen Wert über Makros berechnen. So etwas dürfte in etwa so
gehen:
SUB Eingabekontrolle(oEvent AS OBJECT)
oFeld = oEvent.Source
oForm = oFeld.Parent
oFeld2 = oForm.getByName("Zielfeldname")
oFeld2.CurrentValue = oFeld.getCurrentValue / 123456
END SUB

Habe ich jetzt nicht weiter ausprobiert. Das Makro schreibt dann den
entsprechenden Wert in die Zelle "Zielfeldname" im gleichen Formular wie
dem, in dem das Feld liegt. Das Makro sollte z.B. beim Verlassen der
Zelle ausgelöst werden.
Das Makro schreibt den Wert nicht in eine Datenbank. Dazu musst Du an
oFeld2.BoundField.updateDouble(oFeld.getCurrentValue / 123456)
gehen, da hiermit dann auch ein Wert an die darunterliegende Tabelle
weitergegeben wird. Das ist aber nicht erforderlich, da letztlich doch
der Wert sowieso berechnet und nicht abgespeichert wird.

Ich hoffe, dass das so hin haut. Mit den direkten Wegen über das
auslösende Ereignis habe ich noch nicht so viel Erfahrung.

Gruß

Robert

Danke Robert.

Jetzt habe ich in der Hilfe und dem schönen Base-Handbuch versucht, herauszufinden, wie ich ein Tabellenkontrollfeld in ein Formular bringe.
das Icon "Kontrollfeld" ist inaktiv, solange ich kein existierendes Feld markiert habe. Für den Zweck (Ansehen der Berechnungsergebnisse) reichen ja Felder, die in der Tabelle gar nicht genannt sind, für spätere Auswertungen, Listen etc. habe ich die Formeln in der Abfrage.
Um in meiner Minimaske die geplanten 5 Ergebnisfelder mit Makros zu füllen, muß ich jetzt erst mal die 20 Handbuchseiten zum Thema "Makros in Base" durcharbeiten. Mal sehen, ob ich zurechtkomme....

Viele Grüße
Jürgen

Hallo Jürgen,

bin gleich erst einmal unterwegs.

Der Code war nicht ganz geglückt. Ich habe das gerade durchgetestet. Das
hier funktioniert:
SUB Berechnung_ohne_MWSt(oEvent AS OBJECT)
  oFeld = oEvent.Source.Model
  oForm = oFeld.Parent
  oFeld2 = oForm.getByName("Preis_ohne_MWSt")
  oFeld2.Text = oFeld.getCurrentValue / 1.19
END SUB

Voraussetzung: Das Feld oFeld2 ist ein feld mit der Eigenschaft "Text",
also z.B. ein formatierbares Feld.

Ich sehe einmal zu, dass ich nachher noch ein Beispiel ins Netz stelle.
Im nächsten Handbuch steht das dann auch.

Gruß

Robert

Hallo Jürgen,

hier ist das Beispiel:
http://robert.familiegrosskopf.de/lo_hb_dev/
Eine Tabelle, eine Abfrage, in der Berechnungen gemacht werden (damit
die Werte direkt im Formular sichtbar sind und auch richtig in die
Felder geschrieben werden können), ein einfaches Formular.
In zwei Felder des Formulars sind die Makros eingebaut, gebunden an das
Verlassen des Feldes.
Die Reihenfolge der Felder ist so gesetzt, dass nicht gerade das letzte
Feld ein Feld ist, aus dem eine Berechnung erfolgen soll.

Gruß

Robert

Hallo Robert,

das ist ja ganz toll, danke. Als "Dummy" habe ich aber immer noch eine Frage.
Hat die Numerierungsbezeichnung oFeld2, oFeld3, oFeld99 unten in Deinem Beispielsmakro irgendeine Bedeutung für die Auswahl des Feldes, müßte ich also die Felder (wenn ja, wo) auszählen, welches Feld1 oder Feld 4 ist?
Jürgen

REM ***** BASIC *****

SUB Berechnung_ohne_MWSt(oEvent AS OBJECT)
  oFeld = oEvent.Source.Model
  oForm = oFeld.Parent
  oFeld2 = oForm.getByName("Preis_ohne_MWSt")
  oFeld2.BoundField.UpdateDouble(oFeld.getCurrentValue / 1.19)
END SUB

SUB Berechnung_gesamt(oEvent AS OBJECT)
  oFeld = oEvent.Source.Model
  oForm = oFeld.Parent
  oFeld2 = oForm.getByName("Preis")
  oFeld3 = oForm.getByName("Preis_gesamt_mit_MWSt")
  oFeld4 = oForm.getByName("MWSt_gesamt")
  oFeld3.BoundField.UpdateDouble(oFeld.getCurrentValue * oFeld2.getCurrentValue)
  oFeld4.BoundField.UpdateDouble(oFeld.getCurrentValue * oFeld2.getCurrentValue - oFeld.getCurrentValue * oFeld2.getCurrentValue / 1.19)
END SUB

Hallo Jürgen,

das ist ja ganz toll, danke. Als "Dummy" habe ich aber immer noch eine Frage.
Hat die Numerierungsbezeichnung oFeld2, oFeld3, oFeld99 unten in Deinem
Beispielsmakro irgendeine Bedeutung für die Auswahl des Feldes, müßte ich also
die Felder (wenn ja, wo) auszählen, welches Feld1 oder Feld 4 ist?

Die Nummerierung habe ich nur deshalb gewählt, weil die Variablen
unterschiedlich heißen müssen. Die Nummern haben also nichts mit der
Lage im Formular oder sonst etwas zu tun.
Eigentlich müsste auch noch eine Deklaration der Variablen am Anfang der
Prozedur stehen.
Also
DIM oFeld AS OBJECT
usw.
Das habe ich mir erst einmal geschenkt. Wenn Du mehr mit Makros
arbeitest, wirst Du vielleicht eine entsprechende Option einstellen, die
das erfordert.
Alle Variablen, die bei dem Makro mit o... beginnen, sind vom Typ
OBJECT. Trifft in dem Makro also auf alle Variablen zu.

Gruß

Robert