Base-Datenbank, kein schreibbares Resultset

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Base-Datenbank, kein schreibbares Resultset

Re: Base-Datenbank, kein schreibbares Resultset

von Stephan » Di, 29.04.2014 07:47

Hallo DPunch,

danke für die Antwort die ich erst jetzt sehe, weil mich jemand Anderes darauf hinwies. Ich muss mir das ansehen.


Gruß
Stephan

Re: Base-Datenbank, kein schreibbares Resultset

von DPunch » Sa, 26.04.2014 20:04

Servus

Siehe Issue 77865 ResultsetType and ResultSetConcurrency do not change
The problem is that HSQL in version 1.8.* does not support updatable result sets (IIRC, 1.9.* will support them). The result set type and concurrency are silently downgraded, which is allowed by both the JDBC and the SDBC API (though we in fact encountered drivers in the past which did no silent downgrading, but instead raised an exception).
Wenn man, wie dort vorgeschlagen, auf ein com.sun.star.sdb.RowSet zurückgreift, kann man auch direkt darüber Änderungen durchführen, so zumindest meine Erfahrungen.

Base-Datenbank, kein schreibbares Resultset

von Stephan » Mo, 21.04.2014 13:48

Hallo,

ich habe eine Datenbankdatei (*.odb) mit integrierter HSQLDB und nutze OOo 3.3.0.

Ich führe folgenden Code aus:

Code: Alles auswählen

Sub aufruf()
DB-Bearbeiten("Firmentabelle", "Firmenname")
End Sub

Sub DB-Bearbeiten(datenbank, feldbezeichner)

oDaten = createUnoService( "com.sun.star.sdb.DatabaseContext" )
DbName = ThisDatabaseDocument.DataSource.Name
oDatenquelle = oDaten.getByName(DbName)
oVerbindung = oDatenquelle.getConnection( "", "" )
oStatement = oVerbindung.createStatement()

oStatement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE
oStatement.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE

oResultSet = oStatement.executeQuery("SELECT * FROM " & datenbank & " ORDER BY " & feldbezeichner & " ASC" )

Msgbox oResultSet.ResultSetConcurrency

oResultSet.first()
Do While Not oResultSet.isAfterLast
  oResultSet.deleteRow()
  oResultSet.next
Loop

End Sub

Die Rückgabe in der Messagebox ist dabei 1007, womit klar ist das das Resultset nur read only ist, weshalb auch beim Versuch ein Satz des Resultsets per:

Code: Alles auswählen

oResultSet.deleteRow()
scheitert und die Fehlermeldung:
DB-Makro Meldung.gif
DB-Makro Meldung.gif (9.89 KiB) 1254 mal betrachtet
erscheint.

Was ist das Problem?

Hinweis:
das adäquate Makro funktioniert mit einer Datenbank die auf eine DBase-Datenquelle verknüpft ist (ich benutze hierfür testweise die Bibliographie-Datenbank von OO) fehlerfrei.




Gruß
Stephan

Nach oben