Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

ASP

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > Questions diverses
        Pourquoi j'ai le message "L'appel d'une fonction Sub n'admet pas de parenthèses" ?
        Comment commenter un bloc de code ASP/VBScript ?
        Comment déclare-t-on et/ou redimensionne-t on un tableau ?
        Peut-on effectuer une redirection dans un autre cadre (frame) ?
        Comment lancer un exécutable depuis une page ASP ?
        Comment créer un fichier Word sur le serveur ?
        Comment ajouter des headers qui désactivent le cache d'une page ?
        Comment retourner un objet depuis une fonction et l'utiliser ?
        Comment utiliser les cookies ?
        Comment arrondir un nombre décimal ?

rechercher
precedent    sommaire       telecharger


Pourquoi j'ai le message "L'appel d'une fonction Sub n'admet pas de parenthèses" ?
auteur : Florian
Il existe deux types de fonctions :
  • les fonctions avec valeur de retour.
  • les fonctions sans valeur de retour.
Dans le 1er cas, on utilise le mot-clé Function. Dans le 2ème cas, on peut utiliser indifférement le mot-clé Function ou le mot-clé Sub, même si par convention on utilise plutôt Sub. On parle alors de procédure. Et comme vous le signifie le message d'erreur, l'appel d'une procédure (i.e. d'une fonction sans valeur de retour) s'écrit sans parenthèses. Une alternative est d'utiliser l'instruction Call et dans ce cas alors il faut mettre des parenthèses.
<%
Sub Ecrire_Texte_Nfois(texte, Nfois)
  Dim i
  For i=1 To Nfois
    Response.Write "Le texte est " & texte & "<br>"
  Next
End Sub

' 1ère méthode
Ecrire_Texte_Nfois "toto", 3

' 2ème méthode
Call Ecrire_Texte_Nfois("toto", 3)
%>

Comment commenter un bloc de code ASP/VBScript ?
auteur : Florian
L'un des grands manques de VBScript est la possibilité de commenter de façon simple plusieurs lignes de code. En effet, dans la majorité des langages, il existe des délimiteurs qui permettent de commenter un bloc de code, comme /* ... */ par exemple. En VBScript, il est nécéssaire de commenter chaque ligne avec le caractère ' ou l'instruction REM. Voici une astuce pour commenter malgré tout un bloc de code sans commenter chaque ligne, opération qui peut s'avérer fastidieuse. Il suffit d'encapsuler le code en question dans une procédure... et de ne pas appeler cette procédure.
<%
...
Sub bloc_de_code_a_commenter
  ...
  ...
  ...
End Sub
...
%>
Et lorsque l'on veut à nouveau tester le bloc de code, il suffit de commenter Sub et End Sub
<%
...
' Sub bloc_de_code_a_commenter
  ...
  ...
  ...
' End Sub
...
%>

Comment déclare-t-on et/ou redimensionne-t on un tableau ?
auteur : Florian
Nota : Les explications suivantes concernent le langage vbscript.
Il y a deux cas de figure à considérer :
  • les tableaux statiques : tableaux dont le nombre d'éléments n'évolue pas au cours du script.
  • les tableaux dynamiques : tableaux redimensionnables.
Les tableaux statiques :
On utilise l'instruction Dim en précisant le nombre de dimensions (jusqu'à 60 !) et l'indice maximum de chaque dimension. Comme l'indice du premier élément est 0, le nombre d'éléments d'une dimension est donc indice max + 1.
<%
Dim montableau_1(3) ' déclaration d'un tableau statique à une dimension contenant 4 éléments
montableau_1(0) = "élément 0" ' définition de la valeur du 1er élément du tableau
montableau_1(1) = "élément 1"
montableau_1(2) = "élément 2"
montableau_1(3) = "élément 3"

Dim montableau_2(3,2) ' déclaration d'un tableau statique à 2 dimensions : 4 lignes, 3 colonnes
montableau_2(0,0) = "ligne0 - col0" : montableau_2(0,1) = "ligne0 - col1" : montableau_2(0,2) = "ligne0 - col2"
montableau_2(1,0) = "ligne1 - col0" : montableau_2(1,1) = "ligne1 - col1" : montableau_2(1,2) = "ligne1 - col2"
montableau_2(2,0) = "ligne2 - col0" : montableau_2(2,1) = "ligne2 - col1" : montableau_2(2,2) = "ligne2 - col2"
montableau_2(3,0) = "ligne3 - col0" : montableau_2(3,1) = "ligne3 - col1" : montableau_2(3,2) = "ligne3 - col2"
%>
Les tableaux dynamiques :
Il est possible de déclarer un tableau dynamique de 2 façons : en le déclarant à l'aide de l'instruction Dim mais sans préciser le nombre d'éléments ni de dimensions, puis en lui donnant ses dimensions avec l'instruction Redim, ou bien en le déclarant directement avec l'instruction Redim.
<% Dim montableau_1() ' déclaration d'un tableau dynamique
Redim montableau_1(3) ' redimensionnement du tableau
montableau_1(0) = "élément 0" : montableau_1(1) = "élément 1" : montableau_1(2) = "élément 2" : montableau_1(3) = "élément 3"

Redim montableau_2(3,2) ' déclaration d'un tableau dynamique à 2 dimensions : 4 lignes, 3 colonnes
For l=0 to Ubound(montableau_2, 1) ' Ubound(montableau_2, 1) =>Limite supérieure de la dimension 1 du tableau
  For c=0 to Ubound(montableau_2, 2) ' Ubound(montableau_2, 2) =>Limite supérieure de la dimension 2 du tableau
    montableau_2(l,c) = "ligne" & l & " - col" & c
  Next
Next

' redimensionnement du tableau montableau_1 sans conserver ses valeurs actuelles
Redim montableau_1(9) ' montableau_1 est maintenant un tableau à une dimension de 10 éléments

' redimensionnement du tableau montableau_2 en conservant ses valeurs actuelles
Redim Preserve montableau_2(3,3) ' montableau_2 est maintenant un tableau à 2 dimensions : 4 lignes, 4 colonnes
%>
Plusieurs remarques concernant le redimensionnement :
  • Pour calculer la limite supérieure d'une dimension, on utilise la fonction Ubound(nomtableau, dimension) (ceci est vrai également pour les tableaux statiques).
  • Le mot-clé Preserve permet lors du redimensionnement de conserver les valeurs actuelles du tableau.
  • Si vous donnez un indice maximum inférieur à celui utilisé avant le redimensionnement, les valeurs contenues dans les éléments éliminés sont perdues.
  • Lors de l'utilisation du mot-clé Preserve sur un tableau à plusieurs dimensions, seule la dernière dimension peut être redimensionnée.
  • Si vous n'utilisez pas le mot-clé Preserve lors du redimensionnement, il est possible d'ajouter ou d'enlever des dimensions au tableau (passer par exemple d'un tableau à une dimension à un tableau à 2 dimensions).
  • Il est possible d'utiliser l'instruction Redim dans une structure itérative, toutefois ce n'est pas conseillé.
Une autre possibilité de déclarer un tableau dynamique est l'utilisation de la fonction Array() qui va retourner un Variant contenant un tableau, au lieu d'avoir un tableau de Variant. Pour bien appréhender cette nuance, comparez le code pour l'affichage avec celui que vous écririez pour le tableau montableau_2.
<%
Dim montableau
montableau = array(array("l1un", "l1deux", "l1trois"), array("l2un", "l2deux", "l2trois"), array("l3un", "l3deux", "l3trois"))

' affichage du contenu de montableau
For i=0 to Ubound(montableau,1)
  For j=0 to Ubound(montableau(i),1)
    Response.Write "montableau(" & i & ")("& j & ") : " & montableau(i)(j) & "<br>"
  Next
Next
%>

Peut-on effectuer une redirection dans un autre cadre (frame) ?
auteur : Florian
En ASP, il n'est pas possible de choisir la cible (cadre/frame) dans laquelle effectuer une redirection avec la méthode Redirect de l'objet Response. La redirection va forcément s'effectuer dans celle dans laquelle se trouve le fichier qui contient cette instruction. Donc si l'on veut rediriger dans une autre frame, il faut soit charger la page qui contient l'instruction de redirection déjà dans la bonne frame, soit faire cela en javascript.
Une solution alternative apparue avec ASP 3.0 est d'utiliser la méthode Transfer de l'objet Server. Cette instruction va, comme son nom l'indique, suspendre l'exécution de la page en cours et transférer le contrôle à la page spécifiée.
<%
' du code de la page en cours
Server.Transfer("url_autre_page.asp")
' du code non exécuté
%>
Alternative : la méthode Execute de l'objet Server qui, contrairement à Transfer, va redonner la main à la page de départ. Voir un exemple de cette méthode ici .


Comment lancer un exécutable depuis une page ASP ?
auteur : Florian
Il faut pour cela utiliser les méthodes du composant WSH(Windows Scripting Host).
Voici un aperçu des différentes versions installées par défaut suivant le système d'exploitation utilisé

Système d'exploitation 1.0 2.0 5.6
Microsoft Windows 98 X    
Microsoft Windows NT 4 Option Pack X    
Microsoft Windows 2000   X  
Microsoft Windows XP     X
Vous pouvez toutefois installer la dernière version disponible dans les liens du post-it correspondant dans le forum ASP. Voici un exemple qui va lancer une instance de notepad sur le serveur
<%
Dim WshShell
' déclaration d'un objet WshShell
Set WshShell = Server.CreateObject("Wscript.Shell")

' lancement de notepad sur le serveur
WshShell.Run "%windir%\notepad "

' destruction de l'objet WshShell
Set WshShell = nothing
%>
Voici un autre exemple qui va lancer une instance de l'interpréteur de commande, changer le chemin pour qu'il pointe sur C, exécuter la commande DIR et envoyer le résultat dans le fichier ArboC.txt sur C
<%
Dim WshShell
Set WshShell = Server.CreateObject("Wscript.Shell")

WshShell.Run "cmd /C CD C:\ & DIR>ArboC.txt"

Set WshShell=nothing
%>
Attention, dans l'exemple avec notepad, vous ne verrez pas le bloc-note s'ouvrir. Il ne faut en effet pas oublier ici que tout se passe sur le serveur. Il faut donc bien savoir ce que vous faites avant d'utiliser ces instructions.
Il est toutefois possible d'exécuter ces instructions sur le client.
<script language="vbscript">
Dim WshShell

' déclaration d'un objet WshShell
Set WshShell = CreateObject("Wscript.Shell")

' lancement de notepad sur le client
WshShell.Run "%windir%\notepad "

' destruction de l'objet WshShell
Set WshShell = nothing
</script>
Cependant vous devez savoir que ce code ne s'effectuera pas sur le client sans un message d'alerte de la part du navigateur, comme montré sur l'image suivante.

En effet, l'exécution de ce genre de code représente une agression qui peut engendrer de gros trous de sécurité. C'est pour cela que vous ne pouvez (devez) pas vous appuyer sur ce genre de code client, beaucoup d'utilisateurs étant susceptibles de désactiver purement et simplement l'exécution de code activeX dans leur navigateur. De plus, seul Internet Explorer sera capable d'interpréter ce code.
Une dernière remarque : les codes présentés sont écrits en vbscript, mais il est tout à fait possible d'utiliser le JScript pour obtenir les mêmes résultats.


Comment créer un fichier Word sur le serveur ?
auteur : Gynsu
Pour créer un fichier word :
<% ' CREATE WORD DOCUMENT

    Set WordApp = CreateObject("word.application")
    Set WordDoc = WordApp.Documents.Add()
    
    WordApp.Application.Visible = False
    
    Set MyRange1 = WordDoc.Paragraphs.Add.Range
    MyRange1.InsertBefore("Appraisal Form")    
    MyRange1.Style = "Heading 1"    
    
    Set MyRange1 = WordDoc.Paragraphs.Add.Range
    MyRange1.InsertBefore("Manager: " & Manager & vbcrlf & "Appraisee: " & Appraisee)
    MyRange1.Font.Bold = true
        
    Set MyRange1 = WordDoc.Paragraphs.Add.Range
    MyRange1.InsertBefore(vbcrlf & "Please fill in all the required sections and return to HR via the internal mail system.")

' Set the directory location to store the generated documents
    WordDocPath = Server.MapPath("\alastair\appraisals\forms")
            ' Use the unique session ID as the filename.
    WordDoc.SaveAs WordDocPath & "\" & session.sessionID & ".doc"
WordDoc.Close
WordApp.Quit
    
Set WordDoc = Nothing
Set WordApp = Nothing %>
Note : MS Word doit être installé sur le serveur.


Comment ajouter des headers qui désactivent le cache d'une page ?
auteur : Jérôme
Pour supprimer (ou ne pas garder) la page dans le cache du navigateur, on peut utiliser ceci :
Response.Expires = -1
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "cache-control", "no-store"

Comment retourner un objet depuis une fonction et l'utiliser ?
auteur : Jérôme
Pour affecter une variable avec un objet, on utilise le mot-clé SET.
On applique donc ce principe à notre fonction :
function retourneObjet()
  ...
  set retourneObjet = objet
end function
Pour utiliser cet objet retourné par la fonction, on va utiliser une fois de plus le même principe
set objetretourne = retourneObjet()

Comment utiliser les cookies ?
auteur : Jérôme
Pour les créer :
<%response.cookies("identite")("nom") = "toto"
response.cookies("identite")("prenom") = "bonptitgars"
response.cookies("identite").expires = DateAdd("h", 1, time)%>
Pour les récupérer :
<%nomcook =  request.cookies("identite")("nom")%>
<input type="text" name="nom" value="<%=nomcook%>">

Comment arrondir un nombre décimal ?
auteur : Jérôme
Pour arrondir un nombre, il existe la fonction Round :
Round(expression[, numdecimalplaces])

Pour formatter un nombre, il existe la fonction FormatNumber :
FormatNumber(Expression [,NumDigitsAfterDecimal])

rechercher
precedent    sommaire       telecharger

Consultez les autres F.A.Q's

Valid XHTML 1.1!Valid CSS!


Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2004 Debug Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique ASP

Partenaire : Hébergement Web