DbGrid sortiert falsch nach OnTitleClick
-
- 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
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
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
-
- 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
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.
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
-
- 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
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
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
-
- 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
Guten Morgen,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
danke für den Tipp. Hat leider nichts gebracht.
Gruß Bernd
-
- 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
@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
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
-
- 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
@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.
Steht standardmäßig auf 10.
Was die leeren Felder angeht, ist allerdings pipers Lösung wohl die wahrscheinlichere.
Johannes
-
- 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
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.:
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;