🙏 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!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Beziehungen in Datenbank
Beziehungen in Datenbank
Hallo zusammen.
Ich habe mal ein paar grundsätzliche Fragen: Ich möchte eine Datenbank erstellen um etwas über Beziehungen zu lernen. Als Beispiel habe ich mir eine DB über Autos ausgedacht. In der DB sind sechs Tabellen enthalten. Um die Fahrzeuge zu erfassen habe ich Art, Fabrikat, Typ, Farbe, Kennzeichenteil Stadt und Buchstaben/Zahlen. Ich habe jetzt mal eine Abfrage erstellt und die Tabellen miteinander verbunden. Erstens sind zwischen den Tabellen nur Linien. Muss da nicht an einem Ende eine eins und an dem anderen ein n stehen. Und wie erstelle ich durch ziehen die verschieden Beziehungen (1:n; 1:1; n:m)? Ich habe zwar in dem Base Handbuch die Seiten 46 ff. gelesen, aber irgend wie werde ich daraus nicht schlau. Am Ende möchte ich ein Formular entwerfen, in dem ich die Fahrzeuge über Listen bzw. Kombifelder die Fahrzeuge erfassen kann.
Vielen Dank für die Hilfe,
Suwo
Ich habe mal ein paar grundsätzliche Fragen: Ich möchte eine Datenbank erstellen um etwas über Beziehungen zu lernen. Als Beispiel habe ich mir eine DB über Autos ausgedacht. In der DB sind sechs Tabellen enthalten. Um die Fahrzeuge zu erfassen habe ich Art, Fabrikat, Typ, Farbe, Kennzeichenteil Stadt und Buchstaben/Zahlen. Ich habe jetzt mal eine Abfrage erstellt und die Tabellen miteinander verbunden. Erstens sind zwischen den Tabellen nur Linien. Muss da nicht an einem Ende eine eins und an dem anderen ein n stehen. Und wie erstelle ich durch ziehen die verschieden Beziehungen (1:n; 1:1; n:m)? Ich habe zwar in dem Base Handbuch die Seiten 46 ff. gelesen, aber irgend wie werde ich daraus nicht schlau. Am Ende möchte ich ein Formular entwerfen, in dem ich die Fahrzeuge über Listen bzw. Kombifelder die Fahrzeuge erfassen kann.
Vielen Dank für die Hilfe,
Suwo
- Dateianhänge
-
- Neue Datenbank.odb.zip
- (12 KiB) 274-mal heruntergeladen
Re: Beziehungen in Datenbank
Hallo Suwo,
nur ein kurzer Beitrag: Die Beziehungen für die Datenbank werden unter Extras → Beziehungen definiert. Dort dann auch mit n:1 usw.
Die Beziehungen, die Du in den Abfragen definierst, können die gleichen sein, müssen es aber nicht. Wenn Du bereits unter Extras → Beziehungen die Beziehungen definiert hast, dann werden sie auch in den Abfragen brav vorgegeben.
Beide Oberflächen sehen gleich aus. Der erste Weg nach der Defintion der Tabellen sollte aber immer der zu Extras → Beziehungen sein.
Gruß
Robert
nur ein kurzer Beitrag: Die Beziehungen für die Datenbank werden unter Extras → Beziehungen definiert. Dort dann auch mit n:1 usw.
Die Beziehungen, die Du in den Abfragen definierst, können die gleichen sein, müssen es aber nicht. Wenn Du bereits unter Extras → Beziehungen die Beziehungen definiert hast, dann werden sie auch in den Abfragen brav vorgegeben.
Beide Oberflächen sehen gleich aus. Der erste Weg nach der Defintion der Tabellen sollte aber immer der zu Extras → Beziehungen sein.
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Beziehungen in Datenbank
Hi,
noch ein kurzer Beitrag, anbei deine Datenbank, der die eigentliche Tabelle "tblFahrzeuge" fehlte, mit einigen Beziehungen und einem Formular zum forschen. Beachte, die Tabelle beinhaltet nur Interger-Werte.
Gruß R
noch ein kurzer Beitrag, anbei deine Datenbank, der die eigentliche Tabelle "tblFahrzeuge" fehlte, mit einigen Beziehungen und einem Formular zum forschen. Beachte, die Tabelle beinhaltet nur Interger-Werte.
Gruß R
- Dateianhänge
-
- Neue Datenbank.odb.zip
- (13.4 KiB) 275-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Beziehungen in Datenbank
Hallo.
Erstmal vielen Dank für die Hinweise. Ich habe jetzt mal ein Listenfeld für die Stadt eingefügt, hat geklappt. Danach habe ich ein Kombifeld für die Buchstaben/Zahlen eingefügt. Ich kann zwar was eingeben, es wird aber nur 0 angezeigt. Das hat wohl was mit dem gebundenen Feld zu tun, ich kann die Einstellung aber nicht finden. Ausserdem werden die neuen Einträge die ich mache, nicht gespeichert.
Ich komme einfach nicht drauf wo die Fehler liegen.
Vielen Dank und Gruß,
Suwo
Erstmal vielen Dank für die Hinweise. Ich habe jetzt mal ein Listenfeld für die Stadt eingefügt, hat geklappt. Danach habe ich ein Kombifeld für die Buchstaben/Zahlen eingefügt. Ich kann zwar was eingeben, es wird aber nur 0 angezeigt. Das hat wohl was mit dem gebundenen Feld zu tun, ich kann die Einstellung aber nicht finden. Ausserdem werden die neuen Einträge die ich mache, nicht gespeichert.
Ich komme einfach nicht drauf wo die Fehler liegen.
Vielen Dank und Gruß,
Suwo
- Dateianhänge
-
- Neue Datenbank1.odb.zip
- (18.11 KiB) 227-mal heruntergeladen
Re: Beziehungen in Datenbank
hi,
du verwendest ein Kombinationsfeld wie ein Listenfeld, das funktioniert nicht.
Ein Listendfeld ist besonders, die erste Spalte des SQL-Befehles ist die Anzeigespalte, die zweite, hier die jeweilige ID die Spalte, die in die Tabelle geschrieben wird.
Ein Kombinationsfeld hat nur eine Spalte.
Siehe Beispiel
Gruß R
du verwendest ein Kombinationsfeld wie ein Listenfeld, das funktioniert nicht.
Ein Listendfeld ist besonders, die erste Spalte des SQL-Befehles ist die Anzeigespalte, die zweite, hier die jeweilige ID die Spalte, die in die Tabelle geschrieben wird.
Ein Kombinationsfeld hat nur eine Spalte.
Siehe Beispiel
Gruß R
- Dateianhänge
-
- Neue Datenbank1.odb.zip
- (18.38 KiB) 246-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Beziehungen in Datenbank
Hallo Suwo,
ein Kombinationsfeld zeigt die gleichen Inhalte an, die es auch abspeichert. Da wird kein 2. Feld gebunden an die Tabelle. Vom Prinzip her ist ein Kombinationsfeld ein Feld, das Textvorschläge für ein Textfeld macht.
FK_Buchstab ist aber ein Feld, das einen Fremdschlüssel abspeichern soll. Da ist es völlig korrekt, dass da nur zahlen auftauchen. Und da die gewählten Texte keinen Zahlenwert darstellen, wird stumpf '0' eingesetzt.
Du willst vermutlich ein Listenfeld einsetzen. Dort kannst Du Text auswählen und einen Fremdschlüssel speichern.
Gruß
Robert
ein Kombinationsfeld zeigt die gleichen Inhalte an, die es auch abspeichert. Da wird kein 2. Feld gebunden an die Tabelle. Vom Prinzip her ist ein Kombinationsfeld ein Feld, das Textvorschläge für ein Textfeld macht.
FK_Buchstab ist aber ein Feld, das einen Fremdschlüssel abspeichern soll. Da ist es völlig korrekt, dass da nur zahlen auftauchen. Und da die gewählten Texte keinen Zahlenwert darstellen, wird stumpf '0' eingesetzt.
Du willst vermutlich ein Listenfeld einsetzen. Dort kannst Du Text auswählen und einen Fremdschlüssel speichern.
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Beziehungen in Datenbank
Hallo.
Ich wollte mal beides ausprobieren. Das Kombifeld dient ja auch dazu, neue Werte hinzuzufügen, ohne das ich die entsprechende Wertetabelle aufrufe, bzw. vorher befülle. Denn mir erscheint ein Listenfeld schon sinnvoll, bei diesem Bsp. wäre es doch aber sinniger ein Kombifeld zu nehmen, wenn es sich um keinen festen Autopool handelt. sondern immer wieder neue Fahrzeuge hinzukommen die natürlich andere Kennzeichen hätten. Ist das überhaupt über eine Beziehung möglich, oder müßte ich dann das Buchstabenfeld in der Haupttabelle platzieren? Und wenn das nicht möglich ist, müßte ja alle Tabellenfelder, die jetzt ausgelagert sind, in die Haupttabelle integriert werden, sofern sie über ein Kombifeld im Formular erweitert werden sollen. Oder habe ich da jetzt einen Verständnisfehler, denn z. B. auch bei den Fahrzeugtypen gibt es ja viele, und jährlich kommen ja auch neue auf den Markt
, so das dass Listenfeld ja nicht immer aktuell sein kann.
mfg,
Suwo
Ich wollte mal beides ausprobieren. Das Kombifeld dient ja auch dazu, neue Werte hinzuzufügen, ohne das ich die entsprechende Wertetabelle aufrufe, bzw. vorher befülle. Denn mir erscheint ein Listenfeld schon sinnvoll, bei diesem Bsp. wäre es doch aber sinniger ein Kombifeld zu nehmen, wenn es sich um keinen festen Autopool handelt. sondern immer wieder neue Fahrzeuge hinzukommen die natürlich andere Kennzeichen hätten. Ist das überhaupt über eine Beziehung möglich, oder müßte ich dann das Buchstabenfeld in der Haupttabelle platzieren? Und wenn das nicht möglich ist, müßte ja alle Tabellenfelder, die jetzt ausgelagert sind, in die Haupttabelle integriert werden, sofern sie über ein Kombifeld im Formular erweitert werden sollen. Oder habe ich da jetzt einen Verständnisfehler, denn z. B. auch bei den Fahrzeugtypen gibt es ja viele, und jährlich kommen ja auch neue auf den Markt

mfg,
Suwo
Re: Beziehungen in Datenbank
Hallo Suwo,
nur mit einem Listenfeld bekommst Du die Verbindung einer Tabelle mit einer anderen über Fremdschlüssel hin. Mit einem Kombinationsfeld geht das nicht.
Natürlich hast Du am Anfang Probleme, weil Du erst einmal das Listenfeld mit Inhalt versehen musst. Manchmal ist so etwas leichter mit einem Grundstock zu füllen der nur noch wenig erweitert werden muss (Z.B. Automarken, Jahrgänge in einer Schule ...). Oft kommt es aber vor, dass solche Erweiterungen doch sehr störend sind - vor allem wenn Du mit dem Standardverfahren arbeitest: Formular zu, Tabelle aufrufen, neuen Wert eingeben, Formular öffnen, Wert aussuchen.
Folgende Möglichkeiten:
Du baust in Deinem Formular zusätzlich ein weiteres Formular (neben dem bestehenden Hauptformular) ein. Dieses Formular beschickt z.B. die Tabelle Automarken. Ist nur ein Tabellenkontrollfeld zu sehen mit dem Primärschlüssel und der ausgeschriebenen Marke.
Wenn ein neuer Wert benötigt wird gehst Du zu diesem Tabellenkontrollfeld, gibst den neuen Wert ein, gehst zurück zu dem Listenfeld, lässt das Listenfeld aktualisieren (Button unten in der Navigationsleiste) und kannst den Wert dann auswählen.
Das bringt bereits eine deutliche Erleichterung. Jetzt kann es noch mit einem Makro so organisiert werden, dass bei einer Änderung im Formular "Automarken" das Listfeld für die Automarken automatisch mit einem "Refresh" versehen wird.
Noch schöner wäre es vermutlich, wenn Du in die Listenfelder direkt etwas eingeben könntest, das dann automatisch in der einen und der anderen Tabelle abgespeichert wird. So ein Makro habe ich im Handbuch beschrieben und in den Beispieldateien beigefügt. Den Code hier zu posten sprengt den Rahmen. Letztlich funktioniert dieses Makro mit einem (nicht weiter verbundenen) Kombinationsfeld und einem versteckten numerischen Feld. Sieh' Dir einfach die Beispieldatenbank dazu an. heiß Beispiel_Combobox_Listfeld.
Ich würde erst einmal die Grundlagen von Base so weit wie möglich ausreizen und dann eine Entscheidung treffen, ob der Einsatz von Makros notwendig ist. Beim Ausreizen lernst Du viel mehr über die Struktur von Base. Es soll schon Leute gegeben haben, die mit Makros die einfachsten Funktionalitäten nachgebaut haben, weil sie sich mit der eigentlichen Struktur von Base nicht aus kannten.
Gruß
Robert
nur mit einem Listenfeld bekommst Du die Verbindung einer Tabelle mit einer anderen über Fremdschlüssel hin. Mit einem Kombinationsfeld geht das nicht.
Natürlich hast Du am Anfang Probleme, weil Du erst einmal das Listenfeld mit Inhalt versehen musst. Manchmal ist so etwas leichter mit einem Grundstock zu füllen der nur noch wenig erweitert werden muss (Z.B. Automarken, Jahrgänge in einer Schule ...). Oft kommt es aber vor, dass solche Erweiterungen doch sehr störend sind - vor allem wenn Du mit dem Standardverfahren arbeitest: Formular zu, Tabelle aufrufen, neuen Wert eingeben, Formular öffnen, Wert aussuchen.
Folgende Möglichkeiten:
Du baust in Deinem Formular zusätzlich ein weiteres Formular (neben dem bestehenden Hauptformular) ein. Dieses Formular beschickt z.B. die Tabelle Automarken. Ist nur ein Tabellenkontrollfeld zu sehen mit dem Primärschlüssel und der ausgeschriebenen Marke.
Wenn ein neuer Wert benötigt wird gehst Du zu diesem Tabellenkontrollfeld, gibst den neuen Wert ein, gehst zurück zu dem Listenfeld, lässt das Listenfeld aktualisieren (Button unten in der Navigationsleiste) und kannst den Wert dann auswählen.
Das bringt bereits eine deutliche Erleichterung. Jetzt kann es noch mit einem Makro so organisiert werden, dass bei einer Änderung im Formular "Automarken" das Listfeld für die Automarken automatisch mit einem "Refresh" versehen wird.
Noch schöner wäre es vermutlich, wenn Du in die Listenfelder direkt etwas eingeben könntest, das dann automatisch in der einen und der anderen Tabelle abgespeichert wird. So ein Makro habe ich im Handbuch beschrieben und in den Beispieldateien beigefügt. Den Code hier zu posten sprengt den Rahmen. Letztlich funktioniert dieses Makro mit einem (nicht weiter verbundenen) Kombinationsfeld und einem versteckten numerischen Feld. Sieh' Dir einfach die Beispieldatenbank dazu an. heiß Beispiel_Combobox_Listfeld.
Ich würde erst einmal die Grundlagen von Base so weit wie möglich ausreizen und dann eine Entscheidung treffen, ob der Einsatz von Makros notwendig ist. Beim Ausreizen lernst Du viel mehr über die Struktur von Base. Es soll schon Leute gegeben haben, die mit Makros die einfachsten Funktionalitäten nachgebaut haben, weil sie sich mit der eigentlichen Struktur von Base nicht aus kannten.
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
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: Beziehungen in Datenbank
Hallo.
Vielen Dank für die Hinweise. Dann werde ich das vermutlich mal mit dem Unterformular versuchen. Makros wollte ich noch hinten anstellen. Ersten ist mir das zu komplex und zweitens habe ich auch schon genug unerkundete Möglichekeiten ohne Makros die ich noch ausprobieren will.
Ich werde mich wieder melden,
suwo
Vielen Dank für die Hinweise. Dann werde ich das vermutlich mal mit dem Unterformular versuchen. Makros wollte ich noch hinten anstellen. Ersten ist mir das zu komplex und zweitens habe ich auch schon genug unerkundete Möglichekeiten ohne Makros die ich noch ausprobieren will.
Ich werde mich wieder melden,
suwo
Re: Beziehungen in Datenbank
Hallo.
Ich schon wieder. ich habe das ganze jetzt mal ein wenig umgebaut. Das heißt, weniger Tabellen ausgelagert. Das mit den Listenfeldern klappt soweit. Aber jetzt zeigen mir alle anderen Felder, die in der Haupttabelle verblieben sind, eine Null an. Das erste Feld habe ich zum Ausprobieren als Kombifeld definiert. Die anderen als Textfeld gelassen. Eingaben funktionieren, aber beim Sprung in das nächste Feld wird der Wert auf Null gesetzt. Ich vermute mal wieder eine Verständnisfrage meinerseits. Kann mir jemand auf die Sprünge helfen und die DB korrigieren?
Danke im vorraus,
Suwo
Ich schon wieder. ich habe das ganze jetzt mal ein wenig umgebaut. Das heißt, weniger Tabellen ausgelagert. Das mit den Listenfeldern klappt soweit. Aber jetzt zeigen mir alle anderen Felder, die in der Haupttabelle verblieben sind, eine Null an. Das erste Feld habe ich zum Ausprobieren als Kombifeld definiert. Die anderen als Textfeld gelassen. Eingaben funktionieren, aber beim Sprung in das nächste Feld wird der Wert auf Null gesetzt. Ich vermute mal wieder eine Verständnisfrage meinerseits. Kann mir jemand auf die Sprünge helfen und die DB korrigieren?
Danke im vorraus,
Suwo
- Dateianhänge
-
- NeueDatenbank1.odb.zip
- (21.57 KiB) 271-mal heruntergeladen
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.