求助:在SQL查询中使用变量实现媒体项全选的解决方案
解决方案
方法1:修改MyKeus函数,按需返回筛选逻辑
直接在函数内判断输入值,返回对应条件表达式,同时用Eval()执行该表达式:
步骤1:更新VBA函数
Public Keus As String Function MyKeus() As String If Keus = ">0" Then ' 返回永真条件,匹配所有记录 MyKeus = "1=1" Else ' 返回原匹配逻辑 MyKeus = "LPofCD.LPofCD = " & Keus End If End Function
步骤2:修改查询的WHERE子句
替换原有WHERE语句为:
WHERE Eval(MyKeus())
当Keus设为">0"时,函数返回1=1,所有记录都会被选中;设为1/2时,返回对应匹配条件,筛选指定媒体。
方法2:直接在SQL中处理特殊情况(无需改动函数)
跳过VBA函数,直接在查询的WHERE子句里判断表单控件值:
WHERE ([Forms]![Output_Catalog]![Kies_Medium] = ">0" OR LPofCD.LPofCD = [Forms]![Output_Catalog]![Kies_Medium])
选择">0"时,OR左侧条件成立,所有记录被选中;否则匹配对应LPofCD值的记录。
方法3:优化函数返回值,在WHERE中做判断
保留原有函数结构,返回特殊标记用于筛选逻辑:
步骤1:更新VBA函数
Public Keus As String Function MyKeus() As Variant If Keus = ">0" Then ' 返回Null作为全选标记 MyKeus = Null Else ' 转换为数值类型返回 MyKeus = Val(Keus) End If End Function
步骤2:修改查询的WHERE子句
WHERE (MyKeus() IS NULL OR LPofCD.LPofCD = MyKeus())
函数返回Null时,OR左侧条件成立,选中所有记录;否则匹配对应数值的媒体项。
内容的提问来源于stack exchange,提问作者W.J. de Zwart
相关产品推荐
相关产品推荐

