Newsgroup: it.comp.appl.access
Titolo: filtro al volo sottomaschera

Buongiorno a tutti.
Ho una maschera di ricerca clienti con cmbFiltroTipo, txtRicerca e sottomaschera smRiepClienti con origine query qsmRiepClienti.
In una casella di testo ho memorizzato l'IdAzienda per filtrare i Clienti della ditta selezionata.
Il problema è il seguente:
appena digito una lettera il filtro viene eseguito ma il primo Cliente appare tante volte anche se il filtro è corretto. Appena metto il focus sulla sottomaschera, appare solo una volta e via via tutti gli altri record filtrati.
Nelle maschere simili ma senza il filtro IdAzienda non ho  problemi (Ricera Anagrafiche o Ricerca Aziende)
su evento keyup della txtRicerca ho il seguente codice:
Dim intLung As Integer
    intLung = Len(myString)
    If KeyCode = 46 Then myString = "": Me.txtRicerca.Value = "" ' se viene pigiato CANC cancella tutto
    If KeyCode = 190 Then myString = myString & Chr$(46): GoTo 100
    If KeyCode = 8 Then
        If intLung = 0 Then GoTo 100 ' se la lunghezza è 0 non serve intervenire
        If intLung = 1 Then myString = "": GoTo 100 ' se la lunghezza è 1,
        myString = Left$(myString, intLung - 1) ': GoTo 100  ' togliamo un carattere
    End If
'    myString = myString & Chr$(KeyCode) ' aggiungiamo il carattere digitato
    If KeyCode = 219 Then
        myString = myString & Chr$(39) ' se il carattere digitato è ' lo aggiungiamo
    Else
        If KeyCode <> 8 Then myString = myString & Chr$(KeyCode) ' aggiungiamo il carattere digitato se non è stato premuto il tasto CANC
    End If
    If Me.cmbFiltroTipo = "Codice" Then strFiltro = "IdAzienda = " & Me.txtIdAzienda & " AND IdAnagrafica = " & myString
    If Me.cmbFiltroTipo = "Descrizione" Then strFiltro = "IdAzienda = " & Me.txtIdAzienda & " AND Cliente Like ""*" & myString & "*"""
    If Me.cmbFiltroTipo = "Partita Iva" Then strFiltro = "IdAzienda = " & Me.txtIdAzienda & " AND PartitaIva Like """ & myString & "*"""
    If Me.cmbFiltroTipo = "Codice Fiscale" Then strFiltro = "IdAzienda = " & Me.txtIdAzienda & " AND CodiceFiscale Like """ & myString & "*"""
'    myQuery = strFiltro
    Form_smRiepClienti.Filter = strFiltro
    Form_smRiepClienti.FilterOn = True
 
    Me.smRiepClienti.Requery
    Form_smRiepClienti.Tag = strFiltro
    OrdinamentoDati
100     ' fine della sub
 
Cosa devo fare per risolvere questo problema?
Grazie e buona vigilia e buon anno  a tutti.
Giuseppe


Puoi fare un DEBUG.PRINT della stringa [strFiltro] prima di valorizzare la proprietà FILTER e verificare cosa contiene...?
In questo modo vedendo la sintassi è sicuramente più semplice per te, ma anche per noi, capire l'errore eventuale...
 
Ciao
@Alex


Ciao Alex e grazie per la risposta.
debug.print strFiltro
restituisce correttamente
IdAzienda = 1 AND Cliente Like "*CONS*"
Giuseppe

 Giuseppe
 
La sintassi sembra corretta, il dubbio che ho è sul riferimento alla Form [Form_smRiepClienti]:
Form_smRiepClienti.Filter = strFiltro
 
Non so se sia una SubForm e se il codice scritto gira nella forma stessa o nella Parent...
 
@Alex


Alex è lo stesso codice che uso nella ricerca delle Anagrafiche Generali e delle Aziende dove ogni anagrafica o azienda è univoca, invece in questo caso un cliente può essere cliente di diverse aziende.
Poi appena finito di digitare il testo è sufficiente spostare il focus su un punbto qualsiasi della subform che i record visualizzati diventano unici e non ripetuti.
Grazie.
Giuseppe


Ciao Giuseppe,
come prima cosa il GOTO è stato ammazzato da tanti anni ;-))) e mi fa male rivederlo in uso.
Prova così:
  Dim intLung As Integer
  intLung = Len(mystring)
  Select Case KeyCode
  Case 46: mystring = "": Me.txtRicerca.Value = "": Exit Sub ' se viene pigiato CANC cancella tutto
  Case 190: mystring = mystring & Chr(46): Exit Sub
  Case 8
    If intLung = 0 Then
      Exit Sub
    ElseIf intLung = 1 Then mystring = "": Exit Sub
    Else: mystring = Left(mystring, intLung - 1) ' togliamo un carattere
    End If
  Case 219: mystring = mystring & Chr(39) ' se il carattere digitato è ' lo aggiungiamo
  Case Else: mystring = mystring & Chr(KeyCode) ' aggiungiamo il carattere digitato
  End Select
  Select Case Me.cmbFiltroTipo
  Case "Codice": strFiltro = "IdAzienda = " & Me.txtIdAzienda & " AND IdAnagrafica = " & mystring
  Case "Descrizione": strFiltro = "IdAzienda = " & Me.txtIdAzienda & " AND Cliente Like '*'" & mystring & "'*'"
  Case "Partita Iva": strFiltro = "IdAzienda = " & Me.txtIdAzienda & " AND PartitaIva Like '" & mystring & "'*'"
  Case "Codice Fiscale": strFiltro = "IdAzienda = " & Me.txtIdAzienda & " AND CodiceFiscale Like '" & mystring & "'*'"
  End Select
  ' myQuery = strFiltro
  Me.smRiepClienti.Form.Filter = strFiltro     'Form_smRiepClienti.Filter = strFiltro
  Me.smRiepClienti.Form.FilterOn = True      'Form_smRiepClienti.FilterOn = True
  Me.smRiepClienti.Form.Requery                 'Me.smRiepClienti.Requery
 
  Form_smRiepClienti.Tag = strFiltro
  OrdinamentoDati
 
Nota che ho cambiato le righe di codice che applicano il filtro nella sottomaschera.
Non l'ho provato, naturalmente, ma dovrebbe funzionare...
Silvio


Ciao Silvio e grazie per il codice.
All'inserimento del secondo carattere la stringa filtro nella finestra immediata è IdAzienda = 2 AND Cliente Like '*'C'*'
e va in errore andando in debug alla riga
    Me.smRiepClienti.Form.Filter = strFiltro 'Form_smRiepClienti.Filter = strFiltro
Giuseppe.