Soluzione a possibile errore di compilazione

di il
14 risposte

Soluzione a possibile errore di compilazione

Buongiorno a tutti, vorrei un parere circa un possibile errore che si può verificare durante l'inserimento dei dati in questa maschera con sottomaschera.

I campi della maschera sono RapportoRedattoDa, Lavoro, commessa, data e meteo. Supponiamo che si stia redigendo il rapporto, quindi, dopo aver scelto il lavoro e la data, inizio a scegliere i dipendenti. Data e lavoro non c'è bisogno di compilarli perché si compilano essendo campi collegati. Supponiamo che dopo vari inserimenti mi accorgo che ho sbagliato lavoro oppure la data, allora vado sopra e scelgo il nuovo lavoro oppure la nuova data. I vecchi campi inseriti, a questo punto, nella sottomaschera non si aggiornano, rimangano con il lavoro vecchio così come per la data. C'è un modo veloce per aggiornarli automaticamente? Altrimenti, come potrei fare per ovviare al possibile errore?

Avevo pensato, inizialmente, di disattivare la cboLavoro della maschera dopo l aggiormento. Ma in questo modo se uno cade in errore come può risolvere? Dovrebbe cancellare tutti campi inseriti fino a quel momento e poi? Non so come uscirne, spero nel vostro prezioso aiuto e nei vostri consigli. 

Un saluto

14 Risposte

  • Re: Soluzione a possibile errore di compilazione

    Francamente non ho ben compreso… o meglio mi pare di capire che vorresti Riassegnare ad un “RAPPORTO” differente dei SottoRecords…?
    Di fatto devi modificare la FK che lega la Tabella Lato-1 alla Tabella Mato-M

    Solitamente nella SubForm non si dovrebbero rendere EDITABILI i controlli di Legame, nemmeno renderli visibili.

    Se devi spostare dei Records lato M, ed associarli ad un differente Record lato 1, si deve lavorare in modo più pulito.

    Crei una Maschera, che aprirai in modalità acDialog, con 1 ListBox con Query in Join Elenco Records lato 1+ M, ed una Combo Con l'elenco dei Records lato 1, quindi imposti la ListBox in Multiselezione Multipla Estesa, ed un BUTTON con SPOSTA…

    A quel punto selezioni i Dati Lato M, dalla ListBox, e selezioni nella Combo la NUOVA Destinazione lato 1, quindi Premi il BUTTON e con una Query UPDATE, fai una modifica della FK sui Records selezionati dalla ListBox.

    Alla chiusura della Maschera, dalla Form Chiamante, esegui il Requery della SubForm.

  • Re: Soluzione a possibile errore di compilazione

    07/07/2023 - @Alex ha scritto:


    Francamente non ho ben compreso… o meglio mi pare di capire che vorresti Riassegnare ad un “RAPPORTO” differente dei SottoRecords…?
    Di fatto devi modificare la FK che lega la Tabella Lato-1 alla Tabella Mato-M

    Solitamente nella SubForm non si dovrebbero rendere EDITABILI i controlli di Legame, nemmeno renderli visibili.

    Se devi spostare dei Records lato M, ed associarli ad un differente Record lato 1, si deve lavorare in modo più pulito.

    Crei una Maschera, che aprirai in modalità acDialog, con 1 ListBox con Query in Join Elenco Records lato 1+ M, ed una Combo Con l'elenco dei Records lato 1, quindi imposti la ListBox in Multiselezione Multipla Estesa, ed un BUTTON con SPOSTA…

    A quel punto selezioni i Dati Lato M, dalla ListBox, e selezioni nella Combo la NUOVA Destinazione lato 1, quindi Premi il BUTTON e con una Query UPDATE, fai una modifica della FK sui Records selezionati dalla ListBox.

    Alla chiusura della Maschera, dalla Form Chiamante, esegui il Requery della SubForm.

    Grazie, li ho messi visibili proprio per rendermi conto di cosa accadeva e di come risolvere. Il problema è proprio questo, nel senso io scelgo il lavoro e la data ed inizio a compilare la sottomaschera, ma se mi accorgo di aver sbagliato lavoro cosa faccio? Vado nella maschera principale (Lato 1) e cambio Lavoro, ma nella sottomaschera ancora ho memorizzato il vecchio lavoro. 

  • Re: Soluzione a possibile errore di compilazione

    Supponiamo che si stia redigendo il rapporto, quindi, dopo aver scelto il lavoro e la data, inizio a scegliere i dipendenti. Data e lavoro non c'è bisogno di compilarli perché si compilano essendo campi collegati.

    Come fai a collegare il campo data? Le tabelle le colleghi da id, le date non si usano come collegamenti.

    La tabella di dettaglio ha un campo data? Se si, ha senso che sia diversa dalla data della tabella master?

    Se no, non ha senso inserirla, se si ha senso che non si aggiorni con la master.

    Parli di errori, ma se ti accorgi dell'errore lo correggi a monte se le date sono quelle della master altrimenti correggi quelle lato detail.

    Lo stesso vale per tutti gli altri campi, se ti accorgi di un errore fai la correzione come per la combo lavoro. Ne hai una su master (lato 1 per capirci) e una (o dovrei dire n) su detail.

    Non ha senso un riferimento circolare. 

    A meno che non vi sia la necessità di suddividere la commessa del 01/01/2023 per più giorni e evidenziare piu mansioni.

    Esempio

    Ristrutturazione appartamento commessa del 01/01/2023

    Pippo 01/01/2023 abbattimento piastrelle (operaio/data/mansione)

    Pippo 02/01/2023 ripristino pareti (operaio/data/mansione)

    Topolino 03/01/2023 posa tubature (operaio/data/mansione)

    Ecc….

    Allora se cambi data alla master devi solo assicurarti che sulla detail le date siano posteriori a quella della master,.

    In ogni caso il programma non sa che date inserire, non puoi gestirlo in automatico.

    In caso di errore (o di variazione di stato di avanzamento lavori) apporti le modifiche al record.

    Al massimo inserisci un alert che ti avvisi se usi una data inferiore o troppo posteriore.

  • Re: Soluzione a possibile errore di compilazione

    07/07/2023 - @Alex ha scritto:


    Francamente non ho ben compreso… o meglio mi pare di capire che vorresti Riassegnare ad un “RAPPORTO” differente dei SottoRecords…?
    Di fatto devi modificare la FK che lega la Tabella Lato-1 alla Tabella Mato-M

    Solitamente nella SubForm non si dovrebbero rendere EDITABILI i controlli di Legame, nemmeno renderli visibili.

    Se devi spostare dei Records lato M, ed associarli ad un differente Record lato 1, si deve lavorare in modo più pulito.

    Crei una Maschera, che aprirai in modalità acDialog, con 1 ListBox con Query in Join Elenco Records lato 1+ M, ed una Combo Con l'elenco dei Records lato 1, quindi imposti la ListBox in Multiselezione Multipla Estesa, ed un BUTTON con SPOSTA…

    A quel punto selezioni i Dati Lato M, dalla ListBox, e selezioni nella Combo la NUOVA Destinazione lato 1, quindi Premi il BUTTON e con una Query UPDATE, fai una modifica della FK sui Records selezionati dalla ListBox.

    Alla chiusura della Maschera, dalla Form Chiamante, esegui il Requery della SubForm.

    In generale però non riesco a capire, ancora. Se io sto inserendo i campi relativi ai dipendenti nella sottomaschera allora nel campo lavoro si inserisce automaticamente il lavoro che ho scelto nella maschera. Ma se mi accorgo che ho selezionato male il lavoro e vado a cambiarlo nella maschera, allora nella sottomaschera i campi che ho già messo rimangono con il vecchio lavoro. Io vorrei che cambiando il lavoro nella maschera principale allora i campi già inseriti si aggiornassero automaticamente al nuovo valore, non tutta la sottomaschera, ma solo il campo Lavoro della sottomaschera. Se ottengo una cosa del genere allora poi il campo Lavoro nella sottomaschera lo posso nascondere.

  • Re: Soluzione a possibile errore di compilazione

    In che senso?

    In generale però non riesco a capire, ancora. Se io sto inserendo i campi relativi ai dipendenti nella sottomaschera allora nel campo lavoro si inserisce automaticamente il lavoro che ho scelto nella maschera

    Perché riportare per ogni sottorecord il dato del record principale?

    Pensa ad una fattura di acquisto, hai una testata dove trovi tipo documento data cliente ecc…

    Poi hai un corpo del documento ma non ritrovi gli stessi dati della testata, non ha senso.

    Da senso se fossero mansioni dei lavoratori. In questo caso ogni lavoratore si occupa di una mansione diversa.

    In ogni caso, per capire perché i dati non si aggiornano dovremmo vedere i campi delle tabelle e come sono relazionate.

    Per aggiornarle devi seguire il consiglio di @Alex

    Crei una Maschera, che aprirai in modalità acDialog, con 1 ListBox con Query in Join Elenco Records lato 1+ M, ed una Combo Con l'elenco dei Records lato 1, quindi imposti la ListBox in Multiselezione Multipla Estesa, ed un BUTTON con SPOSTA…

    Tutto questo puoi metterlo in automatico su afterupdate.

    Lanci una query di update sulla tabella lato M (uso le stesse parole di @Alex) senza costringere l'utente e pigiare alcun pulsante. I dati sono quelli della testata, e lasci invariati gli altri campi.

  • Re: Soluzione a possibile errore di compilazione

    07/07/2023 - sihsandrea ha scritto:


    In che senso?

    In generale però non riesco a capire, ancora. Se io sto inserendo i campi relativi ai dipendenti nella sottomaschera allora nel campo lavoro si inserisce automaticamente il lavoro che ho scelto nella maschera

    Perché riportare per ogni sottorecord il dato del record principale?

    Pensa ad una fattura di acquisto, hai una testata dove trovi tipo documento data cliente ecc…

    Poi hai un corpo del documento ma non ritrovi gli stessi dati della testata, non ha senso.

    Da senso se fossero mansioni dei lavoratori. In questo caso ogni lavoratore si occupa di una mansione diversa.

    In ogni caso, per capire perché i dati non si aggiornano dovremmo vedere i campi delle tabelle e come sono relazionate.

    Per aggiornarle devi seguire il consiglio di @Alex

    Crei una Maschera, che aprirai in modalità acDialog, con 1 ListBox con Query in Join Elenco Records lato 1+ M, ed una Combo Con l'elenco dei Records lato 1, quindi imposti la ListBox in Multiselezione Multipla Estesa, ed un BUTTON con SPOSTA…

    Tutto questo puoi metterlo in automatico su afterupdate.

    Lanci una query di update sulla tabella lato M (uso le stesse parole di @Alex) senza costringere l'utente e pigiare alcun pulsante. I dati sono quelli della testata, e lasci invariati gli altri campi.

    I dati poi mi servono nuovamente. La tabella sulla quale si basa la sottomaschera poi la utilizzo per altri scopi e in questa tabella mi serve nuovamente il lavoro e la data. 

    Allora la maschera principale si basa sulla tabella tblRedazioneRapportoDiLavoro che ha i seguenti campi: IDRedazioneRapporto, DataRapporto, IDLavoro, Commessa, RapportoRedattoDa, Meteo

    Metre la tabella su cui si basa la sottomaschera si chiama tblRapportoDiLavoroDipendenti ed ha i seguenti campi: IDDipendente, OraEntrata, OraUscita, IDLavoro, Data, RedattoDa e tutte le altre cosine che ci sono nella foto. Tra quste due tabelle non c'è nessuna relazione, ne tantomeno so come crearne una a sto punto. MI sto perndedo credo che ci lascio stare e buonanotte.

  • Re: Soluzione a possibile errore di compilazione

    Quando ti servirà la tabella tblRapportoDiLavoroDipendenti la prenderai tramite query

    Select * from tblRedazioneRapportoDiLavoro

    Inner join tblRapportoDiLavoroDipendenti on campocollegamentotabellarapportidilavoro=campoincomunetabelladipendenti (questi li verifichi tu sono chilometrici)

    In questo caso hai una sola tabella che ti rioorta i campi della testata per ogni rigo.

    Se vuoi solo il lavoro x dalla data y aggiungi alla query

    Where data=(metti la data che vuoi) and lavoro = (metti il lavoro che vuoi)

    Così mi sono spiegato meglio?

  • Re: Soluzione a possibile errore di compilazione

    07/07/2023 - sihsandrea ha scritto:


    Quando ti servirà la tabella tblRapportoDiLavoroDipendenti la prenderai tramite query

    Select * from tblRedazioneRapportoDiLavoro

    Inner join tblRapportoDiLavoroDipendenti on campocollegamentotabellarapportidilavoro=campoincomunetabelladipendenti (questi li verifichi tu sono chilometrici)

    In questo caso hai una sola tabella che ti rioorta i campi della testata per ogni rigo.

    Se vuoi solo il lavoro x dalla data y aggiungi alla query

    Where data=(metti la data che vuoi) and lavoro = (metti il lavoro che vuoi)

    Così mi sono spiegato meglio?

    Beh, ora ti devo fare un'altra domanda.  Come collego le due tabelle? Nella tabella tblRapportoDiLavoroDipendenti creo un campo IDRedazioneRapporto (questa è la chiave primaria della tabella tblRedazioneRapportoDiLavoro)e li collego. Ma quando compilo la tabella tblRapportoDiLavoroDipendenti cosa metto nel campo IDRedazioneRapporto?

  • Re: Soluzione a possibile errore di compilazione

    Puoi elencare le tabelle e i rispettivi campi?

    Tipo

    Tabella: master

    Campi:

    Idmaster pk

    Data

    Lavoro

    Ecc…

    Tabella: detail

    Iddetail

    Idmaster

    Operaio

    Ecc….

  • Re: Soluzione a possibile errore di compilazione

    TblRedazioneRapportoDiLavoro (questa è la tabella su cui è basata la maschera), ecco i campi:

    IDRedazioneRapporto (ChiavePrimaria)

    DataRapporto

    IDLavoro

    Commessa

    RapportoRedattoDa

    Meteo

    tblRapportoDiLavoroDipendenti(questa è la tabella su cui è basata la sottomaschera)

    IDRapportoDiLavoroDipendente

    IDDipendente

    OraEntrata

    OraUacita

    DescrizioneLavoroDipendente

    IDLavoro

    Note

    Data

    DedattoDa

  • Re: Soluzione a possibile errore di compilazione

    Ora è più chiaro.

    DescrizioneLavoroDipendente lo scrivi tu?

    Non attingi ad una tabella descrizionelavori?

    In questo caso non ha senso la prima affermazione

    Data e lavoro non c'è bisogno di compilarli perché si compilano essendo campi collegati.

    Ma non vedo nessun collegamento tra le due tabelle in riferimento a DescrizioneLavoroDipendente.

    DescrizioneLavoroDipendente lo metti una sola volta come campo nella tabella TblRedazioneRapportoDiLavoro

    Una volta inserito è un riferimento per tutti i dipendenti

    Se è questo che vuoi ottenere.

    Avrai:

    Testata:

    Data, rapporto nr. 10 (dati di esempio) tipo di lavoro xyz

    Nel dettaglio avrai

    Pippo. Dalle alle ecc…

    Pluto dalle alle ecc..

    Topolino dalle alle ecc…

    È questo che deve venire fuori?

    O deve venire fuori

    Testata:

    Data, rapporto nr. 10 (dati di esempio) 

    Nel dettaglio avrai

    Pippo. Dalle alle lavoro1 ecc…

    Pluto dalle alle  lavoro2 ecc..

    Topolino dalle alle lavoro3 ecc…

    Sono due modi di trattare i dati differenti.

    Fammi sapere

  • Re: Soluzione a possibile errore di compilazione

    Grazie! Ho risolto!

  • Re: Soluzione a possibile errore di compilazione

    09/07/2023 - Nat ha scritto:


    Grazie! Ho risolto!

    E' possibile sapere che metodo hai usato?

  • Re: Soluzione a possibile errore di compilazione

    09/07/2023 - fratac ha scritto:


    09/07/2023 - Nat ha scritto:


    Grazie! Ho risolto!

    E' possibile sapere che metodo hai usato?

    In pratica, ho rivisto le relazioni. Ho due tabelle la prima diciamo tblRedazioneRapportoDiLavoro con i seguenti campi: IDRapporto, Data, RedattoDa, IDLavoro la seconda di nome tblRapportoDiLavoroDipendenti con i seguenti campi: IDDipendente, OraEntrata, OraUscita, Descrizione e un campo IDRapporto numerico.

    Esiste ora una relazione uno(tblRedazioneRapportoDiLavoro) a molti(tblRapportoDiLavoroDipendenti). 

    Sulla prima tabella ho creato una maschera e sulla seconda una sottomaschera collegate mediante il campo IDRapporto in modo tale che ogni volta che stilo un rapporto a questo è associato naturalmente un IDRapporto e lo stesso è associato ai vari record che vado a mettere relativi ai dipendenti. Ovviamente poi ho nascosto il campo IDRapporto, ma prima ho visto come funzionava. 

Devi accedere o registrarti per scrivere nel forum
14 risposte