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.
>
>
> 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.
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.
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:
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.
Ist das Abfrageergebnis leer, d.h. existiert keine 0 nach entsprechender
Abfrage auf die Datenbank hin, so brauche ich nur die Anzeige der Ausgabe
(Ware und Preis) zu aktualisieren. Dies trifft z.B. bei einer Löschung zu. Ist
das Abfrageergebnis nicht leer, so muss aus der Tabelle der 0-er-Eintrag
gelöscht werden und das Eingabeformular neu eingelesen werden.
Natürlich könnte ich alle Formulare jedes Mal aktualisieren lassen - aber das
erscheint mir dann doch zu viel Geflackere auf dem Bildschirm.
Nun, etwas umständlich zu erklären - aber Du wolltest ja wissen, was ich da
denn mache.
Was mich eben irritiert habe, ist, dass ich eine leere Abfrage erst erkennen
kann, wenn ich folgendermaßen vorgehe:
Sql = "SELECT ""recID"" FROM ""Abgang"" WHERE ""Anzahl""='0'"
Abfrageergebnis = SQL_Anweisung.executeQuery(Sql)' Ergebnis auswerten
formneu = 2
IF NOT isNull(Abfrageergebnis) THEN
WHILE Abfrageergebnis.next
formneu = 1
WEND ' naechster Datensatz
IF formneu= 1 THEN
SQL_Anweisung.executeQuery("DELETE FROM ""Abgang""
WHERE
""Anzahl""='0'")
ouform=oform.getbyName("Rechnung")
ouform.reload()
NeuerDatensatz
ELSE
ouform=oform.getbyName("Anzeige")
ouform.reload()
END IF
END IF
Eigentlich dachte ich mit "NOT isNull" die entsprechende Aktion auslösen zu
können. Aber dies trifft wohl immer zu - egal, ob ein Ergebnis vorliegt oder
nicht. Jetzt lasse ich mir mit Abfrageergebnis.next einfach einen anderen Wert
für formneu schreiben und habe dann die Entscheidung "IF ... ELSE" erfüllt.
Das funktioniert so, ist aber für mich nicht plausibel genug, so dass ich das
auch anderen weitergeben kann.
Gruß
Robert
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]