Base-Handbuch - The Document Foundation Wiki
Base-Handbuch - The Document Foundation Wiki
Base-Handbuch - The Document Foundation Wiki
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
oSQL_Anweisung.executeQuery(stSql)<br />
ELSE<br />
stSql = "DELETE FROM ""Suchtmp"""<br />
oSQL_Anweisung.executeUpdate (stSql)<br />
END IF<br />
Das Anzeigeformular muss neu geladen werden. Es hat als Datenquelle eine Abfrage, in diesem<br />
Beispiel "Suchabfrage"<br />
oForm2 = oDrawpage.forms.getByName("Anzeige")<br />
oForm2.reload()<br />
End Sub<br />
Damit wurde eine Tabelle erstellt, die nun in einer Abfrage ausgewertet werden soll. Die Abfrage ist<br />
dabei möglichst so zu fassen, dass sie anschließend noch editiert werden kann. Im Folgenden also<br />
ein Abfragecode:<br />
SELECT * FROM "Suchtabelle" WHERE "Nr." IN ( SELECT "Nr." FROM<br />
"Suchtmp" ) OR "Nr." = CASE WHEN ( SELECT COUNT( "Nr." ) FROM<br />
"Suchtmp" ) > 0 THEN '0' ELSE "Nr." END<br />
Alle Elemente der "Suchtabelle" werden dargestellt. Auch der Primärschlüssel. Keine andere<br />
Tabelle taucht in der direkten Abfrage auf; somit ist auch kein Primärschlüssel einer anderen<br />
Tabelle nötig, damit das Abfrageergebnis weiterhin editiert werden kann.<br />
Der Primärschlüssel ist in dieser Beispieltabelle unter dem Titel "Nr." abgespeichert. Durch das<br />
Makro wird genau dieses Feld ausgelesen. Es wird jetzt also zuerst nachgesehen, ob der Inhalt<br />
des Feldes "Nr." in der Tabelle "Suchtmp" vorkommt. Bei der Verknüpfung mit 'IN' werden<br />
ohne weiteres auch mehrere Werte erwartet. Die Unterabfrage darf also auch mehrere Datensätze<br />
liefern.<br />
Bei größeren Datenmengen wird der Abgleich von Werten über die Verknüpfung IN aber<br />
zusehends langsamer. Es bietet sich also nicht an, für eine leere Eingabe in das Suchfeld einfach<br />
alle Primärschlüsselfelder der "Suchtabelle" in die Tabelle "Suchtmp" zu übertragen und<br />
dann auf die gleiche Art die Daten anzusehen. Stattdessen erfolgt bei einer leeren Eingabe eine<br />
Leerung der Tabelle "Suchtmp", so dass gar keine Datensätze mehr vorhanden sind. Hierauf zielt<br />
der zweite Bedingungsteil:<br />
OR "Nr." = CASE WHEN ( SELECT COUNT( "Nr." ) FROM "Suchtmp" ) > 0 THEN<br />
'-1' ELSE "Nr." END<br />
Wenn in der Tabelle "Suchtmp" ein Datensatz gefunden wird, so ist das Ergebnis der ersten<br />
Abfrage größer als 0. Für diesen Fall gilt: "Nr." = '-1' (hier steht am Besten ein Zahlenwert,<br />
der als Primärschlüssel nicht vorkommt, also z.B. '-1' ). Ergibt die Abfrage genau 0 (Dies ist der<br />
Fall wenn keine Datensätze da sind), dann gilt "Nr." = "Nr.". Es wird also jeder Datensatz<br />
dargestellt, der eine "Nr." hat. Da "Nr." der Primärschlüssel ist, gilt dies also für alle<br />
Datensätze.<br />
Kombinationsfelder als Listenfelder mit Eingabemöglichkeit<br />
Aus Kombinationsfeldern und unsichtbaren numerischen Feldern kann direkt eine Tabelle mit<br />
einem Datensatz versehen werden und der entsprechende Primärschlüssel in eine andere Tabelle<br />
eingetragen werden.<br />
In den Vorversionen von LO oder OOo war es notwendig, die numerischen Felder per Makro<br />
unsichtbar zu machen. Dies ist unter LibreOffice nicht mehr notwendig, da die Eigenschaft<br />
'Sichtbar' in der GUI enthalten ist.<br />
Das Modul "Comboboxen" macht aus den Formularfeldern zur Eingabe und Auswahl von Werten<br />
(Kombinationsfelder) Listenfelder mit Eingabemöglichkeiten. Dazu werden neben den<br />
Kombinationsfeldern im Formular die jeweils an die zugrundeliegende Tabelle zu übergebenden<br />
Schlüsselfeldwerte in separaten numerischen Feldern abgelegt. Diese separaten Felder mussten<br />
Makros: Bedienbarkeit verbessern 239