Ciao a tutti
A un db contabile che uso da anni, dove ho sulla maschera principale "Operazioni" (origine record tblDati) una serie di cbo per filtrare i vari campi col classico "multifiltro di Alex" (...non me ne vogliate se - forse impropriamente - gliene attribuisco la paternità, ma l'ho imparato da lui), ho inserito una cboDR relativa a due nuovi campi booleani aggiunti nella tblDati: "detraibili" e "rimborsabili".
La cboDR deve prevedere tutte le combinazioni possibili, quindi:
- tutti (non filtrato)
- detraibili (non rimborsabili)
- rimborsabili (non detraibili)
- detraibiliPlus (anche se rimborsabili)
- rimborsabiliPlus (anche se detraibili)
- entrambi (solo detraibili e rimborsabili)
- entrambiMinus (solo detraibili o solo rimborsabili)
- nessuno (tutti i record con i due campi non flaggati)
tra le altre numerose cbo, è presente anche una cboSceltaAnno, ma se seleziono dalla cboDR il valore "entrambiMinus", dove ho inserito l'operatore "OR", la selezione dell'anno non filtra più, e la maschera mi restituisce anche i record di tutti gli anni precedenti e successivi, se pur correttamente filtrati secondo il criterio entrambiMinus (solo detraibili o solo rimborsabili).
Questa la parte di codice in questione:
If Len(Me!cboSceltaAnno.Value & vbNullString) > 0 Then strWH = strWH & "Year(Data) = " & _
Me!cboSceltaAnno.Value & " AND "
' .....
If Me!cboDR.Value = "detraibili" Then strWH = strWH & "detraibili=-1" & " AND " & "rimborsabili=0" & " AND "
If Me!cboDR.Value = "rimborsabili" Then strWH = strWH & "rimborsabili=-1" & " AND " & "detraibili=0" & " AND "
If Me!cboDR.Value = "detraibiliPlus" Then strWH = strWH & "detraibili=-1" & " AND "
If Me!cboDR.Value = "rimborsabiliPlus" Then strWH = strWH & "rimborsabili=-1" & " AND "
If Me!cboDR.Value = "entrambi" Then strWH = strWH & "detraibili=-1" & " AND " & "rimborsabili=-1" & " AND "
' stringa in oggetto:
If Me!cboDR.Value = "entrambiMinus" Then strWH = strWH & ("detraibili=-1" & " AND " & "rimborsabili=0") & _
" OR " & ("rimborsabili=-1" & " AND " & "detraibili=0") & " AND "
If Me!cboDR.Value = "nessuno" Then strWH = strWH & "detraibili=0" & " AND " & "rimborsabili=0" & " AND "
' soluzione alternativa:
If Len(Me!txtDataInizio.Value & vbNullString) > 0 And Me!txtDataInizio.Value <> "" Then _
strWH = strWH & "[Data]>=#" & Format$(Me!txtDataInizio.Value, "mm/dd/yyyy") & "#" & " AND "
If Len(Me!txtDataFine.Value & vbNullString) > 0 And Me!txtDataFine.Value <> "" Then _
strWH = strWH & "[Data]<=#" & Format$(Me!txtDataFine.Value, "mm/dd/yyyy") & "#" & " AND "
In realtà, avendo in maschera anche due controlli txtDataInizio e txtDataFine, sempre dal multifiltro, posso aggirare il problema inserendo l'intervallo del primo e ultimo giorno dell'anno che mi interessa. In tal modo i record vengono filtrati correttamente.
Tuttavia non mi spiego perchè la cboSceltaAnno viene resa inefficiente quando la cboDR seleziona un valore che filtra con la presenza dell'operatore "OR".