Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

di il
7 risposte

Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

Salve a tutti,
sono alle prese con un nuovo DB, chiedo il vostro aiuto per un problema che ormai mi affligge da settimane.
Ho una maschera principale (frmMain) con all'interno dati anagrafici di un cliente, e una sottomaschera (frmOrdini - in visualizzazione maschera continua) che contiene il riepilogo degli ordini.
Questa sottomaschera contiene i pulsanti nuovo (cmdNuovo), modifica (cmdMod), elimina (cmdElimina) e una casella di controllo (cdcOrdineOk); inoltre la sottomaschera è non visibile, la rendo visibile con un Pulsante di comando (cmdOrdini) . cliccando sul pulsante cmdOrdini, ho inserito il seguente codice:

Private Sub cmdOrdini_Click()

On Error Resume Next
Dim xx
Dim cdc = Forms!frmMain!frmOrdini.form!cdcOrdineOK
Set xx = Forms!frmMain!frmOrdini.Form.RecordsetClone ' sulla sottomaschera
frmOrdini.Visible = true 'visualizza maschera

If xx.RecordCount = 0 Then 'conta i record, se sono 0 allora abilita un pulsante
Forms!frmMain!frmOrdini.Form!cmdNuovo.Enabled = True
Forms!frmMain!frmRicovero.Form!cmdNuovo.Caption = "norec"

Else

If xx.RecordCount >= 1 And cdc = 0 Then
Forms!frmMain!frmOrdini.Form!cmdNuovo.Enabled = False
Forms!frmMain!frmOrdini.Form!cmdNuovo.Caption = "Nuovo1" ' verifica funzionamento

Else
If xx.RecordCount >= 1 And cdc = -1 Then
Forms!frmMain!frmOrdini.Form!cmdNuovo.Enabled = True
Forms!frmMain!frmOrdini.Form!cmdNuovo.Caption = "Nuovo2" ' verifica funzionamento


End If
End If
End If
End Sub

funziona benissimo il problema è che vorrei che i pulsanti nuovo, elimina e modifica si abilitassero in determinate condizioni come elencate nel codice, ma facendo riferimento all'ultimo record della sottomaschera.
In poche parole se un cliente ha un solo ordine il codice funziona, se il cliente ha 3 ordini, il codice fa riferimento sempre al primo ordine e non all'ultimo. Ad esempio vorrei abilitare un cmdNuovo solo se non ci sono record o l'ultimo ordine è stato confermato spuntando la casella cdcOrdiniok.

spero di essermi spiegato bene e vogliate scusarmi se il mio linguaggio di programmazione non è dei migliori.
grazie a chiunque possa darmi una mano

7 Risposte

  • Re: Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

    Hai scritto cose che dubito possano funzionare...
    
    Dim cdc = Forms!frmMain!frmOrdini.form!cdcOrdineOK
    ed anche cose che sarebbe meglio avessero una dichiarazione ESPLICITA
    
    Dim xx
    Detto questo io avrei scritto i condizionamenti in modo non Annidato che non serve...
    
    SELECT CASE TRUE
        Case xx.RecordCount=0
              ....
        
        Case cdc=False
              ....
              
         Case cdc=true
    
    End select
    Chiaramente devi capire che questo codice è esclusivo... ovvero, se esegue una condizione non esegue le altre, quindi equivale a quello che hai scritto sopra nel tuo, ma a mio avviso molto più LEGGIBILE.

    Ora se vuoi che questi cindizionamenti agiscano solo se sei all'Ultimo Record... verificalo...
    
    xx.CurrentRecord=xx.RecordCount
    In questo caso ti accorgerai che anche Con RecordCount=0 la condizione è soddisfatta e che il tuo codice iniziale può essere ulteriormente semplificato.

    Quando gestire questo codice...?
    Su Evento CURRENT di maschera non su CLICK...
    Fai anche attenzione che quando sei su NUOVO RECORD, ed anche quando hai RecordCount=0 hai attiva anche la proprietà NewRecord=True

    Saluti.
  • Re: Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

    La ringrazio per i suggerimenti preziosi. È da qualche mese che sto studiando e cercando di imparare.
    Volevo chiederle 2 delucidazioni:
    - La variabile CDC dovrei impostarla come as string o Boolean?
    - come dovrei dichiararla se CDC = Forms!frmMain!frmOrdini.form!cdcOrdineOK non va bene?

    scusi sto imparando. Se volesse aiutarmi gliene sarei davvero grato.
    Ho pensato che assegnare alla variabile il valore
    Del contenuto della casella di testo potesse in qualche modo agevolarmi nella scrittura del codice.

    Grazie ancora.
  • Re: Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

    Mro006 ha scritto:


    La ringrazio per i suggerimenti preziosi. È da qualche mese che sto studiando e cercando di imparare.
    Volevo chiederle 2 delucidazioni:
    - La variabile CDC dovrei impostarla come as string o Boolean?
    La devi dichiarare in relazione al Tipo di campo a cui si riferisce... se il Campo è tipo [Si/No], va da se che è Booleano.

    Mro006 ha scritto:


    - come dovrei dichiararla se CDC = Forms!frmMain!frmOrdini.form!cdcOrdineOK non va bene?
    No, non è che non va bene se scrivi così, anzi così è corretto:
    
    cdc = Forms!frmMain!frmOrdini.form!cdcOrdineOK
    ma tu in realtà nel 1° post hai scritto tutt'altro
    
    Dim cdc = Forms!frmMain!frmOrdini.form!cdcOrdineOK
    Una assegna, e l'altra dichiara(DIM), e non puoi assegnare mentre dichiari.

    Mro006 ha scritto:


    scusi sto imparando. Se volesse aiutarmi gliene sarei davvero grato.
    Ho pensato che assegnare alla variabile il valore
    Del contenuto della casella di testo potesse in qualche modo agevolarmi nella scrittura del codice.

    Grazie ancora.
    Il codice richiede, conoscenza, ed esperienza... quindi serve dedicarci tempo e studio..., ma nei Forum difficilmente si fornisce codice finito, in particolare a chi deve ancora consolidare le basi, perchè avrebbe l'unico effetto di fare Copy/Paste, cerchiamo invece di incentivare gli utenti a sforzarsi a scrivere codice per poi dare indicazioni.
    Tu le hai ricevute le indicazioni... ora devi provare a comprenderle.
  • Re: Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

    Si ho sbagliato a scrivere perché per fare comprendere ciò di cui avevo bisogno ho dovuto cambiare nomi a tutto e mi è sfuggito il dim CDC as Boolean e poi CDC =forms ecc..
    Ci sto provando a studiare e ad applicarmi.
    Avrebbe un testo di riferimento a cui fare affidamento? Ho già letto 2 testi di Alessandra salvaggio in italiano ma non sono sufficienti.. quindi sto studiando sul mattone di Mike Davis costruire applicazioni con access 2010. Avrebbe dei testi da consigliare anche in inglese?

    Grazie ancora
  • Re: Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

    Non conosco il libro che hai citato, ma di solito se parliamo di Libri tecnicamente validi, sarebbe bene orientarsi alla bibliografia in Inglese, alla meglio le produzioni Americane tradotte se uno ha difficoltà, ovviamente parliamo di norma di libri da 80€ i su...

    Puoi guardare questo:
    masterdrive.it/microsoft-access-79/bibliografia-recente-libri-access-100514/
  • Re: Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

    Quando inserisco questa codice : xx.CurrentRecord=xx.RecordCount come suggerito vba mi dice:
    errore di runtime '438'
    proprietà o metodo non supportati dall'oggetto.
  • Re: Attivare o disattivare dei pulsanti se sono presenti record e se si verifica un'altra condizione

    Ma lo hai scritto tu nel precedente [xx.RecordCount]... non io ... e basta aprire la guida in LINEA e digitare le 2 parole per capire su quale Oggetto si applicano...!!!
    L'errore lo restituisce quello non CurrentRecord... in quanto CurrentRecord è una proprietà di Maschera, ma RecordCount è una proprietà di Recordset... quindi sarà
    
    If xx.CurrentRecord=xx.RecordSetClone.RecordCount Then...
Devi accedere o registrarti per scrivere nel forum
7 risposte