很抱歉,如果标题有点含糊不清。我想不出怎么说呢!
我有一个脚本可以将数据检索到3个不同的记录集中。它们被称为rs1,rs2和rs3。
我稍后在脚本中有相当多的代码,所以我创建了一个节省存储空间等功能。
在函数中,我希望使用之前打开的记录集中的信息。我已经尝试将记录集的名称传递给函数,如下所示:
Function displayData(recordsetName)
response.write(recordsetName.Source)
End Function
displayData("rs1")
然而,这是试图显示一个名为recordsetName的记录集的结果,因为它不存在它会引发错误。
有人告诉我使用'ByRef'然而这会引发错误,说记录集不存在。
如何将传递给函数的recorset名称用作参数?
由于
答案 0 :(得分:6)
这里的其他答案类似,但......
Sub DiplayData(rst)
Response.Write rst.Source
End Sub
DisplayData rs1
注意Sub
而不是Function
,因为没有返回任何值。
此外,如果您将过程称为语句而不是将其值分配给变量的函数,请不要将参数括在()中。
答案 1 :(得分:1)
如果您想要的是,当您调用它时,它会打印到浏览器,您应该使用Sub
这样的方式:
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 ().
必须一个Sub,因为它不会返回任何内容。
否则,如果displayData应返回某些内容,无论是计算结果,还是响应代码,或者写入浏览器的字符串,都需要使用函数
Function displayData (rs)
Response.Write (rs.Source)
End Function
Dim rs1 as new Recordset
'snip
displayData (rs1)
为什么你试图以任何其他方式做到这一点并不是真的。
答案 2 :(得分:0)
您无法传递必须传递记录集对象的记录集的名称。
Sub DisplayData(byref rst as recordset)
response.write(rst.Source)
End Sub
DisplayData(rs1)
我还将你的函数改为Sub,因为在VB中函数必须返回一些东西。
答案 3 :(得分:0)
如果你真的想传递你可以做的名字
Sub DisplayData(rsName)
Eval("Response.Write(" & rsName & ".Source)")
End Sub
DisplayData("rs1")
但不要。这很愚蠢,可以让你陷入困境。你应该这样做其他人如何说并传递记录集本身。
Sub DisplayData(rs)
Response.Write rs.Source
End Sub
DisplayData(rs1)
答案 4 :(得分:0)
通过它的名称检索任何变量的最快和最脏(当然也是最不安全)的方法是:
Function DisplayData(rsName)
Dim localRS
Set localRS = Eval(rsName)
Response.Write localRS.Source
End Function
如果从Web(通过表单等)检索rsName
的值,则不应使用上述方法,因为这为ASP / VBScript级别提供了注入攻击的范围。
但是,鉴于提到的可用记录集数量有限,以下内容会更安全:
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