Problem mit INSERT INTO in Ooo-Base (embedded Base)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Problem mit INSERT INTO in Ooo-Base (embedded Base)

von Raindancer » Do, 05.10.2006 20:30

Hallo Thomas,

au weia, ist das peinlich, ein doppelter Fehler :roll:

Eigentlich fange ich immer mit 'Option Explicit' an, um so dümmliche Schreibfehler zu vermeiden. Ich vertippe - vergesse - ab und zu mal den einen oder anderen Buchstaben bei Variablen - insbesondere den zur Kennzeichnung. Hier hab' ich dann auch noch 'Option Explicit' vergessen.
Ich schau mein oResultset.insertrow()-Problem besser nochmal genau an bevor ich es hier poste - und wieder 'ne perfekte Bauchlandung hinlege. :D
Toxitom hat geschrieben:... Wie du richtig festgestellt hast, wandelt OOo Base alles in Großbuchstaben um, es sei denn, die Namen stehen in doppelten Anführungszeichen. ...


Na ja, 'festgestellt' ist hier eigentlich nicht richtig. 'Festgestellt' steht für eine gewisse Eigenleistung. Die Umwandlung in Großbuchstaben im 'SQL-String' hat mir doch vor einiger Zeit ein gewisser 'Toxitom" beigebracht. War also gar nicht meine Leistung/Feststellung. :D

So, das Makro läuft jetzt perfekt (auch ohne Hochkomma, wie Du beschrieben hast).

Gruß und Danke
Ralf

von Toxitom » Do, 05.10.2006 08:27

Hey Raindancer,

also, dein Problem ist offensichtlich ein kleiner Rechtschreibfehler ;-) Der Code nämlich ist formal in Ordnung. Nur hier :

Code: Alles auswählen

oStatment.executeUpdate(SQL) 
sollte es heissen sSQL und nicht SQL, das hast du nämlich weder definiert noch mit Inhalt versehen :-)
Dank Forum habe ich erfahren, dass Tabellen- und Spaltennamen in Hochkomma gesetzt werden müssen!!!! (Wieso eigentlich, welche SQL-Version ist das denn?)
Nein, das ist nicht so. Es ist die Kombination. Wie du richtig festgestellt hast, wandelt OOo Base alles in Großbuchstaben um, es sei denn, die Namen stehen in doppelten Anführungszeichen. Dann werden Sie von Base nicht umgewandelt. Wenn du also alle Tabellen - und Spaltennamen sowieso in Großbuchstaben nutzt, kannst du die Anfürhungszeichen weglasen.
Allerdings: Laus SQL Referenz schaden diese auch nicht. Du kannst Spalten- und Tabellennamen grundsätzlich immer in doppelte Hochzeichen setzen.

Viele Grüße
Thomas

Problem mit INSERT INTO in Ooo-Base (embedded Base)

von Raindancer » Mi, 04.10.2006 23:43

Hallöle an Alle,

entweder fehlt mir die passende Axt (wegen der vielen Bäume, die ich nicht sehe) oder ich stelle mich mal wieder zu dusselig an oder ... :?
Ein kleiner Hinweis, der mich auf den rechten Weg führt, wäre sehr willkommen. :D

Das Problem.
Ich habe in der in Ooo-Base mitgelieferten DB (embedded HSQLBase) eine Tabelle mit 3 Spalten.
Tabellenname: RELKREATUR
Spalte 1 – MK – Primärkey
Spalte 2 – KEY1 – String
Spalte3 – KEY3 – String

Da OOo-Basic so herrlich zeichen-un-sensitiv ist, d.h. im SQL-Befehl grundsätzlich mal alles in Großbuchstaben umwandelt, verwende ich ebenso grundsätzlich nur noch Großbuchstaben bei Tabellen- und Spaltennamen.
siehe dazu auch: viewtopic.php?t=8982&highlight=

Ich möchte nun neue Zeilen mit Werten/Inhalten in KEY1 und KEY2 einfügen. (Der Primärkey wir ja automatisch von Base vergeben.)

Der 'einfache' SQL-Befehl wäre: INSERT INTO RELKREATUR (KEY1, KEY2) VALUES ( 'Test1', 'Test2' )
- tja, wäre – geht aber nicht.
Dank Forum habe ich erfahren, dass Tabellen- und Spaltennamen in Hochkomma gesetzt werden müssen!!!! (Wieso eigentlich, welche SQL-Version ist das denn?)
siehe hier: viewtopic.php?t=7476

1. Versuch
manuell in Base selbst, unter Extras/SQL:
INSERT INTO "RELKREATUR" ( "KEY1", "KEY2") VALUES ('TestA', 'TestB')
und
INSERT INTO "RELKREATUR" ( KEY1, KEY2) VALUES ('TestA', 'TestB')

Beide funktionieren! (entgegen anderslautenden Gerüchten auch ohne Hochkomma bei den Spaltennamen!)

2. Versuch
So nun soll das ja als Basiccode umgesetzt werden. Dazu müssen zwangsläufig die Doppel-Hochkomma 'maskiert' werden. (s.o.)

also in Ooo-Basic:
WertA = "Wert1"
WertB = "Wert2"
sSQL = "INSERT INTO " & chr(34) & "RELKREATUR" & chr(34) & " (" & chr(34) & "KEY1" & chr(34) & ", " & chr(34) & "KEY2" & chr(34) & ") VALUES ('" & WertA & "', '" & WertB & "' )"
msgbox sSQL
' Massagebox zeigt: INSERT INTO “RELKREATUR“ (“KEY1“, “KEY2“) VALUES ('Wert1', 'Wert2') – so weit, so gut.
oStatment.executeUpdate(SQL)

Es gibt keine Fehlermeldung! Allerdings wird auch keine Zeile eingefügt!?? :shock:
Warum aber nicht? Hilfe.

Vollständigkeitshalber hier noch der ges. Code:

Code: Alles auswählen

Dim oDatasoure As Object 
Dim oConnection As Object 
Dim oStatment As Object 
Dim oResultset As Object
Dim sSQL As string
Dim sDBName As string
Dim WertA as string
Dim WertB as string

sub Main
sDBName = "Test-Kamigawa"
oDatasoure = createUnoService("com.sun.star.sdb.DatabaseContext").getByName(sDBName) 
oConnection = oDatasoure.getConnection("","") 
oStatment = oConnection.createStatement()
oStatment.ResultSetType = com.sun.star.sdbc.ResultSetType.SCROLL_INSENSITIVE
oStatment.ResultSetConcurrency = com.sun.star.sdbc.ResultSetConcurrency.UPDATABLE
WertA = "Wert1"
WertB = "Wert2"
sSQL = "INSERT INTO " & chr(34) & "RELKREATUR" & chr(34) & " (" & chr(34) & "KEY1" & chr(34) & ", " & chr(34) & "KEY2" & chr(34) & ") VALUES ('" & WertA & "', '" & WertB & "' )"  
msgbox sSQL
' Massagebox zeigt: INSERT INTO “RELKREATUR“ (“KEY1“, “KEY2“) VALUES ('Wert1', 'Wert2')
oStatment.executeUpdate(SQL)
oConnection.close() 
End Sub 
Sorry - ist etwas länger geworden - aber ich wollte möglichst verständlich sein.

System: Win XP SP2, alle Treiber aktuell, OOo 2.0.3

Gruß
Ralf

Übrigens habe ich auch mit oResultset.insertrow() ein ähnliches Problem. Dazu folgt aber demnächst ein gesonderter Thread.

Nach oben