Sym*_*ner 4 ms-access vba bitwise-and
我有一张包含答案的表格.这个答案是一组数字的组合.(见下文)
可能的值
2 4 8 16 32 64
如果我有答案24的答案 - 我需要一些方法来计算出唯一可以选择的值是16和8.我被告知这是否在SQL中我将使用按位运算.
我在Access方面相当先进,但往往不使用VBA代码,但我对所有想法持开放态度.
比较KB194206(它的要点:"Microsoft Jet数据库引擎不支持SQL中的按位操作.这种行为是设计的."),这基本上意味着你已经陷入了VBA.
在VBA中按位是非常简单的,因为在VBA中所有的局部运算符都是按位的.
只需创建一个包装函数:
Function BitAnd(Value1 As Long, Value2 As Long) As Long
BitAnd = Value1 And Value2
End Function
Run Code Online (Sandbox Code Playgroud)
并在您的SQL中使用它
WHERE
BitAnd([someColumn], 64) > 0
Run Code Online (Sandbox Code Playgroud)
为您需要的其他按位操作执行相同的操作.
您也可以在连接中使用它.假设您有一个FlagsTable (FlagValue, FlagName)
包含每个可用标志的名称:
SELECT
d.Id,
d.BitField,
f.FlagName
FROM
DataTable d
INNER JOIN FlagsTable f ON BitAnd(d.BitField, o.FlagValue) > 0
Run Code Online (Sandbox Code Playgroud)
此查询将是解决"24由16和8组成"子问题的一种方法.