ResultSet ist immer "read only" ?

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

Moderator: Moderatoren

geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

ResultSet ist immer "read only" ?

Beitrag von geimist »

Den ganzen Tag bin ich nun schon auf der Fehlersuche - leider vergebens.

In eine Tabelle möchte ich per Makro einen neuen Datensatz einfügen. Allerdings bekomme ich immer wieder die Fehlermeldung, dass das ResultSet nur "read only" ist.
Habe ich noch einen Fehler in meinem code?
(übrigens: Die Tabelle hat einen Primärschlüssel / ist wohl eine häufige Fehlerquelle)

Code: Alles auswählen

'''''''''''Verbindung zur Zieltabelle:

           DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
           oDatenquelle = DatabaseContext.getByName("DB-Name")
           
           If not oDatenquelle.IsPasswordRequired Then
           		oDatVerb = oDatenquelle.getConnection("","")	'("Benutzername","Passwort")
     	   else
           		oHandler = oDatenquelle.createUnoService("com.sun.star.sdb.InteractionHandler")
           		oDatVerb = oDatenquelle.ConnectWithCompletion(oHandler)
           End If
           
           oStatement = oDatVerb.createStatement()
           'oStatement.setPropertyValue("ResultSetConcurrency", 1008) 'ein weiterer Versuch, die Tabelle updatebar zu machen

           oStatement.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
           oStatement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE			
           
           sSQL = "SELECT ""Zeitpunkt"", ... FROM ""LOGTabelle"" AS ""LOGTabelle"""
           oErgSet = oStatement.executeQuery(sSQL)
           
'''''''''''Daten schreiben:        
           
           oErgSet.moveToInsertRow()				'neue Datensatz erstellen
           oErgSet = UpdateTimeStamp(1, oTimeStamp)
           ...
           oErgSet.insertRow()					'Datensatz speichern

End sub
MsgBox oDatVerb.isReadOnly gibt mir 'false' aus. Demnach müsste die Verbindung updatebar sein, oder?
oDatVerb.setReadOnly(false) gibt die Fehlermeldung: "This call is not allowed when sharing connections."

Mit dem direkten SQL-Befehl habe ich es auch schon versucht, aber da stimmt wohl die Syntax noch nicht (und außerdem würde ich die andere Variante bevorzugen):

Code: Alles auswählen

SQL_Befehl = "UPDATE "+CHR(34)+"LOG_Tabelle"+CHR(34)+" SET "+CHR(34)+"Spaltenname"+CHR(34)+" = '"+VariablenNameZumFüllenDesFeldes+"', "
oStatement.executeUpdate(SQL_Befehl)

Vielen Dank schon mal
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: ResultSet ist immer "read only" ?

Beitrag von geimist »

Also bei der Möglichkeit, die Daten direkt als fertigen SQL-String zuübergeben, bin ich nun schon ein bisschen weiter.
D.h., ich schaffe es einen Wert je Datensatz zu schreiben. Und zwar so:

Code: Alles auswählen

sSQL = "INSERT INTO "+CHR(34)+"LOGTabelle"+CHR(34)+" ("+CHR(34)+"Name"+CHR(34)
sSQL = sSQL +") VALUES ('"+oNameVariable+"')" 'funktioniert mit einem Eintrag	
Und auf folgende Weise wollte ich den String um weitere Zellen erweitern:

Code: Alles auswählen

sSQL = sSQL+ CHR(34)+"Artikelnummer"+CHR(34)+" = '"+oArtikelNrVariable+"', "	'weitere Zelle funktioniert nicht
oStatement.executeUpdate(sSQL)
Hier erscheint dann die Fehlermeldung:
BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Unexpectet token: Artikelnummer in Statment ["Artikelnummer"].


Das geht zwar schon ziemlich in Richtung Baseforum, aber da ich hier nun angefangen habe...

Desweiteren: Muss ich die Datentypen im SQL-String definieren oder lediglich die Variablen entsrechend bearbeiten?
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: ResultSet ist immer "read only" ?

Beitrag von eBayer »

Hallo Stephan,
Du hast ein Problem mit der Klammer am Ende, die ja bereits beim ersten Anlauf gesetzt wurde.
Schau dir das endgültige SQL-Statement mal mit einer msgbox an. Da wird es Dir auffallen.
Gruß eBayer
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: ResultSet ist immer "read only" ?

Beitrag von geimist »

Ersteinmal vielen Dank.
Die SQL-Syntax stimmt jetzt schon mal:

Code: Alles auswählen

sSQL = CStr("INSERT INTO "+CHR(34)+"LOGTabelle"+CHR(34)+" (""Name"", ""Zeitstempel"", ""Datum"") VALUES ('"+oNameVariable+"', '"+oTimeStamp+"','"+oDatumsFeld+"')")
Aber was ich schon befürchtet habe, ist Zuordnung der Datentypen (ich arbeite mit der HSQLDB in Base):

z.B. der Zeitstempel: generieren wollte ich ihn aus "oTimeStamp = Now()" aber die Datenbank schimpft, dass sie den Wert im Format "YYYY-MM-DD hh:mm:ss" benötigt.

Ebenfalls das Datum: Es wird aus einem Datumsfeld in einem Formular ausgelesen: odatAusgabe = oForm.getByName("datAusgabe").dateWenn ich es mir in einer MsgBox ausgeben lasse, so hat es das Format "YYYYMMDD". Aber auch das nimmt die Datenbank nicht an. Die Tabellenfelder sind natürlich entsprechend formatiert.

Kann mir jemand sagen, wie ich die Datentypen entsprechend deklarieren muss?

vielen Dank
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: ResultSet ist immer "read only" ?

Beitrag von komma4 »

Soweit ich mich erinnere geht das nicht über Deklarationen - Du musst das gewünschte Format manuell zusammen setzen (als string?) und HSQLDB "vorwerfen"
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: ResultSet ist immer "read only" ?

Beitrag von geimist »

Wirklich schade, dass man die Daten nicht direkt über das ResultSet einfügen kann - würde doch sicherlich einfacher gehen.
Also werde ich mich dann mal ans basteln machen.

Und noch etwas:
Ich konnte es noch nicht schaffen, aus dem Formular eine CheckBox auszulesen. So hatte ich es versucht: oSRCheckBox = oForm.getByName("SRCheckBox")'.boolean Es kommt eine Fehlermeldung, mit dem Hinweis: "Falscher Wert für Eigenschaft"
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: ResultSet ist immer "read only" ?

Beitrag von komma4 »

siehe Checkbox APi-Dokumentation

In Andrew Pitonyaks Makro Dokument (meine Kopie!) Kap. 10.2.7


Du hast doch Xray im Einsatz - das zeigt Dir sowas an ...?!!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
geimist
****
Beiträge: 191
Registriert: Fr, 15.02.2008 16:10

Re: ResultSet ist immer "read only" ?

Beitrag von geimist »

komma4 hat geschrieben:Du hast doch Xray im Einsatz - das zeigt Dir sowas an ...?!!
Installiert ist es, aber leider habe ich es noch nicht zum Laufen gebracht :?

Du hattest es zwar hier beschrieben, aber so richtig weiß ich da nicht weiter.
Gruß
Stephan

LibreOffice 5.3 - MAC OS/X 10.11
Antworten