IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP Discussion :

Problème de variable empechant le fonctionnement du code


Sujet :

ASP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Par défaut Problème de variable empechant le fonctionnement du code
    Bonjour,

    J'ai un problème qui est assez compliqué à expliquer.

    Dans une première page, j'ai un formulaire qui permet de choisir un horaire.
    Ce formulaire envoie sur une seconde page ou là, en fonction de l'horaire choisi j'affiche différente chose.

    Voici le code la seconde page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <form method="POST" action="checklist_journaliere.asp" id=form1 name=form1><%
     
     
     
     
    	hor=Request.Form("horaire")
     
    	'hor="11h00"
     
    	requete_checklist="SELECT control_domaine, control_name, control_procédure FROM ((tb_control t1 "
    	requete_checklist=requete_checklist & "INNER JOIN tb_control_planifie t2 ON t1.id_control=t2.id_control) "
    	requete_checklist=requete_checklist & "INNER JOIN tb_jour_semaine t3 ON t3.id_jour=t2.id_jour)  "
    	requete_checklist=requete_checklist & "INNER JOIN tb_horaire t4 ON t4.id_horaire=t2.id_horaire "
    	requete_checklist=requete_checklist & "WHERE t3.jour='"&jour_now&"' AND t4.horaire='"&hor&"' "
    	requete_checklist=requete_checklist & "ORDER BY t1.control_domaine, t1.place_control"
     
    	checklist			'appel procédure
     
     
    	if Request.Form("choix_action")="Enregistrer" then
     
    			checklist
     
    	elseif Request.Form("choix_action")="Revenir" then
     
    		Response.Redirect("portail.asp")
     
    	end if
     
    	%>
    </form>
    <%
    (checklist est une procédure qui fonctionne car je l'ai utilisé avant pour d'autres pages)

    Si je met hor="11h00" ça fonctionne sans problème.Mais à partir du moment ou je récupère le champ du formulaire je vais avoir un problème.
    L'appel de la première procédure va fonctionner parfaitement.
    Mais quand je vais entrer dans la condition "if" peut improte ce que je fais je vais avoir cette erreur que je n'ai pas si je définis hor="11h00"

    ADODB.Recordset erreur '800a0bcd'

    BOF ou EOF est égal à True ou l'enregistrement actuel a été supprimé. L'opération demandée nécessite un enregistrement actuel.

    /meteo/checklist_journaliere.asp, ligne 106
    La ligne 106 correspond à une ligne de la procédure "checklist"

    pourtant ça fonctionne bien une fois, et quand c'est hor="11h00" ça fonctionne tout court.


    voici ma procédure même si elle est un peu longue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
     
    sub checklist
     
     
    	set checkRS = CreateObject("ADODB.RecordSet")
    	checkRS.Open requete_checklist, connexion,1,1
     
    	dim tb_ctrl_name()
    	dim tb_ctrl_dom()
    	dim tb_ctrl_proc()
     
    	Response.Write "</br></br>"
    	j=0
    	do while not checkRS.EOF
    		redim preserve tb_ctrl_name(j)
    		redim preserve tb_ctrl_dom(j)
    		redim preserve tb_ctrl_proc(j)
     
    		tb_ctrl_dom(j)=checkRS("control_domaine")
    		tb_ctrl_name(j)=checkRS("control_name")
    		tb_ctrl_proc(j)=checkRS("control_procédure")
     
    		checkRS.MoveNext
    	j=j+1
    	loop
     
    	checkRS.MoveFirst
     
    	session("tb_dom")=tb_ctrl_dom
    	session("tb_name")=tb_ctrl_name
    	session("tb_proc")=tb_ctrl_proc
     
     
    	%>
     
     
    	<table class="checklist_matin" border="1">
    		<caption class="titre1">Checklist journalière du  <%=DATE%></caption>
    		<tr>
    			<th>Domaines</th>
    			<th>Contrôles</th>
    			<th>Procédure</th>
    			<th>Resultat</br>
     
    		<input type="submit" name="allok" value="OK">
     
    			</th>
    			<th>Incident</th>
    			<th>Commentaire</th>
    		</tr><%
     
    		i=0
    		j=1
    		do while not checkRS.EOF
     
    			modulo = i mod 2
    			if modulo=0 then
    				couleur="ligne1"
    				bg="#fff0f5"
    			else
    				couleur="ligne2"
    				bg="#fffff0"
    			end if
     
     
    			Response.Write "<tr class=""" & couleur & """>"
     
     
    				Response.Write "<td  align=""center"">" & checkRS("control_domaine") & "</td>"		'nom de domaine
     
    				Response.Write "<td align=""center"">" & checkRS("control_name") & "</td>"			'nom du contrôle
     
    				if checkRS("control_procédure") <> "" then
    					Response.Write "<td align=""center""><a href=""" & checkRS("control_procédure") & """>Lien</a></td>"		'si la procédure existe on crée un lien vers la procédure
    				else
    					Response.Write "<td align=""center"">--</td>"				'sinon on met une case vide
    				end if
     
     
    				Response.Write "<td align=""center""><input style='background-color:" &bg&  "' type=""text"" maxlength=""2""  size=""1"" name=""result" & i & """ " 
     
     
    				if Request.Form("result"&i)="" and Request.Form("allok")="OK" then
    					Response.Write "value=""OK""></td>"
    				elseif Request.Form("result"&i)="" and Request.Form("allok")="" then
    					Response.Write "></td>"
    				elseif Request.Form("result"&i)<>"" then
    					Response.Write "value=""" & Request.Form("result"&i) & """></td>"
    				end if
     
     
    				Response.write "<td align=""center""><input style='background-color:" &bg&  "' type=""text"" size=""40""name=""incident" & i & """ "
    				if Request.Form("incident"&i)<>"" then
    					Response.Write "value=""" & Request.Form("incident"&i) & """"
    				end if
    				Response.Write "></td>"		'input texte pour incident
     
    				Response.write "<td align=""center""><input style='background-color:" &bg&  "' type=""text"" size=""50"" name=""commentaire" & i & """ "
    				if Request.Form("commentaire"&i)<>"" then
    					Response.Write "value=""" & Request.Form("commentaire"&i) & """"
    				end if
    				Response.Write "></td>"		'input texte pour commentaire
     
    			Response.write "</tr>"
     
     
     
    			checkRS.MoveNext
    			i=i+1
    			j=j+1
    		loop
     
    		nb_enregistrement=checkRS.RecordCount
     
     
    	%>
    	</table>
     
     
    	<p class="ctrl_gauche">Pilote :
    	<p class="affichage_checklist">
    	<!--<FONT size="3"><a href="affichage_checklist_matin.asp">Affichage de la checklist</a></FONT>-->
    	</p>
    	<span class="ctrl_gauche"><select name="pilote">
    		<option value=""></option>
    		<%
    		requete_pilote="SELECT nom FROM tb_pilote ORDER BY nom"
    		set RS=CreateObject("ADODB.RecordSet")
    		RS.Open requete_pilote, connexion
    		do while not RS.EOF
    			if RS("nom")=Request.Form("pilote") then
    				choix = "selected=""selected"" "
    			else
    				choix = ""
    			end if
    			Response.Write "<option value=""" & RS("nom") & """ " & choix & " >" &RS("nom")& "</option>"
    			RS.MoveNext
    		loop
    		RS.Close
    		set RS = nothing
    		%>
    	</select></span>
     
     
     
    	<p class="ctrl_gauche">Commentaire : <FONT size="2">(255 caractères maximum)</FONT>	</br>
    	<textarea name="general_comment" rows="3" cols="35">
    	<%if Request.Form("general_comment")<>"" then
    		Response.Write Request.Form("general_comment")
    	end if%>
    	</textarea></p>
     
    	<p class="ctrl_gauche">
    	<input type="submit" name="choix_action" value="Enregistrer">
    	<input type="submit" name="choix_action" value="Revenir">
    	<input type="hidden" name="nb_rec" value="<%=nb_enregistrement%>"></p>
     
     
    	<% 
     
    	checkRS.Close
    	set checkRS = nothing
     
    end sub
    Je ne comprend vraiment pas pourquoi ça ne fonctionne pas.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Par défaut
    j'ai testé un peu ma variable et enfait quand c'est hor="11h00" la variable est accessible partout mais quand c'est hor=Request.Form("horaire") la variable n'est pas accessible dans les conditions.


    edit : je vais rajouter le bout de code qui me permet de récupérer la variable vu que c'est un problème de portée de variable je pense. Quand je fais un "response.write hor", la variable n'est affiché que sur le premier chargement de page.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <form method="POST" action="checklist_journaliere.asp" id=form1 name=form1>
    <%
     
    week_day=weekday(now)
    select case week_day
    	case "2"
    		jour_now="lundi"
    	case "3"
    		jour_now="mardi"
    	case "4"
    		jour_now="mercredi"
    	case "5"
    		jour_now="jeudi"
    	case "6"
    		jour_now="vendredi"
    	case "7"
    		jour_now="samedi"
    end select
     
     
    requete_horaire="SELECT DISTINCT t1.horaire, t1.id_horaire FROM (tb_horaire t1 INNER JOIN tb_control_planifie t2 ON t1.id_horaire=t2.id_horaire) " &_
    " INNER JOIN tb_jour_semaine t3 ON t3.id_jour=t2.id_jour WHERE t3.jour='"&jour_now&"' ORDER BY horaire "
    set horRS = CreateObject("ADODB.RecordSet")
    horRS.Open requete_horaire, connexion%>
     
     
    	<p class="ctrl_gauche">
    	Choisissez un horaire : </Br>
    	<select name="horaire">
    	<%	
    	do while not horRS.EOF
    	if horRS("horaire") = Request.Form("horaire") then
    		choix = "selected=""selected"" "
    	else
    		choix = ""
    	end if
    		Response.Write "<option value=""" & horRS("horaire") & """ " & choix & " >"  & horRS("horaire") & "</option>"&vbcrlf
    		horRS.MoveNext
    	loop
    	%>
    	</select>
     
    	</br></br><input type="submit" name="validation" value="Valider">
    	<input type="submit" name="validation" value="Revenir">
     
    	</p>
    </form>
    <%
     
     
    horRS.Close
    set horRS=nothing
     
    connexion.close			'fermeture de la connexion
    Set connexion = nothing 'libération de l'espace mémoire %>

  3. #3
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    Mettre tout ton code montre que tu ne te poses pas suffisement de questions. Ce n'est pas non plus sympa pour ceux qui te lisent. On n'a pas forcement envie d'éplucher ton code. Merci de limiter la longueur des morceaux de code.

    Si ton script renvoi une erreur de ce type c'est probalement parce que ton recordset est vide. Pour savoir ce que te renvoi la requete sql affiche la avec un response.write et passe la dans un requeteur de bd.

    Ta requete sql stipule dans la clause where le fait que la valeur de l'horaire doit etre égale à celle renvoyée dans le formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "WHERE t3.jour='"&jour_now&"' AND t4.horaire='"&hor&"' "
    Or, la valeur renvoyée par le formulaire est "id_horaire":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Response.Write "<option value=""" & horRS("id_horaire") & """ " & choix & " >"  & horRS("horaire") & "</option>"&vbcrlf
    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Par défaut
    ah oui c'est parce que j'avais testé différentes choses et j'ai oublié de les remodifier mais même avec "horaire" ça ne marche pas.

    quand j'affiche ma requetête, la première fois la requête est ok mais quand je valide par un input le champ horaire devient vide pour la requête suivante.

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Affiche les requetes SQL dans les deux cas et testes les.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Par défaut
    Première cas, juste après que la variable ait été transmise,

    ... WHERE t3.jour='mardi' AND t4.horaire='11h00' ORDER BY t1.control_domaine, t1.place_control
    Deuxième utilisation :

    ... WHERE t3.jour='mardi' AND t4.horaire='' ORDER BY t1.control_domaine, t1.place_control
    La première requête fonctionne dans access, mais la seconde non ce qui est normale au vue de la clause where.

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/06/2015, 12h55
  2. Problème de fonctionnement du code
    Par spamitovic dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/12/2010, 17h12
  3. Problème de fonctionnement avec Code::Blocks
    Par turbo225 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 20/12/2008, 12h14
  4. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31
  5. empecher la visualisation du code source
    Par Teo dans le forum ASP
    Réponses: 7
    Dernier message: 24/10/2003, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo