|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 177 ![]() |
Bonjour,
J'ai un comportement super bizzare dans mon programme ! J'ai une boucle for, si je nomme l'indice "i" , ca plante ma page, si je nomme l'indice de boucle "j", ca marche nickel. Lorsque j'ai une erreur le code est : [quote] Objet Response error 'ASP 0104 : 80070057' Opération non autorisée /rep1/rep2/ma_page.asp, line 0 [/code] Alors vous allez me dire que c'est certainement parce que ma boucle for se situe dans une autre boucle dont l'indice est déjà i, ou que j'ai déjà une variable nommée i quelque part, et bien même pas ! Je vous résume comment se compose ma page Code :
Dans cette page, lorsque l'action est "add", j'obiens l'erreur. Si je met en commentaire le code de la boucle for , ca marche nickel , et pire si je renomme simplement l'indice de boucle en l'appelant j au lieu de i, ca marche nickel et c'est la que je ne comprends pas !!! Ca n'a aucun sens, nulle part je ne fais appel a une boucle for dans mon code, sauf dans la méthode Display de ma classe, et ca ne peut pas interferer puisque je suis dans un objet et en plus l'appel de la méthode Display se fait de toutes manières à l'extérieur de ma boucle for ! Donc, j'ai la solution, il me suffit de nommer mon indice j au lieu de i, mais ce que je voudrais c'est comprendre pourquoi ? Avez vous une idée de ce qui se passe pour que j'obtienne un tel résultat ? Merci |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 810 ![]() |
Bonjour,
max_importance correspond à quoi ?
__________________
Par principe, je ne réponds pas aux messages URGENT. Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu) |
|
|
00
|
|
|
#3 | ||
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 177 ![]() |
max_importance correspond a une variable integer qui est instanciée plus haut dans le code a partir d'un champ de la base de donné (celui dont la valeur du champ importance est la plus elevée) de la façon suivante :
Code :
et le problème reste le même. Idem j'ai testé ce qu'il y a à l'intérieur de la boucle des fois que ça vienne de mon recordset, mais, le problème reste le même, même si je place dans la boucle un simple response.write("toto") ca ne fonctionne pas Enfin je te remercie de te pencher sur mon problème parce que c'est vrai que la je comprends vraiment pas ! |
||
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 810 ![]() |
Re,
Cette ligne me gene un peu : Je crois que selected est un mot réservé Extrait de MSDN Citation:
__________________
Par principe, je ne réponds pas aux messages URGENT. Il n'y a pas de choses urgentes, il n'y a que des choses en retard. (un inconnu) |
|
|
|
00
|
|
|
#5 | ||
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 177 ![]() |
[edit] desolé j'avais pas vu ton poste, je tapais le miens en même temps, pour selected je savais pas mais dans tous les cas ca n'est pas lui qui plante la page, lit la suite de mon poste tu verras c'est trop bizzare !
ok, je viens de faire quelques tests, c'est encore plus fort que prévu ! J'ai fait une page de test dans laquelle il n'y a que 20 lignes : une boucle for i et l'appelle de la méthode display de mon objet, ca donne ca : Code :
Je viens de pousser les tests un peu plus loin ; j'explique un peu ce qu'est mon objet et ce que fait la méthode display avant : monObjet correspond a un questionnaire et il contient un tableau d'objet correspondant aux questions du questionnaires. La methode display affiche l'intitulé du questionnaire et parcours les questions pour les afficher. Si j'ai une boucle for i ca plante des l'instant ou mon questionnaire contient plus de 1 questions Si j'ai une boucle for j, ca fonctionne même si il contient un nombre important de questions. Ca m'embrouille de plus en plus, pourquoi le nombre de questions influe sur le plantage ? en plus au bout de 2 questions ca plante, ca me parait incroyable alors qu'avec une boucle for j je peux en mettre autant que je veux sans que ca plante ! |
||
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 5 849 ![]() |
Salut,
As-tu essayé les autres lettres de l'alphabet? ![]() Est-ce que tu utilise "Option explicit"? A+ |
|
00
|
|
|
#7 | |
|
Membre éprouvé
![]() Inscription : septembre 2004 Messages : 368 ![]() |
Citation:
ou une variable globale i déclarée dans un include
|
|
|
|
00
|
|
|
#8 | ||
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 177 ![]() |
Merci pour vos réponses
effectivement ca passe avec toutes les autres lettres sauf, i. Il semble que le "i" soit reconnu comme une variable globale ! On dirait bien qu'il se passe quelque chose du style, car j'ai eu exactement le même probleme dans une autre page, j'ai un classe tableau qui simule les méthodes de gestion des tableaux en PHP (vu qu'en VBScript il n'existe rien du genre) avec methodes "Push" "Pop", "In_Array", etc. J'avais le code suivant : Code :
Il semble donc qu'effecitvement l'utilisation d'une boucle For i dans ma page déclare "i" comme variable globale qui ensuite est reconnue a l'interieur des procédures utilisant des boucles For "i". Je suis donc obligé dans mes procédures de déclarer "Dim i" pour bien préciser que je travaille sur des variables locales. Si c'est bien ca, c'est trop la galère que des variables utilisées dans la section principale soit reconnues comme globales dans les procédures , ca ne fonctionne pas de la même manière dans d'autres langages (comme le PHP auquel je suis bien plus habitué) alors ca m'embrouille complétement ! D'habitude si on veut qu'une variable soit globale il faut le spécifier, le simple fait de l'utiliser ne suffit pas ! Immobilis, peux tu m'en dire plus sur "Option explicit" , je ne sais pas du tout a quoi cela correspond. |
||
|
|
00
|
|
|
#9 |
|
Membre éprouvé
![]() Inscription : septembre 2004 Messages : 368 ![]() |
ca oblige la déclaration explicite des variables. Puisqu'en vb il est possible d'utiliser des variables sans les avoir déclarées
|
|
|
00
|
|
|
#10 |
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 177 ![]() |
Merci pour l'info, effectivement c'est pas plus mal de devoir les déclarer, a l'avenir j'utiliserais le Option Explicit, je viens du PHP alors je suis plus qu'habitué à la non-déclaration des variables ; par contre vu qu'en VBScript, les variables non déclarée ont une portée globale, ca me semble carrement génant de ne pas les déclarer ! (le preuve je me retrouve avec un indice de boucle qui a une portée globale, d'ailleurs je trouve ca assez hallucinant que les variables non déclarées aient une portée globale !).
Mon problème est à nouveau résolu, merci pour votre aide ! |
|
|
00
|
|
|
#11 | |||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 5 849 ![]() |
Citation:
Une variable est "gobale" si elle est déclarée en dehors de toute procédure ou fonction ou classe etc... Exemple: Code :
|
|||
|
00
|
|
|
#12 | ||
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 177 ![]() |
(desolé pour la réponse tardive, vacances
C'est la que je ne comprend pas justement, en gros moi je ne déclare(ais) jamais les variables (pour cause je viens du PHP), donc en gros mon code ce résume à Code :
|
||
|
|
00
|
|
|
#13 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 5 849 ![]() |
Peut-être cela peut-il t'aider à comprendre mieux la portée des variables
Code :
|
||
|
00
|
|
|
#14 | ||||
|
Membre régulier
![]() Inscription : décembre 2005 Messages : 177 ![]() |
salut!
Je viens de tester ton code. J'ai pense que j'ai bien compris le concept de variable globale en ASP et c'est ce concept qui me gene : mon probleme vient justement du fait que je ne déclare pas du tout mes variables, en gros c'est ton code mais sans les Dim de déclaration : Code :
Code :
- Par exemple, ta boucle principale va de 0 a la taille d'un tableau, et dans ta boucle tu lis le tableau, mais dans ta procédure, ta boucle for i va au dela de la taille du tableau, comme c'est le même i qui sera utilisé, tu auras une erreur en depassant la taille de ton tableau. Et ca peut poser plein d'autres types d'erreurs ou de confusion, je suppose que tu imagines ! Maintenant c'est clair que a chaque procédure, je déclare toutes les variables qui seront utilisées pour être sur qu'elles soient locales, mais en attendant j'ai pas mal de pages qui peuvent potentiellement avoir ce probleme. Je ne comprends pas que la non déclaration des variables soient autorisées si ca entraine par exemple des indices de boucles globaux ! |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com