Newsgroup: it.comp.appl.access
Titolo: Msg "Tipi di dati non corrispondenti nell'espressione criterio" su filtro date in maschera

Salve,
ho una maschera con più elementi basata su una query.
Nell'intestazione ho creato un elenco a discesa e 2 campi data per
filtrare i record tramite codice VBA. Il filtro dell'elenco funziona
bene, ma ho problemi con le date, in quanto dopo aver inserito le
date, appena lancio il filtro, mi da l'errore "Tipi di dati non
corrispondenti nell'espressione criterio".
Ho controllato il formato data ("data in cifre") che fosse uguale al
campo da filtrare, ho provato a cambiare il formato stesso in vari
modi ma senza esito positivo.
Qualcuno sa dirmi dove sbaglio?
Saluti

 ha scritto nel messaggio 
news:1174488454.3...@y80g2000hsf.googlegroups.com...

--------------------
Cosa scrivi per filtrare i record?
Posta il codice.
Ciao, Carlo

 ha scritto nel messaggionews:1174488454.3...@y80g2000hsf.googlegroups.com...

Ciao Carlo, il filtro parte su evento uscita di a_data
ecco qui:
Private Sub a_data_exit(Cancel As Integer)
On Error GoTo a_data_Err
If (Eval("[Forms]![mastrini]![seleziona_sottoconto] Is Null")) Then
        DoCmd.ShowAllRecords
    Else: DoCmd.ApplyFilter "", "[univoco]=[Forms]![mastrini]!
[seleziona_sottoconto]"
    End If
If (Eval("[Forms]![mastrini]![da_data] Is not Null And [Forms]!
[mastrini]![a_data] Is Null")) Then
        DoCmd.ApplyFilter "", "[data_reg]>=[Forms]![mastrini]!
[da_data]"
    Else
    If (Eval("[Forms]![mastrini]![da_data] Is Null And [Forms]!
[mastrini]![a_data] Is Not Null")) Then
        DoCmd.ApplyFilter "", "[data_reg]<=[Forms]![mastrini]!
[a_data]"
        Else
        If (Eval("[Forms]![mastrini]![da_data] Is Not Null And [Forms]!
[mastrini]![a_data] Is Not Null")) Then
            DoCmd.ApplyFilter "", "[data_reg] Between [Forms]!
[mastrini]![da_data] And [Forms]![mastrini]![a_data]"
    End If
    End If
    End If
DoCmd.Requery ""
a_data_exit:
    Exit Sub
a_data_Err:
    MsgBox Error$
    Resume a_data_exit
End Sub

 ha scritto nel messaggio 
news:1174490280.5...@l77g2000hsb.googlegroups.com...




----------------------------------
Qui già userei un'altra sintassi:
    If Eval("[Forms]![mastrini]![seleziona_sottoconto] Is Null") = True Then
    DoCmd.ShowAllRecords
    Else
    Me.FilterOn = True
    Me.Filter = "[univoco]=[Forms]![mastrini]![seleziona_sottoconto]"
    End If
Comincia con solo questa istruzione e vedi se funziona...le altre dovrebbero 
di conseguenza funzionare se ne rispetti lo stesso costrutto e i tipi di 
dati sono corrispondenti.
Ciao, Carlo 

 ha scritto nel messaggionews:1174490280.5...@l77g2000hsb.googlegroups.com...

Ciao Carlo, grazie per il tuo prezioso codice, l'ho provato anche solo
su una condiziona data e sembra funzionare ad hoc!
Ora però devo concatenare i 3 campi-filtri (sottoconto, da data e a
data)...immagino di inserire il filtro date dopo l'else, sai dirmi più
in dettaglio come?
Grazie

 ha scritto nel messaggio 
news:1174571288.2...@o5g2000hsb.googlegroups.com...


In questo caso devi dichiarare una variabile string:
Dim MioFiltro As String
che andrai a riempire a seconda delle circostanze e lo passerai a Me.Filter.
Nel caso di prima il codice diventa:
Dim MioFiltro As String
If Eval("[Forms]![mastrini]![seleziona_sottoconto] Is Null") = True Then
     MioFiltro = ""
     DoCmd.ShowAllRecords
     Else
     MioFiltro = "[univoco]=[Forms]![mastrini]![seleziona_sottoconto]"
     Me.FilterOn = True
     Me.Filter = MioFiltro
End If
If Eval("[Forms]![mastrini]![da_data] Is not Null And 
[Forms]![mastrini]![a_data] Is Null") Then
        if MioFiltro <> "" then
 MioFiltro = MioFiltro & " And [data_reg]>=[Forms]![mastrini]![da_data]"
 else
 MioFiltro = "[data_reg]>=[Forms]![mastrini]![da_data]"
 end if
 Me.FilterOn = True
      Me.Filter = MioFiltro
    Else
    If Eval("[Forms]![mastrini]![da_data] Is Null And 
[Forms]![mastrini]![a_data] Is Not Null") Then
 if MioFiltro <> "" then
 MioFiltro = MioFiltro & " And [data_reg]<=[Forms]![mastrini]![a_data]"
 else
 MioFiltro = "[data_reg]<=[Forms]![mastrini]![a_data]"
 end if
    Me.FilterOn = True
    Me.Filter = MioFiltro
    Else
    If (Eval("[Forms]![mastrini]![da_data] Is Not Null And 
[Forms]![mastrini]![a_data] Is Not Null")Then
     if MioFiltro <> "" then
 MioFiltro = MioFiltro & " And [data_reg] Between 
[Forms]![mastrini]![da_data] And [Forms]![mastrini]![a_data]"
 else
 MioFiltro = "[data_reg] Between [Forms]![mastrini]![da_data] And 
[Forms]![mastrini]![a_data]"
 end if
    Me.FilterOn = True
    Me.Filter = MioFiltro
End If
End If
End If
Ciao, Carlo

 ha scritto nel messaggionews:1174571288.2...@o5g2000hsb.googlegroups.com...

Ciao Carlo, grazie del tuo codice, ho scoperto un nuovo costrutto! Ho
dovuto sistemare un paio di virgolette ma funziona alla grande...spero
sia prestante dopo che saranno inseriti centinaia di record...
Per cronaca posto il codice col il ritocchino:
Dim MioFiltro As String
If Eval("[Forms]![mastrini]![seleziona_sottoconto] Is Null") = True
Then
     MioFiltro = ""
     DoCmd.ShowAllRecords
     Else
     MioFiltro = "[univoco]=[Forms]![mastrini]![seleziona_sottoconto]"
     Me.FilterOn = True
     Me.Filter = MioFiltro
End If
If Eval("[Forms]![mastrini]![da_data] Is not Null And [Forms]!
[mastrini]![a_data] Is Null") Then
        If MioFiltro <> "" Then
 MioFiltro = MioFiltro & " And [data_reg]>=[Forms]![mastrini]!
[da_data]"
 Else
 MioFiltro = "[data_reg]>=[Forms]![mastrini]![da_data]"
 End If
 Me.FilterOn = True
      Me.Filter = MioFiltro
    Else
    If Eval("[Forms]![mastrini]![da_data] Is Null And [Forms]!
[mastrini]![a_data] Is Not Null") Then
 If MioFiltro <> "" Then
 MioFiltro = MioFiltro & " And [data_reg]<=[Forms]![mastrini]!
[a_data]"
 Else
 MioFiltro = "[data_reg]<=[Forms]![mastrini]![a_data]"
 End If
    Me.FilterOn = True
    Me.Filter = MioFiltro
    Else
    If (Eval("[Forms]![mastrini]![da_data] Is Not Null And [Forms]!
[mastrini]![a_data] Is Not Null")) Then
    If MioFiltro <> "" Then
 MioFiltro = MioFiltro & " And [data_reg] Between [Forms]![mastrini]!
[da_data] And [Forms]![mastrini]![a_data]"
 Else
 MioFiltro = "[data_reg] Between [Forms]![mastrini]![da_data] And
[Forms]![mastrini]![a_data]"
 End If
    Me.FilterOn = True
    Me.Filter = MioFiltro
End If
End If
End If
Saluti e buon lavoro
Riccardo