DbGrid sortiert falsch nach OnTitleClick

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Pegasus0211
Beiträge: 28
Registriert: Mo 18. Sep 2006, 07:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Scheeßel

DbGrid sortiert falsch nach OnTitleClick

Beitrag von Pegasus0211 »

Guten Tag,

in Delphi 2009 haben wir ein funktionierendes Programm geschrieben, welches uns den Inhalt einer Postgres-Datenbank mittels einer VirtualTreeView-Komponente und eines editier- und sortierbaren DBGrids anzeigt.

Bei der Übernahme zu Lazarus treten folgende Probleme auf - Zugriff erfolgt über die Zeos-Komponente:

Bei der unsortierten Darstellung des Grids ist noch alles ok; die erste Spalte im Grid zeigt den automatisch hochzählenden
Indexkey der Tabelle; auch alle anderen Daten sind korrekt dargestellt, lassen sich korrekt editieren.

Nach einem Sortierclick auf den Spaltenkopf des Grid werden die Sortierfolgen zerstört; es erscheint z.B. der
Inhalt 1 - 2 - 3 , dann drei leere Felder, dann geht es mit 4 - 5 - weiter.
Ein erneuter Klick auf den Spaltenkopf sortiert rückwärts mit ähnlichem Erscheinungsbild.

In der Indexspalte wird beim vertikalen Bewegen im Grid, ungeachtet vom derzeitigen Inhalt, der Folgewert eingetragen.
Befindet sich in einer Zelle eine 5, so wird automatisch im nächsten Feld beim Scrollen eine 6 eingetragen; obwohl dort vorher eine 15 war.

Es dürfte eigentlich kein UTF8-Problem sein, da auch Delphi 2009 mit Unicodestrings arbeitet und dort arbeitet das Programm korrekt.

Über Tipps wäre ich Euch sehr dankbar.

Grüße aus der Heide

Bernd

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: DbGrid sortiert falsch nach OnTitleClick

Beitrag von monta »

Liegt das ggf. an PacketRecords der Query?

Da ja beim scrollen unter umständen zusätzlich weitere Datensätze geladen werden, kann es eventuell sein, das die dann halt einsortiert werden und das ganze zerstören. Hab ich aber noch nie getestet. Vielleicht setzt du PacketRecords der Query mal testweise auf 0.
Johannes

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Re: DbGrid sortiert falsch nach OnTitleClick

Beitrag von piper62 »

Leere Felder im DBGrid wecken bei mir immer den Verdacht eines Codepage-Problems.

Ich würde mal versuchen die codepage in den Properties der ZConnection explizit anzugeben.
Entweder direkt im Objektinspektor in der IDE oder zur Laufzeit:
Bsp.:
db_interface.ZConnection_main.Disconnect;
db_interface.ZConnection_main.Properties.Clear;
db_interface.ZConnection_main.Properties.Add('codepage=utf8');
db_interface.ZConnection_main.Connect;
ZQuery1.Open;

Gruss,
Piper

Pegasus0211
Beiträge: 28
Registriert: Mo 18. Sep 2006, 07:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Scheeßel

Re: DbGrid sortiert falsch nach OnTitleClick

Beitrag von Pegasus0211 »

piper62 hat geschrieben:Leere Felder im DBGrid wecken bei mir immer den Verdacht eines Codepage-Problems.

Ich würde mal versuchen die codepage in den Properties der ZConnection explizit anzugeben.
Entweder direkt im Objektinspektor in der IDE oder zur Laufzeit:
Bsp.:
db_interface.ZConnection_main.Disconnect;
db_interface.ZConnection_main.Properties.Clear;
db_interface.ZConnection_main.Properties.Add('codepage=utf8');
db_interface.ZConnection_main.Connect;
ZQuery1.Open;

Gruss,
Piper
Guten Morgen,

danke für den Tipp. Hat leider nichts gebracht.

Gruß Bernd

Pegasus0211
Beiträge: 28
Registriert: Mo 18. Sep 2006, 07:48
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Scheeßel

Re: DbGrid sortiert falsch nach OnTitleClick

Beitrag von Pegasus0211 »

@Monta

Guten Morgen,

habe versucht, Deinem Rat zu folgen - danke dafür.
Leider hat meine Query nicht die Property PackedRecords.

Oder hab ich Dich falsch verstanden?

Gruß Bernd

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: DbGrid sortiert falsch nach OnTitleClick

Beitrag von monta »

@Pegasus, hab gerade nachgeschaut...im OI ist sie bei Zeos nicht. Aber über den Code kannst sie setzen, also ZQuery.PacketRecords.
Steht standardmäßig auf 10.

Was die leeren Felder angeht, ist allerdings pipers Lösung wohl die wahrscheinlichere.
Johannes

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: DbGrid sortiert falsch nach OnTitleClick

Beitrag von KOBOLD Messring GmbH »

Leere Felder riechen verdächtig nach Sonderzeichen, die irgendwo im String enthalten sind, und völlig falsch interpretiert werden. Habe festgestellt, dass auch die Codepage-Einstellung der DB-Komponente oft nichts nützt. Leider werden dann oftmals (je nach in der DB verwendeter Codepage, Betriebssystem und Laz/Zeos/FPC-Version) die entsprechenden Zeilen einfach ausgeblendet, bzw. als Leerstring dargestellt.
Hier hilft im OnGetText ein ConvertEncoding aus der Unit LConvEncoding, z.B.:

Code: Alles auswählen

procedure TForm1.SQLQuery1SachNrGetText(Sender: TField; var aText: string; DisplayText: Boolean);
begin
  aText := ConvertEncoding ((Sender AS TStringField).AsString, 'iso88591', 'utf8');
end;

Antworten