Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2008, 20h05   #1
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Par défaut Caractère provoquant une erreur dans une requête

Hello,

J'ai une application Delphi/Firebird 1.5 qui permet à l'utilisateur d'effectuer une recherche d'adresse.
La requête provoque une erreur «Token unknown» lorsque l'utilisateur introduit une chaîne de recherche comportant le caractère apostrophe comme «rue de l'Arbre».

Je voudrais prévenir cette erreur et j'ai 2 questions :
  1. Quels sont les caractères susceptibles de provoquer cette erreur ?
  2. Comment intercepter l'erreur avant qu'elle ne surgisse pour permettre à l'utilisateur de la corriger ?
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2008, 22h42   #2
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 760
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 760
Points : 6 787
Points : 6 787
Salut

La question est: comment transmets-tu le critère de recherche ?
Car il est évident que le problème se situe au niveau de l'apostrophe. Personnellement je transmet les chaînes de caractères avec la fonction QuotedStr qui encadre la chaîne mais double également ceux présents dans celle-ci.

Donc dans ton exemple le texte rue de l'Arbre sera bien transmis sous la forme 'rue de l''Arbre'.
Ce qui devrait supprimer tout problème de parsing de ta requête.

@+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 11h41   #3
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
L'expression est saisie dans un TEdit dont le contenu est passé dans une variable de type String.
La requête est
Code :
SELECT DISTINCT Nom, Adresse FROM TableBien WHERE Adresse LIKE ''%' + Adr1 + '%''
L'erreur se produit aussi bien avec que sans QuotedStr.
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 12h08   #4
Nouveau Membre du Club
 
Inscription : décembre 2002
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 109
Points : 39
Points : 39
Envoyer un message via ICQ à ludo00002
Le plus simple serait de passer par des paramètres :

Query.SQL.Text:='SELECT DISTINCT Nom, Adresse FROM TableBien WHERE Adresse LIKE :Adr1'

Query.ParamByName(Adr1).AsString:='%'+Edit1.Text+'%'
ludo00002 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 12h14   #5
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Pourquoi pas.

Merci pour l'idée.
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h42.


 
 
 
 
Partenaires

Hébergement Web