eddy1973 ha scritto:
Ti posto il codice:
Private Sub txt_data_rich_Change()
Dim strwhere As String
Dim data_rich As Date
Dim data_acc As Date
data_rich = CDate(Me.txt_data_rich.Value)
data_acc = CDate(Me.txt_data_acc.Value)
If Len(Me.cbotipo_an & vbNullString) > 0 Then strwhere = strwhere & "Categoria='" & Me.cbotipo_an & "' And "
If Len(Me.cbotipo_camp & vbNullString) > 0 Then strwhere = strwhere & "Tipo_campione='" & Me.cbotipo_camp & "' And "
If Len(Me.txt_Num_Camp.text & vbNullString) > 0 Then strwhere = strwhere & "Numero_Campione= '" & Me.txt_Num_Camp.text & "' And "
If Len(data_acc & VbNullString) > 0 Then strwhere = strwhere & "Data_Accettazione like '" & data_acc & "' And "
If Len(Me.txtdescr_camp.text & vbNullString) > 0 Then strwhere = strwhere & "Descrizione_Campione like '*" & Me.txtdescr_camp & "*' And "
If Len(Me.txtente_rich.text & vbNullString) > 0 Then strwhere = strwhere & "Denominazione_Ente like '*" & Me.txtente_rich & "*' And "
If Len(Me.txtprot_rich.text & vbNullString) > 0 Then strwhere = strwhere & "Testo_Protocollo like'*" & Me.txtprot_rich.text & "*' And "
If Len(data_rich & vbNullString) > 0 Then strwhere = strwhere & "Data_Protocollo='" & data_rich & "' And "
If Len(strwhere) > 0 Then strwhere = Mid$(strwhere, 1, Len(strwhere) - 5)
Form_SM_Protocollo.Filter = strwhere
Form_SM_Protocollo.FilterOn = True
end sub
Ho indicato la gestione delle date con vbNullString ma non è corretto. Come si gestisce un valore della data quanto il valore non è inserito nel campo della corrispondente textbox?
Grazie.
Secondo me non hai capito a cosa serve quel controllo allora...!
If Len(data_rich & vbNullString) > 0 Then ...
Questo codice serve per determinare se il Controllo contiene un Valore, e questo prescinde dal fatto sia Data/Numero/Testo..., ovviamente servirebbe la Validazione di TIPO... che ognuno fa se lo ritiene necessario...
Se non contiene NULLA NON COMPONE la sintassi relativa a questa parte di Criterio.
Cosa diversa invece è la SINTASSI di formattazione del criterio che dipende proprio dal FieldType, quindi cambia per Data/Numero/Testo, e si esplica in questa parte del codice:
strwhere = strwhere & "Data_Protocollo='" & data_rich & "' And "
Nel tuo caso essendo Data ovviamente questo non va bene..., ma nel post precedente, scivi:
eddy1973 ha scritto:
...
Per la formattazione delle date nel filtro ho usato la funzione Cdate(me.textbox.value) e passato i valori a variabili as Date e poi inseriti del codice per la gestione del filtro....
Non trovo traccia di questo nel codice che passi ora...!
Oltretutto spero tu non abbia un controllo chiamato [textbox].
Detto questo però, non siamo ancora arrivati a capire la parte di sostanza di cui parlavi:
eddy1973 ha scritto:
...
Il filtro funziona a patto che entrambe le date sul filtro non siano Null. Ma se una delle due date non è inserita il codice restituisce l'errore "utilizzo non valido di Null". Per una stringa utilizzo isNullString ma per una data come si opera?
Grazie.
Se la condizione della Data prevede un Inizio-Fine, quindi presuppone che ENTRAMBE le condizioni siano soddisfatte, è evidente che devi modificare il codice in relazione a questo...
If Len(Me!data_Inizio & vbNullString) > 0 AND Len(Me!data_Fine & vbNullString) > 0 Then strwhere = strwhere & "Data_Protocollo BETWEEN " & clng(Me!Data_Inizio) & " AND " & clng(Me!Data_Fine) & " And "