ResultSet ist immer "read only" ?

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: ResultSet ist immer "read only" ?

Re: ResultSet ist immer "read only" ?

von geimist » Fr, 21.08.2009 17:05

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.

Re: ResultSet ist immer "read only" ?

von komma4 » Fr, 21.08.2009 14:41

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 ...?!!

Re: ResultSet ist immer "read only" ?

von geimist » Fr, 21.08.2009 14:38

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"

Re: ResultSet ist immer "read only" ?

von komma4 » Fr, 21.08.2009 14:21

Soweit ich mich erinnere geht das nicht über Deklarationen - Du musst das gewünschte Format manuell zusammen setzen (als string?) und HSQLDB "vorwerfen"

Re: ResultSet ist immer "read only" ?

von geimist » Fr, 21.08.2009 14:07

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

Re: ResultSet ist immer "read only" ?

von eBayer » Fr, 21.08.2009 08:45

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

Re: ResultSet ist immer "read only" ?

von geimist » Do, 20.08.2009 23:49

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?

ResultSet ist immer "read only" ?

von geimist » Mi, 19.08.2009 16:36

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

Nach oben