Impostare valore su casella di testo associata.

di il
6 risposte

Impostare valore su casella di testo associata.

Buongiorno a tutti.

Ho questa necessità.

Ho una casella di testo associata al relativo campo nella tabella.

Vorrei immettere in automatico nella casella di testo, un valore che viene preso dalla column(n) di una casella combinata, in base alla scelta fatta dall'utente e quindi salvarlo direttamente nel campo senza che venga digitato.

possibili soluzioni veloci, senza per forza dover passare da vb?

Impostare il valore predefinito della text box con

  =([nomecombobox].[column](2))

non funziona.

Oppure pensate che sia una inutile ripetizione di un dato che ho già salvato in un'altra tabella ed andrei a violare la normalizzazione e che dovrei semplicemente recuperarlo all'occorrenza?

In fondo effettivamente serve solo all'utente per facilitare l'immissione ed in questo caso non dovrebbe essere modificato.

Naturalmente se uso il vb, funziona e posso modificare all'occorrenza il valore impostato in automatico recuperato dalla column.

Private Sub gratta_Change()
Me.costogratta = Me.gratta.Column(2)
End Sub

Volevo solo sapere se c'erano alternative che mi sfuggono.

Grazie.

6 Risposte

  • Re: Impostare valore su casella di testo associata.

    Ciao,

    avevo stessa necessità in fase inserimento nuovo record in una SubForm e con la ComboBox nella Form Principale

    Ho risolto semplicemente così, inserendo l'evento nella SubForm:

    Private Sub Form_BeforeInsert(Cancel As Integer)
    ' retrieve Value from combobox
    Me.TuoCampo = Forms!TuaFormPrincipale!ComboBox.Column(2)
    End Sub

    In fase di Immissione nuovo record, come capita nel tuo caso, non ho trovato modo nelle propietà.

  • Re: Impostare valore su casella di testo associata.

    Mentre nelle Proprietà del campo, nel Valore Predefinito, sempre nellaSubForm… avrei potuto inserire:

    =[Maschere]![TuaFormPrincipale]![TuComboBox].[Column](2)

    Però già mi proponeva il valore ancor prima di entrare in inserimento del nuovo record e a video sembrava come se fosse un record parzialmente riempito …. insomma, non mi piaceva  ;))

    In questo caso la SubForm impostata come FoglioDati

  • Re: Impostare valore su casella di testo associata.

    Ripetere il valore Column in tabella è una inutile ridondanza che viola la normalizzazione.
    Nella maschera invece può tornare utile avere una casella di testo che mostra un valore di Column(n). Tu nella casella combinata digiti/selezioni il valore che ti serve, mentre invece crei una “casella di testo non associata” in cui dentro ci scrivi

    =[nomecombobox].Column(2)

    Importante scrivere Column senza le parentesi quadre.

  • Re: Impostare valore su casella di testo associata.

    13/05/2023 - OsvaldoLaviosa ha scritto:


    Ripetere il valore Column in tabella è una inutile ridondanza che viola la normalizzazione.
    Nella maschera invece può tornare utile avere una casella di testo che mostra un valore di Column(n). Tu nella casella combinata digiti/selezioni il valore che ti serve, mentre invece crei una “casella di testo non associata” in cui dentro ci scrivi

    =[nomecombobox].Column(2)

    Importante scrivere Column senza le parentesi quadre.

    Ciao,

    se non erro in questo caso di fratac, se è un campo con origine da Tabella o Query, le cose cambiano un attimino.
    Poi è necessario avere la conferma se si vuole l'automatismo in fase di Immissione New Records. 

    L'esempio che ho postato (per esempio) si riferisce all'inserimento di nuovi records, ed avere su talune Fields un valore predefinito che provenga da una comboBox di una Form e impostarlo come valore Predefinito nelle Propriètà.
    Quando si verifica l'evento Predefinito dovrà assumere il valore desiderato e tale evento sicuramente si verifica in fase di immissione new Records. 
    L'utente a questo punto già trova impostati alcuni campi che non dovrà inserire manualmente.

  • Re: Impostare valore su casella di testo associata.

    Buongiorno.

    Sicuramente è una violazione della normalizzazione.
    Però in questo caso secondo me è una delle rare eccezioni, dove violare la normalizzazione evita inutili complicazioni nella scrittura del codice e nella gestione delle query e dei report e dove è necessaria per andare a coprire le eccezioni.

    Infatti, immaginiamo il caso di un azienda commerciale che venda migliaia di prodotti con centinaia di clienti ai quali deve inviare dei preventivi.

    Naturalmente la prima cosa da fare è avere una tabella con i relativi prodotti e prezzi.

    Ma in questo caso,  ben sappiamo che i prezzi del singolo prodotto possono variare sia dalle zone di vendita, che per tipologia di cliente.

    Quindi si andrà a creare una tabella con i prodotti ed un'altra tabella dove verranno archiviati i prezzi raggruppati per listini di vendita.

    Quindi ad ogni prodotto, si avranno listini diversi, magari divisi per anno.

    E fin qui tutto nella norma.

    In fase di elaborazione del preventivo, basterà scegliere il relativo listino di vendita.

    Il problema sorge quando, bisogna fare dei preventivi una tantum, personalizzati per il singolo prodotto o cliente.

    In questo caso, per avere anche uno storico , la via più logica sarebbe creare un nuovo listino per il singolo preventivo, ma sicuramente non è la più performante, sia per l'operatore che deve creare un nuovo listino, andando a modificare il prezzo di un solo prodotto e per il singolo cliente, sia per la quantità di listini da creare se bisogna applicare modifiche a molti clienti.

    Inoltre se un listino già presente dovesse subire delle modifiche ai prezzi, ma si sono fatti già dei preventivi approvati, in fase di esecuzione dell'ordine, si avrebbero i nuovi prezzi e non quelli vecchi con il quale è stato perfezionato il contratto di vendita.

    Questo per dire che, secondo me, anche se viola la normalizzazione e si tratta di avere un valore doppio, la via più veloce, pratica e gestibile è quella di archiviare anche il prezzo nella tabella dei preventivi, scelto da un determinato listino, ma modificabile in fase di immissione.
    Questo permette di avere uno storico, un preventivo personalizzato e  che rimarrà invariato, anche in caso di modifiche ai prezzi del listino di origine, senza il bisogno di creare decine di listini personalizzati per ogni singolo cliente o singolo prodotto che potrebbe generare confusione, il classico latte alle ginocchia per l'operatore finale e che sicuramente andrebbe a cercare delle scorciatoie “per fare prima” che inevitabilmente generebbe degli errori a cascata.
    Perchè si sa ogni volta che si dice “facciamo così che si fa prima” è il momento che si generano errori che poi generano altri errori, facendo perdere molto più tempo se si fosse seguita la via ufficiale, anche se macchinosa.

    Inoltre, anche a livello tecnico, si eviterebbero query lunghe e piene di join, visto che verrebbe eseguita solo una query sulla tabella preventivi ed eventualmente solo sulla tabella dei prodotti per recuperare il nome e descrizione del prodotto, facilitando non di poco anche le somme.

    Quindi è meglio attenersi alle regole, per poi gestire in modo più macchinoso le eccezioni, oppure violare le regole?

  • Re: Impostare valore su casella di testo associata.

    Ciao, fratac… di necessità virtù ?   ;))  ma le cose normali ripagano sempre nel tempo

    In questo caso, se ho capito bene, si Normalizza implementando il reperimento prezzi da Listini

    Spiego meglio con un esempio: 
    Reperimento Prezzi con una struttura gerarchica e di regole…

    • Listino PREZZI per ARTICOLO
      • Validità
        • Data Inizio di Validità (da quale data entra in vigore il prezzo)
      • Tipo Listino
        • Generico (soddisfa il reperimento se non esistono condizioni particolari)
        • per Zona (valido per i Clienti che appartengono ad una certa Zona)
        • per Cliente (valido e personalizzato per singolo cliente)
        • Etc…
    • Listino OFFERTE per ARTICOLO
      • Validità
        • Data Inizio di Validità (da quale data entra in vigore il prezzo)
        • Data Fine di Validità (a quale data scade il prezzo)
      • Tipo Listino
        • Generico (soddisfa il reperimento se non esistono condizioni particolari)
        • per Zona (valido per i Clienti che appartengono ad una certa Zona)
        • per Cliente (valido e personalizzato per singolo cliente)
        • Etc…
    • Documento PREVENTIVO
      • Validità
        • Data Inizio e Fine Validità (periodo di validà dei prezzi preventivati)
      • Tipo Listino
        • Generico (soddisfa il reperimento se non esistono condizioni particolari)
        • per Zona (valido per i Clienti che appartengono ad una certa Zona)
        • per Cliente (valido e personalizzato per singolo cliente)
        • Etc…

    Flusso/Gerarchia Reperimento dei Prezzi 

    • Per ARTICOLO
      • Alla data di Validità 
        • da Offerta Generica… se attiva alla data reperimento prezzo 
          • Altrimenti da Listino Prezzi Generico
    • Per ARTICOLO / CLIENTE
      • Alla data di Validità
        • da Offerta
          • se attiva per Cliente
            • Altrimenti se attiva per Zona
              • Altrimenti Generica
        • Altrimenti per Cliente 
          • se Prezzi personalizzati per cliente
        • Altrimenti Zona
          • se Prezzi personalizzati per la Zona
        • Altrimenti Generico
          • (se le condizioni precedenti non si sono perfezionate)
    • Per ARTICOLO / ZONA
      • Alla data di Validità
        • da Offerta
          • se attiva per Zona
            • Altrimenti Generica
        • Altrimenti Zona
          • se Prezzi personalizzati per la Zona
        • Altrimenti Generico
          • (se le condizioni precedenti non si sono perfezionate)
    • Documento PREVENTIVO (ma anche per qualsiasi altro documento)
      • Per la compilazione del documento preventivo, il reperimento dei prezzi avrà la stessa logica e regole di cui sopra
        • Per ARTICOLO
          • (vedere come sopra)
        • Per ARTICOLO / CLIENTE
          • (vedere come sopra)
        • Per ARTICOLO / ZONA
          • (vedere come sopra)

    Pertanto, così come per il Documento Preventivo, anche tutti gli altri documenti, Fatture, Bolle, Scontrini, Corrispettivi, etc… seguiranno una sola gerarchia/regole di reperimento dei prezzi.

    Stesso discorso varrà per eventuali implementazioni che dovranno rispettare un reperimento dei prezzi che ha già una gerarchia/regole… Ma se necessario si potrà ridisegnare la gerarchia e le regole di reperimento prezzi per soddisfare le nuove esigenze e rispettare le vecchie.

    Quindi tutto va normalizzato per avere un costrutto standard in tutte le parti del progetto. (ci vuole fluidità e certezze) :))

Devi accedere o registrarti per scrivere nel forum
6 risposte