Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1322 connectés 

  FORUM HardWare.fr
  Programmation
  ASP

  [ASP-SQL] pb requete...........

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ASP-SQL] pb requete...........

n°413147
gothico
Posté le 02-06-2003 à 15:18:40  profilanswer
 

Bonjour,
voila ce que je fais :
 

SQL = "SELECT * FROM faq WHERE id LIKE '%"&rech&"%' ORDER BY id"


Et kan j'execute, il me dit :  

La conversion implicite du type de données 'numeric' en 'varchar' n'est pas autorisée. Employez la fonction CONVERT pour exécuter cette requête

.  
 
Mon champ id est bien sur en numeric, mais je ne veux pas le convertir, je comprend pas.....  :(  

mood
Publicité
Posté le 02-06-2003 à 15:18:40  profilanswer
 

n°413159
backdafuck​up
Back to da old skool
Posté le 02-06-2003 à 15:22:27  profilanswer
 

tu fais de la recherche de chaine dans un numéric [:spamafote]
 
C'est mysql...  
mets id en varchar dans ta base (à moins que tu fasses des calculs sur l'ID, mais je ne pense pas)...
 
Ca résoudra tes problèmes

n°413188
gothico
Posté le 02-06-2003 à 15:32:39  profilanswer
 

Ya pas un autre moyen?
Ca m'embete de toucher à la base  :heink:


Message édité par gothico le 02-06-2003 à 15:32:58
n°413197
backdafuck​up
Back to da old skool
Posté le 02-06-2003 à 15:35:17  profilanswer
 

gothico a écrit :

Ya pas un autre moyen?
Ca m'embete de toucher à la base  :heink:


 
Le problème est que tu as un champ numérique.
Si tu ne veux pas le toucher, alors tu ne peux pas rechercher de texte (varchar) à l'interieur avec un like.
 
Tu peux par contre, changer ta condition, avec des > ou des <, ou n'importe quel autre opérateur...
le like fait la conversion implicite de id (numeric) en varchar, et c'est la que ca plante...
 
 
edit: tu peux chercher la dessus si tu veux :
http://johnny.iut-blagnac.fr/tuffery/
 
Les cours sont très bien, je t'assure...
Soit tu changes ta base, soit tu cherches une autre requete...


Message édité par backdafuckup le 02-06-2003 à 15:36:34
n°413200
MagicBuzz
Posté le 02-06-2003 à 15:38:09  profilanswer
 

where convert(id, varchar) like ...
 
enfin, je sais pas si c'est ça la syntaxe de convert...
 
sous Oracle, ça serait "to_char(...)" c'est plus compréhensible, et sous sql server, je préfère cast, qui est plus intuitif niveau syntaxe : cast(id as varchar)

n°413203
gothico
Posté le 02-06-2003 à 15:40:06  profilanswer
 

Arf, merci!!!
En fait, je v directement faire id="&rech&" c'est le plus simple  ;)  
@++

n°413224
MagicBuzz
Posté le 02-06-2003 à 15:53:32  profilanswer
 

bah ça dépend de ce que contient "rech", mais c clair que je trouve bizarre de faire un like sur un id, surtout si c'est un numérique... Un = semble plus approprié en effet :)


Message édité par MagicBuzz le 02-06-2003 à 15:53:55
n°413261
gothico
Posté le 02-06-2003 à 16:19:59  profilanswer
 

MagicBuzz a écrit :

Un = semble plus approprié en effet :)


Tout à fait, je viens de réaliser ma connerie  :D  
Dis, en fait, je v avoir besoin d'un cast je crois, car kan je met une donnée avec des lettres dans ma recherche, il me sort une erreur au lieu de dire kil n'a rien trouvé!!
J'ai fais avec ca cast(id as varchar), mais il me dis

caErreur de compilation Microsoft VBScript erreur '800a03ee'  
 
')' attendu  
 
/winscope/support/faq.asp, ligne 57  
 
cast(id as varchar)
--------^

n°413272
gothico
Posté le 02-06-2003 à 16:37:52  profilanswer
 

A la limite, comment tester si une variable est un chiffre??

n°413304
backdafuck​up
Back to da old skool
Posté le 02-06-2003 à 16:55:24  profilanswer
 

gothico a écrit :

A la limite, comment tester si une variable est un chiffre??


en php il existe is_numeric(var), cherche l'équivalent en asp


Message édité par backdafuckup le 02-06-2003 à 16:55:30
mood
Publicité
Posté le 02-06-2003 à 16:55:24  profilanswer
 

n°413384
MagicBuzz
Posté le 02-06-2003 à 17:31:55  profilanswer
 

bah...
 
cast c'est pas une fonction ASP, mais SQL.
 
Si tu utilises SQL Server (ça marche peut-être aussi avec les version récentes d'Access, je sais pas) :
 

sql = "select id from tab where cast(id as varchar) = '123'"


 
Normalement ça marche.
 
Sinon, en ASP, chais pu s'il existe une fonction isNumeric.
 
Si elle existe pas, alors méthode de bourrin powa :
 

function isNumeric(byval var)
   on error resume next
   var = cdbl(var)
   if err <> 0 then
      isNumeric = false
   else
      isNumeric = true
   end if
   on error goto 0
end function


 
 :whistle:

n°413899
gothico
Posté le 03-06-2003 à 08:39:26  profilanswer
 

Dsl, avec le cast, ca me fait ca :

[Microsoft][ODBC SQL Server Driver][SQL Server]'cast' n'est pas un(e) nom de fonction intégrée reconnu(e).

n°413912
backdafuck​up
Back to da old skool
Posté le 03-06-2003 à 08:50:31  profilanswer
 

gothico a écrit :

Dsl, avec le cast, ca me fait ca :

[Microsoft][ODBC SQL Server Driver][SQL Server]'cast' n'est pas un(e) nom de fonction intégrée reconnu(e).




essaie d'utiliser convert() (regarde la syntaxe) plutot que cast [:spamafote]

n°413930
urd-sama
waste of space
Posté le 03-06-2003 à 09:01:41  profilanswer
 

MagicBuzz a écrit :

bah...
Sinon, en ASP, chais pu s'il existe une fonction isNumeric.


oui


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
n°413936
gothico
Posté le 03-06-2003 à 09:11:44  profilanswer
 

dis moi magicbuzz, ta fonction marche bien, mais je ne comprend pas ton goto 0?  :??:

n°413939
backdafuck​up
Back to da old skool
Posté le 03-06-2003 à 09:12:43  profilanswer
 

il doit y avoir un label 0 quelque part...
J'y connais rien en asp, mais d'instinct : lbl 0 par exemple...
 
 
edit: on appelle ca une redirection sur erreur : on error goto 0


Message édité par backdafuckup le 03-06-2003 à 09:13:03
n°413949
gothico
Posté le 03-06-2003 à 09:16:31  profilanswer
 

Ouaip, je connais bien ca, mais justement, il me donne une fonction avec un goto sans lbl, c'est pour ca que je ne comprend pas :/

n°413957
backdafuck​up
Back to da old skool
Posté le 03-06-2003 à 09:19:02  profilanswer
 

il peut pas non plus taper la fonction à ta place avec ton clavier !
 
Si tu traites les erreurs, tu crées un label !
Si tu ne les traite pas, alors tu enlèves la clause On error [:spamafote]

n°413967
gothico
Posté le 03-06-2003 à 09:27:45  profilanswer
 

Arf, alors je l'enleve, j'aime pas les goto  :D

n°414019
MagicBuzz
Posté le 03-06-2003 à 10:12:21  profilanswer
 

gothico a écrit :

Dsl, avec le cast, ca me fait ca :

[Microsoft][ODBC SQL Server Driver][SQL Server]'cast' n'est pas un(e) nom de fonction intégrée reconnu(e).




 
:??: C'est quelle version de SQL Server :??:
 
J'ai jamais utilisé vraiment le 6.5, mais avec le 7.0 et le 2000, ça marche très bien, c'est dans la MSDN Library d'avril 1999 (donc pour SQL Server 7.0 et quelques topics dédiés à SQL Server 2000). Cette fonction est documentée dans le "Online Workbook" (aide en ligne de SQL Server que je te recommende d'utiliser) à la même page que convert.

n°414027
gothico
Posté le 03-06-2003 à 10:19:02  profilanswer
 

C'est la version 7, mais j'ai réussi nickel avec convert  ;)  
Et puis, j'ai trouvé une autre solution qui marche po mal aussi  :whistle:

n°414037
MagicBuzz
Posté le 03-06-2003 à 10:27:59  profilanswer
 


on error resume next
=> Traduction littérale : "en cas d'erreur, continue au suivant". Cela correspond un peu à un "try" en C, sauf que ça s'applique à tous le code suivant, dans le scope. Si une erreur se produit, alors l'objet "err" se remplit avec, et le script continue normalement son éxécution. (numéro d'erreur, code d'erreur, objet source etc.)
 
Le problème, c'est que contrairement à un "try", le scope n'est pas défini, et du coup ça va s'appliquer à tout le reste de la fonction/procédure ou même tout le script si tu as écrit ça dans la partie commune du script.
 
Le "on error goto 0" permet de forcer l'interpréteur à planter à nouveau en cas d'erreur. Il n'y a pas de label "0", c'est une instruction telle qu'elle. Si tu tentes de mettre un autre label, tu auras une erreur, VBS/ASP ne supportant pas les goto.
 
Il est extrêment recommandé de mettre un "on error goto 0" dès que la partie contenant l'erreur à tester est finie. A 80% de mon boulot, je fais de la maintenance sur des sites ASP. Plus d'un bug sur deux (donc certains sont ultra grave, genre vidange totale de la base pour une raison inconnue) sont dûs à des "on error resume next" non neutralisés par un "on error goto 0". En effet, l'endroit sensible ne plante pas, donc on ne rentre pas dans la gestion d'erreur, mais un peu plus loin dans le code on fait une erreur qu'on ne trappe pas. Résultat, à cause du "on error resume next", le script continue normalement comme s'il ne s'était produit aucune erreur.
 
C'est ainsi qu'un script d'un client vidait toutes les tables une à une de la base, puis était censé les remplir à partir d'autres requêtes. Pas de chance, suite à une mise à jour de leur SGBD, la moitiée des requêtes d'alimentation ne fonctionnaient plus, et provoquaient une erreur. A cause d'un "on error resume next" placé au moment de la connection à la base, aucune erreur n'était levée, et ils ne comprennaient pas pourquoi le script vidait la base sans rien remettre dedans. On leur à vendu 5 jours pour corriger l'erreur, pensant à un gros souci de compatibilité au niveau de la nouvelle plateforme. Au bout de 10 minutes j'avais fini, j'ai mis un "on error goto 0" et me suis apperçu que les requêtes se basant sur la date ne fonctionnaient plus, car les paramètres du nouveau serveur n'était plus les mêmes qu'avant :sarcastic:
 
Donc voilà, j'espère que tu as bien compris ce que c'est, et que surtout, tu en mettras systématiquement :)
 
PS: L'objet "err" contient la dernière erreur, et la liste des numéros d'erreurs de toutes les erreurs précédentes. Si tu veux tester plusieurs fois de suite si une erreur se produit, et que tu ne veux pas t'amuser à connaître les numéros d'erreur, alors fait simplement un "err.clear" à la fin de chaque test : cela va réinitialiser l'objet d'erreur, afin de ne pas rentrer dans tes conditions d'erreur même si les lignes suivantes ne lèvent pas d'erreur.
 
Exemple :
 

a = 2
on error resume next
a = 1 / 0
if err <> 0 then
     Response.Write "Division par zéro !"
end if
a = a * 1
if err <> 0 then
     Response.Write "a n'est pas un nombre !"
end if
set a = nothing
if err <> 0 then
     Response.Write "a n'est pas un objet !"
end if
on error goto 0


 
=> Ca va afficher tous les messages d'erreur, alors que le second test est bon.
 

a = 2
on error resume next
a = 1 / 0
if err <> 0 then
     Response.Write "Division par zéro !"
end if
err.clear
a = a * 1
if err <> 0 then
     Response.Write "a n'est pas un nombre !"
end if
set a = nothing
err.clear
if err <> 0 then
     Response.Write "a n'est pas un objet !"
end if
on error goto 0


=> Seuls les vrais erreurs seront levées (première et troisième)


Message édité par MagicBuzz le 03-06-2003 à 10:29:12
n°414040
MagicBuzz
Posté le 03-06-2003 à 10:29:50  profilanswer
 

backdafuckup a écrit :

il peut pas non plus taper la fonction à ta place avec ton clavier !
 
Si tu traites les erreurs, tu crées un label !
Si tu ne les traite pas, alors tu enlèves la clause On error [:spamafote]


Y'a PAS de label en ASP

n°414043
MagicBuzz
Posté le 03-06-2003 à 10:31:11  profilanswer
 

backdafuckup a écrit :

il peut pas non plus taper la fonction à ta place avec ton clavier !
 
Si tu traites les erreurs, tu crées un label !
Si tu ne les traite pas, alors tu enlèves la clause On error [:spamafote]


Non non, la fonction, je l'ai écrite exprès pour ce topic, moi j'ai pas ce genre de problèmes, quand j'ai un nombre je sais que c'est un nombren et idem pour les chaînes de caractères :D

n°414044
backdafuck​up
Back to da old skool
Posté le 03-06-2003 à 10:32:22  profilanswer
 

MagicBuzz a écrit :


Y'a PAS de label en ASP


je sais pas, j'y connais rien en asp... [:spamafote]

n°414047
MagicBuzz
Posté le 03-06-2003 à 10:33:43  profilanswer
 

backdafuckup a écrit :


je sais pas, j'y connais rien en asp... [:spamafote]


Bah maintenant tu sais :D

n°414051
gothico
Posté le 03-06-2003 à 10:38:36  profilanswer
 

Je m'en v remettre le "on error goto 0"  :D  
 :whistle:

n°414052
backdafuck​up
Back to da old skool
Posté le 03-06-2003 à 10:41:04  profilanswer
 

Bon, ben tout marche maintenant, non ?

n°414080
gothico
Posté le 03-06-2003 à 10:55:32  profilanswer
 

Yep  ;)  
http://60gp.ovh.net/~metalfor/mf/forumphp/images/smiles/merci.gif

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  ASP

  [ASP-SQL] pb requete...........

 

Sujets relatifs
[SQL/ASP] pb sur requete[ASP] Problème de date dans requête SQL
[ASP] Requête SQL foireuse[ASP]Explication d'une requete SQL en ASP
Requête SQL avec ASP[ASP] pb sur requete SQL
[ASP][SQL] une requête pour connaitre la structure d'une table ???[ASP] Requete SQL c'est koi l'inverse de "order by"
[ASP] Requete SQL c'est koi l'inverse de "order by" 
Plus de sujets relatifs à : [ASP-SQL] pb requete...........


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR