Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Durcheinander im TDBGrid bei dynamischem Cursor (https://www.delphipraxis.net/81978-durcheinander-im-tdbgrid-bei-dynamischem-cursor.html)

bisenegger 6. Dez 2006 07:29

Datenbank: Pervasive PSQL • Version: 9.5 • Zugriff über: PDAC

Durcheinander im TDBGrid bei dynamischem Cursor
 
Hoi zusammen

Wenn ich mit PDAC vom Pervasive mit Delphi auf meine Datenbank zugreife habe ich mit dynamischem Cursor ein durcheinander von Datensätzen im TDBGrid.
Sobald ich den vert. Scrollbalken schiebe und die Datenmenge kleiner ist als das Grid sind die meisten Datensätze doppelt vorhanden.

Wenn im TPvQuery (analog TQuery) Cursor auf "Static" steht kommt dieses Problem nicht vor.

Hat dieses Problem nun allgemein mit der Pervasive Komponente TPvQuery oder mit Delphi (TDbGrid) selbst zu tun und weiss evtl. jemand eine Lösung dazu.

Der dynamische Cursor überzeugt mich, da dann nicht zuerst das ganze Query eingelesen wird, sondern nur was "man" im DBGrid sehen muss.
Vorallem von Vorteil wenn über langsame ADSL-Upload-Kanäle oder GPRS/EDGE/UMTS auf die Datenbank zugegriffen wird.

Bernhard Geyer 6. Dez 2006 07:41

Re: Durcheinander im TDBGrid bei dynamischem Cursor
 
Also solch ein Verhalten mit DBGrid und anderen Datenbanken bei verwendung von serverseitigen Curser sind mir nicht bekannt.

Kannst Du noch deine Delphi-Version angeben

Kannst du noch folgendes Testen (per Code):

1, Abfrage von Query.RecordCount nach öffnen der Query.
2, Durchlauf der Query mittels Next-Methode bis EOF = True mit Trace-Ausgaben der Datensätze
3, Abfrage von RecordCount
4, Zurücklaufen mittles Prior-Methode bis BOF = True
5, Abfrage von RecordCount

bisenegger 6. Dez 2006 17:31

Q
 
Zitat:

Zitat von Bernhard Geyer
1, Abfrage von Query.RecordCount nach öffnen der Query.
2, Durchlauf der Query mittels Next-Methode bis EOF = True mit Trace-Ausgaben der Datensätze
3, Abfrage von RecordCount
4, Zurücklaufen mittles Prior-Methode bis BOF = True
5, Abfrage von RecordCount

Query.RecordCount nach Oeffnen = -1
und bleibt mit diversen Aktion immer gleich.

anderer Test:
Durchlauf mit Button mit Aktion "Query.Next" und angschlossenem DBGrid,
Resultat: alles i.O.

Probleme entstehen wenn Resultat der Query kleiner als DBGrid ist und unten leerzeilen vorhanden sind. Nach dem Verschieben des vert. Scrollbalken sind die Leerzeilen mit doppelten "Falsch-Einträgen" besetzt.

Delphi-Version:
Turbo Delphi Prof. - Win32
eine vernünftige Variante nach meinem Delphi4. Zwischenversionen hatte ich nicht und Delphi 2005/2006 sind nicht zahlbar.
Turbo Delphi hat ca. den Stand von Delphi2005 (einfach aber nur die Win32-Version).

Bernhard Geyer 6. Dez 2006 20:03

Re: Q
 
Zitat:

Zitat von bisenegger
Query.RecordCount nach Oeffnen = -1
und bleibt mit diversen Aktion immer gleich.

AFAIK sollte es bei erreichen von EOF einen gültigen Wert haben. Probiers mal mit einer BDE-Quelle aus. Das könnte u.U. der Fehler der Komponente sein.
Zitat:

Zitat von bisenegger
Turbo Delphi hat ca. den Stand von Delphi2005 (einfach aber nur die Win32-Version).

Nein. Turbo Delphi ist ein Delphi 2006, jedoch nur mit dem Win32-Teil der VCL mit Pascal.

bisenegger 6. Dez 2006 20:54

Re: Q
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von bisenegger
Turbo Delphi hat ca. den Stand von Delphi2005 (einfach aber nur die Win32-Version).

Nein. Turbo Delphi ist ein Delphi 2006, jedoch nur mit dem Win32-Teil der VCL mit Pascal.

Nach dem Senden habe ich den Irrtum auch bemerkt, aber der nächste Jahreswechsel steht schon wieder an ;-)

Nun zum Thema:
Bei RequestLive=True erhalte ich einen gültigen Query.RecordCount und das DBGrid lässt keine Wünsche offen.
Viola.

RequestLive=True verursacht aber mehr Datenvolumen, ist das richtig?

Meinerseits stelle ich auf RequestLive=True um - aber warum das Eine geht und das Andere nicht ist ein Rätsel?

Bernhard Geyer 6. Dez 2006 21:05

Re: Q
 
Zitat:

Zitat von bisenegger
Nun zum Thema:
Bei RequestLive=True erhalte ich einen gültigen Query.RecordCount und das DBGrid lässt keine Wünsche offen.
Viola.

RequestLive=True verursacht aber mehr Datenvolumen, ist das richtig?

Meinerseits stelle ich auf RequestLive=True um - aber warum das Eine geht und das Andere nicht ist ein Rätsel?

Das wird vermutlich der RecordCount sein. Solange der immer nur -1 liefert kommt das DBGrid durcheinander. Das dies hier mit RequestLive zusammenhängt ist wohl Implementierungslösung der Kompo. Ob (sehr viel) mehr Traffic entsteht müsste man Tracen, da jede DB sich anders verhält.

bisenegger 14. Dez 2006 07:36

Re: Durcheinander im TDBGrid bei dynamischem Cursor
 
Abschliessend folgende Bemerkungen:

Resultat nach diversen Tests:

- mit den BDE-Komponente(n) gibt es keine Probleme im TDBGrid (DBGrid).

- TPvSQLQuery (PvSQLQuery) macht grosse Probleme mit dynamischem Cursor (ecDynamic,ctDynamic).
Mit RequestLive=True sind die Vorteile das dynamischen Cursors dahnin.

Wenn man im DBGrid am Ende "ankommt", die Cursor-Taste nach oben - und dann wieder nach unten "drückt" sind Datensätze "doppelt" (gemixt).

Ganz klar ein Bug in den Pervasive-Komponenten PDAC.
Pervasive schreibt seit Version 8.x dass im PDAC der dynamische Cursor der "neue Standard" sei.
Warum ist den ctStatic als Standard gesetzt????

PDAC 9.50.023.000 Win32
Client 9.50.077.002 Win32
Server 9.50.077.003 Netware
Turbo Delphi Prof.

Pervasive schreibt im direkten Vergleich zu Titan (Regatta), dass Ihre Software dauernd gewartet wird. Aber scheinbar sind die "Dynamischen Probleme schon seit längerem bekannt" :-(
Nach dem Umstieg von Titan zu PDAC ...........


Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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