🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Datenbank-Frontend mit komplexen Joins

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Deever
Beiträge: 9
Registriert: Do 3. Jan 2013, 09:06

Datenbank-Frontend mit komplexen Joins

Beitrag von Deever » Do 3. Jan 2013, 09:36

Hey Amigos, wie geht's?

Ich möchte für eine etwas kompliziertere Datenbank ein Frontend erstellen. Als Beispiel sollen folgende Tabellen dienen:

Code: Alles auswählen

+----------------------------------------------------------+
| Haustiere                                                |
+---------+------------------------------------------------|
| id      | INTEGER (auto_increment)                       |
| name    | VARCHAR (64)                                   |
| spezies | INTEGER (Fremdschlüssel zur Tabelle "Spezies") |
| essen   | INTEGER (Fremdschlüssel zur Tabelle "Essen")   |
+---------+------------------------------------------------+

+---------------------------------+
| Spezies                         |
+------+--------------------------+
| id   | INTEGER (auto_increment) |
| name | VARCHAR (64)             |
+------+--------------------------+

+---------------------------------+
| Essen                           |
+------+--------------------------+
| id   | INTEGER (auto_increment) |
| name | VARCHAR (64)             |
+------+--------------------------+
Ich möchte jetzt also ein Formular für "Haustiere" erstellen, das in Comboboxen Spezies und Essen anzeigt.
Darüber hinaus sollen auch bequem neue Datensätze erstellt werden können, und zwar auch in den Nebentabellen "Spezies" und "Essen", in dem man bei einem neuen Haustier einfach nicht einen der existierenden Werte mit der Combobox auswählt, sondern einen neuen reinschreibt. Das sollte natürlich möglichst auch dann funktioniern, wenn die Nebentabellen mehrere Attribute haben.
Ist das mit einigermaßen geringem Aufwand in Base realisierbar?

Vielen Dank für eure Antworten!
Gruß,
/dev

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Datenbank-Frontend mit komplexen Joins

Beitrag von RobertG » Do 3. Jan 2013, 11:55

Hallo Deever,

grundsätzlich kannst Du in einem Formular nur über Listfelder einen Fremdschlüssel in die zugrundeliegende Tabelle schreiben und einen anderen Inhalt darstellen. Das geht nicht über Kombinationsfelder, in die Du auch Inhalt eingeben kannst.
Allerdings hat mich das auch für die tägliche Anwendung immer wieder geärgert, so dass ich etwas entsprechendes mittels Makros zusammengebaut habe: Ein Kombinationsfeld und nebenher ein verstecktes numerisches Feld. Das Kombinationsfeld ist nicht mit dem Formular verbunden sondern wird nur durch Makros gefüllt und sein Inhalt durch Makros ausgelesen und geschrieben.
Das Makro ist in der Beispieldatenbank zum Handbuch Base enthalten, (besonders bei dem Formular zur Medieneingabe, aber auch bei dem Formular zur Eingabe neuer Leser): https://wiki.documentfoundation.org/ima ... se_V35.zip. Eine Erklärung zu dem Makro befindet sich in dem Kapitel http://wiki.documentfoundation.org/imag ... os_V35.pdf

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Datenbank-Frontend mit komplexen Joins

Beitrag von F3K Total » Do 3. Jan 2013, 15:10

Hey Crossposter,
Crossposting ohne Verlinkung ist unhöflich.
siehe z.B. hier http://de.openoffice.info/viewtopic.php ... 68#p208026
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Deever
Beiträge: 9
Registriert: Do 3. Jan 2013, 09:06

Re: Datenbank-Frontend mit komplexen Joins

Beitrag von Deever » Di 8. Jan 2013, 05:50

@F3K Total: Oh, tut mir leid, werd ich in dem Fall nicht mehr tun! :)

@RobertG: Ja, nach genau sowas hab ich gesucht, danke! :)
Hab jetzt allerdings noch ein paar Fragen zu Basic und Macros allgemein:
  1. Woher weiß das Form, daß z.B. das Macro "Aktualisieren" aufgerufen werden soll? Bei den Ereignissen in den Eigenschaften ist es nirgendwo eingetragen?
  2. Geht das Ganze auch mit weniger Hardcoding? Ich möchte halt Code möglichst nur einmal schreiben und die Objekte per Parameter übergeben, anstatt irgendwas hartzucoden und dann für jede Hauptentität/Formular die gleichen Macros nochmals schreiben...
Vielen Dank für deine Antwort!
Liebe Grüße,
/dev

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Datenbank-Frontend mit komplexen Joins

Beitrag von RobertG » Di 8. Jan 2013, 18:33

Hallo Deever,
Deever hat geschrieben:
  1. Woher weiß das Form, daß z.B. das Macro "Aktualisieren" aufgerufen werden soll? Bei den Ereignissen in den Eigenschaften ist es nirgendwo eingetragen?
  2. Geht das Ganze auch mit weniger Hardcoding? Ich möchte halt Code möglichst nur einmal schreiben und die Objekte per Parameter übergeben, anstatt irgendwas hartzucoden und dann für jede Hauptentität/Formular die gleichen Macros nochmals schreiben...
Ich finde da kein Makro "Aktualisieren". Das, was aktualisiert wird, sind verschiedene Formulare. Da steht das dann aber bereits im Makronamen drin.

Ich schreibe das einmal an der Beispieldatenbank "Medien_mit_Makros" am Formular "Leseraufnahme" auf:
Du musst dich (über den Formularnavigator) erst einmal durchhangeln über das Formular "Filter" → "Formular" → "Adresse".
Im Formular "Adresse" ist das Makro für die Comboboxen eingebunden. Da steht dann etwas "Vor der Datensatzaktion ..." und "Nach dem Datensatzwechsel ...". Das, was da gestartet wird, sind nacheinander zwei Prozeduren, die mit einer ganzen Reihe von Variablen versorgt werden. Theoretisch kann dies auch irgendwo aus dem Formular heraus geschehen - z.B. über ein verstecktes Feld. Das könnte dann ausgelesen werden. Nur der Inhalt müsste natürlich entsprechend den Formularen sein.
Jetzt gehe ich weiter zum Formularfeld "comStr". Hier ist das Makro "Datensatzaktion_erzeugen" eingebunden. In den Zusatzinformationen des Kombinationsfeldes sind die Variablen dafür hinterlegt (das Feld und die Position innerhalb der Formularhierarchie).
Mehr Einbindung gibt es nicht.
Was Du für eine eigene Datenbank brauchst ist das Modul "Comboboxen" aus den Makros der obigen Datenbank; vielleicht noch ein paar Variablen aus "AA_Variablen". Die Einbindung erfolgt, wie oben beschrieben und wie in den Start- und Speicheraufrufen für die anderen Kombinationsfelder ersichtlich.
Voraussetzung für die Funktionsweise ist: Du arbeitest bei den Tabellen, in die die Datensätze eingefügt werden, mit einem Autowert-Feld und das Feld hat die Bezeichnung "ID".

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Deever
Beiträge: 9
Registriert: Do 3. Jan 2013, 09:06

Re: Datenbank-Frontend mit komplexen Joins

Beitrag von Deever » Mi 9. Jan 2013, 10:15

Sorry, so schnell bin ich nicht. Muss mich erst überhaupt in das Ganze einarbeiten.

Ich habe jetzt den Aufruf von "Ausleihe_aktualisieren" gefunden, im Formular "Ausleihe" im "Geändert" Event der ListBox "LB_Medium"! :)
Jetzt ist für mich noch die Frage, wo/wie "Ausleihe_Anzeige_aktualisieren" verknüpft ist. Wenn ich mir den XML-Source des Formulars anschaue, müsste das das rowchange Event des Formulars "Anzeige" sein, aber wie krieg ich das Eigenschaftenfenster (im Design Mode des Formulars) auf das Formular "Anzeige"? Bei den Steuerelementen innerhalb der Formulare geht das einfach (natürlich), indem ich das Element anklicke, aber wenn ich daneben auf das Formular klicke, wird das Eigenschaftenfenster einfach ausgegraut, anstatt (wie bei Access) die Eigenschaften des Formulars anzuzeigen. Gibt es irgendwo eine Liste, in der ich alle Elemente (einschließlich der Formulare) auswählen kann?

Sorry, wenn ich etwas langsam bin, aber ich muss erst mit den Grundlagen zurechtkommen...:)

Gruß,
/dev

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Datenbank-Frontend mit komplexen Joins

Beitrag von RobertG » Mi 9. Jan 2013, 14:05

Hallo Deever,

in der Ausleihe brauchst Du zwar nicht rum zu suchen - da sind keine Listenfelder drin, die zu Kombinationsfeldern mit numerischen Feldern wurden. Die sind z.B. in der Leseraufnahme. Die Ausleihe verbindet ja nur bekannte Daten miteinander: bereits aufgenommene Personen mit bereits aufgenommenen Medien.

Auf das Formular kommst Du, indem Du
- den Formularnavigator startest (beim Formular, geöffnet zum Bearbeiten, der 5. Button unten von links)(oder F5 oder Ansicht → Naviagtor)
- ein Kontrollfeld des Formulars mit der rechten Maustaste anklickst (Kontextmenü des Kontrollfeldes - das geht nicht über dem Hintergrund, weil auf der Ansicht viele verschiedene Formulare liegen können)

Die beste Wahl ist immer der Navigator, der eine Übersicht der ganzen Struktur bringt.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten