A97: Probleme bei dynamischer SQL durch Hochkomma

Hallo!
Auf einem Formular werden anhand mehrere Kombinationsfelder die Kriterien für eine Abfrage festgelegt. Der SQL-Befehl wird dynamisch zusammengesetzt; das klappt auch recht gut. Nur, ein Kombi-Feld enthält als Filterbedingung ein ’ also ein Hochkomma. Dadurch bleibt mir der ganze Kram stehen und läuft nicht. Wie behandele ich das Feld damit auch Kriterien mit Hochkommata funktionieren?
Hier ein Ausschnitt wie es bisher ohne Hochkommata funktioniert.
If Not IsNull(Me!com_stil) Then SQL = SQL & „AND Tab_Musik.[Stil]=’“ & Me!com_stil & „’“

Es geht hier um das Filtern von Musikstilen und da gibt es ja so Bezeichnungen wie Rock’n Roll.
Vielen Dank im Voraus.
Georg

Schreib mal:

If Not IsNull(Me!com\_stil) Then SQL = SQL & "AND Tab\_Musik.[Stil]='" & Replace(Me!com\_stil,"'","''") & "'"

Und da A97 „Replace“ noch nicht kennt:
http://www.kraasch.de/vba003.htm

Gruß aus dem Norden
Reinhard Kraasch

Super, Danke!
Hallo Reinhard,
vielen Dank!
Es funktioniert, natürlich!!
Und ich dachte man muss einfach (an der richtigen Stelle) eine Klammer oder sonst was setzten!?
Gruß
Georg

Noch mal nachgefragt…
Hallo Reinhard,
nur aus reinem Interesse.
Geht das mit dem Hochkomma auch irgendiwe anders?
Z.B. wenn ich einen solchen SQL-Befehl möglicherweise auch in anderen Programmen benötigen würde?
Das ist zwar nicht konkret… es interessiert mich einfach nur.
Gruesse aus Kölle!
Georg

Ganz generell (und nicht nur in SQL) gilt: in einem durch Begrenzunszeichen begrenzten String-Literal ist das Begrenzungzeichen selbst zu verdoppeln. Wie du das machst, ist deine Sache…

In vielen SQL-Dialekten (eben auch in Jet-SQL) kann man neben den Apostrophen auch Anführungszeichen als Begrenzungszeichen verwenden, dann kann man innerhalb der Anführungszeichen unverdoppelte Apostrophe verwenden - also dann:

SELECT \* From Titel WHERE Stil = "Rock'n Roll"

Das ist aber im Grunde das selbe in Grün, sobald du halt nach Anführungszeichen suchen willst (was bei Musikstilen zwar eher selten ist, an anderen Stellen aber eben nicht…)

Ausserdem bekommst du dann wiederum leichte Schwierigkeiten, wenn du derartige Literale innerhalb eines VBA-String-Literals formulieren willst - da gilt dann wieder die Verdoppelungsregel - also:

SQL = "SELECT \* From Titel WHERE Stil = ""Rock'n Roll"""

Gruß aus dem Norden
Reinhard Kraasch

Herzlichen Dank, das wollte ich wissen!
Gruß
Georg