Escape-Sequenz für das Anführungszeichen innerhalb einer SELECT-Anweisung

08/07/2009 - 10:35 von Susann Markward | Report spam
Hallo,

gibt es in SQL-Anweisungen auch Escape-Sequenzen?

Ich habe folgendes Problem:
Ich möchte auf einen Primàrschlüssel selektieren, der Anführungszeichen
Chr(34) enthàlt. Dabei bekomme ich natürlich Probleme.

Bsp:

Dim PrimKey As String: PrimKey = """123"
rst.Open "Select * from X where PrimaerSchluessel = """ & PrimKey &
"""", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect

Wie kann ich trotzdem auf Datensàtze selektieren, die ein oder beliebig
viele Anführungszeichen enthalten können?

MfG
Susann
 

Lesen sie die antworten

#1 Elmar Boye
08/07/2009 - 12:25 | Warnen spam
Hallo Susann,

Susann Markward schrieb:
gibt es in SQL-Anweisungen auch Escape-Sequenzen?

Ich habe folgendes Problem:
Ich möchte auf einen Primàrschlüssel selektieren, der Anführungszeichen
Chr(34) enthàlt. Dabei bekomme ich natürlich Probleme.



Verdoppele die Anführungszeichen.
Besser sind für Zeichenketten einzelne Anführungszeichen/Apostroph
- Chr(39), wie sie der SQL Standard vorsieht. Und nebenbei auch
leichter im Programmcode unterzubringen. Auch da gilt:
Verdoppeln, wenn es in der Zeichenkette vorkommt.

Auch wenn Access/Jet doppelte Anführungszeichen (aus seiner VBA Nàhe)
als Vorgabe verwendet, versteht es ebenso einfache Anführungszeichen.

Doppelte Anführungszeichen dienen in Standard/ANSI-SQL wiederum zur
Abgrenzung von Bezeichnern (wo Access [] verwendet).


Dim PrimKey As String: PrimKey = """123"
rst.Open "Select * from X where PrimaerSchluessel = """ & PrimKey &
"""", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect



Für OleDb ist es zuverlàssiger ein Command-Objekt mit Parametern
zu verwenden, dann kümmert sich der Treiber um solche Details.
Und Du kannst das Command Objekte mit unterschiedlichen Werten
wiederholt aufrufen, z. B.:

Set cmd = New ADODB.Command
With cmd
Set .ActiveConnection = cnn
.CommandType = adCmdText
.CommandText = "SELECT * FROM X WHERE P PrimaerSchluessel = ?;"
.Parameters.Append .CreateParameter("Schluessel", adVarWChar, adParamInput, 40)
End With

cmd.Parameters("Schluessel").Value = PrimKey

rst.Open cmd, , adOpenKeySet, adLockOptimistic

BTW: adCmdTableDirect gibt in Verbindung mit einer SELECT Klausel
keinen Sinn, denn das ist fürs direkte Öffnen einer Jet-ISAM-Tabelle
gedacht.

Gruß Elmar

Ähnliche fragen