Aloha
MrSir hat geschrieben:Dieses RowSet wurde soeben in dem Kontrollfeld erzeugt und ist somit neu, also RowSet.IsNew ist true.
Nicht das RowSet ist neu, sondern vermutlich wenn überhaupt die aktuelle Row. isNew wertet aus, ob der
aktuelle Datensatz im RowSet neu ist.
MrSir hat geschrieben:Aber wenn ich vorher den Wert irgendeiner Spalte verändere mit RowSet.updateInt(2, 4) und dannach inserRow aufrufe funktioniert das Wunderbar.
Natürlich.
Wenn der Cursor sich auf InsertRow befindet, führt ein .updateRow zu einer Fehlermeldung, eine nicht existente Row lässt sich nicht updaten.
Analog dazu wird das Aufrufen von .insertRow, wenn der Cursor auf einen schon vorhandenen Datensatz zeigt, die gleiche Fehlermeldung erzeugen.
Wenn Du Dir Deinen Code anschaust:
Code: Alles auswählen
if RowSet.isNew THEN '<--------- aktueller Datensatz ist nicht neu
RowSet.updateInt(nIndexSummeT, 0) '<----------- sondern erst ab hier, zu spät
RowSet.insertRow()
ELSE '<------ wird folglich aufgerufen
RowSet.updateRow '<----- nicht existenter Datensatz lässt sich nicht updaten, Fehler in Funktionsfolge
ENDIF
Es wird *immer* .updateRow aufgerufen, wenn der Cursor nicht auf InsertRow steht ODER keine Veränderungen an einem gebundenen Datenfeld des neuen Datensatzes erfolgt ist.
Bei Dir erfolgt die Manupulation erst nach der entscheidenden Abfrage, updateRow führt zu der Fehlermeldung.
Womit auch dieses
MrSir hat geschrieben:Aber wenn ich vorher den Wert irgendeiner Spalte verändere mit RowSet.updateInt(2, 4) und dannach inserRow aufrufe funktioniert das Wunderbar.
erklärt wäre, erfolgt die Manipulation
vor der IF-ELSE-Kontrollstruktur, kommst Du ja auch in die gewünschte Verzweigung.