Binary AND in VB

Hallo,

Um mehrere J/N-Werte für einen Datensatz darzustellen verwende ich für jeden Wert eine Konstante mit einer 2er-Potenz;
also zB:
brav: 1
schön: 2
gross: 4
dick: 8

In einem Feld steht nun die Summe dieser Werte (also für alle vier Angaben aus dem Beispiel: 15).

Um herauszukriegen welche Zustände denn nun enthalten sind müsste man theoretisch nur die Summe mit der jeweiligen Konstante binär UND-verknüpfen.

Genau daran scheitere ich fast. Momentan wandle ich beide Zahlen per Funktion in Binärstrings um und verknüpfe dann (ebenfalls per Funktion) - nur um die True/False-Information herauszukriegen. Ausser dass das aufwändig ist (momentan gehts bei mir mit 30 J/N-Werten doch schon bis 536.870.912) gefällt mir das nicht sonderlich!
Geht das denn eigentlich nicht viel einfacher? Standardbefehl kann das ja anscheinend keiner…
Ich hab auch schon mit MOD, Fix & Co herumprobiert aber das will mir nicht gelingen.

Machen muss ich das: J/N-Felder in der DB sind ein Problem weil die Liste mit den Konstanten laufend erweitert wird und doch nicht jedesmal die DB auf dem SQL-Server geändert werden kann; der Aufwand fürs Kreuzabfragen bei einer N:N-Tabelle ist ebenfalls viel zu gross.

Danke für jede Hilfe
~luki

Hi Luki,

vielleicht verstehe ich Dein Problem nicht, aber es sieht doch ganz einfach aus: angenommen, Dein Datensatz sei d und die Vergleichszahl z. Dann erhältst Du mit der Formel

zEnthalten = (d And z)/z

eine 1, wenn Eigenschaft z gesetzt ist, sonst eine Null.
Bsp.: (12 And 8)/8 = 1, aber (12 And 2)/2 = 0.

Damit hast Du Deine True/False-Aussage. Wenn das Problem woanders liegt, melde Dich nochmal.

Gruß

Sculpture

Sculpture: Danke!
Genau das habe ich gemeint!
Anscheinend war (und ehrlich gesagt bin) ich mir nicht ganz über die Funktionsweise von „AND“ im Klaren. Ich dachte eigentlich dass man damit nur Boolean-Werte verknüpfen kann und habe einen entsprechenden Binär-Vergleichs-Operator gesucht (wenn ich richtig erinnere war das in C bei Booleans „&&“ und binär „&“).

Danke für deine Lösung; genau sowas habe ich mir erhofft…

Grüsse
~luki

AND in VB - Zusatz
Hi Luki,

bei VB kannst Du AND sowohl für logische als auch binäre Vergleiche nutzen, VB erkennt aus dem Kontext, was gemeint ist, lso etwa:

„If (a = 1) and (b = 2) then …“ bzw. „If (a AND b) = 1 then …“

Ein Ausdruck der Form „If a AND b then …“ wird so interpretiert, dass sowohl a als auch b einen „wahren“ Wert haben müssen, damit die Bedingung erfüllt ist, d.h. a und b müssen beide ungleich 0 sein.
„If a then“ funktioniert also sowohl für Boolean-a’s (True/False) also auch für beliebige a’s, wobei a 0 als True gilt.

Gruß

Sculpture

1 Like