MS访问中的按位操作

时间:2014-06-10 14:37:48

标签: vba ms-access bitwise-and

我有一张包含答案的表格。这个答案是一组数字的组合。 (见下文)

可能的值

  

2   4   8   16   32   64

如果我得到答案24的答案 - 我需要一些方法来计算出唯一可以选择的值是16和8。 我被告知这是否在SQL中我会使用按位操作。

我在Access方面相当先进,但往往不使用VBA代码,但对所有想法都持开放态度。

1 个答案:

答案 0 :(得分:8)

比较KB194206(其中的要点:" Microsoft Jet数据库引擎不支持SQL中的按位操作。此行为是设计使然。" ) ,这基本上意味着你已经被VBA困住了。

VBA中的按位非常简单,因为在VBA 中,所有位置运算符都是按位的。

只需创建一个包装函数:

Function BitAnd(Value1 As Long, Value2 As Long) As Long
    BitAnd = Value1 And Value2
End Function

并在SQL

中使用它
WHERE
    BitAnd([someColumn], 64) > 0

对您需要的其他按位操作执行相同的操作。


您也可以在连接中使用它。假设您有一个FlagsTable (FlagValue, FlagName),其中包含每个可用标志的名称:

SELECT
  d.Id,
  d.BitField,
  f.FlagName
FROM
  DataTable d
  INNER JOIN FlagsTable f ON BitAnd(d.BitField, o.FlagValue) > 0

此查询将是解决您的" 24由16和8" 子问题组成的一种方式。