使用动态rs()从查询中获取列

时间:2014-09-15 07:07:12

标签: sql dynamic asp-classic

我创建了一个动态查询,它将返回带有动态列名的5列。它将始终以列名返回过去5年。

例如,今年它将重新使用这些列名称:

2014    2013    2012    2011    2010

但明年会是:

2015    2014    2013    2012    2011

目前我使用此代码来获取我的值:

get_2014 = rs("2014")
get_2013 = rs("2013")
get_2012 = rs("2012")
get_2011 = rs("2011")
get_2010 = rs("2010")

这将适用于今年,但不适用于明年。所以我认为我可以使用数组和类似的东西:

ShowLastXyears = 5
thisYear = Year(now)
dim get_years()
redim get_years(ShowLastXyears)
sql = ...
rs.open sql ...
do until rs.eof
    For k = 0 to ShowLastXyears-1
        get_years(k) = rs(thisYear-(k))
    Next
    rs.movenext
loop
rs.close

但后来我收到了这个错误:

Item cannot be found in the collection corresponding to the requested name or ordinal.

at line" get_years(k)= rs(thisYear-(k))"

也试过

...
get_years(k) = rs(""""thisYear-(k)"""")
...

结果:

Expected ')'
get_years(k) = rs(""""thisYear-(k)"""")
----------------------^

做我想做的事的正确方法是什么?

更新

发现我可以使用此代码:

get_years(0) = rs(0)
get_years(1) = rs(1)
get_years(2) = rs(2)
get_years(3) = rs(3)
get_years(4) = rs(4)

这是唯一的解决方案,还是动态rs(...)名称也可以?

1 个答案:

答案 0 :(得分:1)

您的问题的答案是将get_years(k) = rs(""""thisYear-(k)"""")替换为:

get_years(k) = rs(CStr(thisYear-k))

如果您获得旧的Item cannot be found...,那么原因很可能是该字段不存在。尝试首先在页面上输出脚本生成的字段名称,然后将它们与动态查询进行比较。