Query di aggiornamento fallisce dopo 4 esecuzioni

di il
14 risposte

Query di aggiornamento fallisce dopo 4 esecuzioni

Buonasera a tutti,

avrei bisogno di qualche indizio per il seguente problema

Ho una maschera che contiene una sottomaschera continua che mostra campi memorizzati e campi calcolati. La sottomaschera è basata su query

Nel piè di pagina della sottomaschera c’è la casella TotaleCosto che somma il prodotto dei campi TempoLavorato e CostoOrario

Dato che ho necessità di aggiornare il prezzo del lavorato ogni volta che in reparto lo producono, con una query di aggiornamento memorizzo il TotaleCosto della sottomaschera  nel campo CostoArticolo della tabella AnagraficaArticoli.

Funziona egregiamente fino a che nella sottomaschera ci sono 4 records (ogni record rappresenta una diversa lavorazione effettuata sullo stesso articolo), dal 5° in avanti il campo Prezzo nell’anagrafica articoli non si aggiorna più anzi si svuota, quindi la query di aggiornamento viene eseguita ma memorizza “niente”.

Passo al record successivo della maschera principale e altri records nella sotto maschera, di nuovo al 5° record accade la stessa cosa, provato più volte con diversi dati e sempre infallibilmente al 5° record capita il fatto.

Ho cambiato tipo di dato numerico, compattato il db, rifatto la query, rifatto caselle ma non riesco a capire perché si comporta così.

Mi suggerite un metodo per individuare l’errore? Quali informazioni vi posso dare per comprendere la situazione?

Grazie molte per l’aiuto.

14 Risposte

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Ma secondo te è necessario che ci mostri questa query?

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Salve oregon,

     si certo. Ecco la query

    UPDATE tblAnagraficaArticoli SET tblAnagraficaArticoli.AnaArtPrezzo = [Maschere]![frmMovMagCaricoMagDaProd]![frmProduzioneMeccanicaCC_rig]![txtTotaleCostoLavorazione]
    WHERE (((tblAnagraficaArticoli.IDAnaArt)=[Maschere]![frmMovMagCaricoMagDaProd]![FK_IDAnaArt_ProdMec]));
    
  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Uhm., il costo da cosa viene fuori?

    Perché fai l'update sull'oggetto tabella della maschera?

    Le tabelle interessate quali sono?

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Salve sihsandrea,

    il costo viene fuori dalla casella nel pie di pagina della sottomaschera 

    =Somma([txtCostoLavoroUnitario])

    che è l'alias del campo della query sulla quale si poggia la sottomaschera stessa:

    txtCostoLavoroUnitario: [txtTempoLavoroUnitarioDec]*[ProdMecCCRigCostoCntCst]

    L'update lo faccio sulla tabella tblAnagraficaArticoli per aggiornare il campo AnaArtPrezzo prendendo il valore della casella  =Somma([txtCostoLavoroUnitario]) che è nella sottomaschera in cui registro le lavorazioni (frmProduzioneMeccanicaCC_rig)

    Tabelle interessate sono:

    tblProduzioneMeccanica alla base della maschera principale frmMovMagCaricoMagDaProd

    query di tblProduzioneMeccanicaCC_rig alla base della sottomaschera frmProduzioneMeccanicaCC_rig

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Per poterti aiutare sarebbe importante avere un file di esempio, dovresti postarlo su un sito di condivisione tipo Dropbox, per controllare direttamente ciò che accade,

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Mi spiego meglio.

    Prima di creare qualsiasi maschera hai creato il database.

    Hai fatto nuova-->tabella

    Hai dato un nome alla tabella tipo AnagraficaArticoli e inserito i vari campi: id, descrizione, bla bla…

    Poi hai fatto nuova-> maschera

    nella maschera hai inserito tblAnagraficaArticoli che attinge alla tabella AnagraficaArticoli creata prima.

    Fino qui è giusto?

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Si sihsandrea,

    esattamente così.

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    22/11/2023 - maramauri ha scritto:


    UPDATE tblAnagraficaArticoli SET tblAnagraficaArticoli.AnaArtPrezzo = [Maschere]![frmMovMagCaricoMagDaProd]![frmProduzioneMeccanicaCC_rig]![txtTotaleCostoLavorazione] WHERE (((tblAnagraficaArticoli.IDAnaArt)=[Maschere]![frmMovMagCaricoMagDaProd]![FK_IDAnaArt_ProdMec]));

    Questo dove lo hai scritto?

    Update su tblAnagraficaArticoli? Cioè l'oggetto tabella che punta a AnagraficaArticoli?

    L'oggetto che punta alla tabella articoli potrebbe anche chiamarsi tabella1.

    In questo caso faresti l'update a tabella1 non alla tabella articoli. 

    L'istruzione sql la devi eseguire da un oggetto query non su un oggetto tabella.

    A parte che se aggiorna fino al quarto record è un miracolo (o un'utopia). Quanti articoli hai da aggiornare con una lavorazione?

    Dove vedi cambiare l'id articolo?

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Salve Stifone,

    stavo facendo ancora qualche tentativo prima di procedere con la pubblicazione di un file esemplificativo in ogni caso ho capito cosa succede.

    Per un fatto di semplice gestione dello spazio della form, le dimensioni della sottomaschera permettono di visualizzare contemporaneamente solo 4 righe dopodichè la quinta riga e quelle successive "scompaiono" dalla vista e per vederle bisogna evidentemente scorrerle con la barra di scorrimento.

    Ebbene, se l'ultima riga della sottomaschera non risulta essere visibile (non intendo che non sia con il focus attivo voglio dire proprio solo visibile), allora la query che mi aggiorna il campo Prezzo in Anagrafica articoli me lo svuota anzichè inserirlo correttamente.

    Per me questa è una diavoleria incomprensibile e volevo chiederVi cosa ritenete sia conveniente fare per evitare questo problema.

    Per adesso ho forzato lo spostamento all'ultimo record con DoCmd.GoToRecord , , acLast in quanto l'ordinamento è l'ID ma a parte ciò questa mi sembra una situazione che non dovrebbe verificarsi.

    Grazie per la disponibilità mostratami e per eventuali graditi Vs. commenti

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Visto che molto probabilmente il diavolo ci capisce poco di informatica (e' nato qualcosina PRIMA dell'informatica e anche prima di ChatGPT) , e generalmente e' impegnato nella produzione di pentole (ma non dei coperchi, chissà perche' ;-), e' un segmento di mercato anche piu' lucrative delle pentole stesse ;-)  ) 

    e' altamente probabile, anzi direi certezza assoluta, che il pasticcio e' di umana provenienza.

    I motivi del pasticcio sono ‘numerabili', cioe' si possono contare MA sono infiniti ;-) 

    Soluzione standard quando non se ne viene fuori e': 

    si riparte da zero.

    E' ovvio che hai valutato in modo errato, o non compreso correttamente, qualche comportamento del sistema. Ripartendo da zero, puoi ripercorrere tutti i passi che ti hanno portato alla soluzione, rivalutandoli.

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    Buongiorno migliorabile,

    beh, avendo tu scagionato il diavolo e fornitogli pure un alibi non vi è dubbio che tu ne sia l'avvocato! 

    Permettimi la battuta che si incastrava perfettamente :-) 

    Certamente quanto dici è indiscutibile e procederò come hai suggerito.

    Grazie a tutti per gli interventi!

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    22/11/2023 - maramauri ha scritto:


    Ebbene, se l'ultima riga della sottomaschera non risulta essere visibile (non intendo che non sia con il focus attivo voglio dire proprio solo visibile), allora la query che mi aggiorna il campo Prezzo in Anagrafica articoli me lo svuota anzichè inserirlo correttamente

    Ecco perché si lavora con istruzioni sql direttamente al db.

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    22/11/2023 - sihsandrea ha scritto:


    Poi hai fatto nuova-> maschera

    nella maschera hai inserito tblAnagraficaArticoli che attinge alla tabella AnagraficaArticoli creata prima.

    Spero proprio di no, che non ci sia una maschera il cui nome inizia con tbl collegata ad una tabella che ha lo stesso nome senza il prefisso tbl. Una cosa del genere è una trappola per chi legge.

    L'oggetto che punta alla tabella articoli potrebbe anche chiamarsi tabella1.

    ma tutti si augurano che non sia così, visto che potrei chiamare “ReportTotale” una maschera che cancella alla sua apertura l'intero database per il solo gusto di confondere le acque e causare danni a chi lo usa a parte me che lo conosco a memoria e ricorderò perfettamente tutto anche fra 5 - 10 - 20 anni.

    L'istruzione sql la devi eseguire da un oggetto query non su un oggetto tabella.

    Il predicato SQL lo posso eseguire dandolo in pasto al metodo Execute dell'oggetto Database in VBA e aggiorna proprio una tabella (o una query purché non di sola lettura).

    Che si riparta da zero va più che bene, a volte inevitabile, purché questi suggerimenti non diventino colonne portanti.

    Di certo non condivido l'uso dei riferimenti diretti alle maschere all'interno delle query, di ogni tipo. Esistono le query parametriche per queste cose o altri sistemi (il classico predicato SQL in VBA come ho scritto prima).

  • Re: Query di aggiornamento fallisce dopo 4 esecuzioni

    23/11/2023 - Philcattivocarattere ha scritto:


    Spero proprio di no, che non ci sia una maschera il cui nome inizia con tbl collegata ad una tabella che ha lo stesso nome senza il prefisso tbl. Una cosa del genere è una trappola per chi legge.

    Veramente con il prefisso tbl è la tabella nella maschera…. Dove hai letto maschera di nome tbl?

    Per il resto, ho ricordi remoti di access, quello che con l'autocomposizione ti fa sentire un deus ex computers….

    23/11/2023 - Philcattivocarattere ha scritto:


    L'oggetto che punta alla tabella articoli potrebbe anche chiamarsi tabella1.

    ma tutti si augurano che non sia così, visto che potrei chiamare “ReportTotale” una maschera che cancella alla sua apertura l'intero database per il solo gusto di confondere le acque e causare danni a chi lo usa a parte me che lo conosco a memoria e ricorderò perfettamente tutto anche fra 5 - 10 - 20 anni.

    Beh, posso anche clikkare l'icona di access e formattare il pc. Ho usato il termine tabella1 tipico degli utenti access secondo solo ai nomi del tipo "tabella fornitori che non sono italiani" un poema!

    Sta di fatto che esegue comandi con ciò che vede a video… speriamo solo che sia in monoutenza.

    Il resto si

    23/11/2023 - Philcattivocarattere ha scritto:


    Il predicato SQL lo posso eseguire dandolo in pasto al metodo Execute dell'oggetto Database in VBA e aggiorna proprio una tabella (o una query purché non di sola lettura).

    Forse query era più comprensibile anche per utenti che, sempre nella sezione access, chiedono come effettuare il post del record ma solo per alcuni campi e sempre dopo aver scritto di aver fatto un programma ma sono bloccati per un problema…

    Un caloroso saluto.

Devi accedere o registrarti per scrivere nel forum
14 risposte