TTable.Next funktioniert nach editieren nicht mehr

Hallo,

ich habe folgendes, völlig deterministisches Problem:

Ich habe eine Tabelle, in der ich Berechnungen durchführe (dazu durchlaufe ich mit einer Schleife die Tabelle von TTable.First bis TTable.EOF mit Hilfe von TTable.Next).
Das klappt wunderbar. Wenn ich jetzt aber diese Tabelle in einem DBGrid bearbeite und danach meine Berechnungen durchführen möchte, passiert folgendes:

Mit TTable.First erhalte ich den ersten (TTable.RecNo = 1),
mit TTable.Next kommt nun aber TTable.RecNo = 14, dann TTable.RecNo = 21, TTable.RecNo = 28 und dann wieder TTable.RecNo = 21, wieder TTable.RecNo = 28 (Endlosschleife).

Hat jemand dafür eine Erklärung? Und noch besser: eine Lösung?

Vielen Dank,

Michl

Hallo Michl,
das hört sich fast so an, als ob du in deinen Berechnungen einen Sprung/Bookmark zu einem Datensatz machst. Versuch doch mal, vor der Berechnung alle an die Tabelle gebundenen Controls (DisableControls) zu deaktivieren und nach Ende der Berechnung wieder zu aktivieren. Was für eine Datenbank nutzt du? Ich hatte mal ein ähnliches Problem mit einer MSSQL-Tab. Dort war der DB-Cursor auf CLIENT-Seite gesetzt.
Aus meiner Erfahrung heraus ist es eh ungüstig, Tabellen zu durchlaufen um mehr oder wenige Berechnungen durchzuführen. Wenn die Tabelle mehrere tausend Einträge hat, via ODBC an Oracle oder MSSQL oder Access angebunden ist, dauert das elendig lange.
Ich nutze da immer interne Listen (z.b. TStringlist mit Objekten, dynamische Arrays u.ä.) die einmal eingelesen werden, dann berechnet und nur die Änderungen per Update an die Tabelle zurückgeschrieben werden. Geht wesentlich schneller.
Grüße
Mathias

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nützt leider nix - auf TTable.Refresh nicht…
Hi,

leider kein Erfolg…
auch TTable.Refresh ändert nichts daran…

Was mir auffällt:
Schon beim editieren der Tabelle im DBGrid springt der Cursor (wenn ich mit der PfeilAb oder PfeilAuf Taste das Feld verlasse) nicht zum nächsten Datensatz, sondern ein gutes Stück weiter (nach dem Fehler oben schätze ich mal, um sieben weiter)…

Gibt es vielleicht noch eine andere Lösungsmöglichkeit?

Vielen Dank,

Michl