Seite 1 von 1

In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Fr 13. Nov 2020, 10:18
von Karlaltona
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?

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Fr 13. Nov 2020, 16:11
von RobertG
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

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Di 17. Nov 2020, 09:50
von Karlaltona
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

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Di 17. Nov 2020, 17:06
von RobertG
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

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Di 17. Nov 2020, 17:29
von F3K Total
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

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Di 17. Nov 2020, 18:02
von RobertG
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

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Do 19. Nov 2020, 11:50
von Karlaltona
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

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Fr 12. Mär 2021, 10:30
von Karlaltona
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

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: Sa 13. Mär 2021, 21:31
von RobertG
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

Re: In Listenfeldern werden nicht alle Werte angezeigt

Verfasst: So 14. Mär 2021, 11:36
von Karlaltona
Hallo Robert,

mit CONCAT klappte es sofort. Besten Dank! Gut, wenn jemand den Durchblick hat.

Gruß,
Karlaltona