Datensatz 1 von 40 *

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

krischanski
Beiträge: 3
Registriert: Mo, 12.11.2012 13:49

Datensatz 1 von 40 *

Beitrag von krischanski »

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.
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Datensatz 1 von 40 *

Beitrag von juetho »

Hallo und willkommen im Forum,
krischanski hat geschrieben:bei einem Standard-Formular über eine Datenbank werden beim Start offenbar nur die ersten 40 Datensätze geladen,
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.
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 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.
Lässt sich irgendwo speichern oder konfigurieren, wieviele Datensätze am Anfang geladen werden sollen? Nämlich gleich alle?
Es ist möglich; ich habe es so gelöst:

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
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
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Datensatz 1 von 40 *

Beitrag von RobertG »

Hallo krischanski,
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.
- 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.
- 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
krischanski
Beiträge: 3
Registriert: Mo, 12.11.2012 13:49

Re: Datensatz 1 von 40 *

Beitrag von krischanski »

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 …
krischanski
Beiträge: 3
Registriert: Mo, 12.11.2012 13:49

Re: Datensatz 1 von 40 *

Beitrag von krischanski »

Da hast Du natürlich recht. War auch gar nicht so schwer zu finden: den Bug gibt es schon unter der Nummer 120785.
Ronald
Beiträge: 6
Registriert: Sa, 31.01.2015 16:45

Re: Datensatz 1 von 40 *

Beitrag von Ronald »

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
Antworten