Newsgroup: it.comp.appl.access
Titolo: UN AIUTINO!!!

Ciao a tutti!
Mi servirebbe una mano...
..una semplice gestione di magazzino! ...semplice? Non per me! :-)
Il problema è che non riesco ad aggiornare lo scarico dei pezzi.
Il database è formato dalle seguenti tabelle:
PEZZI
    Codice (Chiave)
    Descrizione
    Giacenza
MACCHINE
    Codice (Chiave)
    Descrizione
MONTAGGIO
    Codice macchina   \_____(CHIAVE)
    Codice pezzo        /
    Quantità
VENDITA
    Data                         \_____(CHIAVE)
    Codice macchina      /
    Quantità macchine
La tabella MONTAGGIO mi serve per sapere di quali e quanti pezzi è composta
una macchina.
Riguardo al carico in magazzino, non c'è problema in quanto carico pezzi.
Quando scarico, però, l'utente scarica macchine e il DB deve automaticamente
calcolare e scaricare i pezzi!
Tramite una query di aggiornamento riesco a farlo ma ho la necessità di
farlo dalla maschera VENDITA
ad ogni aggiornamento di record e se richiamo la query che ho fatto ad ogni
record, mi tiene conto di tutti
i precedenti cioè se VENDITA ha 3 record è come se scaricassi 3 volte il
primo record, 2 il secondo e una volta
il terzo perchè OGNI volta la query scarica TUTTO!!!
Possibile che non ci sia un metodo per aggiornare quel maledetto campo
Giacenza?
Ho provato anche tramite RunSQL ma mi dà un sacco di errori perchè per
arrivare alla tabella PEZZI,
devo prima collegare VENDITA con MONTAGGIO e....BOOOOH!!!
Grazie a tutti quelli che mi aiuteranno e a tutti quelli che hanno avuto
voglia di leggere questa mail!
CIAO
----------------------------------------------------------------------------
-----------------------------------
http://web.tiscalinet.it/casci
ca...@tiscalinet.it
----------------------------------------------------------------------------
-----------------------------------
"Non cercare di piegare il cucchiaio con il pensiero... è impossibile!"


Ehm... è stata un po' lunga la cosa... ma alla fine da me è riuscito!!
Dopo aver creato le tabelle che hai scritto e inserito dei record di esempio
ho provato  a creare una query che in base alle macchine vendute mi
togliesse dalla giacenza dei pezzi la quantità venduta!
Una cosa ti consiglio di fare: prima di applicare le modifiche fai una copia
del db e prova a creare una query (non dal codice ma con access!) copiando
il codice seguente in visualizzazione "SQL": (per visualizzare il codice Sql
devi schiacciare la freccetta del pulsante che usi per andare in modalità
"Foglio Dati" / "Struttura"  e scegliere "SQL")
**** per motivi di comprensione ho cambiato 2 o 3 nomi di campo, quindi vedi
di metterci il nome tuo giusto ! ***
UPDATE PEZZI INNER JOIN (MACCHINE INNER JOIN (VENDITE INNER JOIN MONTAGGIO
ON VENDITE.MacchinaRef = MONTAGGIO.MacchinaRef) ON MACCHINE.Codice =
MONTAGGIO.MacchinaRef) ON PEZZI.Codice = MONTAGGIO.PezzoRef SET
PEZZI.Giacenza = [Giacenza]-[QuantitàMacchine]*[Quantità];
****
se funziona cosa dovrebbe fare? Nel mio codice questa query di
aggiornamento:
1- fa la lista delle macchine vendute con i pezzi di cui è composta;
2- calcola quanti pezzi sono stati venduti con la formula
[QuantitàMacchine]*[Quantità];
3- aggiorna il campo [Giacenza] di ogni pezzo con la formula che vedi sopra
nel codice della query;
E' ovvio che questi passaggi non li vedi!! Vedi solo un elenco: questo ti
mostra la giacenza finale!!
Bye bye
^_^ Gianni


Bhè, innanzittutto GRAZIE per aver risposto!
Comunque una cosa del genere l'ho fatta anche io solo che il problema credo
che rimanga lo stesso! La query che hai fatto la devo mandare in esecuzione
solo UNA volta, altrimenti mi scala i pezzi più volte! E quando inserisco
nuove vendite di macchine, per aggiornare anche queste devo prima cancellare
tutti i record precedenti, altrimenti vengono RIcalcolati e scalati anche i
pezzi GIA' scalati!
Cioè, ogni volta che manderò in esecuzione quella query (e, quindi, ad ogni
vendita!) mi calcolerà i pezzi di TUTTE le macchine vendute presenti nella
tabella VENDUTE e quindi anche quelle di 1, 2, 3 ,4 o 1000 giorni prima!!!
E una cosa del genere NON deve accadere!
Credo che sia necessario risolvere il problema senza usare le query! Ma
come?
Grazie Gianni e grazie a chiunque mi voglia aiutare!
CIAO CIAO
----------------------------------------------------------------------------
----
http://web.tiscalinet.it/casci
ca...@tiscalinet.it
----------------------------------------------------------------------------
----


Matteo ha scritto nel messaggio ...

Scusa ma nella query non puoi far riferimento alla Vendita corrente? Questo
lo puoi fare attraverso un parametro da inserire nella query. Poi se vuoi
essere sicuro di non scaricare più volte forse faresti bene a mettere nella
tabella  dei Carichi/Scarichi un campo che faccia riferimento alla vendita
così se questa è già scaricata la query potrebbe alternativamente fare
diverse cose tipo: non fare nulla oppure eliminare tutti gli scarichi
relativi alla vendita e ricostruirli,...
Ciao Nicola
email: metti inwind al posto  di NOSPAM


Ah... scusa... forse prima non avevo capito l'inghippo... ecco come ho
risolto il problema
*** nuovo codice ***
UPDATE PEZZI INNER JOIN (MACCHINE INNER JOIN (VENDITE INNER JOIN MONTAGGIO
ON VENDITE.MacchinaRef = MONTAGGIO.MacchinaRef) ON MACCHINE.Codice =
MONTAGGIO.MacchinaRef) ON PEZZI.Codice = MONTAGGIO.PezzoRef SET
PEZZI.Giacenza = [Giacenza]-[QuantitàMacchine]*[Quantità],
VENDITE.GiàVenduta = Yes
WHERE (((VENDITE.GiàVenduta)=No));
**** fine
Se guardi bene:
1- nella tabella "VENDITE" ho aggiunto il campo "GiàVenduta" (con tipo
"Sì/No") ;
2- ho modificato la query in modo tale che facesse gli stessi calcoli di
prima.... MA SOLO CHE:
    a) estrae le vendite appena "sfornate" che non sono state ancora
registrate!
    b) registra le vendite con il flag "GiàVendute"=Sì !!
Ecco fatto... spero che 'sta volta funzioni alla perfezione!
Questa è una idea... comunque puoi sempre fare in un altro modo: il
meccanismo dovresti averlo capito.
BYE
^_^


OK! Non l'ho ancora provato ma credo proprio che dovrebbe funzionare!
GRAZIE!
CIAO CIAO