PDA

View Full Version : aiuto scrivere query access


gbv
22-01-2004, 12:11
ciao a tutti,
non riesco a scrivere una query che faccia quello che voglio..

ho una query GIACENZE con i seguenti campi:

cod_articolo|descrizione|quantità

____________________________________________________

una query IMPEGNATI con i seguenti campi:

cod_articolo|descrizione|quantità

____________________________________________________

una query DISPONIBILITAGIUSTA con i seguenti campi :
cod_articolo|descrizione|giacenze|impegnato |disponibile

SELECT impegnati.cod_articolo, impegnati.descrizione, IIf(IsNull([Giacenze.quantità]),0,[giacenze.quantità]) AS GIACENZE, IIf(IsNull([impegnati.quantità]),0,[impegnati.quantità]) AS IMPEGNATO, Sum(nz([giacenze.Quantità],0)-nz([impegnati.quantità],0)) AS DISPONIBILE
FROM giacenze RIGHT JOIN impegnati ON giacenze.cod_articolo = impegnati.cod_articolo
GROUP BY impegnati.cod_articolo, impegnati.descrizione, impegnati.Quantità, giacenze.Quantità;


____________________________________________________

una query RIORDINO con i seguenti campi :
cod_articolo|descrizione|giacenze|impegnato|disponibile|scorta_min|riordino

SELECT scorta_min.cod_articolo, scorta_min.descrizione, disponibilitagiusta.giacenze AS GIACENZE, disponibilitagiusta.IMPEGNATO, IIf(IsNull([disponibilitagiusta.disponibile]),0,[disponibilitagiusta.disponibile]) AS DISPONIBILE, scorta_min.scorta_min, nz([scorta_min]![scorta_min],0)-nz([disponibilitagiusta]![Disponibile],0)+1 AS Riordino
FROM disponibilitagiusta RIGHT JOIN scorta_min ON disponibilitagiusta.cod_articolo = scorta_min.cod_articolo
ORDER BY scorta_min.cod_articolo;


Il prob è con questa query (RIORDINO), in quanto si appoggia alla query DISPONIBILITAGIUSTA.
Quando imposto un articolo di cui voglio il riordino in automatico che e' presente nella query GIACENZE ma non nella query DISPONIBILITAGIUSTA il valore in giacenza di quest' articolo mi ritorna 0 anche se in GIACENZE il prodotto risulta presente.
Questo accade perche il prodotto non e' presente nella giacenza della query DIASPONIBILITAGIUSTA

spero che qualcuno mi possa aiutare...
ringrazio anticipatamente

cisky
22-01-2004, 13:02
Se ho ben capito, il problema consiste (Come tu stesso dici) nel fatto che la query DISPONIBILITAGIUSTA non estrae dei prodotti perchè sono presenti in GIACENZA ma non in IMPEGNATO.

Per capirci meglio se x esempio hai una condizione di questo tipo:

* qryGiacenze*
Codice | Qt
C1 | 10
C2 | 20
C3 | 30

* qryImpegnato*
Codice | Qt
C1 | 4
C2 | 6

La query DISPONIBILITA' GIUSTA (con i dati di esempio) sarà di questo tipo:

* qryDisponibilità giusta *
Codice | Qt disponibile
C1 | 6
C2 | 14

o sbaglio qualcosa?

Non capisco (Se ci ho azzeccato) perchè non riporti nella query della disponibilità giusta anche i record dove non c'è la corrispondenza con il prodotto

e ciòè invece di fare un RIGHT JOIN da qryImpegnato a qryGiacenze

'...FROM giacenze RIGHT JOIN impegnati ON giacenze.cod_articolo = impegnati.cod_articolo... '

perchè non fai un LEFT JOIN
' ...FROM giacenze LEFT JOIN impegnati ON giacenze .cod_articolo = impegnati .cod_articolo..' ???

x ottenere una cosa simile:

* qryDisponibilità giusta *
Codice | Qt disponibile
C1 | 6
C2 | 14
C3 | 30

:confused:

gbv
22-01-2004, 13:49
grazie per la tua disponibilità


Non capisco (Se ci ho azzeccato) perchè non riporti nella query della disponibilità giusta anche i record dove non c'è la corrispondenza con il prodotto

ho provato come hai detto tu ma i record che non hanno corrispondenza mi vengono visualizzati senza cod_articolo e senza descrizione

potrei inviarti il db per farti capire meglio? e' di solo 126k

cisky
22-01-2004, 19:24
Invia pure!

;)

gbv
22-01-2004, 19:37
mi potresti dire la tua e-mail, oppure se preferisci parliamo in mirc

cisky
22-01-2004, 20:03
Manda pure a 'cisky77@libero.it' / tramite PVT /direttamente come allegato alla discussione.

Fai come preferisci.

gbv
24-01-2004, 20:12
ciao ciscky77 hai dato un'occhiata al db?

attendo :confused: :rolleyes:

Fenomeno85
24-01-2004, 22:35
se vuoi manda anche a me ;)

~§~ Sempre E Solo Lei ~§~

cisky
25-01-2004, 20:25
Ti ho mandato una mail in risposta il 23/01 sera.
Credo che non ti sia arrivata (Forse ho sbagliato a inviarla.. strano!)

Te l'ho rispedita, se non ti arriva fammi sapere!

Ciao :)

gbv
26-01-2004, 07:57
tnx cisky..
l' E-mail era arrivata.. il prob era mio

questa sera che ho un po di tempo la leggo con calma e ti faccio sapere

x fenomeno85:
per ora seguo i consigli di cisky.. tnx lo stesso

gbv
27-01-2004, 19:12
ciao cisky
ho letto i tuoi consigli e hai proprio ragione.. (campi ripetuti nelle tabelle, campo testo che dovrebbe essere numerico)

ma purtroppo ho dovuto fare cosi perche il db lo interfaccio con vb.. e lo gestisco tutto con vb.

intercettazione errori , inserimento, interrogazione, ecc..

ho seguito il tuo consiglio delle union e' funziona.. ti ringrazio,

Ho un altra domanda da farti :D

se volessi aggiornare l'impegnato con lo scarico come potrei fare?

es.

impegnato

cod_articolo |descrizione |quantita |cliente| data

5050 | DDR 128Mb PC 2100 FULL BRAND| 5 | tizio|12/12/2003


scarico
cod_articolo |descrizione| n_serial | cliente |data

5050 | DDR 128Mb PC 2100 FULL BRAND| 3sd9rf| tizio|2212/2003
5050 | DDR 128Mb PC 2100 FULL BRAND| 2s89rf| tizio|2212/2003

impegnato 5 - scarico 2 = impegnato 3

grazie anticipatamente

cisky
28-01-2004, 00:17
PREMESSA:
Anche se probabilmente questa risposta sarà incomprensibile a molti utenti perchè solo io ho avuto la possibilità di
visionare il DB tramite messaggio privato, ho deciso di postare ugualmente nel caso in cui a qualcuno possa risultare
di aiuto (Non si sa mai)
----------------------------------------

RISPOSTA:
Se il tuo problema consiste nella creazione di una query che visualizzi la situazione aggiornata dei dati Impegnati - Scarico non c'è problema,
ti illustro come puoi fare.Se invece vuoi aggiornare direttamente i dati della tabella Impegnati allora la cosa è più complessa.
Dico che la cosa è più complessa perchè attualmente nella tabella Impegnati possono essere presenti più record per lo stesso
codice prodotto (con valori di Qt diversi) e quindi dovresti creare una procedura che vada ad eliminare i record in questa tabella (In modo che il totale delle Qt dei record rimanenti coincida con la differenza tra Impeganto e Scarico) e
credo proprio (Praticamente certo) che questa cosa non si possa fare direttamente in access(Ma devi farla via Codice VB) perchè il DB "a mio avviso" non è strato progettato in maniera "ottimale".

* Comunque se il tuo problema è creare una query, queste sono le operazioni da fare:

1) Siccome i record della tabella scarico possono essere molteplici per ogni codice prodotto, la prima cosa da fare è creare una query
che conteggi la somma dei record per codice articolo(In questo modo ottieni la quantità da scaricare).Chiamerò questa query 'qry_totScarico'

[qryTotScarico]
SELECT cod_articolo, COUNT(cod_articolo) AS QtScarico
FROM scarico
GROUP BY cod_articolo

2) Una volta che hai creato la query che visualizza i totali scaricati (x articolo), semplicemente crei una nuova query (che chiamerò 'qryQtAggiornate') utilizzando
la query 'qryTotScarico' e la query IMPEGNATI'.La query che "comanda" è quella degli impegnati, che sarà collegata con un LEFT JOIN a quella dello Scarico.
Con una semplice sottrazione calcoli quindi la QT impegnata dopo lo scarico.

[qryQtAggiornate]
SELECT Impegnati.cod_articolo, Impegnati.Quantità AS Qtimpegnato, qry_TotScarico.QtScarico, (Impegnati.Quantità-nz(qry_TotScarico.QtScarico,0)) AS QtAggiornata
FROM Impegnati LEFT JOIN qry_TotScarico ON Impegnati.cod_articolo = qry_TotScarico.cod_articolo;

* Se il tuo problema invece è aggiornare direttamente la tabella impegnato, fammi sapere, che proverò a darti una mano. :)

Ciao! ;)