In Teil 2 wird die Beziehung zwischen Datenbanktabellen und Formularen erörtert. Insbesondere, wie Sie eine Beziehung zwischen zwei Tabellen definieren und „Referenztabellen“ als Datenquelle für Dropdown-Listen verwenden.
Versionen von OpenOffice und LibreOffice, für die diese Nachricht relevant ist, von 3.0 bis 6.2 (die aktuelle Version von LibreOffice). Ab Version 3.0 kann OpenOffice Base jetzt Skripte in einer Datenbankdatei (mit der Erweiterung .odb) speichern, wodurch die Verteilung von OO Basic-Makrocode bequem wird
Es gab einige Verwirrung mit den Formularen in der OpenOffice Base. Tatsache ist, dass sich im Verlauf der Softwareentwicklung von einer Office-Suite zu einer Datenbankumgebung herausstellte, dass Formulare, Formulare, Formulare und Formulare nicht dasselbe sind. Und Form ist nicht nur Form. Ich werde es genauer erklären.
Wenn Sie die OpenOffice Base-Datenbank im Bearbeitungsmodus öffnen, werden auf der linken Seite des Bildschirms vier Lesezeichen angezeigt. In der russischen Version wird es so klingen
- Tabellen
- Anfragen
- Formulare
- Berichte
In diesem Sinne ist das Formular eine separate Anwendung, die in einem separaten Fenster ausgeführt wird. Ich stelle auch fest, dass dies tatsächlich das Fenster ist, in dem die Instanz von OpenOffice Writer gestartet wird.
Hinweis Da das Formular tatsächlich eine Instanz von OpenOffice Writer ist, können Sie eine Anwendung erstellen, ohne die OpenOffice Base-Komponente zu laden - direkt in OpenOffice Writer.Jedes Formular verfügt über eine Sammlung von Formularen von Formularobjekten. Zu Beginn ist diese Sammlung leer. Trotzdem können Sie das Formular öffnen und schließen. Und sogar Textinformationen darin anzeigen. Und nur wenn Sie ein neues Steuerelement hinzufügen (z. B. Schaltfläche), erstellt das System ein Formularobjekt mit dem Standardnamen Formular, wenn Sie zu diesem Zeitpunkt noch kein solches Objekt selbst erstellt haben.
Am bequemsten ist es, neue Formulare über den Formularnavigator (in der Palette als Kompass angezeigt) zu erstellen, der auch über das Menü Ansicht | Symbolleiste | Formularnavigation aufgerufen werden kann. Formularobjekte werden entweder auf der obersten Ebene in der Forms-Auflistung erstellt oder einem anderen Formularobjekt untergeordnet. Dies hat keine Auswirkungen auf das Erscheinungsbild des Formulars, kann jedoch beim Definieren von Beziehungen zwischen Tabellen hilfreich sein.
Hier sollten wir eine Anomalie des Form-Objekts beachten. Dieses Objekt ist in erster Linie ein Objekt, das einer Datenbanktabelle oder einer SQL-Abfrage zugeordnet ist. Sie können sich Form als ResultSet-Objekt vorstellen (so wie es wirklich ist). Form hingegen ist ein Container für Steuerelemente wie FORM in einem HTML-Dokument (und dies gilt auch).
Öffnen Sie das neu erstellte Formular im Bearbeitungsmodus (rechte Maustaste | Bearbeiten). Erstellen Sie darin ein neues Formularobjekt mit dem Namen Formular oder einem anderen Namen, den Sie mögen. Erstellen Sie in diesem Formularelement ein untergeordnetes Formularelement.
Jedes Formular muss einer vorhandenen Datenbanktabelle, Abfrage oder SQL-Abfrage zugeordnet sein. Im Slave-Formular können Sie die Regeln so festlegen, dass die nach dem Wert der zugehörigen Felder im Hauptformular gefilterten Daten als Master / Slave angezeigt werden. Füllen Sie dazu im Eigenschafteneditor des untergeordneten Formulars die Eigenschaften Link-Master-Felder und Link-Slave-Felder aus.
Jetzt fügen wir jedem Formular ein Tabellensteuerungselement hinzu, indem wir im Formularnavigator> das entsprechende Formular auswählen. Das Tabellensteuerungselement befindet sich nicht im Bereich der verfügbaren Elemente. Um eine erweiterte Liste von Elementen anzuzeigen, müssen Sie die Schaltfläche Weitere Steuerelemente in der Elementpalette aktivieren. Nach dem Hinzufügen des Table Control-Elements müssen Sie den Bearbeitungsmodus dieses Elements aufrufen und die für die Anzeige der Tabelle erforderlichen Spalten hinzufügen (rechte Maustaste -> Spalte einfügen / ersetzen / löschen).
Der zweite Typ ist der in der Praxis häufig anzutreffende Beziehungstyp zwischen Tabellen (nach Master / Slave), den wir betrachten werden - eine Beziehung vom Typ Verzeichnis. Wir speichern in der Datentabelle den Schlüssel des GUID-Objekts, die automatische Inkrementierung, und in der angezeigten Tabelle zeigen wir den vollständigen Namen aus der verknüpften Tabelle, dem „Verzeichnis“. Hierfür gibt es einen bequemen Mechanismus. Fügen Sie im visuellen Tabellen-Designer eine Spalte vom Typ Listenfeld hinzu. Wenn bereits eine Spalte vom Typ Numerisch / Text erstellt wurde, in der der Schlüssel (und nicht der Name) angezeigt wird, kann der Typ in Listenfeld geändert werden (Rechtsklick | Ersetzen durch | Listenfeld). Bearbeiten Sie als Nächstes die Liste der Spalteneigenschaften. Setzen Sie auf der Registerkarte Daten die Eigenschaft Typ des Listeninhalts auf SQL. Die Abfrage in der Eigenschaft "Listeninhalt" sollte den angezeigten Wert in der ersten Spalte enthalten, und die Eigenschaft "Gebundenes Feld" ist der Index der Spalte mit dem Schlüsselfeld (vorausgesetzt, die erste Spalte hat den Index 0). Das heißt, in der überwiegenden Mehrheit der Abfragen ist dies 1 für Abfragen vom Typ
SELECT USERNAME, USERID FROM USERS ORDER BY USERNAME
Bisher wurde die Arbeit im Konfiguratormodus ohne Programmierung beschrieben. Fügen Sie Funktionen mit OO Basic-Makros hinzu.
Erstellen Sie einen Filter für die Datenbanktabelle nach dem im Textfeld eingegebenen Wert. Dazu schreiben wir in der Sprache OO Basic eine Prozedur, die ein Ereignis über die Tastatur verarbeitet.
Sub TextBox_onKeyUp(oEvent) oDocument = ThisComponent oDocument.LockControllers sText = oEvent.Source.text if Len(sText) > 3 Then oForm = ThisComponent.Drawpage.Forms.getByName("MyForm") oForm.Filter = "USERNAME LIKE '" + sText + "%'" oForm.reload() End If oDocument.UnlockControllers End Sub
Wir verknüpfen diese Prozedur mit dem Ereignis "Schlüssel freigegeben" des Textfelds (auf der Registerkarte "Ereignis" der Eigenschaftsliste des Elements). Beachten Sie, dass sich dieses Textfeld in einem anderen Formular befinden muss (nicht in dem, dem der Filter überlagert ist), damit beim erneuten Laden von oForm.reload () der über die Tastatur eingegebene aktuelle Wert nicht "ungültig" wird.
Fortsetzung folgt.