Dropdown-Liste in Subformular funktioniert nicht mehr

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

Beitrag von RobertG »

Hallo Georg,

bei mehreren tausend Einträgen zu scrollen ist ja sehr aufwändig. Ich würde die Listenfelder durch die Eingabe von Anfangsbuchstaben einschränken. So etwas geht allerdings nur über Makros. Habe ich im Handbuch im Makrokapitel (siehe meine Signatur) beschrieben.

Wenn Du den Inhalt des Listenfeldes so einschränkst, dann hast Du auch das Problem mit den doch sehr vielen Daten Deines Listenfeldes erledigt. Eine Grenze dafür wüsste ich auch nicht. Vielleicht reicht auch ein Refresh des Feldes über den entsprechenden Formularbutton.

Gruß

Robert
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

Beitrag von Stephan »

Weiß jemand von euch Bescheid, was eine mögliche zahlenmäßige Obergrenze angeht
Ich kann nur bestätigen das beim Grid-Steuerelement genau dieselbe Grenze existiert, ich habe es gerade ausprobiert.

Das hier geht gerade noch:

Code: Alles auswählen

oDataModel = createUnoService("com.sun.star.awt.grid.DefaultGridDataModel")
For i = 0 To 32766
   oDataModel.addRow (""&i, Array(i, i))
Next i
mit 32767 und größer gibt es einen Laufzeitfehler.


Gruß
Stephan
Georg Lacher
Beiträge: 2
Registriert: Sa, 24.08.2019 20:17

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

Beitrag von Georg Lacher »

Stephan hat geschrieben: Fr, 23.08.2019 21:45 Ich kann nur bestätigen das beim Grid-Steuerelement genau dieselbe Grenze existiert, ich habe es gerade ausprobiert.

Das hier geht gerade noch:

Code: Alles auswählen

oDataModel = createUnoService("com.sun.star.awt.grid.DefaultGridDataModel")
For i = 0 To 32766
   oDataModel.addRow (""&i, Array(i, i))
Next i
mit 32767 und größer gibt es einen Laufzeitfehler.


Gruß
Stephan
Hallo Stephan,

vielen Dank für deine Antwort! Du hast mich auf die Idee gebracht, weiter nach dieser magischen Zahl 32.767 zu forschen.

Dabei habe ich das gefunden:
https://de.wikipedia.org/wiki/Integer_(Datentyp)

32.767 ist die höchste Zahl, die man mit dem 16-Bit-Integer-Datentyp darstellen kann. Ich nehme an, da liegt der Hund begraben.

Vielleicht gibt es im Programmcode von Base irgendwo eine Hilfsvariable, die als 16-Bit-Integer definiert ist. Sie kann meine Personentabelle nur bis zum 32.767. Datensatz abarbeiten, dann ist Schluss. Auch in deiner Schleife sind es (von 0 bis 32.766) 32.767 Durchläufe.

Beste Grüße
Georg
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

Beitrag von Stephan »

32.767 ist die höchste Zahl, die man mit dem 16-Bit-Integer-Datentyp darstellen kann. Ich nehme an, da liegt der Hund begraben.
Das nahm ich auch an, nur habe ich davon nichts geschrieben, weil ich keine Erklärung habe warum es mit 32.767 eben NICHT mehr geht sondern nur mit bis 32.766.


Gruß
Stephan
Georg Lacher
Beiträge: 2
Registriert: Sa, 24.08.2019 20:17

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

Beitrag von Georg Lacher »

RobertG hat geschrieben: Fr, 23.08.2019 21:13 Ich würde die Listenfelder durch die Eingabe von Anfangsbuchstaben einschränken. So etwas geht allerdings nur über Makros. Habe ich im Handbuch im Makrokapitel (siehe meine Signatur) beschrieben.

Wenn Du den Inhalt des Listenfeldes so einschränkst, dann hast Du auch das Problem mit den doch sehr vielen Daten Deines Listenfeldes erledigt.
Hallo Robert,

vielen Dank für deine Antwort! Dadurch leuchtet jetzt ein Licht am Ende des Tunnels :-).

Mit Makros habe ich bisher noch nicht gearbeitet. Aber im Handbuch hast du das sehr gut beschrieben. Ich denke, du meinst vor allem das Kapitel "Listenfelder durch Eingabe von Anfangsbuchstaben einschränken". Das will ich mal ausprobieren - auch wenn ich den Code nur ansatzweise verstehe.

Ich glaube, ich habe die Stelle gefunden, an die man das Makro anhängen kann. Für jede Spalte im Subformular kann man die Spalteneigenschaften aufrufen, und dort gibt es eine Reihe von Ereignissen, denen man ein Makro zuweisen kann. Ich habe überlegt, welches Ereignis dafür geeignet wäre.

Das Formular dient ja sowohl zur Eingabe wie zur Ausgabe. Dem Subformular liegt eine Tabelle "Zuordnung" zugrunde, die die gleiche Struktur hat wie das Subformular. Gefüllt ist die Tabelle aber nicht mit Namen, sondern mit Indizes. Das Subformular soll diese Indizes auslesen, in der Personentabelle nachsehen und die zugehörigen Namen anzeigen. Das geschieht beim Öffnen des Formulars und beim Blättern, bzw. Suchen nach einem anderen Datensatz. Hierbei soll also nicht gefiltert werden. Filtern soll er nur bei Neueingaben. Dann wähle ich aus der Dropdown-Liste den richtigen Eintrag aus, gehe die Zeile durch und am Schluss wird im Hintergrund ein neuer Datensatz in die Tabelle "Zuordnung" geschrieben. Hier wäre eine Filterung sinnvoll, aber bei jedem Feld (Regie, Drehbuch, Vorlage ...) wieder neu. Wäre das Ereignis "Taste losgelassen" dafür sinnvoll? Ich könnte mit der Maus in die betreffende Spalte gehen, eine Taste drücken, und das Makro würde die Filterung einleiten. Was meinst du?

Allerdings halte ich es für möglich, dass mein Problem trotzdem noch bestehen bleibt. Ich habe die Personen mit Index > 32.767 manuell in die Zuordnungstabelle eingetragen. Doch das Subformular zeigt an diesen Stellen leere Felder an. Das Subformular scheint die Tabelle nur bis zum 32.767. Datensatz durchsuchen zu können. Deshalb halte ich es für möglich, dass eine Filterung dann ebenfalls nur für die ersten 32.767 Datensätze vorgenommen wird und die hinteren Datensätze ignoriert werden. Berichte werden aber korrekt erstellt, unter Berücksichtigung aller Datensätze. Vielleicht liegt es wirklich am Steuerelement, das im Hintergrund mit einer 16-Bit-Integer-Variablen arbeitet.

Beste Grüße
Georg
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

Beitrag von RobertG »

Hallo Georg,

das Makro ist erst einmal nur dazu geeignet, bei der Neueingabe alle Daten zur Verfügung zu haben. Im Handbuch steht das Ereignis
Eigenschaften: Listenfeld → Ereignisse → Taste losgelassen
Wenn Du bereits bestehende Datensätze anzeigen und ändern willst, dann müsstest Du beim Laden den Inhalt für das Listenfeld bereits einschränken.

Wenn das Listenfeld nur zur Anzeige von Daten dienen soll, dann ist es überflüssig. So etwas wird mit einer Abfrage erledigt - vor allem, wenn ein Listenfeld so umfangreich ist wie bei Dir. Machst Du in dem Subformular auch Eingaben, die die Listenfelder betreffen würden?

Gruß

Robert
Antworten