为什么我的记录集结果重复访问而不是缓存?

时间:2014-11-19 09:55:39

标签: vba ms-access access-vba recordset

我有一个名为products的DAO.Recordest,我这样指定

Set products = db.OpenRecordset("Product URLs for Sitemap")

" Sitemap的产品网址"是一个查询,当运行时使用自定义VBA函数来填充其中一列。

我期待发生的是products将在运行后包含查询的内容,如表格。然而,情况似乎并非如此。

一旦我拥有了products记录集,我就会循环遍历它并从中创建一些XML

Do While Not products.EOF
    Dim prdUrl As String
    Dim prdUpdated As String

    prdUrl = products!url
    prdUpdated = products!updated

    XML = XML & createUrlXml(products!url, products!updated)
    products.MoveNext
Loop

然而,在此循环期间,它正在调用" Sitemap的产品网址"在每个循环中。这应该只需要执行一次 - 在我通过调用products

填充Set products = db.OpenRecordset("Product URLs for Sitemap")

为什么每次循环遍历products记录集时都会调用此命令,如何停止此操作?

由于

2 个答案:

答案 0 :(得分:2)

如何使用GetRows(),简单示例:

Dim queryText As String
queryText = "SELECT *, YourVBAFunc([URLs_SOURCE]) AS URL FROM Table1;"

Dim products As DAO.Recordset
Set products = CurrentDb.OpenRecordset(queryText)

products.MoveLast
products.MoveFirst

Dim data As Variant
data = products.GetRows(products.RecordCount)

' then all data are in the array 'data' ...

更多信息: http://bytes.com/topic/access/insights/789969-retrieving-data-dao-recordset-using-getrows

答案 1 :(得分:1)

我建议转换查询" Sitemap的产品网址"到表中,然后将强制执行当时所有行的函数。所以:

SELECT columnA, columnB ... yourFunction(args) 
INTO newTableName
FROM tableSpecification

然后你的循环不会在每次迭代时执行该函数。

如果这些信息发生变化(正如我猜测的那样)在您完成之后将其丢弃,并在下次需要运行时重新创建。

如果数据需要是用户或会话特定的,您可以使用计时器为表名生成一个随机数:

newTableName = "myTableName" + replace(Timer,".","")

希望这个建议有所帮助。