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]

Antwort per Email an