为什么我的记录结果反复,而不是访问缓存?(Why is my recordset result ac

2019-10-21 07:28发布

我有一个名为DAO.Recordest products ,我分配这样的

Set products = db.OpenRecordset("Product URLs for 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

然而这个循环过程中它被调用每个循环过程中“产品网址,网站地图”中使用的功能。 这应该只需要进行一次-当时,我填充products通过调用Set products = db.OpenRecordset("Product URLs for Sitemap")

这是为什么越来越叫我每次遍历products记录以及如何停止?

谢谢

Answer 1:

如何使用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



Answer 2:

我建议打开查询“的网站地图产品的URL”到一个表,那么这将迫使该函数的执行了当时的所有行。 所以:

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

然后,你的循环将不会执行该功能每次迭代。

如果这个信息是不会改变(我猜)砸你用它做之后,并重新下一次这样的逻辑需要运行。

如果数据需要用户或会话专用,可以生成使用计时器的表名的随机数:

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

希望这个建议会有所帮助。



文章来源: Why is my recordset result accessed repeatedly and not cached?