bitmask abfrage in access datenbank

05/02/2009 - 12:56 von jaquesthereal | Report spam
hallo liebe access gruppe ;)

eine bitabfrage kann ich im vba code mit AND machen, von der mysql
kenne ich das auch direkt in der sql abfrage mit
select * from tabelle where BITMASK & 3
würde die zeilen zurück geben in der für die bitmask 1 und 2 gesetzt
sind

allerdings liefert access mit dieser abfrage immer alles zurück?!
wie kann ich das direkt erledigen ohne das über eine loop über alle
recordsets zu machen? (oder ist das von der geschwindigkeit das
gleiche)

mein workaround wàre:
select ID, BITMASK from tabelle
hinterher ein loop über alle datensàtze
if BITMASK and 3 then
id speichern und hinterher im select
select * from tabelle where ID in ("alle ids")

aber das finde ich zu umstàndlich, würde es lieber direkt per sql
statement klàren, wie geht das?

danke schön
jochen
 

Lesen sie die antworten

#1 Stefan Hoffmann
05/02/2009 - 13:19 | Warnen spam
hallo Jochen,

schrieb:
eine bitabfrage kann ich im vba code mit AND machen, von der mysql
kenne ich das auch direkt in der sql abfrage mit
select * from tabelle where BITMASK & 3
würde die zeilen zurück geben in der für die bitmask 1 und 2 gesetzt
sind
aber das finde ich zu umstàndlich, würde es lieber direkt per sql
statement klàren, wie geht das?


Du kannst mit AND und OR arbeiten, da diese auch bitweise arbeiten, du
musst sie lediglich in eine Hilfsfunktion verpacken (Als Ausdruck werden
sie nur logisch ausgewertet):

Public Function BitwiseAnd(AValue As Long, AMask As Long) As Long

BitwiseAnd = AValue And AMask

End Function

Speichere sie in einem Standardmodul.

Im SQL:

SELECT *
FROM Tabelle
WHERE BitwiseAnd(BITMASK, 3) = 3

bzw.


Public Function BitwiseAndEqual(AValue As Long, AMask As Long) _
As Boolean

BitwiseAndEqual = ((AValue And AMask) = AMask)

End Function

Speichere sie in einem Standardmodul.

Im SQL:

SELECT *
FROM Tabelle
WHERE BitwiseAndEqual(BITMASK, 3)



mfG

Ähnliche fragen