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]