BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> 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

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Karlaltona
Beiträge: 5
Registriert: Fr 13. Nov 2020, 08:41

In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von Karlaltona » Fr 13. Nov 2020, 10:18

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?
Dateianhänge
Datenbankstruktur.jpg
Datenbankstruktur.jpg (116.11 KiB) 2142 mal betrachtet

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von RobertG » Fr 13. Nov 2020, 16:11

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
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

Karlaltona
Beiträge: 5
Registriert: Fr 13. Nov 2020, 08:41

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von Karlaltona » Di 17. Nov 2020, 09:50

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

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von RobertG » Di 17. Nov 2020, 17:06

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
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
Beiträge: 2410
Registriert: So 10. Apr 2011, 10:10

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von F3K Total » Di 17. Nov 2020, 17:29

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
Windows 10: AOO, LO Linux Mint: AOO, LO

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von RobertG » Di 17. Nov 2020, 18:02

Hallo R,

das mit der Einschränkung lässt auch größere Mengen zu. Aus dem Handbuch:
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:

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)
So wird beim Öffnen des Formulars vermieden, dass Base erst einmal die umfangreiche Liste einlesen muss.
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.

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

Karlaltona
Beiträge: 5
Registriert: Fr 13. Nov 2020, 08:41

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von Karlaltona » Do 19. Nov 2020, 11:50

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

Karlaltona
Beiträge: 5
Registriert: Fr 13. Nov 2020, 08:41

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von Karlaltona » Fr 12. Mär 2021, 10:30

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

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von RobertG » Sa 13. Mär 2021, 21:31

Hallo Karlaltona,

2 Anmerkungen zu

Code: Alles auswählen

WHERE "Feldname" LIKE '%' || :Eingabefeldname || '%'
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:

Code: Alles auswählen

WHERE "Feldname" LIKE CONCAT('%', :Eingabefeldname ,'%')
Dann kann es noch sein, dass Du überhaupt Probleme mit Parameter-Abfragen hast. Wenn in der *.odb-Datei in content.xml der String
<db:driver-settings db:system-driver-settings="" db:base-dn="" db:parameter-name-substitution="false"/>
steht, dann muss hier db:parameter-name-substitution="false" entfernt werden.

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

Karlaltona
Beiträge: 5
Registriert: Fr 13. Nov 2020, 08:41

Re: In Listenfeldern werden nicht alle Werte angezeigt

Beitrag von Karlaltona » So 14. Mär 2021, 11:36

Hallo Robert,

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 ❤️

Antworten