vba - MS Access 中的按位运算

标签 vba ms-access 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

并在您的 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 组成”子问题的一种方法。

关于vba - MS Access 中的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143813/

相关文章:

excel - 列中子字符串的最大值

vba - 在 VBA 中获取当前内存配置的最佳方法

excel - Sub 需要 10 分钟才能运行,有时会崩溃,需要帮助简化它

Excel 连接到 Access 时性能较低

.net - 生成 Access 报告

algorithm - 与最大值 AND 值配对

文本中的 VBA 选择案例循环

google-maps - 用于时间和距离数据的 Google Maps API (Access/VBA)

c - 这里按位或用什么?

c - 指向c中变量的低字节地址