Verbindung zur Datenbank mit ResultSetConcurrency.UPDATABLE

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

Moderator: Moderatoren

Mobbi
**
Beiträge: 23
Registriert: Do, 11.12.2008 21:52

Verbindung zur Datenbank mit ResultSetConcurrency.UPDATABLE

Beitrag von Mobbi »

Hallo alle zusammen!
Ich habe da ein "kleines" Problem und hoffe mir kann jemand helfen.

Ich brauche eine updatefähige Datenverbindung zu einer Datenbank nur Verlaufen alle Postings zu diesem Thema im Sand und ich komme nicht weiter.

Ich baue an einer Datenbank für Bauteile und muss jetzt unmengen an technischen Daten aus Calc-Tabellen importieren. Da kommt nur ein Makro in Frage, da die manuelle Eingabe Wochen dauern würde

Die Leseverbindung zur Datenbank bekomme ich auch hin, nur beim Update erhalte ich immer folgende Fehlermeldung "...com.sun.star.sdbc.SQLException Message: The result is read-only"

Bei genauerem Überprüfen der Fehlerursache habe ich festgestellt das ich den Eigenschaften des ResultSet (oStatement) im ResultSetConcurrency nicht 1008 bzw. UPDATABLE
und im ResultSetType nicht 1005 bzw. Scroll_Sensitive zuweisen kann. Zumindest wird diese Anweisung igrnoriert
Nur beimResultSetType geht der Wert immerhin auf 1004. Sollte aber auf 1005 springen.

Um dem Fehler Herr zu werden habe ich mir ne kleine Test-DB geschrieben:
Tabelle "Adressen" mit 4 Spalten "ID" "Vorname "Nachname" "Geurtstag".
ID ist gleichzeitig Primäschlüssel.
Die Datenbank enthält 3 Datensätze und im 2. Datensatz soll z.B. der Nachname geändert werden.

Die Bearbeitung der Daten erfolgt über folgende Programmierung

Code: Alles auswählen


Sub Main
  Pfad = "H:\...\testZugriffeDB.odb"
  Pfad = ConvertToURL(Pfad)
  Call DBUpdate(Pfad)
End Sub

Sub DBUpdate(sURL as String)
  Dim DatabaseContext as Object 
  Dim oDatenquelle as Object    
  Dim oDatVerb as Object      'Objekt für Datenbankverbindung
  Dim oStatement as Object       'Objekt für SQL-Kommando-Übertragung
  Dim oErgSet as Object

  DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
  oDatenquelle = DatabaseContext.getByName(sURL)
  oDatVerb = oDatenquelle.getConnection("","")   
  oStatement = oDatVerb.createStatement()   
  oStatement.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
  'jetzt sollte das oStatement  (ResultSetConcurrency) auf 1008 stehen -> macht es aber nicht
  oStatement.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_SENSITIVE
  'jetzt sollte das oStatement  (ResultSetType) auf 1005 stehen -> steht aber nur auf 1003
  sSQL = "SELECT ""Vorname"",""Nachname"" FROM ""Adressen"""
  oErgSet = oStatement.executeQuery(sSQL)
  oErgSet.absolute(2)
  oErgSet.updateString(2, "Müller")
  
End Sub
Ich zweifle mittlerweile ob es überhaupt möglich ist in HSQLDB Daten per Makro in die Datenbank zu schreiben.
Kann mir bitte jemand helfen!
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Re: Verbindung zur Datenbank mit ResultSetConcurrency.UPDATABLE

Beitrag von kannenklaus »

hallo

du solltest dir unbedingt bei lulu.com das buch database proramming openoffice.org base&basic von roberto benitez besorgen. dann kommst du weiter!

grüße

klaus
eBayer
******
Beiträge: 556
Registriert: Do, 04.12.2008 14:33
Wohnort: Augsburg

Re: Verbindung zur Datenbank mit ResultSetConcurrency.UPDATABLE

Beitrag von eBayer »

Hallo,
warum bearbeitest Du die Datenbank nicht per SQL?
Damit habe ich nicht die geringsten Probleme.
Hier ein kleines Beispiel als Befehlssequenz: (die Verbindung zur Datenbank und weitere Anweisungen hast Du ja bereits)

als Insert:
sSQL = "INSERT INTO ""Postleitzahlen"" (" + """Postleitzahl"", ""Ort"") VALUES('" + sPLZ + "','" + sOrt +"')" ' neue PLZ und Ort
oStatement.executeUpdate(sSQL)

oder als Update:
sSQL = "UPDATE ""Postleitzahlen"" SET ""Postleitzahl"" = '" + sPLZ + "',""Ort"" = '" + sOrt + "' WHERE ""PLZ_ID"" = " + str(iPLZ_ID)
oStatement.executeUpdate(sSQL)

Viel Erfolg
Gruss 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
Mobbi
**
Beiträge: 23
Registriert: Do, 11.12.2008 21:52

Re: Verbindung zur Datenbank mit ResultSetConcurrency.UPDATABLE

Beitrag von Mobbi »

eBayer hat geschrieben:Hallo,
warum bearbeitest Du die Datenbank nicht per SQL?
Damit habe ich nicht die geringsten Probleme.
...
Dass muss ich mal in Ruhe ausprobieren. So auf die Schnelle steige ich da grad nicht durch.
Die Version klingt aber ganz interessant
Antworten