[RISOLTO] filtro maschera funziona in modo alterno

di il
3 risposte

[RISOLTO] filtro maschera funziona in modo alterno

Buongiorno a tutti!
questa volta vi scrivo perchè ho un problema alquanto bizzarro (con Access2007) che non riesco a risolvere.
data questa struttura di database:
http://s000.tinyupload.com/download.php?file_id=54311363617502425610&t=5431136361750242561043501
(purtroppo non riesco a fare l'upload delle immagini),

sulle tabelle Tconsegne e Tconsegne_dettagli ho creato questa query:

SELECT Tconsegne.id_consegna AS n°consegna, Tconsegne.[DATA CONSEGNA], Tarticoli.BARCODE, Tconsegne_dettagli.[QUANTITà ARRIVO], Tarticoli.ARTICOLO
FROM Tarticoli INNER JOIN (Tconsegne INNER JOIN Tconsegne_dettagli ON Tconsegne.id_consegna = Tconsegne_dettagli.ID_CONSEGNA) ON Tarticoli.BARCODE = Tconsegne_dettagli.BARCODE;
su questa query ho creato una maschera più elementi che mostri tutti i campi e i valori della query, con due caselle combinate per fare una ricerca sulla data e sull'articolo.
ho aggiunto il pulsante "Cerca" (comando14) che funzioni da filtro maschera in base ai valori selezionati nelle due (o solo in una) combobox.
il filtro l'ho costruito in VBA, nel seguente modo:

Private Sub Comando14_Click()
Me.FilterOn = False

Dim strWH As String
Dim strCONC As String
strCONC = "AND" ' Quì eventualmente puoi valutare la Questione AND/OR

If Len(Me!CasellaCombinata8.Value & vbNullString) > 0 Then
strWH = strWH & "BARCODE='" & Me!CasellaCombinata8.Value & "'" & strCONC
End If

If Len(Me!CasellaCombinata10.Value & vbNullString) > 0 Then
strWH = strWH & "[DATA CONSEGNA]=#" & Me!CasellaCombinata10.Value & "#" & strCONC
End If

If Len(strWH) > 0 Then
strWH = Mid$(strWH, 1, Len(strWH) - Len(strCONC))
End If

Me.Filter = strWH
Testo21.Value = Me.Filter
Me.FilterOn = True

End Sub
Ora la cosa bizzarra sta nel fatto che il filtro funziona per gli articoli, ma per quanto riguarda le date, funziona solo con una di esse --> dalla casella di testo date, ho 3 opzioni (origine riga è la Tconsegne): 27/01, 09/05 e 12/11. funziona solo se seleziono la data 27/01.
ho aggiunto una casella di testo (Testo21) per verificare come viene visto il filtro ma questo restituisce sempre valori congruenti.
ho provato a mettere come criterio nel campo query le date sovracitate e la query viene filtrata correttmente, così come funziona se utilizzo il comando "filtro in base a maschera" nella ribbon.
PS: tali date esistono nella tabella di partenza, vengono rilevate dalla query e sono presenti anche nella maschera.
non capisco proprio dove stia il problema.

3 Risposte

  • Re: [RISOLTO] filtro maschera funziona in modo alterno

    I Campi data vanno formattati secondo il formato ISO, vedi questo TUTORIAL:
    http://forum.masterdrive.it/microsoft-office-access-vba-23/vba-jet-tutorial-uso-campi-data-56461/
  • Re: [RISOLTO] filtro maschera funziona in modo alterno

    Ti ringrazio della risposta!
    ovviamente ora funziona tutto!
    Interessante sta distinzione tra Jet e Access....
    però non ho ancora capito una cosa: perchè mi legge correttamente una data? Cioè non dovrebbe essere tutto in un formato illegibile per Jet?
  • Re: [RISOLTO] filtro maschera funziona in modo alterno

    denial ha scritto:


    Ti ringrazio della risposta!
    ovviamente ora funziona tutto!
    Interessante sta distinzione tra Jet e Access....
    Access è il pacchetto composto dal Client e dal DBEngine... se ci pensi quando si sviluppa un'applicazione WEB con ASPX, ci si può appoggiare ad un File MDB, non per questo si usa Access soprattutto in termini di Licenza... proprio perchè non serve il Client di Automazione.

    denial ha scritto:


    però non ho ancora capito una cosa: perchè mi legge correttamente una data? Cioè non dovrebbe essere tutto in un formato illegibile per Jet?
    Access è intelligente... nel senso che consente di Formattare in modo che JET riconosca i dati, ma dipende da come componi la Stringa SQL.
    Se deleghi all'interprete allora lui risolve il dato imponendo la formattazione corretta
    
    "SELECT + FROM T1
    WHERE CampoData=Forms!NomeForm!NomeCampoData"
    In questo caso come vedi è tutto entrocontenuto nella Stringa, quindi interviene un interpreter di espressioni che risolve il riferimento in modo implicito.

    Se invece scrivi così
    
    "SELECT + FROM T1
    WHERE CampoData=" & Forms!NomeForm!NomeCampoData
    le cose cambiano... perchè il riferimento non viene risolto dall'interprete, ma viene passato il VALORE ESPLICITO, che quindi genera prima errore in quanto non riconosciuto come DATA(mancano #...#) poi anche se li metti... nnon viene attuata la conversione in formato Anglosassone, che deve essere fatta ESPLICITAMENTE prima.

    Ci sono poi le eccezioni nel caso in cui il giorno sia >12 in quanto non potendo rappresentare il MESE interviene nuovamente il motore di conversione che ipotizzando un errore prova a forzare nuovamente l'inversione MM/DD...
Devi accedere o registrarti per scrivere nel forum
3 risposte