BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
In Listenfeldern werden nicht alle Werte angezeigt
-
- Beiträge: 5
- Registriert: Fr 13. Nov 2020, 08:41
In Listenfeldern werden nicht alle Werte angezeigt
Hallo Leute!
Darf ich mich kurz vorstellen: Seit Jahrzehnten betreibe ich in einem Archiv eine Datenbank. Die Datenbank ist sehr umfangreich. Ich hatte sie ursprünglich mit Paradox erstellt und in der Form funktioniert sie auch seit Jahrzehnten bis heute. Die Haupttabelle umfasst 150.000 Datensätze, einige vermittelnde Tabellen kommen auf über eine halbe Million Einträge.
Paradox ist schon sehr gut, nur leider gibt es seit Jahren keine neuen deutschen Versionen mehr. Die Datenbank soll aber auch noch in vielen Jahren nutzbar sein. Deshalb fand ich es an der Zeit, nach Alternativen zu suchen. Zu Base bin gelangt, weil ich sowieso mit LibreOffice arbeite.
Nun zu meinem Problem: Es geht um die Listenfelder in Formularen. In meinem – nach Vorbild im Base-Handbuch - zusammen gebastelten Formular verwende ich ausschließlich „Tabellen-Steuerelemente“. Per SQL-Befehl (z.B. SELECT "Begriff", "ID" FROM "Begriff" ORDER BY "Begriff";) werden die Werte aus Nachschlagtabellen in Listenfelder übertragen. Das funktioniert prinzipiell auch, nur ab einer bestimmten Größe der zugrunde liegenden Tabellen wird nur noch ein Teil der Werte angezeigt. „Einige“ heißt hier viele tausend Werte. Aber der Rest wird unterschlagen! Kann Base mit diesen Mengen nicht umgehen?
Ich arbeite mit Windows 10, Version 2004, Arbeitsspeicher ist genug vorhanden – 16 GB, auf der Festplatten-Partition sind noch 256 GB frei, daran sollte es also nicht liegen. Woran aber dann? Kennt jemand das Problem? Hat jemand eine Lösung?
Darf ich mich kurz vorstellen: Seit Jahrzehnten betreibe ich in einem Archiv eine Datenbank. Die Datenbank ist sehr umfangreich. Ich hatte sie ursprünglich mit Paradox erstellt und in der Form funktioniert sie auch seit Jahrzehnten bis heute. Die Haupttabelle umfasst 150.000 Datensätze, einige vermittelnde Tabellen kommen auf über eine halbe Million Einträge.
Paradox ist schon sehr gut, nur leider gibt es seit Jahren keine neuen deutschen Versionen mehr. Die Datenbank soll aber auch noch in vielen Jahren nutzbar sein. Deshalb fand ich es an der Zeit, nach Alternativen zu suchen. Zu Base bin gelangt, weil ich sowieso mit LibreOffice arbeite.
Nun zu meinem Problem: Es geht um die Listenfelder in Formularen. In meinem – nach Vorbild im Base-Handbuch - zusammen gebastelten Formular verwende ich ausschließlich „Tabellen-Steuerelemente“. Per SQL-Befehl (z.B. SELECT "Begriff", "ID" FROM "Begriff" ORDER BY "Begriff";) werden die Werte aus Nachschlagtabellen in Listenfelder übertragen. Das funktioniert prinzipiell auch, nur ab einer bestimmten Größe der zugrunde liegenden Tabellen wird nur noch ein Teil der Werte angezeigt. „Einige“ heißt hier viele tausend Werte. Aber der Rest wird unterschlagen! Kann Base mit diesen Mengen nicht umgehen?
Ich arbeite mit Windows 10, Version 2004, Arbeitsspeicher ist genug vorhanden – 16 GB, auf der Festplatten-Partition sind noch 256 GB frei, daran sollte es also nicht liegen. Woran aber dann? Kennt jemand das Problem? Hat jemand eine Lösung?
- Dateianhänge
-
- Datenbankstruktur.jpg (116.11 KiB) 2142 mal betrachtet
Re: In Listenfeldern werden nicht alle Werte angezeigt
Hallo Karlaltona,
zuerst einmal zu der verwendeten Datenbank: Bei 150 000 Datensätzen verwendest Du doch wohl nicht die interne HSQLDB, oder? Da würde auch die Argumentation mit Paradox nicht passen. Diese interne Datenbank ist die, die bei der Einführung des Datenbankmoduls in OpenOffice 2.* die aktuelle HSQLDB war. So einer Datenbank, vor allem in der internen Fassung, würde ich nie so viele Daten überlassen.
Es kann sein, dass der Cache für Listenfelder nicht ausreicht, um Inhalte von mehreren 1000 Datensätzen anzuzeigen. Da hilft dann gegebenenfalls, den Inhalt von Listenfeldern einzugrenzen. Schau dazu einmal im aktuellen Handbuch auf S. 477: Listenfelder durch Eingabe von Anfangsbuchstaben einschränken.
Gruß
Robert
zuerst einmal zu der verwendeten Datenbank: Bei 150 000 Datensätzen verwendest Du doch wohl nicht die interne HSQLDB, oder? Da würde auch die Argumentation mit Paradox nicht passen. Diese interne Datenbank ist die, die bei der Einführung des Datenbankmoduls in OpenOffice 2.* die aktuelle HSQLDB war. So einer Datenbank, vor allem in der internen Fassung, würde ich nie so viele Daten überlassen.
Es kann sein, dass der Cache für Listenfelder nicht ausreicht, um Inhalte von mehreren 1000 Datensätzen anzuzeigen. Da hilft dann gegebenenfalls, den Inhalt von Listenfeldern einzugrenzen. Schau dazu einmal im aktuellen Handbuch auf S. 477: Listenfelder durch Eingabe von Anfangsbuchstaben einschränken.
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
-
- Beiträge: 5
- Registriert: Fr 13. Nov 2020, 08:41
Re: In Listenfeldern werden nicht alle Werte angezeigt
Hallo Robert,
HSQLDB funktioniert gar nicht, Firebird geht bis zu einer gewissen Menge. Ich habe weiter rumprobiert und denke, ich muss eine andere Datenbank(-Maschine) verwenden. Denn je mehr ich eingebe, desto mehr geht das Ganze in die Knie - nicht nur bei den Listenfeldern. Scheint wirklich nur eine Frage der Menge zu sein. Merkwürdig nur, dass Paradox die Mengen mühelos schafft. Liegt wohl daran, das bei Paradox alles eingebaut ist. Wäre MariaDB eine Alternative? Oder welche Datenbank kann gut mit großen Mengen umgehen?
Wenn ich Base damit einbinden kann, wäre das sehr schön, denn ich brauche eine Oberfläche, die von der Mitarbeiterin im Archiv gut bedient werden kann.
Gruß,
Karlaltona
HSQLDB funktioniert gar nicht, Firebird geht bis zu einer gewissen Menge. Ich habe weiter rumprobiert und denke, ich muss eine andere Datenbank(-Maschine) verwenden. Denn je mehr ich eingebe, desto mehr geht das Ganze in die Knie - nicht nur bei den Listenfeldern. Scheint wirklich nur eine Frage der Menge zu sein. Merkwürdig nur, dass Paradox die Mengen mühelos schafft. Liegt wohl daran, das bei Paradox alles eingebaut ist. Wäre MariaDB eine Alternative? Oder welche Datenbank kann gut mit großen Mengen umgehen?
Wenn ich Base damit einbinden kann, wäre das sehr schön, denn ich brauche eine Oberfläche, die von der Mitarbeiterin im Archiv gut bedient werden kann.
Gruß,
Karlaltona
Re: In Listenfeldern werden nicht alle Werte angezeigt
Hallo Karlaltona,
ich würde die MariaDB nehmen. Für mich persönlich zählt da, dass ich mich mit der Datenbank auskenne, diese (bzw. MySQL) am meisten im Netz als Datenbank genutzt wird und die Treiber ganz ordentlich funktionieren. Alternative wäre für mich noch PostgreSQL, weil auch da die Treiberanbindung recht ordentlich ist.
Gruß
Robert
ich würde die MariaDB nehmen. Für mich persönlich zählt da, dass ich mich mit der Datenbank auskenne, diese (bzw. MySQL) am meisten im Netz als Datenbank genutzt wird und die Treiber ganz ordentlich funktionieren. Alternative wäre für mich noch PostgreSQL, weil auch da die Treiberanbindung recht ordentlich ist.
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: In Listenfeldern werden nicht alle Werte angezeigt
Moin,
habe mal etwas herumprobiert, sowohl bei ApacheOpenOffice als auch bei LibreOffice, HSQL oder Firebird kann ein Listenfeld maximal 2^15 = 32768 Zeilen anzeigen. Nur in diesen Zeilen arbeitet die Eingrenzung die Robert oben ansprach.
Will man per Listenfeld aus mehr als 10^15 Datensätzen etwas finden, dann sollte man den Suchbereich vorher per SQL eingrenzen.
Gruß R
habe mal etwas herumprobiert, sowohl bei ApacheOpenOffice als auch bei LibreOffice, HSQL oder Firebird kann ein Listenfeld maximal 2^15 = 32768 Zeilen anzeigen. Nur in diesen Zeilen arbeitet die Eingrenzung die Robert oben ansprach.
Will man per Listenfeld aus mehr als 10^15 Datensätzen etwas finden, dann sollte man den Suchbereich vorher per SQL eingrenzen.
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO
Re: In Listenfeldern werden nicht alle Werte angezeigt
Hallo R,
das mit der Einschränkung lässt auch größere Mengen zu. Aus dem Handbuch:
Gruß
Robert
das mit der Einschränkung lässt auch größere Mengen zu. Aus dem Handbuch:
Die Grenze, die Du nennst, gilt natürlich dann, wenn der erste Buchstabe eingegeben wurde. Allerdings sind natürlich Listenfelder mit einem solchen Umfang normal unbedienbar. Ich habe bei einer Datenbank, über Apache/PHP angesprochen, ein Listenfeld mit ca. 2000 Einträgen. Das öffne ich sehr selten. Da erleichtert mir JavaScript zusammen mit den automatischen Ergänzungen von Firefox die Arbeit. Ich tippe einfach los und der passende Begriff wird dann ausgewählt.Manchmal kann es vorkommen, dass der Inhalt für Listenfelder unübersichtlich groß wird. Damit eine Suche schneller zum Erfolg führt, wäre es sinnvoll, hier den Inhalt des Listenfeldes nach Eingabe eines oder mehrerer Buchstaben einzugrenzen. Das Listenfeld selbst wird erst einmal mit einem SQL-Befehl versehen, der nur als Platzhalter dient. Hier könnte z.B. stehen:So wird beim Öffnen des Formulars vermieden, dass Base erst einmal die umfangreiche Liste einlesen muss.Code: Alles auswählen
SELECT "Name", "ID" FROM "Tabelle" ORDER BY "Name" LIMIT 5 (HSQLDB) SELECT "Name", "ID" FROM "Tabelle" ORDER BY "Name" ROWS 5 (FIREBIRD)
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
-
- Beiträge: 5
- Registriert: Fr 13. Nov 2020, 08:41
Re: In Listenfeldern werden nicht alle Werte angezeigt
Danke für die vielen Tipps!
Ich teste jetzt erst einmal MariaDB. Ich habe mich auch schon gefragt, ob so viele Felder im Listenfeld überhaupt gut handhabbar sind. Mir selber macht es nichts aus, wenn ich "zu Fuß" Daten in die Datenbank eingebe. Ich denke nur an die Mitarbeiterin im Archiv, die möglichst bequem und wenig fehleranfällig arbeiten soll.
Ich schaue mal und melde mich, wenn ich schlauer geworden bin.
Gruß,
Karlaltona
Ich teste jetzt erst einmal MariaDB. Ich habe mich auch schon gefragt, ob so viele Felder im Listenfeld überhaupt gut handhabbar sind. Mir selber macht es nichts aus, wenn ich "zu Fuß" Daten in die Datenbank eingebe. Ich denke nur an die Mitarbeiterin im Archiv, die möglichst bequem und wenig fehleranfällig arbeiten soll.
Ich schaue mal und melde mich, wenn ich schlauer geworden bin.
Gruß,
Karlaltona
-
- Beiträge: 5
- Registriert: Fr 13. Nov 2020, 08:41
Re: In Listenfeldern werden nicht alle Werte angezeigt
Liebe Leute!
In den letzten Monaten habe ich erst einmal MariaDB kennen gelernt. Dann habe ich die Paradox-Datenbank mit Hilfe von HeidiSQL in MariaDB importiert. Das ging ziemlich einfach per csv-Dateien. Auch die Anbindung an LibreOffice Base funktioniert gut. Die Probleme die ich hatte, lagen eindeutig daran, dass die eingebundenen Datenbankmaschinen HSQLDB oder Firebird mit der Datenmenge nicht klar kommen. Wie gesagt: In einigen Tabellen sind es mehr als eine halbe Million Einträge.
Die Darstellung in Formularen funktioniert, auch die Abfragen. Was besser sein könnte, ist eine komfortable Darstellung für die Mitarbeiterin im Archiv, die von Datenbanktechniken keine Ahnung hat. Gute Ideen dringend gesucht!
Bei den Abfragen ist die beste Lösung, die ich bisher gefunden habe, folgende: Ich erstelle möglichst viele Abfragevorlagen, die fast alle gängigen Fälle abdecken. In den Abfrageformularen setzte ich unter "Kriterium" viele Bedingungen "WIE '*'" ein. Die Mitarbeiter*innen können dann einfach ihre Bedingungen eintragen. Danach sichern und im Hauptmenü auf die Abfrage doppelt klicken.
Die Sache mit den Listenfeldern kann ich wohl knicken. Die Tabelle mit den verwendeten Begriffen umfasst z.B. über 40.000 Einträge, die mit Namen mehr als 60.000. Und offenbar ist es auch nicht möglich, die Listenfeldfunktion mit MariaDB zu verwenden. Jedenfalls bekomme ich im immer die Meldung "Der Inhalt eines Kombinations- oder Listenfeldes konnte nicht ermittelt werden", obwohl ich beim besten Willen keinen Syntax-Fehler finden kann.
Auch die schöne Möglichkeit, Eingabefelder in Abfragen zu erzeugen über
WHERE "Feldname" LIKE '%' || :Eingabefeldname || '%'
scheint nicht zu funktionieren. Bei mir erscheint das Abfragefenster (Parameter-Eingabe) zwar, aber danach werden sämtliche Einträge des Tabellenfeldes angezeigt. Der eingetragene "Parameter" ist wirkungslos. Offenbar gibt es keine Möglichkeit, das Eingabefeld tatsächlich in SQL einzubinden, oder?
Für alle Tipps, die für eine komfortablere Darstellung sorgen, wäre ich dankbar.
Mit freundlichen Grüßen,
Karlaltona
In den letzten Monaten habe ich erst einmal MariaDB kennen gelernt. Dann habe ich die Paradox-Datenbank mit Hilfe von HeidiSQL in MariaDB importiert. Das ging ziemlich einfach per csv-Dateien. Auch die Anbindung an LibreOffice Base funktioniert gut. Die Probleme die ich hatte, lagen eindeutig daran, dass die eingebundenen Datenbankmaschinen HSQLDB oder Firebird mit der Datenmenge nicht klar kommen. Wie gesagt: In einigen Tabellen sind es mehr als eine halbe Million Einträge.
Die Darstellung in Formularen funktioniert, auch die Abfragen. Was besser sein könnte, ist eine komfortable Darstellung für die Mitarbeiterin im Archiv, die von Datenbanktechniken keine Ahnung hat. Gute Ideen dringend gesucht!
Bei den Abfragen ist die beste Lösung, die ich bisher gefunden habe, folgende: Ich erstelle möglichst viele Abfragevorlagen, die fast alle gängigen Fälle abdecken. In den Abfrageformularen setzte ich unter "Kriterium" viele Bedingungen "WIE '*'" ein. Die Mitarbeiter*innen können dann einfach ihre Bedingungen eintragen. Danach sichern und im Hauptmenü auf die Abfrage doppelt klicken.
Die Sache mit den Listenfeldern kann ich wohl knicken. Die Tabelle mit den verwendeten Begriffen umfasst z.B. über 40.000 Einträge, die mit Namen mehr als 60.000. Und offenbar ist es auch nicht möglich, die Listenfeldfunktion mit MariaDB zu verwenden. Jedenfalls bekomme ich im immer die Meldung "Der Inhalt eines Kombinations- oder Listenfeldes konnte nicht ermittelt werden", obwohl ich beim besten Willen keinen Syntax-Fehler finden kann.
Auch die schöne Möglichkeit, Eingabefelder in Abfragen zu erzeugen über
WHERE "Feldname" LIKE '%' || :Eingabefeldname || '%'
scheint nicht zu funktionieren. Bei mir erscheint das Abfragefenster (Parameter-Eingabe) zwar, aber danach werden sämtliche Einträge des Tabellenfeldes angezeigt. Der eingetragene "Parameter" ist wirkungslos. Offenbar gibt es keine Möglichkeit, das Eingabefeld tatsächlich in SQL einzubinden, oder?
Für alle Tipps, die für eine komfortablere Darstellung sorgen, wäre ich dankbar.
Mit freundlichen Grüßen,
Karlaltona
Re: In Listenfeldern werden nicht alle Werte angezeigt
Hallo Karlaltona,
2 Anmerkungen zu
Das ist eine Verbindung von Texten in der HSQLDB und wohl auch in Firebird, aber nicht in MySQL. || bedeutet in MySQL ein OR (https://mariadb.com/kb/en/function-and- ... reference/).
Du müsstest also mit CONCAT arbeiten:
Dann kann es noch sein, dass Du überhaupt Probleme mit Parameter-Abfragen hast. Wenn in der *.odb-Datei in content.xml der String
Gruß
Robert
2 Anmerkungen zu
Code: Alles auswählen
WHERE "Feldname" LIKE '%' || :Eingabefeldname || '%'
Du müsstest also mit CONCAT arbeiten:
Code: Alles auswählen
WHERE "Feldname" LIKE CONCAT('%', :Eingabefeldname ,'%')
steht, dann muss hier db:parameter-name-substitution="false" entfernt werden.<db:driver-settings db:system-driver-settings="" db:base-dn="" db:parameter-name-substitution="false"/>
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
-
- Beiträge: 5
- Registriert: Fr 13. Nov 2020, 08:41
Re: In Listenfeldern werden nicht alle Werte angezeigt
Hallo Robert,
mit CONCAT klappte es sofort. Besten Dank! Gut, wenn jemand den Durchblick hat.
Gruß,
Karlaltona
mit CONCAT klappte es sofort. Besten Dank! Gut, wenn jemand den Durchblick hat.
Gruß,
Karlaltona
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️