Hallo liebe Experten,
ich habe soeben auf OpenOffice 3.4.1 umgestellt und nun ein kleines, aber auf Dauer ärgerliches Problem: bei einem Standard-Formular über eine Datenbank werden beim Start offenbar nur die ersten 40 Datensätze geladen, was sich in der Formular-Navigations-Leiste als Anzeige »Datensatz 1 von 40 *« zeigt, aber vor allem auch in den Suchergebnissen: auch da werden nur die ersten 40 Datensätze durchsucht und ständig ein leeres Ergebnis geliefert, obwohl in den reichlich tausend Datensätzen etliche Treffer zu finden sein müssen.
Das lässt sich jeweils dadurch beheben, dass man zunächst zum letzten Datensatz springt, das kann aber keine dauerhafte Lösung sein.
Lässt sich irgendwo speichern oder konfigurieren, wieviele Datensätze am Anfang geladen werden sollen? Nämlich gleich alle?
Vielen Dank.
Datensatz 1 von 40 *
Moderator: Moderatoren
Re: Datensatz 1 von 40 *
Hallo und willkommen im Forum,
Die Lösung ist in der Diskussion Tabelle vollständig einlesen entstanden. Bei gut 200 Datensätzen passt dieses Verfahren; ich könnte mir vorstellen, dass Base bei mehr als 1000 Datensätzen unangenehm langsam ist. Auch deshalb schlage ich ein anderes Verfahren (s.o.) vor. Jürgen
Das ist beim Arbeiten mit Datenbanken in der Regel ein sinnvolles Verfahren: Ein Mensch kann selten mehr als 20 bis 40 Datensätze gleichzeitig überblicken. Es ist deshalb angemessen (und in der Regel viel schneller), wenn immer nur ein kleiner Teil des Datenbestandes gelesen wird.krischanski hat geschrieben:bei einem Standard-Formular über eine Datenbank werden beim Start offenbar nur die ersten 40 Datensätze geladen,
Es ist sinnvoller, die Suchverfahren anders aufzubauen. Setze in der Definition des Formulars einen Filter (z.B. alle Adressen, deren Name mit 'Z' beginnt), sodass alle Datensätze dazu sofort gelesen und angezeigt werden; zur konkreten Suche wird der Filter jeweils neu gesetzt.aber vor allem auch in den Suchergebnissen: auch da werden nur die ersten 40 Datensätze durchsucht und ständig ein leeres Ergebnis geliefert, obwohl in den reichlich tausend Datensätzen etliche Treffer zu finden sein müssen.
Es ist möglich; ich habe es so gelöst:Lässt sich irgendwo speichern oder konfigurieren, wieviele Datensätze am Anfang geladen werden sollen? Nämlich gleich alle?
Code: Alles auswählen
Sub SelectLkzShowAll
rem Aufruf durch: Ereignis "Beim Laden"
rem ** alle Datensätze sofort einlesen
rem ** nach dem Einlesen Button freigeben
rem als Zeichen dafür, dass das Einlesen erledigt ist
rem **************************************
if not thiscomponent.currentcontroller.isFormDesignMode then
oForm = thisComponent.drawpage.forms.MainForm
oForm.fetchSize = 240 ' das ist der entscheidende Punkt
btn = oForm.getByName("btnOK")
btn.Label = "Land übernehmen"
btn.Enabled = true
end if
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Datensatz 1 von 40 *
Hallo krischanski,
- Wenn das Suchverhalten so ist, wie Du beschreibst, dann ist das ein Bug. Ich habe OpenOffice nur in der 3.3; ansonsten diverse LO-Versionen. Alle liefern bei einer Tabelle von über 8000 Datensätzen direkt nach dem Öffnen der Tabelle über die Suche den Datensatz Nr. 202 → die Suchfunktion geht also ohne weiteres durch und bleibt nicht am Beginn hängen.
Gruß
Robert
- Datensatz 1 von 40*: Das Programm hält diesen Bereiche im Cache vor. Bei LO in den neueren Versionen geht das bis knapp unter 100.krischanski hat geschrieben: ich habe soeben auf OpenOffice 3.4.1 umgestellt und nun ein kleines, aber auf Dauer ärgerliches Problem: bei einem Standard-Formular über eine Datenbank werden beim Start offenbar nur die ersten 40 Datensätze geladen, was sich in der Formular-Navigations-Leiste als Anzeige »Datensatz 1 von 40 *« zeigt, aber vor allem auch in den Suchergebnissen: auch da werden nur die ersten 40 Datensätze durchsucht und ständig ein leeres Ergebnis geliefert, obwohl in den reichlich tausend Datensätzen etliche Treffer zu finden sein müssen.
- Wenn das Suchverhalten so ist, wie Du beschreibst, dann ist das ein Bug. Ich habe OpenOffice nur in der 3.3; ansonsten diverse LO-Versionen. Alle liefern bei einer Tabelle von über 8000 Datensätzen direkt nach dem Öffnen der Tabelle über die Suche den Datensatz Nr. 202 → die Suchfunktion geht also ohne weiteres durch und bleibt nicht am Beginn hängen.
Gruß
Robert
-
- Beiträge: 3
- Registriert: Mo, 12.11.2012 13:49
Re: Datensatz 1 von 40 *
In der Tat, bei LibreOffice passiert das nicht: dort geht die Suche über die 40 hinaus und findet alle »späteren« Treffer.
Da muss ich bei OpenOffice wohl auf ein Update warten …
Da muss ich bei OpenOffice wohl auf ein Update warten …
-
- Beiträge: 3
- Registriert: Mo, 12.11.2012 13:49
Re: Datensatz 1 von 40 *
Da hast Du natürlich recht. War auch gar nicht so schwer zu finden: den Bug gibt es schon unter der Nummer 120785.
Re: Datensatz 1 von 40 *
auch ich habe das Problem gehabt. Eine einfache Lösung: ich habe einer Schaltfläche das folgende Makro zugeordnet.
Wenn ich die Schaltfläche anklicke geht OOo Base auf den letzten Datensatz, damit hat er alle geladen und gleichzeitig öffnet sich das Suchfenster
sub suchen
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:LastRecord", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:RecSearch", "", 0, Array())
end sub
Wenn ich die Schaltfläche anklicke geht OOo Base auf den letzten Datensatz, damit hat er alle geladen und gleichzeitig öffnet sich das Suchfenster
sub suchen
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:LastRecord", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:RecSearch", "", 0, Array())
end sub