P.O.K Posté 22 Avril 2009 Posté 22 Avril 2009 Bonjour à tous, je suis en train de créer une application permettant de réserver du matériel dans une entreprise. Pour cela, les utilisateurs doivent sélectionner le matériel et indiquer ensuite les dates de reservation. Bien entendu, le même appareil ne peut pas être réservé deux fois le même jour. J'aimerai donc qu'un message apparaisse si quelqu'un sélectionne une date déjà prise. Malheureusement, je ne sais pas du tout comment faire... Voici le code de ma page : <%NoPretReservation = request.QueryString("NoPretReservation")NomReservation = request.QueryString("NomReservation")LoginReservation = request.QueryString("LoginReservation")DateDebutReservation = request.QueryString("DateDebutReservation")DateFinReservation = request.QueryString("DateFinReservation")NoPretMateriel = request.QueryString("NoPretMateriel")Valider = request.QueryString("Valider")set RS = Server.CreateObject("ADODB.recordset")ConnString ="driver={SQL Server}; server=XXXXX;uid=dbIntraInterHevs; pwd=XXX;database=XXX"if request.QueryString("Supp") = "ok" then RS.Open "select * from PretReservation", ConnString, 2, 3, 8RS.Find "NoPretReservation =" &NoPretReservationRS.DeleteRS.CloseResponse.Redirect("index.asp?nocategorie="&request.QueryString("nocategorie")&"&NoPage=1501&nolangue="&request.QueryString("nolangue")&"&noDomaine="&request.QueryString("noDomaine")&"&NoPretMateriel="&NoPretMateriel)end if%><%if Valider = "Valider" then RS.Open "select * from PretReservation", ConnString, 2, 3, 8 RS.addnew() rs("DateDebutReservation") = DateDebutReservation rs("DateFinReservation") = DateFinReservation rs("NomReservation") = NomReservation rs("LoginReservation") = session("Login") rs("NoPretMateriel") = NoPretMateriel RS.update RS.close%>Réservation effectuée !<br><br><a href="index.asp?nocategorie=<%=request.QueryString("nocategorie")%>&NoPage=1501&nolangue=<%=request.QueryString("nolangue")%>&noDomaine=<%=request.QueryString("noDomaine")%>&NoPretMateriel=<%=request.QueryString("NoPretMateriel")%>">Retour</a><% else RS.Open "select * from PretMateriel where NoPretMateriel="&NoPretMateriel, ConnString, 2, 3, 8 %> <form name="FormMateriel" method="get" action="index.asp"> <table border="0" cellpadding="0" cellspacing="5"> <tr> <td valign="top" width="15%"><b>Matériel</b></td> <td valign="top"><b>:</b></td> <td valign="top"><b><%= rs("NomMateriel")%></b></td> </tr> <tr><td valign="top"> </td></tr> <tr> <td valign="top" width="15%">Description</td> <td valign="top">:</td> <td valign="top" align="justify"><em><%= rs("DescriptionMateriel")%></em></td> </tr> <tr><td valign="top"> </td></tr> <tr> <td valign="top" width="15%">Login</td> <td valign="top">:</td> <td valign="top"><%= session("login")%></td> </tr> <tr><td valign="top"> </td></tr> <input type="hidden" name="nocategorie" value="<%=request.QueryString("nocategorie")%>"> <input type="hidden" name="NoPage" value="<%=request.QueryString("NoPage")%>"> <input type="hidden" name="nolangue" value="<%=request.QueryString("nolangue")%>"> <input type="hidden" name="noDomaine" value="<%=request.QueryString("noDomaine")%>"> <input type="hidden" name="NoPretMateriel" value="<%=NoPretMateriel%>"> <tr> <td valign="top">Nom</td> <td valign="top">:</td> <td valign="top"><input type="text" name="NomReservation"></td> </tr> <tr><td valign="top"> </td></tr> <%session.lcid = 2048%> <tr> <td valign="top" width="15%">Date de début</td> <td valign="top">:</td> <td valign="top"> <select name="DateDebutReservation"> <% for i = 1 to 365 DateDebut = date() + i %> <option value="<%= DateDebut %>"><%= DateDebut %></option> <%next%> </select> </td> </tr> <tr><td valign="top"> </td></tr> <tr> <td valign="top" width="15%">Date de fin</td> <td valign="top">:</td> <td valign="top"> <select name="DateFinReservation"> <% for i = 1 to 365 DateFin = date() + i %> <option value="<%= DateFin %>"><%= DateFin %></option> <%next%> </select> </td> </tr> <tr><td valign="top"> </td></tr> </table> <input type="submit" name="Valider" value="Valider"><input type="reset"> </form> <% RS.Close %> <a href="index.asp?nocategorie=<%=request.QueryString("nocategorie")%>&NoPage=1500&nolangue=<%=request.QueryString("nolangue")%>&noDomaine=<%=request.QueryString("noDomaine")%>">Retour</a> <hr> <%session.lcid = 1033%> <%RS.Open "select * from PretMateriel, PretReservation where PretMateriel.NoPretMateriel = PretReservation.NoPretMateriel and PretMateriel.NoPretMateriel="&NoPretMateriel&" order by DateDebutReservation", ConnString, 2, 3, 8%> <%session.lcid = 2048%> <p class="titre2">Dates réservées :</p> <%if rs.eof = true then%> Il n'y a aucune réservation pour l'instant. <%else%> <table border="0" bordercolor="#047cb4" cellpadding="5" cellspacing="0"> <tr> <td align="center" width="25%"> </td> <td align="center"><b>Début</b></td> <td align="center"><b>Fin</b></td> <td align="center" width="25%"> </td> </tr> <%do while rs.eof = false%> <%if rs("DateFinReservation") >= date then%> <tr> <td align="center" width="25%"> </td> <td align="center"><%=rs("DateDebutReservation")%></td> <td align="center"><%=rs("DateFinReservation")%></td> <td align="center" width="25%"><%if rs("LoginReservation") = session("Login") then%><a href="index.asp?nocategorie=<%=request.QueryString("nocategorie")%>&NoPage=1501&nolangue=<%=request.QueryString("nolangue")%>&noDomaine=<%=request.QueryString("noDomaine")%>&NoPretMateriel=<%=rs("NoPretMateriel")%>&NoPretReservation=<%=rs("NoPretReservation")%>&Supp=ok">Effacer</a><%else%> <%end if%></td> </tr> <%end if%> <% rs.movenext loop %> </table> <%end if RS.Close Set rs = nothingend if %> Et voici à quoi ressemble ma page : Pouvez-vous m'aider ? Merci beaucoup
Portekoi Posté 22 Avril 2009 Posté 22 Avril 2009 Bonjour, Si la donnée est stockée en base, pourquoi ne pas allez la chercher ? Dim sqlsql = "select date_matos from matable where lacle = '" & lacle & "'"set rs = ConnString.execute(sql)if not rs.eof then'mon traitement si le matériel est déjà priselse'sinon on insertend if Remarques en passant : 1 - Evite de faire du "select *". Sélectionne les champs dont tu as besoin 2 - Rs.Addnew et autre : pas super terrible. Utilise plutôt le SQL comme si dessous : 'Update ou insert ou autre...sql = "update ma table set monchp = '"&mavaleur&"' where lacle = "& cle &""set rs = connstring.execute(sql) Ensuite, renomme connstring en "conn", tu gagneras du temps. Pour finir, utilises les includes et fais des fonctions ou Sub. Bon courage Portekoi
P.O.K Posté 22 Avril 2009 Auteur Posté 22 Avril 2009 Merci beaucoup pour votre réponse ! J'ai essayé d'aller chercher la date sur la base mais le message d'erreur suivant apparait : Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '.2009'. /src/ReservationMateriel/Materiel.asp, line 25 Le problème doit sûrement venir du fait que dans la base les dates sont stockées de la manière suivant : "17.04.2009 00:00:00" Savez-vous comment faire pour régler ce problème ? Merci
Portekoi Posté 22 Avril 2009 Posté 22 Avril 2009 Re, Si vous êtes sous Sql Server, la date doit être ainsi :05/04/2007 15:48:33 il faut remplacer les "." par des "/" dans ta requête avec la fonction ASP : replace soit : sql = "select truc from bidule where cle = '"&cle&"' and madate = '"&replace(madate, ".", "/") &"'"set rs = ...
P.O.K Posté 22 Avril 2009 Auteur Posté 22 Avril 2009 Re, pourtant, dans ma base, les données sont comme ceci : "23.04.2009 00:00:00"... Comment pourrais-je faire pour modifier ça ? Merci
Portekoi Posté 22 Avril 2009 Posté 22 Avril 2009 Tu as bien un format datetime ? C'est quoi ta version de Sql Server ? Quelle langue?
P.O.K Posté 22 Avril 2009 Auteur Posté 22 Avril 2009 Non j'ai le format "smalldatetime". Je vais essayer de le changer. J'ai SQL Server 2005, en français.
Portekoi Posté 22 Avril 2009 Posté 22 Avril 2009 Je ne connais pas sous 2005 mais une chose, n'oublie pas de mettre des quotes (') pour entourer ta date : sql = "select champ from table where madate = '"&madate&"'"
P.O.K Posté 22 Avril 2009 Auteur Posté 22 Avril 2009 J'ai modifié le format des champs et ajouté les quotes. Voici l'erreur qui apparait : Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][sql Server]The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. /src/ReservationMateriel/Materiel.asp, line 25
P.O.K Posté 24 Avril 2009 Auteur Posté 24 Avril 2009 Bonjour, excusez-moi pour le retard, j'ai eu un empêchement... Je crois qu'il y a un problème avec la solution que vous me proposez. Dans ma base de données, je stocke uniquement la date de début de la réservation et la date de fin et non pas toutes les dates réservées... Cela pose donc un problème non ?
Portekoi Posté 24 Avril 2009 Posté 24 Avril 2009 Euh non, il suffit de faire une requete pour trouver si la date demandée est supérieure à la date début et inférieure à la date de fin sql = "select monchamp from matable where madatedebut <= '"& mavardate &"' and madatefin >= '"& mavardate &"' and macle = '"& macle &"'"
Portekoi Posté 27 Avril 2009 Posté 27 Avril 2009 As tu avancé? Si tu as du code, montre le moi si tu veux
P.O.K Posté 18 Juin 2009 Auteur Posté 18 Juin 2009 Bonjour, désolé de ne plus avoir répondu, on m'a chargé d'un autre projet qui m'a pris pas mal de temps. J'ai cependant trouvé une solution à mon problème, voici le code : RS.Open "select * from PretMateriel, PretReservation where ((DateDebutReservation <= '"&DateDebutReservation&"' and DateFinReservation >= '"&DateDebutReservation&"') or (DateDebutReservation <= '"&DateFinReservation&"' and DateFinReservation >= '"&DateFinReservation&"') or (DateDebutReservation >= '"&DateDebutReservation&"' and DateFinReservation <= '"&DateFinReservation&"') ) and PretReservation.NoPretMateriel="&NoPretMateriel&" and PretMateriel.NoPretMateriel ="&NoPretMateriel, ConnString, 2, 3, 8 Merci beaucoup pour l'aide apportée.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant