stSql = "UPDATE ""Basic Data"" SET ""Working Place"" = '"+oName.GetCurrentValue()+"' WHERE ""ID"" = (SELECT ""F_ID"" From ""Filter_by_Name"" WHERE ""ID"" = TRUE) "
oSQL_Anweisung.executeUpdate(stSql)
wenn der Wert von oName ein Sonderzeichen wie ein Apostroph ( ' ) enthält, bricht das Makro mit Fehlermeldung ab. Kann man das verhindern? Was müsste am Syntax geändert werden? Ohne diese Sonderzeichen funkioniet alles prima.
Daten aus Textfeldern auf SQL-Tauglichkeit vorbereiten
Beim Speichern von Daten über einen SQL-Befehl können vor allem Hochkommata (') Probleme bereiten, wie sie z.B. in Namensbezeichnungen wie O'Connor vorkommen können. Dies liegt daran, dass Texteingaben in Daten in '' eingeschlossen sind. Hier muss eine Funktion eingreifen und die Daten entsprechend vorbereiten.
FUNCTION String_to_SQL(st AS STRING)
IF InStr(st,"'") THEN
st = Join(Split(st,"'"),"''")
END IF
String_to_SQL = st
END FUNCTION
Es handelt sich hier um eine Funktion. Eine Funktion nimmt einen Wert auf und liefert anschließend auch einen Gegenwert zurück. Der übergebende Text wird zuerst einmal daraufhin untersucht, ob er ein Hochkomma enthält. Ist dies der Fall, so wird der Text an der Stelle aufgetrennt - der Trenner dafür ist das Hochkomma – und anschließend stattdessen mit zwei Hochkommata wieder zusammengefügt. Der SQL-Code wird so maskiert.
Die Funktion übergibt ihr Ergebnis durch den folgenden Aufruf:
Es wird also einfach nur die Variable stTextalt überarbeitet und der entsprechende Wert wieder in der Variablen stTextneu gespeichert. Dabei müssen die Variablen gar nicht unterschiedlichen heißen. Der Aufruf geht praktischer direkt mit:
danke auch hier für die Antwort. Ich bin allerdings gar nicht dazu gekommen, das auszuprobieren, da mir letzte Nacht eine andere Lösung eingefallen ist. Anstatt die Zeichenkette aus dem Formular einzulesen habe ich die Anweisung nun so umgestellt, das ich sie mit einem integrierten SELECT-Befehl direkt von einer Tabelle in die zweite übertrage. Alles was ich dazu benötige ist die IDs der Datensätze.