2009-08-18 3 views
2

Désolé si le titre est un peu vague. Je ne pouvais pas penser comment le dire autrement!ASP - Utilisation du paramètre Function pour faire référence au jeu d'enregistrements

J'ai un script qui récupère des données dans 3 jeux d'enregistrements différents. Ils sont appelés rs1, rs2 et rs3.

J'ai un assez grand morceau de code plus tard dans le script, donc je l'ai créé une fonction pour sauver économiser de l'espace, etc.

Au sein de la fonction que je souhaite utiliser les informations des enregistrements ont ouvert plus tôt. J'ai essayé passer le nom du jeu d'enregistrements à la fonction comme suit:

Function displayData(recordsetName) 

response.write(recordsetName.Source) 

End Function 

displayData("rs1") 

Cependant, cela tente de montrer les résultats d'un recordset appelé recordsetName et comme ce doesen't existe, il vomit une erreur.

Quelqu'un m'a dit d'utiliser 'ByRef' mais cela génère une erreur indiquant que le jeu d'enregistrements n'existe pas.

Comment puis-je utiliser un nom de recorset transmis à une fonction en tant que paramètre?

Merci

Répondre

6

Les autres réponses ici sont similaires, mais ...

Sub DiplayData(rst) 
    Response.Write rst.Source 
End Sub 
DisplayData rs1 

Remarque Sub ne Function car aucune valeur est retournée. Lorsque vous appelez une procédure comme instruction plutôt que comme une fonction dont vous affectez une valeur à une variable, n'incluez pas les paramètres dans().

+0

Merci à tous pour votre réponse. J'étais presque là mais j'avais juste besoin de ce petit indice !!! –

1

Si ce que vous voulez est que lorsque vous l'appelez, il imprime au navigateur, ce que vous devez utiliser est un Sub de cette façon:

Sub displayData (rs) 
    Response.Write (rs.Source) 
End Sub dim rs1 as new Recordset 
'snip 
displayData rs1 'note that calling subs in VB classic, doesn't use the enclosing(). 

Il doit être un Sub, car il ne retournera rien.

Sinon, si displayData doit retourner quelque chose, que ce soit les résultats d'un calcul ou un code de réponse, ou la chaîne écrite au navigateur, vous devez utiliser une fonction

Function displayData (rs) 
    Response.Write (rs.Source) 
End Function 

Dim rs1 as new Recordset 
'snip 
displayData (rs1) 

FCKeditor pourquoi vous êtes essayer de le faire d'une autre manière.

+0

La déclaration devrait être premier Dim comme cela est asp classique. – jammus

+0

Techniquement, on ne peut pas utiliser de parenthèse lors de l'appel d'un Sub (bien que, dans les cas où un seul paramètre est passé, le compilateur ignore le parenthèse comme partie de l'expression qui est le premier paramètre, plutôt que le convention d'appel) –

+0

Vous avez raison. J'ai corrigé la réponse. (Ne répondez jamais rapidement) – voyager

0

Vous ne pouvez pas transmettre le nom du jeu d'enregistrements dont vous devez transmettre l'objet jeu d'enregistrements. J'ai également changé votre fonction en Sub parce que dans VB une fonction doit retourner quelque chose.

+1

Il devrait être juste Sub DisplayData (ByRef) – jammus

+0

Aussi le ByRef est superflus. – AnthonyWJones

+0

Vous avez raison en ce que ByRef est la valeur par défaut, mais j'aime être explicite dans ces cas. :) – klabranche

0

Si vous voulez vraiment passer le nom que vous pourriez faire

Sub DisplayData(rsName) 
    Eval("Response.Write(" & rsName & ".Source)") 
End Sub 

DisplayData("rs1") 

Mais non. C'est bête et peut vous mettre dans le pétrin. Vous devriez le faire comme les autres gars disent et passent dans le jeu d'enregistrements lui-même.

Sub DisplayData(rs) 
    Response.Write rs.Source 
End Sub 

DisplayData(rs1) 
0

Le plus rapide et le plus sale (et certainement le moins sûr) la méthode de récupération d'une variable par son nom est:

Function DisplayData(rsName) 
    Dim localRS 

    Set localRS = Eval(rsName) 

    Response.Write localRS.Source 
End Function 

La méthode ci-dessus ne devrait vraiment pas être utilisé si la valeur de rsName est extrait de la web (via formulaire, etc), car cela donne la possibilité d'une attaque par injection au niveau ASP/VBScript.

Cependant, étant donné le nombre limité de recordsets disponibles mentionné, ce qui suit serait plus sûr:

Function DisplayData(rsName) 
    Dim localRS 

    Select Case LCase(rsName) ' Case insensitive matches 
    Case "rs1" 
     Set localRS = rs1 
    Case "rs2" 
     Set localRS = rs2 
    Case "rs3" 
     Set localRS = rs3 
    Case Else ' What to do if the name is not recognised 
     Err.Raise 4000, "DisplayData", "Bad record set name" 
    End Select 

    Response.Write localRS.Source 
End Function 
Questions connexes