Dropdown-Liste in Subformular funktioniert nicht mehr

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Dropdown-Liste in Subformular funktioniert nicht mehr

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

von RobertG » So, 25.08.2019 09:53

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

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

von Georg Lacher » Sa, 24.08.2019 21:10

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

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

von Stephan » Sa, 24.08.2019 20:44

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

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

von Georg Lacher » Sa, 24.08.2019 20:38

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

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

von Stephan » Fr, 23.08.2019 21:45

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

Re: Dropdown-Liste in Subformular funktioniert nicht mehr

von RobertG » Fr, 23.08.2019 21:13

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

Nach oben