Entwickler-Ecke
Datenbanken - DBGrid - Gitterindex außerhalb des zulässigen Bereichs
tortom1000 - Mo 10.10.05 09:39
Titel: DBGrid - Gitterindex außerhalb des zulässigen Bereichs
Hallo,
nachdem sich meine Interbase 6 Datenbank so allmählich mit Testdaten gefüllt hat, bekomme ich durch folgendes Handling einen Fehler durch das DBGrid - "Gitterindex außerhalb des zulässigen Bereichs".
Der Fehler tritt nur auf, wenn im DBGrid mehr Daten angezeigt werden sollen, als
ohne Scrollbars angezeigt werden kann, also mehr, als in den sichtbaren Bereich
paßt.
Der Fehler tritt nur auf, wenn man im DBGrid mit der Ende-Taste oder per Delphi mittels "DataSet1.Last" direkt an das Ende des DBGrid springt.
Der Fehler tritt NICHT auf, wenn man mit den Cursor-Tasten oder Bild-AB-Tasten oder
mittels Mausrad an das Ende des DBGrid springt.
Ich kann mir da keinen Reim draus machen...
Kennt jemand das Problem?
MfG
Tom
Moderiert von
Gausi: Zweites Topic mit dem selben Inhalt mit diesem hier zusammengeführt.
jasocul - Mo 10.10.05 12:13
Titel: Re: DBGrid - Gitterindex außerhalb des zulässigen Bereichs
tortom1000 hat folgendes geschrieben: |
Der Fehler tritt nur auf, wenn man im DBGrid mit der Ende-Taste oder per Delphi mittels "DataSet1.Last" direkt an das Ende des DBGrid springt. |
Das stimmt so nicht.
Die Ende-Taste springt nur ans Ende der Liste, wenn RowSelect gesetzt ist. Falls nicht, gehts nur zum letzten Feld im aktuellen Datensatz.
Dein Fehler klingt nach einem Problem mit persistenten Feldern. Da scheint irgendwas durcheinander zu kommen. Anders kann ich mir das im Moment nicht erklären.
tortom1000 - Mo 10.10.05 18:25
Hi,
du hast recht. Die Ende-Taste springt nur ans Ende der Liste, wenn RowSelect gesetzt ist, was bei mir jedoch der Fall ist.
Was sind persistente Felder?
Gruß
Tom
jasocul - Mo 10.10.05 19:34
Persistente Felder (Kurzversion):
Vermutlich benutzt du eine TQuery-Komponente.
Wenn du da einen Doppelklick drauf machst, bekommst du ein kleines Fenster.
Dort die rechte Maustaste -> Felder hinzufügen. Dadurch werden die Felder persistent.
Das dürfte aber nicht dein Problem sein.
Teste mal Strg-Ende.
Vermutung:
Beim Lesen aus der Datenbank-Tabelle wird ein Teil der Daten gepuffert und der größte Teil auf dem Server bereit gestellt, aber noch nicht an den Client gesendet. D.h.: Dein DBGrid zählt evtl. die Anzahl der Datensätze falsch (im Unterschied zum TQuery). Ich kenne das Phänomen von Oracle. Da gab es früher das Problem, dass die RecordCount-Eigenschaft immer "0" Datensätze hatte, obwohl welche zu sehen waren. So kann es passieren, dass du außerhalb des Listenindex des DBGrids gerätst. Das ist aber nur Spekulation. Möglicherweise greifst du auch noch anders innerhalb des Programms auf das DBGrid zu oder hast noch ganz andere Konstruktionen dadrin, die ich jetzt nicht nachvollziehen kann.
Schonmal debuggt?
tortom1000 - Mo 10.10.05 20:50
Hallo Jasocul,
dein Tip war Gold wert. Ich hatte im DBGRID die persistenten Felder nicht hinzugefügt. Doppelklick auf das Grid usw...
Nachdem ich das nachgeholt habe, scheint alles OK zu sein.
Vielen Dank für deine Hilfe.
Tom
tortom1000 - Mi 12.10.05 10:55
Hallo nochmal,
leider war es doch nicht die Geschichte mit den persistenten Feldern.
Ich habe nun folgendes getan, was funktioniert. Leider weiß ich nicht
so recht , warum?
Ich habe vor jedem DataSet1.Last ein DataSet1.Next eingefügt, das der Fehler
ja nicht auftrat, wenn ich vor dem Springen ans Tabellenende die Cursor-Runter-Taste
drückte.
DataSet1.Next;
DataSet1.Last;
Danach war dann alles wunschgemäß OK.
Vieleicht kann mir ja jemand noch erläutern, warum der Fehler durch das Next
beeinflußt wurde. Logisch scheint mir das nicht zu sein.
Beste Grüße
Tom
jasocul - Mi 12.10.05 11:04
Ich war auch ein wenig irritiert, dass das alles gewesen sein sollte.
Eine Erklärung für das merkwürdige Verhalten habe ich allerdings nicht. Mit was für Komponenten greifst du denn auf die Datenbank zu?
cartridge - Mi 12.10.05 12:26
Aus technischen Gründen kann ich die Sache leider nicht so nachvollziehen.
Irgendwie habe ich aber das Gefühl, dass Du mit einer unidirektionalen DB arbeitest.
Achte diesbezüglich mal auf die Properties!
Bei unidirektionalen DB gibt es nämlich Probleme mit den "Rändern" von DBs!
Gruß
Ingo
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!