首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从VBA向MS Access查询调用循环函数

从VBA向MS Access查询调用循环函数
EN

Stack Overflow用户
提问于 2018-10-30 03:38:16
回答 2查看 357关注 0票数 0

我真的是VBA的新手。我为Access VBA提供了一个相当复杂的函数,它遍历一个表,执行一系列计算和条件语句,并返回一个值。当我运行该函数并使用“Debug.Print”来获取函数值时,它准确地显示出它在“即时”窗口中应该显示的内容。但是,当我尝试对同一个表上的Access查询调用该函数时,该查询仅返回循环中的最后一个值。

我构建了一个简单得多的循环函数来尝试找出我做错了什么(见下文),同样的事情也发生了-在“即时”窗口中更正了值,只在查询的表达式中返回了最后一个值。谁能告诉我我犯了什么明显的错误?如果我可以在这里修复它,我应该能够在真实的项目中修复它。非常感谢您的帮助!

代码语言:javascript
代码运行次数:0
运行
复制
Function TestID()
    Dim d As Database
    Dim r As Recordset
    Dim id As Field
    Set d = CurrentDb()
    Set r = d.OpenRecordset (“tblAllocation”)
    r.MoveFirst
    r.MoveLast
    r.MoveFirst
    Do Until r.EOF
        Set id = r.Fields(“IDAllocation”)
        TestID = id
        Debug.Print TestID ‘This lists all the correct values in the Immediate Window'             
        r.MoveNext
        If r.EOF Then Exit Do
    Loop
    r.Close
    Set r = Nothing
End Function
EN

回答 2

Stack Overflow用户

发布于 2018-10-30 07:04:23

该函数将只返回一个值。

您将为Do循环的每次迭代打印分配给TestID符号的值,但该值仅在下一次循环迭代时被覆盖,函数不会返回该值。

如果您希望返回多个值,请考虑构建并返回一个值数组,或者将这些值附加到另一个表中-尽管这似乎是多余的,因为您是从现有的表/查询中获取这些值的。

票数 1
EN

Stack Overflow用户

发布于 2018-10-30 14:35:39

要为每个输入行返回不同的值,您的函数需要使用输入表/查询中的一个或多个参数。

例如。

代码语言:javascript
代码运行次数:0
运行
复制
Function TestID(ID As Long, someField As Double) As Double
    ' do calculations on parameters here
    TestID = CalcResult
End Function

并将列值作为查询中的参数传递,例如

代码语言:javascript
代码运行次数:0
运行
复制
SELECT foo, bar, TestID([ID], [someField]) AS Calculation
FROM myTable
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53052629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档