Form con combo senza corrispondenza valori [Risolto]

di il
11 risposte

Form con combo senza corrispondenza valori [Risolto]

Salve a tutti,

mi trovo con il seguente problema: in una form per l'inserimento delle ore lavorative dei dipendenti (tblOreLavorate) ho una combo (2 colonne di cui una sola visibile) con cui seleziono i nomi. La combo e' appoggiata ad una query che seleziona, dalla tabella dei dipendenti (tblDipendenti), i nominativi di quelli attualmente in forze e il rispettivo ID.

Il problema nasce quando, nella form, scorro i records della tblOreLavorate e mi posiziono su uno relativo ad un dipendente non piu' in forze: ovviamente la query non trova il nominativo del dipendente ed il controllo quindi rimane vuoto. Per ovviare a cio' ho inserito una textbox non associata che valorizza il dato salvato nel controllo restituendo il nome del dipendente non piu' in forze. La textbox e la combo le ho posizionate sovrapposte e le rendo visibili una alla volta in base a cio' che devo fare: su inserimento o modifica rendo visibile la combo, in visualizzazione rendo visibile la textbox.

Il sistema funziona, pero' non sono sicuro che sia la procedura giusta per cui chiedo un vostro parere

Grazie

11 Risposte

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Ciao.
    Scommetto che la query filtra con una check box ed usi la stessa maschera sia per l'inserimento che per le modifiche.
    Mi hai fatto ricordare che ho lo stesso problema da risolvere su un mio database.

    L'avevo rimandato come cosa da fare e non ci ho ancora ragionato.

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Beh ovviamente se la Combo esclude i dipendenti non più in forza, alla selezione sia un problema, e lo è se si usa la Combo come campo Associato.

    Io vedo 3 Soluzioni, ovviamente frutto di compromessi…

    1) Rendere non editabile il campo una volta assegnato, quindi la Combo va Bloccata, altrimenti se domani per errore modifichi la selezione non sarai più iun grado di aggiustare… con questa Opzione, rendi la Combo grossa solo il Pulsante di DropDown e lo posizioni affianco alla TextBox alla sua Dx o Sx a seconda del gusto, quindi la TxtBox ha come origine controllo la Column(2) della combo, anche questa bloccata ovviamente.

    2) Nella query origine, metti 3 Colonne, ID,NOminativo,InCarico, ordinando per InCarico,Nominativo, così avrai in cima tutti i dipendenti in carico ed in fondo gli altri.

    3) Metti un Flag che ti consente al volo di Includere i Records dei dipendenti non in carico, quindi cambi il RowSource se serve, ovviamente adottando l'ordinamento di cui sopra al punto 2.

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Grazie Alex per la pronta risposta. Penso che propendero' per l'opzione 1: quando parli di bloccare la Combo ti riferisci alla proprieta' Locked? Pensavo di sbloccarla con i pulsanti “Aggiungi" e “Duplica” e di bloccarla con il pulsante "Salva”; in piu' aggiungere il blocco anche in fase di apertura form, nel caso chiudessi la form senza salvare con il controllo sbloccato. 

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Si, Locked così consente la selezione.

    Attenzione anche all'evento Current, nel caso in cui ti muovi senza premere salva.

    Private Sub Form_Current()
    	Me.NomeCombo.Locked= Not Me.NewRecord
    End Sub
  • Re: Form con combo senza corrispondenza valori [Risolto]

    Buongiorno,

    ho testato la soluzione proposta al punto 1 da Alex, ma nella Textbox compare “#Nome” in quanto, presumibilmente, avendo come origine controllo la query della listbox, se la listbox non e' attivata non lo e' neanche la query, giusto? Per cui la Textbox non trova nessun nome. Inoltre nella query non comparirebbero comunque i nomi del personale non piu' in forza, per cui non verrebbero visualizzati i loro nomi nella textbox.

    Stavo testando una nuova versione: nella textbox come origine controllo ho la funzione Dlookup che cerca in tabella il nome del dipendente in base all'ID del record corrente della form, la listbox e' ridotta alla sola larghezza dei tasti freccia, su attivazione della list (GotFocus), nascondo la textbox ed allargo la list con la proprieta' .width. Quindi faccio la selezione del dipendente e, su salva, ripristino la larghezza list alle sole frecce e rendo visibile la textbox. 

    Mi trovo pero' in un loop: quando cerco di ripristinare la larghezza della listbox, si attiva la sua GotFocus che la allarga di nuovo.

    Ho provato diverse routines sulla listbox, ma solo la GotFocus si attiva con la pressione delle frecce: anche tasto mouse giu' non si attiva sulle frecce della list…

    Qualche suggerimento?

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Usare NZ….?

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Il brutto vizio che abbiamo un po tutti è quello di voler aggiungere, modificare e cancellare e visualizzare lo storico e fare il caffè con in unica maschera, che poi ci porta a fare numeri da giocolieri armeni.

    Come ti avevo detto ho lo stesso problema ed analizzando le varie soluzioni, sono giunto alla conclusione che la via più logica è quella di utilizzare maschere dedicate per le varie azioni, sopratutto per quella che dovrebbe essere lo storico delle ore lavorate, che dovrebbe essere solo una interrogazione al database senza modifiche attive.

    Inoltre le modifiche dei lavoratori non piu in forza andrebbe fatta richiamendo l anagrafe con la visualizzazione dei dati collegari per poi modificarli.

    Tra parentesi, quando mi sono convinto ad adottare questa soluzione ho analizzato vari programmi professionali è quasi sempre la soluzione adottata èquella a cuixavevo pensato. Se la maschera non è quellaxdedicata alla modifica, i dati sono sempre il risultato dicuna semplice query di selezione e sono sempre una visualizzazione non modificabile.

    Se poi c e bisogno di modificarli, da quella vista, viene richiamata l anagrafe con tutti i tecord relativi, oppure viene richiamato solo il record selezionato per essere modificato.

    Secondo me questa soluzione, che può sembrare un appesantimento, allafine evita  inutili accrocchi e garantisce coerenza nel database.

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Ho risolto, sara' forse un “accrocchio”, ma funziona…

    Su apertura form la textbox e' visibile (ma bloccata) e la listbox non e' visibile; se devo modificare solo la textbox, con doppio click faccio aprire la listbox, gli do il focus e rendo non visibile la textbox. Su pulsante salva inverto la visibilita' dei due controlli. 

    Stessa cosa accade per i pulsanti Nuovo Record e Duplica: rendo non visibile la text e visibile la list.

    Su evento form Current se non e' nuovo record rendo visibile la text e non visibile la listbox:

    Private Sub Form_Current()
    
        If Me.NewRecord Then
            frmPRNUMtabPRIDtabEDid.Visible = True 'listbox visibile
            frmPRTXTnomeattrezzista.Visible = False 'textbox non visibile
        Else
            frmPRNUMtabPRIDtabEDid.Visible = False
            frmPRTXTnomeattrezzista.Visible = True
        End If
    
    End Sub
    

    Non ho ancora testato l'uso della Nz suggerita da Alex, faccio qualche prova…

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Hai scritto troppo codice, prova così:

    Private Sub Form_Current()
        frmPRNUMtabPRIDtabEDid.Visible = Me.NewRecord'listbox visibile con NewRecord
        frmPRTXTnomeattrezzista.Visible = Not Me.NewRecord'textbox non visibile con NewRecord
    End Sub
  • Re: Form con combo senza corrispondenza valori [Risolto]

    …il dono della sintesi!!!

    Grazie Alex

  • Re: Form con combo senza corrispondenza valori [Risolto]

    Beh, nessuno nasce “imparato ” e non esiste la soluzione perfetta o universale.

    I forum servono per scambiarsi idee e soluzioni.

    L uso di determinate soluzioni dipende da molti fattori, nel mio caso anche la voglia di sbattermi a scrivere codice e gestire eventi.

    Diciamo che tendo a prendere la via più comoda o che ritengo tale.

    Per quanto riguarda la soluzione che hai adottato penso che dovresti controllare anche l ancoraggio degli oggetti, che potrebbe scombinarti la sovrapposizione degli oggetti nel caso di ingrandimento o riduzione della form o del cambio di risoluzione dello schermo.

    L ultima volta che ho adottato soluzioni del genere era con versioni vecchissime di access che creavano problemi del genere e la mia esperienzaxera anche molto più limitata. Ora non so se il problema sussiste.

Devi accedere o registrarti per scrivere nel forum
11 risposte