2016-03-21 16 views
1

Veritabanında renkleri yalnızca MS Access renk biçiminde (BGR ondalık biçimi) depoladım: 8689859 = kahverengi => # c39884 ... renk aralığına göre filtrelemek için, kullanıcı renk seçiciyi kullanır ve örn. #ffffff rengi. Ve tüm satırları benzer şekilde #ffffff (tam olarak aynı renkten değil, aynı aralıkta +) olarak geri döndürmek istiyorum.MS Access renk biçimindeki renkler arasındaki aralığı alın

Böyle bir şey mümkün mü?

+0

hem tanımlar mısınız .. – Susilo

cevap

1

Sanırım = - aralık, BGR değerindeki ayrı renk öğelerinin her birine uygulanmalıdır. Bu durumda böyle, bu öğeleri ayıklamak gerekir: Sana GETR, GetB gibi ayrı işlevlere içine bu koymak tavsiye

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 

, GetG

Hatta bilgisayarlı alanları yapmak ve bunları uygulayabilirsiniz senin tablo:

Colours Table with computed fields

Şimdi, tablo arama için siz de BGR elemanları seçilen rengi bölmek gerekir:

Tabloda hesaplanan alanları varsa
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) 

sonra sorgu olacaktır: Eğer istemiyorsanız

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 

bilgisayarlı alanlar VBA işlevleri kullanabilirsiniz:

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