Problem bei Refresh von TTable
-
Guten Tag,
Ich habe das Problem, das Zeilen einer Tabelle nach einem Refresh falsch angezeigt werden.
Ich verwende ein TTable Objekt, welches auf einer mit ODBC angesteuerten MySQL Datenbank basiert. Als Compiler dient C++Builder 5.
Ich lasse die Daten über die Eigenschaft IndexFieldNames nach einem nicht eindeutigem Feld (z.B. A) sortieren. Löse ich einen Refresh der Tabelle aus, ändern sich die Daten abhängig von der aktuellen Cursorposition und zwar nach folgendem Schema:Feld A Feld B A 1 A 2 A 3 B 4 B 5 B 6 C 7 C 8 C 9
Nach dem Refresh wird jeweils bei allen Zeilen oberhalb des Cursors in der LETZTEN Zeile einer Gruppe des Feldes A der gesamte Datensatz des ERSTEN Datensatzes der Gruppe Feld A eingetragen. Dieser Eintrag ist nur am Bildschirm zu sehen, in der DB ändert sich nichts. Auch bei näherer Betrachtung mit dem SQL Monitor scheinen von der DB die korrekten Daten gesendet zu werden.
Steht also z.B. der Cursor auf der Zeile "B 5", ändert sich der Eintrag zu:Feld A Feld B A 1 A 2 A ->1<- B 4 B 5 B 6 C 7 C 8 C 9
Steht der Cursor auf "C 9", würde es so aussehen:
Feld A Feld B A 1 A 2 A ->1<- B 4 B 5 B ->4<- C 7 C 8 C 9
Ich habe schon versucht einen echten Index auf DB Ebene zu erzeugen und diesen über die Eigenschaft IndexName zu verwenden, mit dem gleichen fehlerhaften Ergebnis. Auch die Tabelle mittels "Active" beim Refresh zu schließen, erneut zu öffnen und die betreffende Zeile wieder aufzusuchen brachte keine Abhilfe.
Wie ich hörte, würde der Parameter "ROWSETSIZE" in der BDE Einfluß auf dieses Verhalten haben doch auch eine Änderung von 20 auf 1 brachte nicht den gewünschten Effekt.Eine Lösung wäre wahrscheinlich die Anwendung auf TQuery statt TTable umzustellen, doch dies würde Änderungen an vielen Stellen im Programm hervorrufen.
Über Hilfe bei diesem Problem wäre ich hoch erfreut,
Christian Rück
Edit:
Für Textformatierungen bitte die Code-Tags benutzen. Danke![ Dieser Beitrag wurde am 08.04.2003 um 15:41 Uhr von Jansen editiert. ]
-
Ich war mitlerweile in der Lage das selbe Verhalten auf einer Oracle Datenbank zu testen, mit dem gleichen Fehler.
Desweiteren habe ich testweise ein möglichst kurzes Programm geschrieben, um den Fehler zu erzeugen. Es reicht, ein Table Objekt, DataSource, DBNavigator und ein DBGrid entsprechend zu verknüpfen und in der Table einen beliebigen, nicht eindeutigen Index bei IndexFieldNames auszuwählen.Der Fehler sollte also entweder in der BDE oder im C++ Builder liegen.