答えを含むテーブルがあります。この答えは、一連の数字の組み合わせです。(下記参照)
可能な値
2 4 8 16 32 64
回答 24 の回答が得られた場合、選択できる唯一の値は 16 と 8 であると判断する方法が必要です。この場合、SQL でビット単位の操作を使用すると言われました。
私は Access のかなりの上級者ですが、VBA コードを使用する傾向はありませんが、すべてのアイデアに対してオープンです。
答えを含むテーブルがあります。この答えは、一連の数字の組み合わせです。(下記参照)
可能な値
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 で構成されています」というサブ質問に対処する 1 つの方法です。