更新ADO Recordset中的字段并在Classic ASP中重新排序值

时间:2010-06-16 18:55:08

标签: asp-classic ado recordset

以下是目前的情况:我有一套记录产品。这些产品的价格取决于页面上其他地方的其他信息。因此,当我遍历记录集进行输出时,我使用函数计算价格并显示它。这一切都很有效。

现在,为了新的皱纹。我需要能够在显示之前按计算的价格对产品进行排序。我的尝试是简单地向记录集添加一个新字段,循环记录集一次以计算价格并更新该新字段,然后在再次循环显示之前求助该字段上的记录集。

毋庸置疑,这不起作用。无论我在这个记录集上放置了什么设置(lockType,cursorType,cursorLocation),我都会收到一条错误,指出“当前Recordset不支持更新。这可能是提供者或所选锁定类型的限制。”

有没有办法按照描述进行此项工作,还是有其他方法可以完成此结果?作为参考,这是我目前正在使用的代码片段。

set rsProd = server.CreateObject("adodb.recordset")
rsProd.cursorType = adOpenKeyset
rsProd.lockType = adLockPessimistic
rsProd.cursorLocation = adUseServer
rsProd.Open sql, Conn1

'loop through the records and calculate prices'
Do until rsProd.EOF  
   laPrices = Split(GetParameterProductPrice(rsProd("Product_ID")), "|")
   'ERROR OCCURS ON NEXT LINE'  
   rsProd("Sale") = CDbl(laPrices(0))  
   rsProd("Sale_Special")= CDbl(laPrices(1))  
   rsProd.MoveNext
Loop
rsProd.MoveFirst
rsProd.Sort = "Sale_Special, Sale, Product_Code"

2 个答案:

答案 0 :(得分:0)

实现此目的的一种方法是在数据库中使用computed column

主要好处是您不需要更改页面。此外,您可以在应用程序的其他位置重复使用计算出的价格 - 我猜您实际上是在网站的其他部分再次计算价格。

答案 1 :(得分:0)

如果此记录集不是很大,一个解决方案是在循环期间,将计算出的价格存储到数组中。一旦计算出定价,就可以使用排序功能对数组进行排序,然后打印出结果。