Seite 1 von 1
VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: So, 13.01.2008 14:23
von OfficeGuy
Hallo,
ich versuche schon seit mehreren Tagen mit Hilfe einer SQL-Abfrage Daten in eine Tabelle zu schreiben.
Die Verbindung zur Tabelle funktioniert und es werden auch Daten in die Tabelle geschrieben, allerdings schreibt er nicht den Wert, sondern den Variablennamen in die Tabelle!
Code: Alles auswählen
Sub SchreibeTabelle ()
Dim myDataBaseContext as Object
Dim myDataSource as Object
Dim myConnection as Object
Dim myStatement as Object
Dim myResultSet as Object
Dim art as String
Dim bereichstring as String
Dim bezeichnungstring as String
Dim Daten(2)
'lediglich zum Testen, Array wird später von anderem Sub übergeben
Daten(0) = "test1"
Daten(1) = "test2"
Daten(2) = "test3"
art = Daten(0)
bereichstring = Daten(1)
bezeichnungstring = Daten(2)
myDataBaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
myDataSource = myDataBaseContext.getByName("AktionenDB")
myConnection = myDataSource.getConnection("","") 'kein Login/Passwort gesetzt..
myStatement = myConnection.createStatement()
myStatement.executeUpdate("INSERT INTO ""tblBeschreibung"" (ID,""Art"",""Bereich"",""Beschreibung"") VALUES (null,'art','bereichstring','bezeichnungstring')"
myConnection.close()
End Sub
In der Tabelle steht nun nicht der Wert der Variable ("test1", usw.), sondern die Variablennamen ("art", "bereichstring", "bezeichnungstring"). Was mache ich falsch?!
Vermutlich gibt es noch eine weitere Hochkomma-Regel, die mir nicht bekannt ist. Hab schon vieles erfolglos ausprobiert.
Gruß
Michael
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: So, 13.01.2008 17:21
von komma4
Du übergibst als Wert den String 'art' - und der wird dann auch geschrieben.
Wenn Du den Inhalt der Variablen art verwenden willst musst Du diese ausserhalb der doppelten Anführungszeichen mitgeben:
Code: Alles auswählen
myStatement.executeUpdate( "INSERT INTO ""tblBeschreibung"" (ID,""Art"",""Bereich"",""Beschreibung"") VALUES (" & null & "," & art & "," bereichstring & "," & bezeichnungstring & ") "
Mit "null" bin ich auch nicht sicher: ich übergebe für AutoIncrement-Spalten den String "default"....
Viel Erfolg!
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: So, 13.01.2008 18:55
von OfficeGuy
Hallo Winfried,
danke für die schnelle Antwort. Ich bekomme zwar wieder eine Fehlermeldung, aber der Weg dürfte stimmen. Die Zeile sieht nun folgendermaßen aus:
Code: Alles auswählen
myStatement.executeUpdate("INSERT INTO ""tblBeschreibung"" (""ID"",""Art"",""Bereich"",""Beschreibung"") VALUES (null," & art & "," & bereichstring & "," & bezeichnungstring & ")"
Die neue Fehlermeldung:
BASIC-Laufzeitfehler.
Es ist eine Exception aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Column not found: TEST1.
Nun interpretiert er die Variable 'art' als Spaltenangabe.

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: So, 13.01.2008 19:37
von komma4
der Weg ist der richtige
ich denke, wir haben da auch noch eine schliessende Klammer vergessen....
Zur Kontrolle beim Code-Erstellen verwende ich einen
string mit der ganzen Anweisung und lasse mir diesen anzeigen - vielleicht versuchst Du es auch mal auf diesem Weg.
Also:
sSQL = "INSERT INTO ....
dann:
MSGBOX sSQL
und:
myStatement.executeUpdate( sSQL )
Viel Erfolg!
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: So, 13.01.2008 20:42
von OfficeGuy
Richtig! Da fehlt tatsächlich eine Klammer.
Hab's korregiert und die vorgeschlagene Form gebracht:
Code: Alles auswählen
sSQL = "INSERT INTO ""tblBeschreibung"" (""ID"",""Art"",""Bereich"",""Beschreibung"") VALUES (null," & art & "," & bereichstring & "," & bezeichnungstring & ")"
myStatement.executeUpdate(sSQL)
Bekomme aber immer noch die besagte Fehlermeldung.
Die msgbox zeigt eigentlich vernünftiges an:
"INSERT INTO "tblBeschreibung" ("ID","Art","Bereich","Beschreibung") VALUES (null,test1,test2,test3)"
Die Tabellendefinition passt zum Code.

- Screeny.png (4.63 KiB) 2442 mal betrachtet
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: Mo, 14.01.2008 03:21
von komma4
... dann tippe ich (nochmals) auf "null" als Fehlerquelle. Wo hast Du das her? Mal probiert, manuell eine ID zu vergeben:
Code: Alles auswählen
"INSERT INTO "tblBeschreibung" ("ID","Art","Bereich","Beschreibung") VALUES (99,test1,test2,test3)"
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: Mo, 14.01.2008 19:14
von OfficeGuy
Als er den Variablen-Namen anstelle des Variablen-Wertes eingetragen hat (erste Post), funktionierte es auch mit 'null'. Hat auch korrekt inkrementiert.
Hab's trotzdem kurz versucht, nur um zu sehen was passiert (und weil ich verzweifelt bin). Leider kommt immer noch die gleiche Fehlermeldung. Hab natürlich darauf geachtet, daß die Spalte 'ID' mit keiner '99' belegt ist.
Ich habe auch die Spalte 'ID' mitsamt dem 'null'-Wert komplett aus dem SQL-Befehl genommen. Das Ergebnis ist auch hier wie gehabt.
Hat es vielleicht etwas damit zu tun, daß ich die Makros unter 'Meine Makros' --> 'Standard' --> 'myMakros' angelegt hab?
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: Di, 15.01.2008 06:54
von komma4
Der Speicherort des Makros ist nicht entscheidend...
Du hast schon nummerisch 99 eingegeben, nicht mit (einfachen/doppelten) Anführungszeichen?
Wenn es denn mit null innerhalb der Anweisung geklappt hat, dann belasse es doch dabei:
Code: Alles auswählen
sSQL = "INSERT INTO ""tblBeschreibung"" (""ID"",""Art"",""Bereich"",""Beschreibung"") VALUES ( " null &"," & art & "," & bereichstring & "," & bezeichnungstring & ")"
Hast Du auch mal DEFAULT probiert?
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: Di, 15.01.2008 22:07
von OfficeGuy
Klasse deine Geduld!
"Kudos Winfried!" ^^
Hier die Varianten, die ich getestet habe:
Code: Alles auswählen
VARIANTE 1:
sSQL = "INSERT INTO ""tblBeschreibung"" (""ID"",""Art"",""Bereich"",""Beschreibung"") VALUES (99," & art & "," & bereichstring & "," & bezeichnungstring & ")"
myStatement.executeUpdate(sSQL)
....
VARIANTE 2:
sSQL = "INSERT INTO ""tblBeschreibung"" (""Art"",""Bereich"",""Beschreibung"") VALUES (" & art & "," & bereichstring & "," & bezeichnungstring & ")"
myStatement.executeUpdate(sSQL)
....
VARIANTE 3:
sSQL = "INSERT INTO ""tblBeschreibung"" (""ID"",""Art"",""Bereich"",""Beschreibung"") VALUES (default," & art & "," & bereichstring & "," & bezeichnungstring & ")"
myStatement.executeUpdate(sSQL)
Bei den ersten beiden Varianten kommt die Fehlermeldung, daß er die Spalte TEST1 nicht finden kann.
Bei VARIANTE 3 meint er:
BASIC-Laufzeitfehler
Es ist eine Exception aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Column not found: DEFAULT.
Was hat er nur mit seinen Spalten?! Es ist doch mit VALUES klar definiert, daß in der zweiten Klammer die Werte kommen!
Ich habe spasseshalber nochmal die allererste Form probiert, wo er die Variablennamen in die Tabelle schreibt, nur um zu sehen, ob ich bei dem vielen Testen und probieren nicht irgendeinen dummen Leichtsinnsfehler eingebaut habe. Hat tatsächlich wieder die Variablennamen in die Tabelle geschrieben.
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: Mi, 16.01.2008 13:09
von Toxitom
Hey Michael,
der Fehler liegt in der falschen bzw. fehlenden Stringübergabe.
Der SQL Befehl lautet: INSERT INTO .... VALUES (123, 'text1', 'text2', 'Text3')
also, die Werte (Typ) müssen den Spaltendefinitionen entsprechen. Bei dir werden übergeben: Integer, Text, Text, Text
Texte (Strings) werden aber in SQL in einfach Hochkommas eingeschlossen.
Dein Befehl müsste also wie folgt aussehen: (ich wähle mal die kürzeste Varainte

)
Code: Alles auswählen
VARIANTE 2:
sSQL = "INSERT INTO ""tblBeschreibung"" (""Art"",""Bereich"",""Beschreibung"") VALUES ('" & art & "','" & bereichstring & "','" & bezeichnungstring & "')"
myStatement.executeUpdate(sSQL)
Also, wenn es auch schlecht zu sehen ist: VALUES ( ' - jetzt String abschliesssen mit " - dann folgt das & , der Varaiblenname, das & , jetzt wird der String fortgesetzt " und als erstes Zeichen dann wieder das einfach Hochzeichen '
Ich hoffe, es ist einigermaßen verständlich ausgedrückt?
Viele Grüße
Thomas
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: Mi, 16.01.2008 13:53
von komma4
Toxitom hat geschrieben:Texte (Strings) werden aber in SQL in einfach Hochkommas eingeschlossen
Oh Mann - Tomaten auf den Augen gehabt....
Thomas: kannst Du etwas zu "null" respektive "default" sagen? Ist das DB-abhängig?
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: Mi, 16.01.2008 16:09
von Toxitom
Hallo Winfried,
komma4 hat geschrieben:kannst Du etwas zu "null" respektive "default" sagen? Ist das DB-abhängig?
Leider nein, nie mit gearbeitet. Ich denke aber, die Varaiblen müssen vordefiniert sein. "Null" ist in OOo-API vordefiniert, "default" könte innerhalb der DB-engines vordefiniert sein - da müsste man die Spezifikationen lesen...
Also, sorry, hier kann ich nichts produktives beisteuern
Viele Grüße
Thomas
Re: VALUES-Problem bei .executeUpdate(INSERT INTO..
Verfasst: Mi, 16.01.2008 18:19
von OfficeGuy
WAHNSINN!
Es funktioniert!
Mir geht's heute extremst dreckigst (Schnupfen), aber dieser Ratschlag hat den Tag gerettet.
Vielen, vielen Dank - grandiose Unterstützung hier. Ihr seid spitze.
Jetzt kann ich mich wieder reinhängen in OO.o.
Prepare to be doomed MS!