Aggiornamento campi da tabella A alla sottomaschera di una tabella B

di il
61 risposte

61 Risposte - Pagina 2

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    04/08/2023 - Antony73 ha scritto:


    Devo ammettere che nelle tue intenzioni c'è qualcosa che mi è oscuro. Nel tuo caso io farei così:

    Userei la sottomaschera per visualizzare i dati della query associata e i controlli della maschera per:

    1) filtrare i dati della sottoscrizione;

    2) il inserire nuovi dati;

    3) modificare i dati esistenti.

    In questo caso i controlli della maschera dovranno essere non associati.

    Grazie mille per la tua disponibilità in risposta al post , ma non è quel che devo fare. 

    La maschera B lavora direttamente sulla tabella, che appunto devo inserire le informazioni della maschera A, che lavora su una query. 

    Ma tutto quello che mi serve sapere è :

    Su codice che ho postato sopra, perché non mi si crea un record nella sottomaschera partendo da un pulsante collocato in un'altra maschera, tutto qui. 

    Nel momento in cui saprò come fare questo, sono a posto per tutto il resto. 

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    Ti pongo una domanda. Come inserisci i dati nelle tabelle?

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    04/08/2023 - Antony73 ha scritto:


    Ti pongo una domanda. Come inserisci i dati nelle tabelle?

    La maschera A lavora su una query, viene alimentata da un'altra 3a maschera che lavora dalla tabella. Perciò la maschera A é prettamente di visualizzazione dati. 

    La maschera B é una maschera e sottomaschera che lavorano direttamente dalle tabelle. E su questa, inserisco direttamente i contenuti creando appunto un nuovo record nella sottomaschera. 

    Che era semplicemente questo che volevo fare da un pulsante inserito nella maschera A… creare 1 nuovo record nella sottomaschera in B

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    La sottomaschera è associata ad una query? Suppongo di sì. Con la penultima istruzione e quella ancora precedente stai cercando di associare il valore dei controlli della maschera a quelli della sottomaschera. Avendo quest'ultima controlli già associati la cosa non può funzionare.

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    È possibile vedere le tabelle e la query?

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    05/08/2023 - Antony73 ha scritto:


    La sottomaschera è associata ad una query? Suppongo di sì. Con la penultima istruzione e quella ancora precedente stai cercando di associare il valore dei controlli della maschera a quelli della sottomaschera. Avendo quest'ultima controlli già associati la cosa non può funzionare.

    Non mi crea il nuovo record nella sottomaschera…. 

    Tutto il resto funziona.  

    Ho solo bisogno di sapere come fare per creare un nuovo record… TuTutto qui

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    05/08/2023 - sihsandrea ha scritto:


    È possibile vedere le tabelle e la query?

    Ho lasciato il pc al lavoro… lunedì faccio lo screen. 

    Ma di base devo sapere solo come creare un nuovo record nella sottomaschera, visto che il codice che ho usato sopra non funziona 

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    Non sempre è possibile inserire o modificare i dati da una query. Se visualizzi dati filtrati da query per la modifica, l'inserimento o la cancellazione devi usare una query (insert into table ecc…. In alternativa, apri una tabella (solo l'accesso ai dati), inserisci un nuovo record, coi dati che ti servono, esegui il requery della query che usi per la madre posizionandoti al nuovo record creato.

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    04/08/2023 - Pattygirl ha scritto:


    Il problema è che non mi crea il nuovo record nella sottomaschera dove possa inserire il codice di riportare il campo. 

    Se aggiungi il record a mano, senza automatismi di valorizzazione dei controlli, funziona? (serve per escludere che non si sia di fronte ad un'origine dati non aggiornabile)

    04/08/2023 - Pattygirl ha scritto:


    Visto che ho anche ho usato docmd per creare nuovo record, ma mi da errore 

    Dirlo subito non sarebbe stata una cattiva idea. Su quale riga si blocca e che tipo di errore è? (codice e descrizione, non li conosco a memoria tutti)

    Evita di chiamare Maschera A e Maschera B quello che ha un nome specifico che hai già indicato. Sii costante nel thread nell'indicare i nomi.

    Quel codice del post di apertura dove si trova?

    04/08/2023 - Pattygirl ha scritto:


    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

    Naaaaa, per salvare un record meglio un 

    NomeMaschera.Dirty = False

    con sintassi da verificare in base al punto in cui scrivi il codice.

    Vada anche per un

    DoCmd.RunCommand acCmdSaveRecord
  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    Si, se aggiungo il record a mano funziona perfettamente. 

    Infatti si blocca nella creazione del nuovo record con il codice che ho messo su 

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    05/08/2023 - Philcattivocarattere ha scritto:


    04/08/2023 - Pattygirl ha scritto:


    Il problema è che non mi crea il nuovo record nella sottomaschera dove possa inserire il codice di riportare il campo. 

    Se aggiungi il record a mano, senza automatismi di valorizzazione dei controlli, funziona? (serve per escludere che non si sia di fronte ad un'origine dati non aggiornabile)

    04/08/2023 - Pattygirl ha scritto:


    Visto che ho anche ho usato docmd per creare nuovo record, ma mi da errore 

    Dirlo subito non sarebbe stata una cattiva idea. Su quale riga si blocca e che tipo di errore è? (codice e descrizione, non li conosco a memoria tutti)

    Evita di chiamare Maschera A e Maschera B quello che ha un nome specifico che hai già indicato. Sii costante nel thread nell'indicare i nomi.

    Quel codice del post di apertura dove si trova?

    04/08/2023 - Pattygirl ha scritto:


    DoCmd.DoMenuItem acFormBar, acRecordsMenu, 5, , acMenuVer70

    Naaaaa, per salvare un record meglio un 

    NomeMaschera.Dirty = False

    con sintassi da verificare in base al punto in cui scrivi il codice.

    Vada anche per un

    DoCmd.RunCommand acCmdSaveRecord

    Adesso non mi ricordo bene, prima se non erro dava un errore 2445 l'altro era tipo iniziava con 4 ma onestamente non mi ricordo. Adesso non ho il pc a portata di mano, ho lasciato al lavoro perche non avrei avuto tempo di guardare nell'weekend 

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    05/08/2023 - Pattygirl ha scritto:


    Adesso non mi ricordo bene, prima se non erro dava un errore 2445 l'altro era tipo iniziava con 4 ma onestamente non mi ricordo. Adesso non ho il pc a portata di mano

    Quando puoi ci farai sapere.

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    05/08/2023 - Philcattivocarattere ha scritto:


    05/08/2023 - Pattygirl ha scritto:


    Adesso non mi ricordo bene, prima se non erro dava un errore 2445 l'altro era tipo iniziava con 4 ma onestamente non mi ricordo. Adesso non ho il pc a portata di mano

    Quando puoi ci farai sapere.

    Si lunedì controllo i codici giusti, grazie ?? 

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    Aiutarti sarà veramente difficile per il semplice motivo che in access, per fare una cosa esistono decine di metodi differenti, sia per quanto riguarda le tabelle, le relazioni tra di esse, la costruzione delle query per salvare i dati o per visualizzarli e sopratutto il codice vba.
    Ognuno di noi ragiona in modo diverso e quindi affronta e scrive i codici in modo diverso.

    Quindi non sappiamo come hai ragionato e come hai affrontato le varie soluzioni.

    Ci hai fornito le immagini delle maschere, ma in realtà, le maschere sono solo l'ultima ruota del carro e non bisogna concentrarsi su di loro.

    QUello che veramente serve,  sono la struttura delle tabelle e come sono collegate tra di loro tramite le relazioni.
    Poi, serve sapere come sono fatte le query fonte dati delle maschere e come sono collegati i campi master.

    Bisogna conoscere il tipo di relazioni, se hanno l'integrità referenziale attiva oppure no. 

    Da quello che hai descritto e quindi penso di aver capito fin dall'inizio, hai delle relazioni molti a molti.

    Il problema che riscontri è che cerchi di aggiungere un record su una tabella che necessita di una chiave primaria presente su un'altra tabella.

    Molto probabilmente sembra tutto funzionare, perchè non hai attivato l'integrità referenziale a livello di relazioni e quindi non ti si genera nessun errore, fino a quando, tramite VBA non cerchi di andare ad inserire un nuovo record sulla tabella.

    Quando cerchi di inserire un nuovo record nella tabella figlia tramite vba, non essendo presente nessun record nella tabella madre ti si genera qualche tipo di errore.

    Cosa che non accade se lo fai manualmente, perchè access fa riferimento agli ID dei campi master delle varie tabelle e quindi lo fa da solo, oppure ti lascia il campo vuoto.

    Ora il tipo di errore lo conosci solo tu, perchè può variare in base a come hai costruito il tutto.

    Nel fatto specifico del codice vba che hai scritto, filtri tramite id un record e ti vengono visualizzati i dati corretti.
    A naso poi, dovresti ricevere qualche tipo di errore, visto che il codice non mi sembra giusto. Sopratutto quando tenti di aggiungere un nuovo record.

    Al momento che cerchi di aggiungere un nuovo record nella tabella figlia, il nuovo record è privo del codice id della tabella madre, quindi, se non ti da errore, access andrà a sovrascrivere il primo record che incontra nella tabella figlia, in base all'id della tabella madre che hai filtrato. Oppure non ti permette di aggiungerne altri.

    Quindi nel nuovo record che andrai a creare, dovrai aggiungere, oltre ai campi delle visite, anche il numero ID relativo all'anagrafica del paziente.
    E non si fa usando 

    DoCmd.GoToRecord , , acNewRec

    Ma in altre maniere, come ad esempio un codice di questo tipo.

    Ma anche questo è solo un metodo possibile.

    Tutto dipende da come sono collegate le tabelle e le query delle fonti dati delle varie maschere.

    Dim dbs As Database
    Dim rst As DAO.Recordset
    
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(tabella)
    
    For i = 1 To puntate
    With rst
    .AddNew
    !campouno = i
    !campodue = variabile o nome controllo
    !id = chiave primaria della tabella madre
    !campotre = variabile o nome controllo
    
    
    
    .Update
    
    End With
    Next i
    Forms![nomeform].Refresh
     DoCmd.Close acForm, "nomeform"

    Il codice aggiunge una quantità di record scelto dall'utente, in una tabella figlia con i vari dati che vengono presi dai controlli della maschera, più l'id della tabella madre.

    Naturalmente se togli il ciclo for next, aggiunge solo un record.

    E se togli il campo id, praticamente dovrebbe generarsi il problema che riscontri.

    Sempre che i collegamenti tra i campi master siano corretti e che le query della fonte dati delle maschere siano corrette.

    Ma se inserendo manualmente i dati tutto funziona, in teoria i collegamenti tra le maschere dovrebbero andare bene. Sempre che i dati all'interno delle tabelle siano collegati in modo giusto o che non ci siano campi NULL o vuoti.

    Oppure può capitare che avendo ad esempio tre tabelle molti a molti, se ometti una delle tabelle, riesci a visualizzare i dati corretti, ma non riesci ad aggiungerli, perchè manca un campo indispensabile per l'aggiornamento dei record, presente nella tabella che non hai inserito nella fonte dati.

    I casi sono molti, ma il problema riesci a risolverlo solo tu, facendo un attento debug passo passo.

    Noi possiamo fare solo ipotesi.

    Comunque perchè hai una tabella appuntamenti ed una tabella storico?

    Lo storico si genera quando serve prendendo i dati dalla tabella appuntamenti.

    Una terza tabella, che tra parentesi non so come riempi, genera solo una marea di problemi.
    Proprio questo genere di problemi.

  • Re: Aggiornamento campi da tabella A alla sottomaschera di una tabella B

    05/08/2023 - fratac ha scritto:


    Aiutarti sarà veramente difficile per il semplice motivo che in access, per fare una cosa esistono decine di metodi differenti, sia per quanto riguarda le tabelle, le relazioni tra di esse, la costruzione delle query per salvare i dati o per visualizzarli e sopratutto il codice vba.
    Ognuno di noi ragiona in modo diverso e quindi affronta e scrive i codici in modo diverso.

    Quindi non sappiamo come hai ragionato e come hai affrontato le varie soluzioni.

    Ci hai fornito le immagini delle maschere, ma in realtà, le maschere sono solo l'ultima ruota del carro e non bisogna concentrarsi su di loro.

    QUello che veramente serve,  sono la struttura delle tabelle e come sono collegate tra di loro tramite le relazioni.
    Poi, serve sapere come sono fatte le query fonte dati delle maschere e come sono collegati i campi master.

    Bisogna conoscere il tipo di relazioni, se hanno l'integrità referenziale attiva oppure no. 

    Da quello che hai descritto e quindi penso di aver capito fin dall'inizio, hai delle relazioni molti a molti.

    Il problema che riscontri è che cerchi di aggiungere un record su una tabella che necessita di una chiave primaria presente su un'altra tabella.

    Molto probabilmente sembra tutto funzionare, perchè non hai attivato l'integrità referenziale a livello di relazioni e quindi non ti si genera nessun errore, fino a quando, tramite VBA non cerchi di andare ad inserire un nuovo record sulla tabella.

    Quando cerchi di inserire un nuovo record nella tabella figlia tramite vba, non essendo presente nessun record nella tabella madre ti si genera qualche tipo di errore.

    Cosa che non accade se lo fai manualmente, perchè access fa riferimento agli ID dei campi master delle varie tabelle e quindi lo fa da solo, oppure ti lascia il campo vuoto.

    Ora il tipo di errore lo conosci solo tu, perchè può variare in base a come hai costruito il tutto.

    Nel fatto specifico del codice vba che hai scritto, filtri tramite id un record e ti vengono visualizzati i dati corretti.
    A naso poi, dovresti ricevere qualche tipo di errore, visto che il codice non mi sembra giusto. Sopratutto quando tenti di aggiungere un nuovo record.

    Al momento che cerchi di aggiungere un nuovo record nella tabella figlia, il nuovo record è privo del codice id della tabella madre, quindi, se non ti da errore, access andrà a sovrascrivere il primo record che incontra nella tabella figlia, in base all'id della tabella madre che hai filtrato. Oppure non ti permette di aggiungerne altri.

    Quindi nel nuovo record che andrai a creare, dovrai aggiungere, oltre ai campi delle visite, anche il numero ID relativo all'anagrafica del paziente.
    E non si fa usando 

    DoCmd.GoToRecord , , acNewRec

    Ma in altre maniere, come ad esempio un codice di questo tipo.

    Ma anche questo è solo un metodo possibile.

    Tutto dipende da come sono collegate le tabelle e le query delle fonti dati delle varie maschere.

    Dim dbs As Database
    Dim rst As DAO.Recordset
    
    
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset(tabella)
    
    For i = 1 To puntate
    With rst
    .AddNew
    !campouno = i
    !campodue = variabile o nome controllo
    !id = chiave primaria della tabella madre
    !campotre = variabile o nome controllo
    
    
    
    .Update
    
    End With
    Next i
    Forms![nomeform].Refresh
     DoCmd.Close acForm, "nomeform"

    Il codice aggiunge una quantità di record scelto dall'utente, in una tabella figlia con i vari dati che vengono presi dai controlli della maschera, più l'id della tabella madre.

    Naturalmente se togli il ciclo for next, aggiunge solo un record.

    E se togli il campo id, praticamente dovrebbe generarsi il problema che riscontri.

    Sempre che i collegamenti tra i campi master siano corretti e che le query della fonte dati delle maschere siano corrette.

    Ma se inserendo manualmente i dati tutto funziona, in teoria i collegamenti tra le maschere dovrebbero andare bene. Sempre che i dati all'interno delle tabelle siano collegati in modo giusto o che non ci siano campi NULL o vuoti.

    Oppure può capitare che avendo ad esempio tre tabelle molti a molti, se ometti una delle tabelle, riesci a visualizzare i dati corretti, ma non riesci ad aggiungerli, perchè manca un campo indispensabile per l'aggiornamento dei record, presente nella tabella che non hai inserito nella fonte dati.

    I casi sono molti, ma il problema riesci a risolverlo solo tu, facendo un attento debug passo passo.

    Noi possiamo fare solo ipotesi.

    Comunque perchè hai una tabella appuntamenti ed una tabella storico?

    Lo storico si genera quando serve prendendo i dati dalla tabella appuntamenti.

    Una terza tabella, che tra parentesi non so come riempi, genera solo una marea di problemi.
    Proprio questo genere di problemi.

    Ni… 

    Le mie tabelle sono 1 a molti (1 dipendente può avere tanti accertamenti da fare) e si, non ho applicato la integrità preferenziale. 

    Il codice che hai proposto non va bene perché non devo fare per tutti i record usando un contatore, devo creare 1 record alla volta. Nel caso specifico, se un dipendente ha fatto l'esame, inserisco la riga nella sottomaschera dello storico, che appunto è una procedura che faccio manualmente e volevo ottimizzare. 

    Perciò, ribadisco, che tutto l'informazione che mi serve è l'analisi del codice che ho postato sopra all'inizio del thred per capire perché non mi si crea un nuovo record nella sotto maschera. 

    Lunedi faccio lo screen degli errori e della SQL a cui viene appoggiata la maschera. 

Devi accedere o registrarti per scrivere nel forum
61 risposte