21.08.2013 Aufrufe

Base-Handbuch - The Document Foundation Wiki

Base-Handbuch - The Document Foundation Wiki

Base-Handbuch - The Document Foundation Wiki

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!