【问题标题】:MS Access Form - string from textbox used for LIKE query to filter report resultsMS Access Form - 文本框中的字符串,用于 LIKE 查询以过滤报告结果
【发布时间】:2019-08-24 03:57:18
【问题描述】:

我有一个表单,用户希望在文本框中输入项目名称的部分或完整字符串值,点击表单中的按钮,然后打开一个仅包含由这些结果过滤的项目的报告。例如,如果我输入“Acc”,我的 project_name 字段中的所有结果将只包括那些带有“Acc”的结果。

我可以通过查询 (Like "*" & [Enter keyword] & "*") 使它正常工作,但我想通过表单执行此操作。我还有一些其他的字段我也想这样做,我不想为每个字段创建一个新的报告和查询。我宁愿能够用 VBA 和表单来做到这一点。

我的代码打开了报告,但没有结果。我什至尝试输入单个字母(即“a”)或其他明显没有运气的字符串。这是我的代码:

  Private Sub Command0_Click()

  Dim stDocName1 As String, strwhere1 As String
  Dim stLinkCriteria1 As String
  stDocName1 = "Grantlist"
  strwhere1 = project_name = "Like *'" & Me![findproject] & "*'"
  DoCmd.OpenReport stDocName1, acViewReport, , strwhere1, acWindowNormal

  End Sub

【问题讨论】:

    标签: sql forms ms-access vba wildcard


    【解决方案1】:

    我猜* 必须在单引号内:

    "Like '*" & Me![findproject] & "*'"
    

    project_name 也必须与语句连接:

    strwhere1 = project_name & " Like '*" & Me![findproject] & "*'"
    

    【讨论】:

    • 感谢您的回复。当我尝试第一个时出现错误。我也尝试将“project_name”括起来,但它给了我另一个错误。这是一个棘手的问题,但非常感谢您的回复!
    • 为什么要括号 project_name?这不是一个变量吗?
    【解决方案2】:

    strwhere1 =的右侧设为一个字符串

    只使用Like 而不是= Like

    将单引号移到* 之前Like 之后

    strwhere1 = "project_name Like '*" & Me![findproject] & "*'"
    

    检查您传递给DoCmd.OpenReportWhereCondition 可能会很有用。使用Debug.Print 将其显示在立即窗口中。你可以使用 Ctrl+g 去那里。

    Debug.Print strwhere1
    DoCmd.OpenReport stDocName1, acViewReport, , strwhere1, acWindowNormal
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多