如何在VBA / Access中从查询设计中调试查询结果

时间:2017-03-03 12:10:05

标签: vba ms-access

我想通过VBA从访问执行预定义查询并将其打印到调试输出。查询设计的名称位于名为report的变量中。

我当时希望它适用于:

debug.print db.Execute report

但每次vba自动更正为:

debug.print db.Execute; report

如果我理解正确的话,;代表一条新线,因此在我的情况下毫无意义。但在这两种情况下,无论有没有新线路,我都会收到错误。我认为简单的问题是,这不是正确的语法。

我可以找到很多关于如何调试打印在VBA中创建为字符串的查询的信息,但是我找不到任何提示如何通过查询设计输出在Access中预定义的查询。 / p>

2 个答案:

答案 0 :(得分:3)

尝试:

'// You need the parentheses because the result has to be evaluated before it can be passed to the .Print() method
Debug.Print db.Execute(result)

Dim myResult As String
myResult = db.Execute(result)

Debug.Print myResult

在VBA中,只要不将结果分配给任何内容,就可以在不使用括号的情况下将参数传递给过程/方法。

'// Not assigning anything
MyExampleFunction arg1, arg2, arg3

'// assigning the result, which needs to be evaluated before it can be passed to a variable.
MyResult = MyExampleFunction(arg1, arg2, arg3)

以同样的方式,当您致电Debug.Print时,它会假定db.Executeresult实际上是单独的参数(它无法知道您希望result首先传递给db.Execute,因为你的语法中没有任何内容表明这一点。所以你必须使用括号让它知道。

答案 1 :(得分:0)

似乎问题在于,只能使用db.Execute而不是查询来调用更新。 没有很好的解决方案可以使用debug.print从查询中打印整个表格,但使用RecordSet,如下面的代码所示,这是一种可行的方法。

Dim rs As DAO.RecordSet
Set rs = db.OpenRecordset(Bericht)

Do Until rs.EOF = True
    Debug.Print rs("Matrikelnummer"), rs("Bewertung"), rs("Termin (Datum)"), rs("Maximale Bewertung"), rs("Bestehensgrenze"), rs("Versuch"), rs("Äquivalenzleistung")
    rs.MoveNext
Loop

rs.Close
Set rs = Nothing