Makro-Fehler bei SQL mit UPDATE für viele Felder

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Stephan
********
Beiträge: 10283
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Makro-Fehler bei SQL mit UPDATE für viele Felder

Beitrag von Stephan » Mi, 17.01.2018 20:23

Hallo,

bei dem Versuch einen gerade geschrieben Datensatz testweise nochmals mit den gleichen Werten zu updaten bekomme ich folgende Fehlermeldung:

"BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.sdbc.SQLException
Message: Unexpected token: ( in statement [UPDATE "Firma" SET (]."

Das hier ist der relevante Code, der erste sql_string bewirkt bei Ausführung ein richtiges Eintragen in die Datenbank, beim zweiten sql-String kommt die, vorstehend benannte, Fehlermeldung.
(Hinweis: Tabelle "Firma" ist über "FID" (Autowert) mit einer zweiten Tabellen verknüpft, wobei aber dort noch keine konkreten DAten sind während der Code läuft, da ja Base "FID" erst gerade bei der Ausführuing des esten sql-Strings erzeugt.)

'...

sql_string = "INSERT INTO ""Firma"" (""Firmenname"", ""Abteilung"", ""FPostStrasse""," &_
"""FPostleizahl"", ""FOrt"", ""FLand"", ""FBsStrasse"", ""FBsPostleizahl""," &_
"""FBsOrt"", ""FeMail"", ""FUrl"", ""FAdressKategorie"", ""FTelefonZentrale""," &_
"""FFax"", ""FBemerkung"", ""FGeaendert"") VALUES ('" & var_Firmenname & "', '" & var_Abteilung & "'," &_
"'" & var_FPostStrasse & "', '" & var_FPostleizahl & "', '" & var_FOrt & "', '" & var_FLand & "'," &_
"'" & var_FBsStrasse & "', '" & var_FBsPostleizahl & "', '" & var_FBsOrt & "', '" & var_FeMail & "'," &_
"'" & var_FUrl & "', '" & var_FAdressKategorie & "', '" & var_FTelefonZentrale & "', '" & var_FFax & "'," &_
"'" & var_FBemerkung & "','" & akt_Datum & "')"

oStatement.executeUpdate(sql_string)

sql_string = "CALL IDENTITY()"
oAbfrageergebnis = oStatement.executeQuery(sql_string)
WHILE oAbfrageergebnis.next
inID = oAbfrageergebnis.getLong(1)
WEND

Msgbox "Updatetest"
sql_string = "UPDATE ""Firma"" SET (""Firmenname"", ""Abteilung"", ""FPostStrasse""," &_
"""FPostleizahl"", ""FOrt"", ""FLand"", ""FBsStrasse"", ""FBsPostleizahl""," &_
"""FBsOrt"", ""FeMail"", ""FUrl"", ""FAdressKategorie"", ""FTelefonZentrale""," &_
"""FFax"", ""FBemerkung"", ""FGeaendert"") VALUES ('" & var_Firmenname & "', '" & var_Abteilung & "'," &_
"'" & var_FPostStrasse & "', '" & var_FPostleizahl & "', '" & var_FOrt & "', '" & var_FLand & "'," &_
"'" & var_FBsStrasse & "', '" & var_FBsPostleizahl & "', '" & var_FBsOrt & "', '" & var_FeMail & "'," &_
"'" & var_FUrl & "', '" & var_FAdressKategorie & "', '" & var_FTelefonZentrale & "', '" & var_FFax & "'," &_
"'" & var_FBemerkung & "','" & akt_Datum & "') WHERE ""FID"" = '" & inID & "'"

oStatement.executeUpdate(sql_string)

'...


Ist die Schreibweise mit 2 'Arrays' bei UPDATE nicht zulässig? Oder was ist sonst falsch?

Gerne nehme ich auch Ratschläge zur 'best practice' an. Aufgabe ist aus einem Basic-Dialog eine große Anzahl von Werten in einer Datenbank zu updaten und hierzu würde ich gerne vorzugsweise alle Werte updaten (geänderte und nicht-geänderte) um nicht auf dem Basic-Dialog überwachen zu müssen welche Werte sich ändern.


(Hinweis: ja, "... Postleizahl" [sic] soll so geschrieben sein, und funktioniert im ersten SQL ja auch so.)



Gruß
Stephan

Toxitom
********
Beiträge: 3466
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Makro-Fehler bei SQL mit UPDATE für viele Felder

Beitrag von Toxitom » Do, 18.01.2018 07:59

Hey Stephan,

der SQL Befehl "Update" akzeptiert meines Wissens keine Arrays wie Du sie benutzt, die Syntax ist immer Spaltenname = Wert.

Ich löse das normalerweise mit einer Schleife , oder 'Du musst es eben manuell schreiben. Also:

sql_string = "UPDATE ""Firma"" SET ""Firmenname"" = '" & var_Firmenname & "', " &_
"""Abteilung"" = '" & var_Abteilung & "'," &_
.....
WHERE ""FID"" = '" & inID & "'"


VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 5- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

Stephan
********
Beiträge: 10283
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Makro-Fehler bei SQL mit UPDATE für viele Felder

Beitrag von Stephan » Do, 18.01.2018 09:14

Danke, dann werde ich das wohl so tun müssen. Ohne die 'Arrays' funktioniert es jedenfalls (Letzteres nur als Info, damit klar ist es gibt/gab keine anderen Fehlergründe)
Ich löse das normalerweise mit einer Schleife ,

Ja, das scheint mir auch übersichtlicher.
oder 'Du musst es eben manuell schreiben.
Oh je ... mir fehlt für diese riesenhaften SQL-Ausdrücke(*) jedes Talent und das Syntax-Highlighting in der Basic-IDE 'hängt' manchmal, so das es auch keine wirklich zuverlässige Hilfe ist.


(*)
Am Rande:
gibt es für deren Länge eigentlich eine praktische Grenze oder gilt nur die Basic-Grenze der Länge eines Strings (64k?)?


Gruß
Stephan

Antworten