Zeichenketten mit ' in UPDATE Funktionen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Senekurios
**
Beiträge: 26
Registriert: So, 13.03.2016 20:22

Zeichenketten mit ' in UPDATE Funktionen

Beitrag von Senekurios » Mi, 01.06.2016 19:41

Hallo,

In einem Makro verwende ich folgende SQL-UPDATE Funktion:

Code: Alles auswählen

	
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.

Marko

RobertG
*******
Beiträge: 1702
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Zeichenketten mit ' in UPDATE Funktionen

Beitrag von RobertG » Mi, 01.06.2016 20:31

Hallo Marko,

ich antworte mit einem Zitat aus dem Handbuch:
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.

Code: Alles auswählen

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:

Code: Alles auswählen

stTextneu = String_to_SQL(stTextalt)
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:

Code: Alles auswählen

stText = String_to_SQL(stText)
Diese Funktion wird in den nachfolgenden Makros immer wieder benötigt, damit Hochkommata auch über SQL abgespeichert werden können.
Gruß

Robert

Senekurios
**
Beiträge: 26
Registriert: So, 13.03.2016 20:22

Re: Zeichenketten mit ' in UPDATE Funktionen

Beitrag von Senekurios » Mi, 01.06.2016 21:04

Danke, Robert, ich werde das morgen mal ausprobieren.

Senekurios
**
Beiträge: 26
Registriert: So, 13.03.2016 20:22

Re: Zeichenketten mit ' in UPDATE Funktionen

Beitrag von Senekurios » Do, 02.06.2016 22:02

Hallo Robert,

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.

Code: Alles auswählen

   
stSql = "UPDATE ""Basic Data"" SET ""Working Place"" = (SELECT ""Centre Name"" From ""Centre""  WHERE ""ID_Centre"" = '"+oFeld.GetCurrentValue()+"')  WHERE ""ID"" = (SELECT ""F_ID"" From ""Filter_by_Name""  WHERE ""ID"" = TRUE) "
oSQL_Anweisung.executeUpdate(stSql)
wobei oFeld die übertragene ID aus dem Formular ist.

Antworten