Problema con query di aggiornamento

di il
7 risposte

Problema con query di aggiornamento

Salve a tutti ecco la mia nuova rogna:
ho una tabella(MATERIALI) con i cambi: ARTICOLO, QUANTITA, PREZZO CAD, TOTALE.
e una tabella (PREZZARIO ) con i campi: ID_ARTICOLO, ARTICOLO, PREZZO CAD.

Nella tabella MATERIALI:
Il campo ARTICOLO è in modalita casella combinata dove c'è una lista di articoli (che tramite query di selezione) viene estratta dalla tabella PREZZARIO.

Nel campo QUANTITA inserisco una quantià a mia scelta.

Tramite un tasto eseguo una query di aggiornamento con relativa relazione che in base al campo ARTICOLO , mi prende il PREZZO CAD dalla tabella PREZZARIO e lo inserisce nel campo PREZZO CAD della tabella materiali. (una semplica copia insomma)

Inoltre moltiplica la QUANTITA per il PREZZO CAD e di conseguenza mi da il totale per articolo.

Il problema è il seguente: Se nella lista degli ARTICOLI vi sono piu di una voce con lo stesso nome, la query mi prende il prezzo della prima che trova scorrendo la lista, senza considerare il fatto che ve ne sia piu di uno.

Immagino che devo utilizzare anche il campo ID_ARTICOLO della tabella prezzario per evitare questo pero non so come includerla nella query.

Spero che qualche buona anima mi venga in soccorso.
Un grazie anticipato al benefattore.

ps: includo in sql la query cosi come.
vi è anche una relazione uno a molti tra un altra tabella di anagrafica clienti e quella materiali ma non credo che si un problema dato che la query fa tutto il calcolo e l'unico problema è quello della selezione errata

UPDATE [prezzi acquisto materie prime] INNER JOIN ([anagrafica clienti] INNER JOIN [Materiale utilizzato] ON [anagrafica clienti].[ID cliete] = [Materiale utilizzato].ID) ON [prezzi acquisto materie prime].[descrizione articolo] = [Materiale utilizzato].articolo SET [Materiale utilizzato].[totale su articolo] = [Materiale utilizzato]![quantita]*[prezzi acquisto materie prime]![prezzo scontato], [Materiale utilizzato].[prezzo cad] = [prezzi acquisto materie prime]![prezzo scontato]
WHERE ((([Materiale utilizzato].contatore)=[Forms]![scheda lavori]![Materiale utilizzato].[Form]![contatore]));

7 Risposte

  • Re: Problema con query di aggiornamento

    Non devi usare una query di aggiornamento per gestire MATERIALI e PREZZARIO in questo modo. Le due tabelle hanno campi incoerenti con il nome della propria tabella. MATERIALI deve avere soltanto campi che parlano dei Materiali e basta. Prezzo e Quantità sono valori che devono stare in un'altra tabella. Di conseguenza il PREZZARIO deve avere anche un campo Data (o Anno) perchè il Prezzo non è mai lo stesso nel corso del tempo. Anche Totale non deve essere un campo di tabella, ma il risultato di una query che fa calcoli.

    matteo innocenti ha scritto:


    Il problema è il seguente: Se nella lista degli ARTICOLI vi sono piu di una voce con lo stesso nome, la query mi prende il prezzo della prima che trova scorrendo la lista, senza considerare il fatto che ve ne sia piu di uno.
    Volendo ignorare l'errore organizzativo che ho detto prima, questo è un problema abbastanza tipico che si può risolvere in molti modi.
    A) Innanzitutto devi sempre prevedere più colonne e, in caso di uguaglianza testuale, bisognerebbe avere cura di controllare sempre la casella combinata per vedere i restanti valori nelle successive colonne.
    B) In alcuni casi relativamente semplici (è classico l'esempio di Cognome e Nome visualizzabili su un unico campo), puoi accorpare i valori di più colonne in una sola proprio per vedere con colpo d'occhio in tempo reale le diverse caselle. Occorre impostare una query con una colonna avente una espressione che concatena i vari campi ad es.
    [Campo1] & [Campo2] & [Campo3]
    o meglio
    [Campo1] & " " & [Campo2] & " " & [Campo3]
    oppure
    [Campo1] & "-" & [Campo2] & "-" & [Campo3]

    Rimane sottinteso che la casella combinata deve avere sempre come prima colonna il campo ID che può essere nascosto opportunamente (questo aspetto è stato già discusso moltissime volte)...
  • Re: Problema con query di aggiornamento

    Ciao osvaldo. intanto grazie x la pronta risposta. il motivo per cui ho usato aggiornare la tabella del materiale usato e proprio perche con un unica maschera ho tutte le informazioni. il prezzo anche se cambia nel tempo nn e un problema anzi e quello che mi serve. comunque nn ho capito nulla su cosa devo fare. la mia query la devo buttarr e farne un altra seguendo le tue direttive?
  • Re: Problema con query di aggiornamento

    matteo innocenti ha scritto:


    il motivo per cui ho usato aggiornare la tabella del materiale usato e proprio perche con un unica maschera ho tutte le informazioni. il prezzo anche se cambia nel tempo nn e un problema anzi e quello che mi serve
    Tu hai problemi che partono esattamente da qua. Oggi stai ponendo questa domanda, alla quale Access ti fornirà una risposta relativamente contorta. Domani la tua matassa si ingarbuglierà ancora di più, porrai un quesito al forum più complesso e Access dovrà inventarsi qualcosa di ancora più contorto per venire incontro alla tua richiesta. Morale: ti sconsiglio di intraprendere una organizzazione dati così come l'hai concepita. Le tabelle vanno NORMALIZZATE. Poi, opportune query provvederanno a mettere insieme (come tu preferisci) i campi che vuoi vedere. Sopra le query puoi costruirci anche maschere.

    matteo innocenti ha scritto:


    comunque nn ho capito nulla su cosa devo fare
    Devi organizzare TUTTE le tue tabelle in maniera normalizzata. Se non ti è chiaro questo concetto base, occorre che tu elenchi tutte le tue tabelle con tutti i campi e ci racconti cosa vuoi realizzare. Con una buona organizzazione tabelle normalizzata si risolvono automaticamente molti problemi e Access lavora più coerentemente e efficientemente.
  • Re: Problema con query di aggiornamento

    Ok ho capito. allora vedro di normalizzare come mi hai suggerito tu.
  • Re: Problema con query di aggiornamento

    Un ultima cosa nn mi e chiara: tu sconsigli di memorizzare i risultati dei campi calcolati dalle query sulle tabelle? te lo chiedo proprio perche il db che sto facendo serve a tenere traccia per ogni cliente il costo e la lista del materiale usato. una volta che ho selezionato un articolo e messa una quantità nn andro piu a modificarle. ecco il motivo di salvare il risultato del costo e il prezzo che aveva quell articolo nel momento che ho deciso di salvarlo.
  • Re: Problema con query di aggiornamento

    matteo innocenti ha scritto:


    tu sconsigli di memorizzare i risultati dei campi calcolati dalle query sulle tabelle?
    Assolutamente sconsigliato.
    Per me i campi PrezzoUnitario e Quantità devono stare in una tabella DettagliFatture. Tale tabella deve essere figlia di Fatture che avrà a sua volta un campo Data.
    Le tabelle devono essere rudi e primordiali contenitori di quei dati che soltanto l'utente può/deve digitare. Tutti gli altri dati che sono derivazione di quelli primordiali devono essere visualizzati/ricavati nelle query.
  • Re: Problema con query di aggiornamento

    Ho capito. pero ora mi trovo davanti un db finito con solo questo problema.... vedro di trovare la maniera di far seguire alla query il campi id del singolo articolo invece che la descrizione come avviene ora
Devi accedere o registrarti per scrivere nel forum
7 risposte