【问题标题】:Update query in subform更新子表单中的查询
【发布时间】:2016-09-30 20:51:21
【问题描述】:

我有一个表单,其中有一个字符串输入,它是查询中参数的输入(在此处插入 sql 注入笑话),以及一个显示查询结果的子表单。

目前参数本质上是someVar Like "*" & forms!myForm!input & "*",但是由于用户可以输入多个字符串(即一个句子),我真正想要的是someVar Like "*firstWord*" or someVar Like "*secondWord*"... etc

由于参数的数量不同,我需要以编程方式生成查询。遍历输入中的单词并动态生成 where 语句在 VBA 中并不难:

dim sc as variant
sc=split(myInput)
dim where as string
where=""
for c=0 to UBound(sc)
where = where & "like '*" & sc(c) & "*' or "
next

where = left(where, len(where) - 3)

dim qd as querydef

set qd=currentDb.querydefs("myQuery")

qd.sql="select var where " & where

[my subform].requery

但是,当我更新查询时,即使我告诉它重新查询,显示其数据的子表单也不会更新。如果我离开表格并重新输入它有正确的数据。我的方法似乎是错误的。有什么更好的方法来解决这个问题?

【问题讨论】:

  • 通常的做法是直接将生成的SELECT sql字符串指定为子表单的记录源(而不是查询)。

标签: ms-access vba


【解决方案1】:

我会将“myQuery”保存为没有任何where 条件的基本查询。然后你可以去:

[my subform].RecordSource = "select * from myQuery where somevar like '*" & replace(myInput, " ", "*' or somevar like '*") & "*'"
[my subform].Requery

这不需要遍历输入字符串中的单词并选择Andre's suggestion 修改子表单的RecordSource,而不是尝试修改RecordSource 指向的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多