5

答えを含むテーブルがあります。この答えは、一連の数字の組み合わせです。(下記参照)

可能な値

2 4 8 16 32 64

回答 24 の回答が得られた場合、選択できる唯一の値は 16 と 8 であると判断する方法が必要です。この場合、SQL でビット単位の操作を使用すると言われました。

私は Access のかなりの上級者ですが、VBA コードを使用する傾向はありませんが、すべてのアイデアに対してオープンです。

4

1 に答える 1

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 で構成されています」というサブ質問に対処する 1 つの方法です。

于 2014-06-10T14:53:28.370 に答える