Robert Großkopf wrote:
Hallo Andreas,
Ich habe gerade ein Problem umschiffen müssen, das mir im Bereich der
Datenbank nicht logisch erscheint - zumal ich von MySQL anderes gewohnt
bin. Im Makrobereich wollte ich durch eine Abfrage ermitteln, ob das
Abfrageergebnis leer ist und abhängig davon entweder die eine oder die
andere Aktion starten. Es startete aber immer die, die bei einem nicht
leeren Abfrageergebnis starten sollte:
Butter by die Fische, please!

Nicht so ungeduldig. Ich sitze nicht die ganze Zeit am PC und versuche ein Problem zu knacken.

Betriebssystem?
Hersteller des Officepakets? (Sun, Novell, Ubuntu,... s. Hilfe>Über...
created by ... based on OpenOffice.org)
Version?
Verwendete Datenbank? (findest Du in der Statuszeile des
Datenbankfensters. MySQL, HSQL, Oracle, dBase, Spreadsheet?

openSUSE 11.2 mit der original OpenOffice.org 3.1.1 und der Base-Datenbank mit integrierter HSQLDB.

Das macht wirklich den entscheidenden Unterschied. Hoffentlich benutzt Du diese Sun Java. Andernfalls könnte es unspezifische Probleme mit Base geben.

Was versuchst du eigentlich hinzubekommen? Persönlich habe ich in Base
allen Makros entsagt und bekomme trotzdem so ziemlich alles auf die Reihe.

Standardmakrosprache für OpenOffice, also die dort benutzte Basic-Form. In der Regel versuche ich Makros auch zu umgehen, aber manchmal klappt das eben nicht so ganz.

Diese "Standardsprache" ist vollkomment Fehl am Platz. Irgenwann in den 90ern (wegen VBA und so) eingeführt und heute völlig veraltet. Leider ist OpenOffice.org eines der allerletzten Reservate.
Aber egal,...

Aufgabe ist ein Kassensystem. Schon beim Anzeigen der zu zahlenden Beträge bedarf es eines Makroeinsatzes, wenn das Ganze nicht über zusätzliche Buttons laufen soll, denn an Eingabemöglichkeiten funktioniert das Ganze wie an der Supermarktkasse: Datum im Hauptformular, im Subformular nur Anzahl und Barcodenummer (mit Scanner einzulesen). In einem Nebenformular wird über eine Abfrage eine Produktliste mit Einzelpreis und Gesamtpreis sowie der Summe des Einkaufs erstellt. Müsste also bei Änderung in einem Subformular im anderen eine Aktualisierung erfolgen. Geht nur über Mausbewegung zu einem Button im anderen Formular mit Drücken und zurück zum Eingabeformular oder eben per Makros.

Also irgendein Einzeiler ähnlich wie "subform.rowset.refresh()" wenn eine Anzahl eines Artikel zur Rechnung hinzugefügt wurde. Ohne besagten Barcodescanner würde man die Artikel per Tastatur aus einem Listenfeld fischen und wennn alle Artikel eingeben sind, einen Knopf drücken, um die Summen anzuzeigen. Wie ware es denn mit einem Eingabeformular, das wirklich nur zur Eingabe dient und einem Report, der am Ende die Rechnung zum Ausdrucken mit allen Berechnungen liefert? Das ganze läßt sich mittels einer Hilfstabelle und einer Abfrage miteinander verbinden. Eingabeformular, um einen Datensatz (ein Bild) per Auswahl anzuzeigen und der Report druckt nur den im Formular angezeigten Datensatz:
http://user.services.openoffice.org/en/forum/download/file.php?id=3751


Das war der Stand, den ich mit dem gesamten Kurs (Wahlfachunterricht Klasse 8) bisher erarbeitet habe. Funktioniert auch soweit ganz gut.

Komplizierter wird's , wenn zusätzlich noch die Aufnahme der Waren in den Bestand mit berücksichtigt werden soll. Zur Zeit können die Schülerinnen und Schüler beliebig viel "verkaufen". Eine Wareneingangtabelle sollte aber so ausgewertet werden, dass nicht mehr verkauft werden kann als wirklich an Waren vorhanden ist. Passiert natürlich bei tatsächlich aufgeklebten Barcodes nicht, ist aber eine Absicherung des Systems. Wenn also die eingegebene Anzahl einer Ware im Verkauf die Anzahl der aufgenommenen Ware überschreitet meldet dies das Makro und soll die Speicherung verhindern. Und da hänge ich etwas:

Das kann die eingebettete HSQL-Datenbank nicht leisten. Du kannst Constraints definieren, welche aber auf die aktuelle Zeile beschränkt sind (ALTER TABLE "X" ADD CONSTRAINT "Lebenszeit" CHECK "Geburt"<="Tod"), Trigger sind wohl nicht möglich und Transactions habe ich noch nie ausprobiert, sollten aber eigentlich definierbar sein (abseits der Base GUI). Auf Formularebene könnte man ein weiteres Unterformular anhängen, das eventuelle Fehlmengen wenigstens anzeigt. (SELECT "Artikel" FROM "Rechnung_Artikel" WHERE "viewBestand"<"Menge" ... verbunden über die Rechnungsnummer)

In einem Tabellenkontrollfeld schaffe ich es nicht die Speicherung zu verhindern. Also schreibe ich vor der Speicherung den Wert 0 als Anzahl in den Verkauf und entferne anschließend den Datensatz wieder. In diesem Fall muss also das Tabellenkontrollfeld aktualisiert werden, in dem geschrieben wurde, nicht das Feld, das die Ausgabe mit den Preisen erledigt.

ALTER TABLE "X" ADD CONSTRAINT "Menge">0 vielleicht?


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Antwort per Email an