web-dev-qa-db-fra.com

SQL vers le texte de requête en accès avec une apostrophe

S'il vous plaît, aidez-moi car je n'arrive pas à faire les choses correctement

J'essaie d'interroger un nom (Daniel O'Neal) dans les noms de colonne tblStudents dans une base de données d'accès, mais access signale une erreur de syntaxe avec l'instruction:

Select * from tblStudents where name like 'Daniel O'Neal'

à cause de l'apostrophe dans le nom.

Comment puis-je surmonter cela.

Merci d'avance

25
Kevin

Vous vous échappez ' en le doublant, donc:

Select * from tblStudents where name like 'Daniel O''Neal' 

Notez que si vous acceptez "Daniel O'Neal" de la part de l'utilisateur, la citation brisée est un grave problème de sécurité. Vous devez toujours nettoyer la chaîne ou utiliser des requêtes paramétrées.

58
Alex K.

Lorsque vous incluez un littéral de chaîne dans une requête, vous pouvez placer la chaîne entre guillemets simples ou doubles; Le moteur de base de données d'Access acceptera l'un ou l'autre. Ainsi, les guillemets doubles éviteront le problème avec une chaîne qui contient un guillemet simple.

SELECT * FROM tblStudents WHERE [name] Like "Daniel O'Neal";

Si vous souhaitez conserver les guillemets simples autour de votre chaîne, vous pouvez doubler la guillemet simple à l'intérieur, comme mentionné dans d'autres réponses.

SELECT * FROM tblStudents WHERE [name] Like 'Daniel O''Neal';

Notez les crochets entourant le nom . J'ai utilisé les crochets pour réduire les risques de confusion dans le moteur de base de données car le nom est un mot réservé .

La raison pour laquelle vous utilisez la comparaison Like dans votre requête n'est pas claire. D'après ce que vous avez montré, cela devrait plutôt fonctionner.

SELECT * FROM tblStudents WHERE [name] = "Daniel O'Neal";
2
HansUp

Échappez à l'apostrophe dans O'Neal en écrivant O''Neal (deux apostrophes).

1
murgatroid99

Que diriez-vous plus simplement: Sélectionnez * dans tblStudents où [nom] = remplacer (YourName, "'", "' '")

0
user9198383

... mieux vaut déclarer le nom comme variable, et demander avant s'il y a une apostrophe dans la chaîne:

par exemple.:

DIM YourName string

YourName = "Daniel O'Neal"

  If InStr(YourName, "'") Then
      SELECT * FROM tblStudents WHERE [name]  Like """ Your Name """ ;
   else
      SELECT * FROM tblStudents WHERE [name] Like '" Your Name "' ;       
  endif
0
Ralf