Riferimento a sottomaschera

di il
20 risposte

20 Risposte - Pagina 2

  • Re: Riferimento a sottomaschera

    Ciao Gianni,

    chiedo venia! Convinto di ignorare solamente la sintassi per accedere alla sottomaschera ho omesso di spiegare nei dettagli il mio approccio al problema di ricerca.

    Come poi precisato da Alex, per quanto riguarda la casella combina ho fatto come segue:

    Origine di riga:
    SELECT tblVeicoli.NTarga, tblVeicoli.IDCliente, tblVeicoli.Attivo FROM tblClienti INNER JOIN tblVeicoli ON tblClienti.IDCliente = tblVeicoli.IDCliente WHERE (((tblVeicoli.Attivo)=True)) ORDER BY tblVeicoli.NTarga;

    Nella Finestra delle Proprietà, però, come colonna associata ho inserito 2 (quindi IDCliente)

    Quindi Me.cmbRicercaRapidaTarga.Value = IDCliente
    Mentre Me.cmbRicercaRapidaTarga.Column(0) = NTarga

    Ora mi sono reso conto che questa metodologia non era corretta.
    Per quanto il filtro fosse sempre impostato in maniera corretta, ho notato che a volte, selezionando una targa, nella combobox ne veniva visualizzata un’altra (in pratica la prima associata a quell’IDCliente). Ho quindi di nuovo impostato come colonna associata alla cmbRicercaRapidaTarga la 1° (Quindi NTarga).

    Il mio intento iniziale era quello di mostrare i dettagli relativi al cliente che possiede quel preciso veicolo nella maschera principale e, tutti i veicoli da lui posseduti, nella sottomaschera.

    Queste linee di codice mi permettevano di riuscire nell’intento (prima della modifica della colonna associata alla combobox):
    Private Sub cmbRicercaRapidaTarga_AfterUpdate()
    
        If Not IsNull(Me.cmbRicercaRapidaTarga.Value) Then
            Me.Filter = "IDCliente = " & Me.cmbRicercaRapidaTarga.Value
            Me.FilterOn = True
            Me.cmbRicercaRapidaRagSoc.Value = Null
            Me.cmbRicercaRapidaTelaio.Value = Null
              
        End If
    End Sub
    
    L’utente di questo piccolo applicativo mi ha poi fatto notare che, in ambito industriale, un’azienda può possedere anche decine di veicoli. Da qui la richiesta di poter vedere solo i dettagli del veicolo la cui targa è stata ricercata e la mia esigenza di poter imporre un filtro anche alla sottomaschera.

    Ho risolto così:
    Private Sub cmbRicercaRapidaTarga_AfterUpdate()
    
    Dim sCriterioRicercaSub As String
    
        If Not IsNull(Me.cmbRicercaRapidaTarga.Value) Then
            Me.Filter = "IDCliente = " & Me.cmbRicercaRapidaTarga.Column(1)
            Me.FilterOn = True
            
            sCriterioRicercaSub = "NTarga = " & Chr(39) & Me.cmbRicercaRapidaTarga.Column(0) & Chr(39)
            Me.subVeicoli.Form.Filter = sCriterioRicercaSub
            Me.subVeicoli.Form.FilterOn = True
            Me.subVeicoli.Form.Requery
             
            Me.cmbRicercaRapidaRagSoc.Value = Null
            Me.cmbRicercaRapidaTelaio.Value = Null
            AttivaModificaReport
                   
        End If
    End Sub
    
    Quindi proprio come mi avevi suggerito tu precedentemente
  • Re: Riferimento a sottomaschera

    @Alex ha scritto:


    Gianni55 ha scritto:


    ....
    Chiariamo che scrivere: (Me.cmbRicercaRapidaTarga.Value) e ( Me.cmbRicercaRapidaTarga.Column(0) ) è la stessa

    @Alex ha scritto:



    Gianni non è cosi assoluto come stai facendo passare...!
    La tua affermazione passa per dare per sacontato che la Colonna associata sia la 1°(Indice 0).... a prescindere.... non è così.
    Di fatto quindi non è vero che Value=Column(0), ma lo è solo SE la BoundColumn è la (0).
    Salve Alex
    Sono pienamente d'accordo con te ed ammetto che la mia domanda possa essere stata fuorviante ma mi chiedo, quale sarebbe il motivo che indurrebbe a scegliere una "colonna associata" diversa dalla (0) in un "Controllo non associato"?
    questo è stato il motivo per cui ho dato per scontato che la BoundColumn fosse rimasta quella di default tant'è che il cambio di questa senza motivo alcuno ha generato la confusione in argomento.(vedi post ultimo)
    Tre volte, nel primo post ho chiesto l'ordine dell'origine record nel secondo l'ho fornito io, cosiccome al mio "Chiariamo che..." la risposta è stata picche.
    Anche per questo ho ritenuto che la BoundColumn non fosse materia del contendere.

    Saluti
  • Re: Riferimento a sottomaschera

    VincMc ha scritto:


    Ciao Gianni,

    Nella Finestra delle Proprietà, però, come colonna associata ho inserito 2 (quindi IDCliente)

    Quindi Me.cmbRicercaRapidaTarga.Value = IDCliente
    Mentre Me.cmbRicercaRapidaTarga.Column(0) = NTarga
    Mah la colonna associata NON serve a questo e soprattutto non serve in questo caso perchè la combo in questione non è associata.
    Per dirla in breve se la combo fosse stata associata all'id Cliente la "Colonna Associata" doveva essere necessariamente quella che conteneva "IdCliente".

    Nel caso, invece ci serve un ordine delle colonne qui fare riferimento nel filtro, un'altra cosa volevo raccomandarti, fai attenzione al nome degli oggetti, tenendo conto che più in là interverrai sicuramente per modificare questo DB.
    per fare un esempio la tua "cmbRicercaRapidaTarga" io l'avrei chiamata "CcTargaCl" a nulla giovando quel "RicercaRapida" ovvero i nomi devono essere corti e significativi per rendere più fruibile il codice a te e a chi ti deve aiutare.

    VincMc ha scritto:


    Quindi proprio come mi avevi suggerito tu precedentemente


    Non mi pare proprio, verifica il mio secondo post
  • Re: Riferimento a sottomaschera

    Ciao Gianni,

    grazie ancora per i preziosi consigli.

    Per quanto riguarda il suggerimento che mi hai dato nel tuo secondo post credo parliamo di questo:
    Dim CriterioTarga as string
    Me.Filter = "IDCliente = " & Me.CcTarga.column(1)
    Me.FilterOn = True
    CriterioTarga ="IDCliente = " & Me.CcTarga.column(1) & "And  Targa = "   & Chr(34) & me.CcTarga.value & Chr(34)
    Me.mscSubVeicoli.Form.Filter =  CriterioTarga 
    Me.mscSubVeicoli.Form.FilterOn = True
    Non capisco perchè filtri la sottomaschera anche in base al campo IDCliente.
    Una volta eseguito il filtro sulla maschera
    Me.Filter = "IDCliente = " & Me.CcTarga.column(1)
    Me.FilterOn = True
    La sottomaschera già mostra esclusivamente i veicoli associati a quello specifico cliente.
    Ecco perchè mi sono limitato a:
            Me.Filter = "IDCliente = " & Me.cmbRicercaRapidaTarga.Column(1)
            Me.FilterOn = True
            
            sCriterioRicercaSub = "NTarga = " & Chr(39) & Me.cmbRicercaRapidaTarga.Column(0) & Chr(39)
            Me.subVeicoli.Form.Filter = sCriterioRicercaSub
            Me.subVeicoli.Form.FilterOn = True
            Me.subVeicoli.Form.Requery
    Buona domenica!
  • Re: Riferimento a sottomaschera

    Salve,
    sperando d'aver ben capito nella combo vengono elencate tutte le targhe di tutti i clienti e nella maschera principale ci sono 2 filtri:
    il primo cerca il cliente con collegate nella sottomaschera tutte le auto in suo possesso (questo funziona dici tu )
    Io dico funziona se Apri la maschera e filtri (la prima volta con la combo cliente.
    il criterio sulla combo targa con idcliente e targa (funziona se scelto un cliente cerchi la targa di quel cliente.(per questo in un primo momento avevo inserito ambedue (poi è rimasto lì) effettivamente si potrebbe anche non metterlo.

    Ma ora ti voglio far notare e proporre un'altra soluzione, poniamo questo scenario:
    1-Apro la maschera > scelgo dalla combo CcTarga la targa con o senza id cliente) intendo in questo modo :
     Me.Filter = "IDCliente = " & Me.cmbRicercaRapidaTarga.Column(1)
            Me.FilterOn = True
            
            sCriterioRicercaSub = "NTarga = " & Chr(39) & Me.cmbRicercaRapidaTarga.Column(0) & Chr(39)
            Me.subVeicoli.Form.Filter = sCriterioRicercaSub
            Me.subVeicoli.Form.FilterOn = True
    il requery non serve

    2- Arriva un altro cliente e con la maschera ancora aperta, la combo clienti funziona? NO (anche con mia sorpresa)!

    Quindi nel caso in cui la due combo debbano funzionare autonomamente ed in modo alternativo, sempre, anche a maschera già filtrata
    bisogna modificare anche il codice della combo cliente per qui:

    Combo Cliente:
    Dim CriterioCliente As String
    Me.Form.Filter = "idcliente=" & Me.CcCliente
    Me.Form.FilterOn = True
    CriterioCliente = "idcliente=" & Me.CcCliente
    Me.MkVeicolistm.Form.Filter = CriterioCliente
    Me.MkVeicolistm.Form.FilterOn = True
    ComboTarga:
     Me.Filter = "IDCliente = " & Me.cmbRicercaRapidaTarga.Column(1)
            Me.FilterOn = True
             sCriterioRicercaSub = "NTarga = " & Chr(39) & Me.cmbRicercaRapidaTarga.Column(0) & Chr(39)
            Me.subVeicoli.Form.Filter = sCriterioRicercaSub
            Me.subVeicoli.Form.FilterOn = True
    il requery non serve

    Saluti gianni
  • Re: Riferimento a sottomaschera

    Buon pomeriggio Gianni,

    ho verificato e, ovviamente, la ricerca non funzionava esattamente come hai segnalato tu.

    Ho apportato le modifiche che mi hai suggerito ed adesso sembra andare tutto bene.

    Se ho capito bene, dopo una ricerca con la combo relativa alle targhe la sottomaschera rimaneva filtrata per quella targa e ulteriori ricerche con la combo relativa alla Ragione Sociale dell'azienda non mostravano nulla (se non il veicolo precedentemente cercato se si selezionava l'azienda a cui apparteneva).

    Non so come ringraziarti!
    (oltre ad aver risolto un problema ho imparato tante cose...o almeno spero )
Devi accedere o registrarti per scrivere nel forum
20 risposte