AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FIBPlus 6.95 poKeepSorting fehlerhaft?
Thema durchsuchen
Ansicht
Themen-Optionen

FIBPlus 6.95 poKeepSorting fehlerhaft?

Ein Thema von MrSpock · begonnen am 15. Jul 2012 · letzter Beitrag vom 17. Jul 2012
Antwort Antwort
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#1

FIBPlus 6.95 poKeepSorting fehlerhaft?

  Alt 15. Jul 2012, 16:08
Datenbank: Firebird • Version: 2.5 • Zugriff über: FIBPlus 6.95
Hallo FIBPlus Experten,

ich habe eine FIBPlus Datenmenge, bei der ich die Sortierung ändern kann. Nachdem ich die Sortierung (über ORDER BY) geändert habe (die Sortierung läuft über bis zu 10 Felder), füge ich Daten ein. Ein Datensatz, den ich einfüge, ist ein Zwischensummendatensatz, der sich in den ersten 3 Feldern nicht von dn Vorgängern unterscheiden und im 4. Feld den höchsten Wert für dieses Feld hat. Jetzt erwarte ich, dass dieser Datensatz quasi unter allen Daensätzen mit denselben Inhalten der Felder 1 bis 3 steht. Tut er aber nicht, obwohl ich poKeepSorting auf True gesetzt haben.

Beispiel:

Code:

Datensatz FELD1   FELD2   FELD3  FELD4 
1          1       1       1       1
2          1       1       1       2
3          2       1       1       1
Wenn ich jetzt den Datensatz

1 1 1 255

eintrage, erwarte ich ihn als Datensatz 3.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: FIBPlus 6.95 poKeepSorting fehlerhaft?

  Alt 15. Jul 2012, 20:18
Bei einer Datenmenge (TDataset) kannst du grundsätzlich auf zwei Arten Daten einfügen mit Append oder mit Insert.
Append hängt den neuen Datensatz ans Ende und Insert fügt ihn an Ort und Stelle, also dort wo gerade der aktuelle Record ist, ein.

Die ORDER-BY-Klausel wird dabei nicht beachtet.
Erst wenn man die Datenmenge mit Refresh oder Close gefolgt von Open neu abruft, wird neu sortiert.

Nachtrag:
das beschriebene Verhalten gilt zunächst einmal für alle von TDataset abgeleitete Klassen.
Das TpFIBDataSet geht darüber hinaus indem es zusätzlich eine lokale Sortierung anbietet.
Allerdings müsste das Dataset die ORDER-BY-Klausel parsen, damit es weiss wie (lokal) sortiert werden soll.
Dazu muss wohl die psGetOrderInfo option in PrepareOptions aktiviert werden.

Geändert von sx2008 (15. Jul 2012 um 20:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#3

AW: FIBPlus 6.95 poKeepSorting fehlerhaft?

  Alt 15. Jul 2012, 22:00
Hallo sx2008,

das stimmt mit dem Zusatz, dass mit der Option poKeepSorting ein Datensatz, egal ob er mit Append oder Insert eingefügt wurde, mit Ausführung von POST an die korrekte Position geschoben werden soll. Dabei sollte die ORDER BY Klausel genutzt werden. Ich habe das auch geprüft, in dem ich mir die Sortierfelder ausgeben lassen habe. Dort sind die Felder drin die in der Order By Clause angegeben wurden. Ich meine, dass die GetOderInfo Option gesetzt ist, prüfe das aber nochmal. Mit dem Post wird der Datensatz auch tatsächlich an eine andere Stelle der Datenmenge geschoben, aber leider nicht (ganz) an die richtige

Ich habe mir jetzt so geholfen, dass ich mit die RecNo merke, dann mit CloseOpen die Daten neu einlese und wieder RecNo setze. Das funktioniert und der Datensatz ist dann an der richtigen Stelle. Das ist aber nur ein Workaround. Ich würde schon gern verstehen, warum die Sortierung nicht funktioniert. Ist die Zahl der Sortierfelder vielleicht begrenzt?
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: FIBPlus 6.95 poKeepSorting fehlerhaft?

  Alt 16. Jul 2012, 15:15
Hallo FIBPlus Experten, ich habe eine FIBPlus Datenmenge, bei der ich die Sortierung ändern kann. Nachdem ich die Sortierung (über ORDER BY) geändert habe (die Sortierung läuft über bis zu 10 Felder), füge ich Daten ein. Ein Datensatz, den ich einfüge, ist ein Zwischensummendatensatz, der sich in den ersten 3 Feldern nicht von dn Vorgängern unterscheiden und im 4. Feld den höchsten Wert für dieses Feld hat. Jetzt erwarte ich, dass dieser Datensatz quasi unter allen Daensätzen mit denselben Inhalten der Felder 1 bis 3 steht. Tut er aber nicht, obwohl ich poKeepSorting auf True gesetzt haben.
Ob ich Experte bin, weiß ich nicht, aber ich kann dir aus der FibPlus-Hilfe zitieren:

Set poKeepSorting property to True to put records to the right buffer position on inserting and
editing. Use the psGetOrderInfo option if you want to TpFIBDataSet automatically use the local
sorting order defined in the ORDER BY query statement.

Set psPersistentSorting option to True in order to keep the sorting order on TpFIBDataSet
reopening. Be careful, if you have huge selections this feature will not be effective because at
first the buffer will retrieve all records from the server and only then sort them.


Davon abgesehen sind die älteren FibPlus-Komponenten teilweise doch recht buggy, wie ich z.B. beim Umstellen von ISO8859_1 nach UTF8 feststellen mußte. Sobald ich's mir leisten kann, werden "frische" Firebird-Komponenten angeschafft ...
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#5

AW: FIBPlus 6.95 poKeepSorting fehlerhaft?

  Alt 17. Jul 2012, 21:20
Hallo Perlsau,

die Hilfe habe ich ja auch gelesen und deswegen keepsorting als Option gewählt. Der Fehler ist passiert, als ein Datensatz einsortiert werden sollte, der in den ersten 3 Feldern der Sortierung identisch mit seinen Vorgängern war und sich im vierten Feld unterscheidet. Habe mir mal den Source Code angeschaut und es nicht so aus, dass die Anzahl der Felder ein Problem sein sollte. Ist vielleicht wirklich ein Bug
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz