Daten in Datenbank schreiben

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

Moderator: Moderatoren

uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Daten in Datenbank schreiben

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten in Datenbank schreiben

Beitrag 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?
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)
uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Re: Daten in Datenbank schreiben

Beitrag 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:

Code: Alles auswählen

oConnection=oDataSoure.getConnection(", ")
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
uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Re: Daten in Datenbank schreiben

Beitrag von uli38 »

Oh Mann, schon wieder ein Schreibfehler!
Es muss ja heißen:

Code: Alles auswählen

oConnection=oDataSource.getConnection(",")
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
uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Re: Daten in Datenbank schreiben

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten in Datenbank schreiben

Beitrag 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!
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)
uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Re: Daten in Datenbank schreiben

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten in Datenbank schreiben

Beitrag 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 ....
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)
uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Re: Daten in Datenbank schreiben

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Daten in Datenbank schreiben

Beitrag 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?
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)
Antworten