Problema con l'evento Dopo Aggiornamento

di il
5 risposte

Problema con l'evento Dopo Aggiornamento

Buon giorno,

ho un piccolo problemino con l’evento “Dopo Aggiornamento” di una combo box.

La combo box (chiamata cmbVeicoli) viene popolata (grazie al prezioso aiuto di Gianni ed Alex) solamente con gli ID dei veicoli che sono disponibili nel periodo di date indicate nei campi “FormDa” e “FormA” con il seguente codice associato ad un pulsante (cmdVerifica):
Private Sub cmdVerifica_Click()

    If Not IsNull(Me.FormDa.Value) Then
        If Not IsNull(Me.FormA.Value) Then
            Me.cmbVeicoli.Enabled = True
            Me.cmbVeicoli.RowSourceType = "Table/Query"
            Me.cmbVeicoli.RowSource = "qryVeicoliDisponibili"
        End If
    End If
            
End Sub
la query è questa:
SELECT IDVeicolo, DescrizioneVeicolo
FROM tblVeicoli
WHERE IDVeicolo NOT IN (SELECT IDVeicolo FROM tblNoleggio WHERE [Maschere]![mscNuovoNoleggio]![FormDa]<[tblNoleggio.DataFine] AND [Maschere]![mscNuovoNoleggio]![FormA]>[tblNoleggio.DataInizio]);
La combo box cmbVeicoli risiede in una maschera che ha come origine record la tabella tblNoleggi. Ho creato delle caselle di testo non associate all’interno delle quali voglio mostrare dei dati che invece risiedono in una tabella chiamata tblVeicoli. Per fare questo ho scritto il seguente codice nell’evento “Dopo Aggiornamento” della combo box cmbVeicoli:
Private Sub cmbVeicoli_AfterUpdate()

Dim lIDVeicolo As Long
        
    lIDVeicolo = Me.cmbVeicoli.Value
            
    Me.DataInizio = Me.FormDa
    Me.DataFine = Me.FormA
    Me.IDVeicolo.Value = lIDVeicolo
    
    'Dettagli Veicolo
    Me.txtAltezzamax = DLookup("[AltezzaMax]", "tblVeicoli", [IDVeicolo] = lIDVeicolo)
    Me.txtSbraccioMax = DLookup("[SbraccioMax]", "tblVeicoli", [IDVeicolo] = lIDVeicolo)
    Me.txtPortataMax = DLookup("[PortataMax]", "tblVeicoli", [IDVeicolo] = lIDVeicolo)
    Me.txtCapienzaCestello = DLookup("[CapienzaCestello]", "tblVeicoli", [IDVeicolo] = lIDVeicolo)
    Me.txtPatente = DLookup("[Patente]", "tblVeicoli", [IDVeicolo] = lIDVeicolo)
    Me.txtNote = DLookup("[Note]", "tblVeicoli", [IDVeicolo] = lIDVeicolo)

End Sub
Se inserisco delle date in “FormDa” e “FormA”, cliccando sul pulsante “Verifica” la cmbVeicoli si popola correttamente e, quando seleziono uno dei veicoli disponibili tutti i campi di cui sopra si popolano correttamente.

Il problema sorge quando voglio cambiare il tipo di veicolo selezionato. I campi restano compilati con i dati relativi al primo veicolo scelto e non vengono aggiornati.

Solo il campo Me.IDVeicolo viene aggiornato di volta in volta con l’ID del veicolo selezionato

Come mai gli altri campi non si aggiornano ?

5 Risposte

  • Re: Problema con l'evento Dopo Aggiornamento

    VincMc ha scritto:


    [CODE] Me.txtAltezzamax = DLookup("[AltezzaMax]", "tblVeicoli", [IDVeicolo] = lIDVeicolo) ... Me.txtNote = DLookup("[Note]", "tblVeicoli", [IDVeicolo] = lIDVeicolo) Se inserisco delle date in “FormDa” e “FormA”, cliccando sul pulsante “Verifica” la cmbVeicoli si popola correttamente e, quando seleziono uno dei veicoli disponibili tutti i campi di cui sopra si popolano correttamente.

    Il problema sorge quando voglio cambiare il tipo di veicolo selezionato. I campi restano compilati con i dati relativi al primo veicolo scelto e non vengono aggiornati.
    Quello che suona strano è che si popolino i campi o meglio i controlli, perché quei DLookup sono sbagliati nella terza parte, quella della Where Condition. Dovrebbe essere
    DLookup("[AltezzaMax]", "tblVeicoli", "[IDVeicolo] = " & lIDVeicolo)
    Strano che non vada in errore. I controlli sono associati?
  • Re: Problema con l'evento Dopo Aggiornamento

    I Dlookup non servono a nulla se nella query che popola la combo si includono I campi richiesti anche senza vidlsualizzarli.... basta leggere la Column(indice).
  • Re: Problema con l'evento Dopo Aggiornamento

    @ Philcattivocarattere non ho ben chiaro perchè ma:

    Prendiamo un solo campo ed una sola riga di codice. Se scrivo così:
    Me.txtAltezzamax = DLookup("[AltezzaMax]", "tblVeicoli", [IDVeicolo] = lIDVeicolo)
    Il campo si riempie ma non si aggiorna. Se scrivo come mi hai indicato tu:
    Me.txtAltezzamax = DLookup("[AltezzaMax]", "tblVeicoli", "[IDVeicolo] =" & lIDVeicolo)

    Il campo si riempie e si aggiorna quando cambio veicolo.
    Mi rendo conto che il tuo appunto è più che giustificato (anche io quando devo impostare un filtro scrivo, ad esempio, "IDCliente =" & varID. Non capisco perché funziona anche scritto non correttamente.

    @ Alex alla fine ho implementato la tua soluzione e, ovviamente, anche in questo caso, funziona.
    Private Sub cmbVeicoli_AfterUpdate()
    
    Dim lIDVeicolo As Long
            
        lIDVeicolo = Me.cmbVeicoli.Value
                
        Me.DataInizio = Me.FormDa
        Me.DataFine = Me.FormA
        Me.IDVeicolo.Value = lIDVeicolo
        
        'Dettagli Veicolo
        Me.txtAltezzamax = Me.cmbVeicoli.Column(2)
        Me.txtSbraccioMax = Me.cmbVeicoli.Column(3)
        Me.txtPortataMax = Me.cmbVeicoli.Column(4)
        Me.txtCapienzaCestello = Me.cmbVeicoli.Column(5)
        Me.txtPatente = Me.cmbVeicoli.Column(6)
        Me.txtNote = Me.cmbVeicoli.Column(16)
        
        'Scadenze Veicolo
        Me.txtSRevisione = Me.cmbVeicoli.Column(9)
        Me.txtSCrono = Me.cmbVeicoli.Column(11)
        Me.txtSAnnuale = Me.cmbVeicoli.Column(13)
        Me.txtSAssicurazione = Me.cmbVeicoli.Column(15)
        Me.ccAssicurazioneSospesa = Me.cmbVeicoli.Column(17)
        Me.ccVeicoloAttivo = Me.cmbVeicoli.Column(18)
    End Sub
    Alla fine le colonne che popolano la combo sono tante (18, perché ci sono anche dei campi calcolati), ecco perché inizialmente avevo scartato questa strada...

    Grazie sempre!!!
  • Re: Problema con l'evento Dopo Aggiornamento

    In realtà non serve codice alcuno...
    Basta che nei controlli textbox metti come origine controllo la column(...)
    [Nomecombo].Column(n)
    Serve sempre semplificare le cose.
  • Re: Problema con l'evento Dopo Aggiornamento

    Fantastico!!!!
Devi accedere o registrarti per scrivere nel forum
5 risposte