Defference de type dans une instruction

cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013 - 7 avril 2002 à 15:55
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013 - 9 avril 2002 à 18:06
Salut,
j'utilise la requete suivante et quand je fais passer le TQUERY1.Active a false le message suivant apparait :

defferrence de type dans une instruction

La requete :
select *
From T1, T2, T3
where
(ref=:mref)
and (b='_3')
and (v='2%')
and (N LIKE '42%')

TQuery1.parambyname('mref').asstring:=T1.fieldbyname('ref').asstring;

b est un champs de type string
v ------- // -----------------
n est un champs de type Numerique

Ou est le pb dans cette requete ?

2 réponses

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
7 avril 2002 à 17:29
L'erreur vient du fait que tu essayes de comparer N de type Numérique avec '42%' de type chaine. Je suppose que le but de cette ligne était de filtrer tous les nombre commençant par 42, dans ce cas il faut écrire :
And ( CAST ( N As CHAR(20) )LIKE '42%' )

Pour le filtre sur V je suppose qu'il faut garder toutes les valeurs commençant par 2, dans ce cas il faut écrire AND (V LIKE '2%') sinon le BDE ne gradera que les lignes contenant exactement '2%'

Il en va de même pour le filtre sur B, si le but du jeu était de garder seulement '_3', c'est bon. Mais s'il faut aussi garder 'A3' et 'X3' il faut changer le filtre par AND ( B LIKE '_3' ). Mais si il faut aussi garder 'A3B' et 'G3Toto' il faut mettre AND (B LIKE '_3%' )

Tu trouveras beaucoup d'aide sur la syntaxe des requètes SQL via le BDE dans le fichier
C:\PROGRAM_FILES\FICHIERS_COMMUNS\BORLAND_SHARED\BDE\LOCALSQL.HLP

--- Nono du Moulin ---
0
cs_apz Messages postés 281 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 11 avril 2013
9 avril 2002 à 18:06
Merci Nono40
Pour la chaine de caractere B elle contient un seul caractere, et j'ai mis le '_3' parce que dans les donnees de la base on trouve des espaces devant le chiffre 3
pour la chaine V elle va de meme
pour le champs N il contient un numero de telephone composé de 6 chiffres ex : 421000 ou 461000 et je dois avoir tous les numero commencant par 42 par exemple .

Merci encore !
@+
0
Rejoignez-nous