我有一个名为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
记录以及如何停止?
谢谢
如何使用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
我建议打开查询“的网站地图产品的URL”到一个表,那么这将迫使该函数的执行了当时的所有行。 所以:
SELECT columnA, columnB ... yourFunction(args)
INTO newTableName
FROM tableSpecification
然后,你的循环将不会执行该功能每次迭代。
如果这个信息是不会改变(我猜)砸你用它做之后,并重新下一次这样的逻辑需要运行。
如果数据需要用户或会话专用,可以生成使用计时器的表名的随机数:
newTableName = "myTableName" + replace(Timer,".","")
希望这个建议会有所帮助。