【问题标题】:MS Access: Use variables instead of text.SetFocus method to queryMS Access:使用变量而不是 text.SetFocus 方法进行查询
【发布时间】:2015-09-17 15:42:37
【问题描述】:

我有两个参数形成一个 FROM 和 THRU 文本框。代码对象是 txtFROM 和 txtTHRU。现在我尝试使用txtFROM.SetFocus and txtTHRU.SetFocus 打开查询和报告,并在查询条件中使用:Between [FORMS]![ReportName]![txtFROM].[Text] and [FORMS]![ReportName]![txtTHRU].[Text]。但是,当我将按钮链接到查询和报告以显示具有这两个参数的数据时,什么也没有出现。我认为这可能是由于 .SetFocus 方法只能对一个参数起作用,所以我认为如果可能的话,编写 VBA 变量以传递给查询可能会起作用。问题是我不知道是否可以在运行查询时调用 VBA 变量,因为它是一个对象。否则变量将读取 .SetFocus 以准备好传递给 Access 查询的参数。

  DoCmd.SetWarnings False

If IsNull(txtFROM.Value) = False And IsNull(txtTHRU.Value) = False Then
dataFROM = CDate(txtFROM.Value)
dataTHRU = CDate(txtTHRU.Value)
End If

    DoCmd.OpenQuery ("Expiring")
    DoCmd.OpenReport ("Expirees"), acViewPreview
    DoCmd.SetWarnings True

上面的变量 dataFROM 和 dataTHRU 将是我希望适合查询条件以引用显示报告的表单。

【问题讨论】:

  • 这个建议还是行不通,抱歉!
  • 请勿使用 .text 属性(即来自 VB6 或 vb.net)。在 Access VBA 和代码等中,您使用 .value 属性 - 切勿使用 .text 作为控件的一般参考。

标签: vba ms-access setfocus


【解决方案1】:

您可能需要使用 CreateQueryDef “即时”编写查询脚本。有点像:

Dim db as Database
Dim qdf as QueryDef

Set db = CurrentDB
Set qdf = db.CreateQueryDef("Expiring", "SELECT * FROM MyTable WHERE " &_
   "MyDate >= #" & CDate(txtFROM.Value) & "# and MyDate =< #" CDate(txtTHRU.Value) & "#")
DoCmd.OpenReport "Expirees", acViewPreview

当然,如果该查询已经存在,您可能需要在开头添加一些代码来删除该查询。肯定在 If/Then 中,因为如果代码碰巧打嗝并且没有创建一次查询,那么下次运行它就会崩溃。

编辑

按照 HansUp 的建议,另一种选择是简单地更改查询的 SQL 语句,您可以在代码中执行此操作。

Set myquery = db.OpenQueryDef("Expiring")

strsql = "SELECT * FROM MyTable WHERE " &_
       "MyDate >= #" & CDate(txtFROM.Value) & "# and MyDate =< #" CDate(txtTHRU.Value) & "#"

myquery.SQL = strsql
myquery.Close

【讨论】:

  • 我认为这种方法不会使用原始查询,而只是动态设计一个新查询。所以我可以在查询中保留那些原始参数?是的,查询已经存在。如果需要,我不熟悉 VBA 用于删除查询。删除是否会是永久性的,因为它在另一个上下文中用于打印?
  • 谢谢@HansUp!我的监督。是的,这将在每次运行时重新创建查询。您需要使用 DeleteQueryDef 永久删除查询,然后使用 CreateQueryDef 创建新查询。
  • 别担心,JB ......你的意图已经很清楚了。 :-) 认为我可能会告诉他们永远不要删除查询;只需根据需要更改其.SQL 属性即可。
【解决方案2】:

我的查询代码中似乎存在混淆,FROM 重复,FROM FROM,而不是 FROM THRU。代码在对文本控制的报告和表单的引用中正常工作。那就照常做吧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多