Seite 1 von 1
Daten in Datenbank schreiben
Verfasst: Mo, 16.02.2009 21:37
von uli38
Hallo.
Ich möchte per Makro Daten in eine Datenbank "Verwaltung" schreiben. Und da speziell in die Tabelle "Einnahmen".
Das Makro schaut so aus:
Code: Alles auswählen
Sub Kontoabgleich
Dim oDatabaseContext as Object
Dim oDataSource as object
dim oConnection as object
dim ostatement as object
dim oResult as object
oDatabasecontext=CreateUnoService("Com.sun.star.sdb.oDatabaseContext")
oDataSource=oDatabaseContext.getbyName("Verwaltung")
oConnection=oDataSoure.getConnection(",")
ostatement=oConnection.createstatement()
oStatementResultSetConcurrency=com.sun.star.odbc.resultsetConcurrency.updatable
oResultset=ostatementexecuteQuery("Select* FROM Einnahmen")
oResultset.moveToINsertRow()
Oresultset.updateString(2, "Miete incl. NK")
Oresultset.updateInt(3,525)
Oresultset.updateString(3, "Miete incl. NK")
Oresultset.updateInt(4,2)
Oresultset.updateInt(5,1)
End Sub
Leider bekomme ich in der Zeile
oDataSource=oDatabaseContext.getbyName("Verwaltung") immer den Fehler "Variable nicht belegt".
Aber es gibt die Datenbank.
Hat jemand eine Lösung??
Schon jetzt danek..
Grüße
Uli
Re: Daten in Datenbank schreiben
Verfasst: Di, 17.02.2009 10:04
von komma4
"Variable nicht belegt" bedeutet, dass das verwendete Objekt nicht erzeugt wurde.
In Deinem Fall deswegen, weil Du zwei Tippfehler in der Anweisung hast:
oDatabasecontext=CreateUnoService("Com.sun.star.sdb.oDatabaseContext")
Korrekt wäre:
Code: Alles auswählen
oDatabasecontext=CreateUnoService("com.sun.star.sdb.DatabaseContext")
Stimmt's?
Re: Daten in Datenbank schreiben
Verfasst: Di, 17.02.2009 19:03
von uli38
Hallo Winfried.
Ja, stimmt. Ich dachte nicht, dass man sooo sehr aufpassen muss.
Leider kommt das Makro zur 2 Zeilen weiter, nämlich bis:
Dann kommt ein Basic-Laufzeitfehler: "objekt-Variable nicht belegt"
Dabei HABE ich die Variable zuvor definiert - und den Text aus einem Grundlagenbuch abgeschrieben...
Weißt du die Lösung??
Danke
Gruß
Uli
Re: Daten in Datenbank schreiben
Verfasst: Di, 17.02.2009 19:35
von uli38
Oh Mann, schon wieder ein Schreibfehler!
Es muss ja heißen:
Aber das bringt den nächsten Fehler:
"Es ist eine Exception aufgetreten.
type:com.sun.star.lang.Illegal.ArgumentException.
Message: arguments len differ!"
Was ist das schon wieder?
Uli
Re: Daten in Datenbank schreiben
Verfasst: Di, 17.02.2009 20:27
von uli38
Okay, ich bin jetzt bei der folgenden Zeile:
Code: Alles auswählen
oResultSet = oStatment.executeQuery ("SELECT Datum, Buchungstext, Betrag, Kategorie, Zahlender, Objekt-ID FROM Einnahmen")
Mit folgender Fehlermeldung:
"Es ist eine Exception aufgetreten.
type:com.sun.star.lang.Illegal.ArgumentException.
Message: Table not found in Statement[SELECT "Datum", "Buchungstext", "Betrag", "Kategorie", "Zahlender", "Objekt"- "ID" FROM "Einnahmen"]
Ich habe die Objekt-ID schon heraus genommen, aber das hilft nichts. Wobei das wohl das nächste Problem wird: die Objekt-ID brauche ich unbedingt.
Meine Idee ist, alle Spalten bis auf die erste zu selktieren, weil sie erste Spalte eine automatische ID enthält, und das geht wohl laut Literatur nicht.
Gruß
Uli
Re: Daten in Datenbank schreiben
Verfasst: Di, 17.02.2009 23:40
von komma4
Siehe mal
Andrews Base-Dokument ... oder andere Beispiele hier im Forumsbereich.
"Object-Id"?
Ich dachte nicht, dass man sooo sehr aufpassen muss.
doch, das ist so: => kopieren !
Mehr zu den Grundlagen in
Andrews Makro-Dokument
Viel Erfolg!
Re: Daten in Datenbank schreiben
Verfasst: Mi, 18.02.2009 20:08
von uli38
Hallo Winfried.
Vielen Dank für Deine Literatur-Tipps:-)
In der Tabelle, die abgefragt werden soll, gibt es eine Spalte mit dem Namen "Objekt-ID". Ist das ein Problem bei der Abfrage?
ich hbae mittlerweile die erbindung zur Tabelle aufbauen können.
ABER:
Beim Einfügen der neuen Zeile gibt es wieder einen Fehler:"The result-set is read-only". Und das, obwohl ich die Abfrage als UPDATABLE gesetzt habe:
Code: Alles auswählen
oStatement.ResultSetConcurrency=com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
Im Forum habe ich von einem Bug gelesen, dass diese Funktion also nicht möglich ist.
Wenn dem so ist, wie kann ich trotzdem einen Datensatz einfügen??
In dem AndrewBase Dokument finde ich dazu auch keine Lösung.
Gruß
Uli
Re: Daten in Datenbank schreiben
Verfasst: Do, 19.02.2009 11:14
von komma4
Wenn die Spalte "Objekt-ID" heisst, dann wird sie auch so geschrieben (und nicht "Objekt"-"Id") .
Wenn Du schon gefunden hast, dass hier ein Bug existiert, ... wie soll das dann bei Dir funktionieren?
Ich verwende keine UPDATEs, sondern nur INSERTs ....
Re: Daten in Datenbank schreiben
Verfasst: Do, 19.02.2009 21:07
von uli38
Okay.
ich habe meinen Code nun umgestellt.
Die Zeile schaut nun so aus:
Code: Alles auswählen
sSQL = "Insert into ""Einnahmen"" (""Einnahmen-ID"",""Datum"",""Buchungstext"", ""Betrag"", ""Kategorie"", ""Zahlender"", ""Objekt-ID"") values('""','01.04.2009', 'Miete incl. Nebenkosten', '550','Miete incl. Nebenkosten', '1','1')"
Aber ich erhalte eine Fehlermeldung:
Message: Wrong data type:java.lang.Numer.Format.exception:For input string
Es scheint an der Einnahmen-ID zu liegen - das ist der Primärschlüssel und wird automatisch erzeugt.
ich habe schon versucht "null" oder "default" einzutragen, aber das geht leider nicht.
Welchen Wert muss ich eintragen?
danke.
Gruß
uli
Re: Daten in Datenbank schreiben
Verfasst: Fr, 20.02.2009 09:47
von komma4
uli38 hat geschrieben:ich habe schon versucht "null" oder "default" einzutragen
So eine Angabe ist von der genutzten Datenbank-
engine abhängig.
Wie hast Du das geschrieben?
values('"default"' wäre falsch, hast Du auch
values( DEFAULT (also ohne Anführungszeichen) probiert?