VALUES-Problem bei .executeUpdate(INSERT INTO..

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

OfficeGuy
*
Beiträge: 12
Registriert: Mo, 30.07.2007 08:48

VALUES-Problem bei .executeUpdate(INSERT INTO..

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

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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!
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)
OfficeGuy
*
Beiträge: 12
Registriert: Mo, 30.07.2007 08:48

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

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

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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!
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)
OfficeGuy
*
Beiträge: 12
Registriert: Mo, 30.07.2007 08:48

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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
Screeny.png (4.63 KiB) 2439 mal betrachtet
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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)"
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)
OfficeGuy
*
Beiträge: 12
Registriert: Mo, 30.07.2007 08:48

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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?
Gruß
Michael
OO.o 2.3.1, Sidux
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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?
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)
OfficeGuy
*
Beiträge: 12
Registriert: Mo, 30.07.2007 08:48

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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.
Gruß
Michael
OO.o 2.3.1, Sidux
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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?
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)
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
OfficeGuy
*
Beiträge: 12
Registriert: Mo, 30.07.2007 08:48

Re: VALUES-Problem bei .executeUpdate(INSERT INTO..

Beitrag 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!
Gruß
Michael
OO.o 2.3.1, Sidux
Gesperrt