Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: vittorio0 am Januar 22, 2012, 22:33:19

Titel: Abfrage mit Bit als Kriterium
Beitrag von: vittorio0 am Januar 22, 2012, 22:33:19
Liebes Forum

ich habe eine Abfrage mit einem Datenfeld vom Typ Byte das ich als Kriterium verwenden möchte.
Als Kriterium möchte ich die einzelnen Bits ansprechen. Mit "And (2 ^0)" kann man ja bekanntlich ein einzelnes Bit auslesen. Wie formuliere ich das in einer Access Abfrage?
Der folgende Code in der Abfrage liefert mir alle Datensätze die irgendein Bit gesetzt haben.

Danke für Eure Hilfe

Ausdruck1: [abt] And (2 ^0)

Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: MzKlMu am Januar 23, 2012, 09:29:42
Hallo,
der Datentyp Byte bei Access speichert Zahlen von 0-255 (256 Werte = 2^8). Insofern ist die Bitfolge eine Zahl zwischen 0 und 255.

Was Du jetzt mit den Bits erreichen willst verstehe ich jetzt nicht.

2^0 = 1, daher sieht ja eigentlich Dein Ausdruck so aus:
Ausdruck1: [abt] And 1
Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: bahasu am Januar 23, 2012, 09:57:02
Zitat von: vittorio0 am Januar 22, 2012, 22:33:19
Als Kriterium möchte ich die einzelnen Bits ansprechen.

Moin,

im Anhang gibt es eine Abfrage, die überprüft, ob ein bit gesetzt ist.
War es das, was Du suchst?

Harald

[Anhang gelöscht durch Administrator]
Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: MzKlMu am Januar 23, 2012, 10:25:01
Hallo,
ich tue mir gerade schwer das zu verstehen. Was natürlich auch an mir liegen kann.  ;D
Bei jeder Eingabe >0 wird mindestens ein Bit gesetzt.
Bit1 =128
Bit2 = 64
Bit3 = 32
Bit4 = 16
Bit5 = 8
Bit6 = 4
Bit7 = 2
Bit8 = 1

Wenn ich also wissen will, ob ein Bit gesetzt ist, muss ich doch nur wissen ob die Eingabe >0 ist.
Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: DF6GL am Januar 23, 2012, 11:02:49
Hallo,

auch mein Senf:


Public Function IsBitOn(Number As Long, BitNr As Long) As Boolean
IsBitOn = Number And 2 ^ BitNr
End Function


liefert True, wenn das  Bit in "Number" an der angegebenen Position ("BitNr")  gesetzt ist,

wobei 0  in BitNr  das erste (rechte) Bit kennzeichnet.

Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: bahasu am Januar 23, 2012, 13:30:21
Hallo,

jetzt eine Verständnisfrage von mir zur "and-Funktion".

Wenn ich die Zahl (byte) 5 als Dual-Zahl darstellen, erhalte ich "0101" = 0 * 8 + 1 * 4 + 0 * 2 + 1 * 1 = 5
Wenn ich das mit obiger Syntax in der Art "Zahl and 8" schreibe, resultiert in der access-Abfrage "-1".

Bei
5 : 0101
8 : 1000
----------  mit bit-weisem "and"-Verknüpfen
     0000 hatte ich aber erwartet: also 0.

Wo liegt mein Denkfehler?

Harald
Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: DF6GL am Januar 23, 2012, 13:55:23
Hallo,

Zeige mal ausführlich, welche Abfrage (SQL-String) Du nun meinst..
Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: bahasu am Januar 23, 2012, 14:21:15
Hi Franz,

siehe obiger Anhang:
- Ausdruck3 bzw Ausdruck 4 in der Abfrage, die da lautet:

SELECT Tabelle1.D, fuellen(d_to_b([D])) AS B, Bit_gesetzt([B ],1) AS Ausdr1, Bit_gesetzt([B ],2) AS Ausdr2, [d] And 1 AS Ausdr3, [d] And 2 AS Ausdr4
FROM Tabelle1;

Harald

PS habe hier bei [B ] ein Leerzeichen eingefügt, damit das Foren-Programm das nicht als Anweisung zum Fettschreiben mißversteht
Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: DF6GL am Januar 23, 2012, 14:51:38
Hallo,


mhmm, ich befürchte, dass "And" in einem SQL-Liste-Ausdruck   anderes interpretiert/ausgeführt wird als der And-Operator in VBA....

Habe keine Beschreibung darüber in Jet-SQL-Spezifikationen gefunden.

Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: bahasu am Januar 23, 2012, 18:01:40
Hi Franz,

danke für die Antwort.
... dann brauche ich ja nicht so kompliziert zu denken wie im Modul vom obigen Anhang  ;D

Harald
Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: vittorio0 am Januar 24, 2012, 00:21:12
"Was Du jetzt mit den Bits erreichen willst verstehe ich jetzt nicht."

Ich habe ein Artikelstamm. Diese Artikel sollen in bis zu 8 Gruppen zugewiesen werden. Dabei kann ein Artikel in mehreren Gruppen vorkommen. Also Artikel yx kommt in Gruppe0 und Gruppe7 vor, so Bit 0 und Bit 7 wird gesetzt.
Mit der Abfrage muss ich nun alle Artikel rausziehen die Bit0 oder eins der 8 Bits gesetzt haben.

Danke allen für Eure Hilfe, die Funktion IsBitOn von Franz hat mein Problem gelöst.
Titel: Re: Abfrage mit Bit als Kriterium
Beitrag von: MzKlMu am Januar 24, 2012, 08:21:45
Hallo,
ich halte das für keine gute Lösung, ich halte das eher für Murks. Das ist eine klassische n:m Beziehung und sollte demzufolge mit einer Zwischentabelle und 2 1:n Beziehungen gelöst werden. Sobals Du irgendwann mal 9 Gruppen hast, geht das sowieso nicht mehr.

Wie kommst Du eigentlich an die Text der Gruppen, wenn Du mal eine Abfrage haben willst mit den Klartexten der Artikel und der Gruppen?

Über kurz oder lang wirst Du das jetzige Konstrukt bedauern, weil es unflexibel und problematisch in der Handhabung ist.