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
Makro-Fehler bei SQL mit UPDATE für viele Felder
Moderator: Moderatoren
Re: Makro-Fehler bei SQL mit UPDATE für viele Felder
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
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 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Re: Makro-Fehler bei SQL mit UPDATE für viele Felder
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)
Ja, das scheint mir auch übersichtlicher.
(*)
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
Ich löse das normalerweise mit einer Schleife ,
Ja, das scheint mir auch übersichtlicher.
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.oder 'Du musst es eben manuell schreiben.
(*)
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