2016-03-21 11 views
1

In der Datenbank habe ich Farben nur in MS Access Farbformat (Dezimalformat von BGR) gespeichert: es sieht aus wie 8689859 => braun => # c39884 ... Aber ich brauche um nach Farbbereich zu filtern, meine ich, benutze den Farbwähler und wähle das zB. #ffffff farbe. Und ich würde gerne alle Reihen mit Farbe gleich dem #ffffff (nicht genau die gleiche Farbe aber + - in demselben Bereich) zurückgeben.Erhalten Bereich zwischen Farben in MS Access Farbformat

Ist so etwas möglich?

+0

bitte gleich definieren .. – Susilo

Antwort

1

Ich denke, der = - Bereich sollte für jedes der einzelnen Farbelemente im BGR-Wert gelten. In diesem Fall müssen Sie diese Elemente extrahieren, wie folgt aus:

SELECT colour 
     ,Fix([Colour]/(256*256)) as B 
     ,Fix(([Colour]-Fix([Colour]/(256*256))*256*256)/256) as G 
     ,[Colour]-Fix([Colour]/(256*256))*256*256-Fix(([Colour]-Fix([Colour]/(256*256))*256*256)/256)*256 as R 
FROM MyColours 

Ich empfehle Ihnen, diese setzen in separate Funktionen wie getr, GetB, GetG

Sie können sogar die berechneten Felder machen und sie auf Ihre Tabelle:

Colours Table with computed fields

nun Ihre Tabelle nachschlagen müssen Sie die ausgewählte Farbe in BGR Elemente aufteilen und:

Dim selectedColour as Integer 
Dim rr as Integer 
Dim gg as Integer 
Dim bb as Integer 
selectedColour = 11124168 ' A9BDC8 - selected from the colour picker 
rr = getR(selectedColour) 
gg = getG(selectedColour) 
bb = getB(selectedColour) 

Wenn Sie die berechneten Felder in der Tabelle haben, dann wird die Abfrage sein:

SELECT colour 
FROM MyColours 
WHERE B BETWEEN bb-4 AND bb+4 
AND G BETWEEN gg-4 AND gg+4 
AND R BETWEEN rr-4 AND rr+4 

Wenn Sie die berechneten Felder, die die VBA-Funktionen nicht verwenden wollen:

SELECT colour 
FROM MyColours 
WHERE getB(colour) BETWEEN bb-4 AND bb+4 
AND getG(Colour) BETWEEN gg-4 AND gg+4 
AND getR(Colour) BETWEEN rr-4 AND rr+4