Autor Beitrag
tortom1000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: Mo 10.10.05 09:39 
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 user profile iconGausi: Zweites Topic mit dem selben Inhalt mit diesem hier zusammengeführt.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mo 10.10.05 12:13 
user profile icontortom1000 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 209

Win XP
D4 Prof,D6 Prof
BeitragVerfasst: 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