Queries |
2.35 Operatori Logici in SQL |
Karl Donaubauer |
Si possono effettuare Query (su un MDB) facendo una maschera di bit su un campo. Per intenderci fare una cosa del tipo: seleziona tutti i record tranne quelli in cui il 3° bit del campo è = 1 Per affrontare questo problema serve avere un minimo di conoscenza della logica booleana. Mascherare una parola binaria al fine di ottenere il solo 3° bit equivale ad eseguire un AND logico con 00000100 che tradotto in decimale: Mask= 00000100 = 4 Decimale Sappiamo infatti che se mascheriamo con logica booleana una parola a 16 Bit con il valore visto precedentemente si avrà che: XXXXX1XX 00000100 ------------- 00000100 Quindi dato l'assunto iniziale dovrò estrarre tutti i valori che escluderanno il risultato = 4(3° Bit=1) oppure prenderò tutti i valori il cui risultato darà 0. Teoricamente la Query risultante sarebbe: SELECT .... FROM ... WHERE (STATO AND 4) <> 4oppure SELECT .... FROM ... WHERE (STATO AND 4) = 0Il problema è che per fare l'operazione bitwise bit a bit in una espressione SQL ci sono i seguenti limiti: 1. Solo SQL di Jet 4 (Access2000, AccessXP) ha operatori logici. 2. BAND, BOR e BNOT non sono documentati. 3. Sono raggiungibili solo con OLEDB. Vuol dire nel codice con ADO. p.e. puoi eseguire il tuo statement così: Dim strSQL strSQL="SELECT * From TableData WHERE (BitData BAND 4)=0 " CurrentProject.Connection.Execute strSQL O con un recordset. p.e.: Dim cnn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cnn = CurrentProject.Connection rs.Open strSQL, cnn Nota Il materiale di questa FAQ è stato gentilmente messo a disposizione del Sito Comune da Alessandro Baraldi, che lo ha a sua volta letto in un thread di Karl Donaubauer su I.C.A.A. . |