Seltsames verhalten von RowSet

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

MrSir
**
Beiträge: 35
Registriert: Fr, 03.06.2011 18:28

Seltsames verhalten von RowSet

Beitrag von MrSir »

Hallo,
ich habe ein RowSet eines Tabellen - Konrtrollfeldes.
Dieses RowSet wurde soeben in dem Kontrollfeld erzeugt und ist somit neu, also RowSet.IsNew ist true.
Da RowSet neu ist lässt es sich doch per RowSet.insertRow in die Datenbank eintragen, leider bekomme ich einen Fehler.

Fehler:
Bild

Aber wenn ich vorher den Wert irgendeiner Spalte verändere mit RowSet.updateInt(2, 4) und dannach inserRow aufrufe funktioniert das Wunderbar.

Der Code:

Code: Alles auswählen

 	if RowSet.isNew THEN
 		RowSet.updateInt(nIndexSummeT, 0)
		RowSet.insertRow()
	ELSE
		RowSet.updateRow
	ENDIF
Weiß jemand wieso das so ist?
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Seltsames verhalten von RowSet

Beitrag von DPunch »

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.
MrSir
**
Beiträge: 35
Registriert: Fr, 03.06.2011 18:28

Re: Seltsames verhalten von RowSet

Beitrag von MrSir »

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.
Das ist gerade das seltsame!!, obwohl sich RowSet auf insertRow befindet lässt sich mittels insertRow der Datensatz der RowSet in die Datenbank nicht schreiben, nach Doku sollte es aber.
Der Datensatz lässt sich *nur* mit der Methode rowSet.insertRow in die Datenbank schreiben, wenn vorher updateInt aufgerufen wurde - steht doch in meiner Fehlerbeschreibung.
Der Code den ich gepostet hatte war der funktionierende!

Den Fehler hatte ich aber nacher gefunden.
Es gab viele Fehler die unerklärlich waren, nichts funktionierte wie es in der Doku beschrieben wurde.
Nach einem Update der JRE war alles wieder so wie es sein sollte, alle Fehler waren verschwunden.
Hatte verdammt viel Zeit verloren, verfluchte auch OpenOffice.

OpenOffice sollte eine Überprüfung der installierten JRE bei der Installation machen, damit nicht noch jemand die Nerven verliert!

Aber ich danke dir dennoch für deine Hilfe :D
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Seltsames verhalten von RowSet

Beitrag von DPunch »

Aloha

Abgesehen davon, dass ich Deinen Ursprungspost offensichtlich falsch verstanden hatte:
MrSir hat geschrieben:Das ist gerade das seltsame!!, obwohl sich RowSet auf insertRow befindet lässt sich mittels insertRow der Datensatz der RowSet in die Datenbank nicht schreiben, nach Doku sollte es aber.
Der Datensatz lässt sich *nur* mit der Methode rowSet.insertRow in die Datenbank schreiben, wenn vorher updateInt aufgerufen wurde
Da ist nichts seltsames dran.
Du musst erst Änderungen an mindestens einem gebundenen Feld (eine der zahlreichen Methode dafür ist z.B. updateInt) vornehmen, bevor Du .InsertRow aufrufen kannst.
Unabhängig von Deiner JRE.
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Seltsames verhalten von RowSet

Beitrag von DPunch »

Aloha

Welche Fehler vor und nach Update der JRE bei Dir bestehen oder nicht bestehen kann ich natürlich nicht beurteilen. Habe ich auch nicht versucht.
Ich wollte lediglich darauf hinweisen, dass Du etwas "seltsam" genannt hast, was an sich absolut logisch und nachvollziehbar ist und nichts mit der JRE zu tun hat (nämlich, dass Du erst mindestens ein gebundenes Feld via z.B. updateInt, updateString, updateDouble, wasauchimmer beschreiben musst, bevor Du ein INSERT absetzen kannst).
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Seltsames verhalten von RowSet

Beitrag von DPunch »

Aloha

Vermutlich entspringt der Fehler falscher Verwendung, aber schwer zu sagen, so ohne zu wissen, was Du wo wie machst.
Antworten