Discussione:
Problema query accodamento!
(troppo vecchio per rispondere)
Kru
2006-07-06 13:45:01 UTC
Permalink
Ciao a tutti.

Ho inserito una query di accodamento sql come codice VB dell'evento "dopo
aggiornamento" di un controllo in una maschera. La sua funzione è quella di
inserire sulla sottomaschera alcuni record presenti su una tabella, in base
alla selezione fatta con la combo che la esegue.

Ho però riscontrato un problema:

Se eseguo due volte (per due diversi record della maschera) la query di
accodamento, anche se con diverso valore della selezione nella combo, mi
accoda i record precedenti e quelli attuali. E'0 come se dopo la prima
esecuzione, la query restasse "carica" dei dati, nonostante sia parametrica!

Questa è la queri in questione:

INSERT INTO [Dettagli fattura] ( DescrizioneProdotto, Quantità, IDFattura,
Prezzo, CodiceProd, IDCategoria, [IVA%], [IDUnità di Misura] ) SELECT [Ordini
Ricevuti Dettagli].DescrizioneProdotto, [Ordini Ricevuti Dettagli].Quantità,
Fatture.IDFattura, [Ordini Ricevuti Dettagli].Prezzo, [Ordini Ricevuti
Dettagli].Codice, [Ordini Ricevuti Dettagli].IDCategoria, Iva.[IVA%], [Ordini
Ricevuti Dettagli].[IDUnità di Misura]FROM (Fatture LEFT JOIN [Ordini
Ricevuti] ON Fatture.IDVsOrdine = [Ordini Ricevuti].IDVsordine) LEFT JOIN
(Iva RIGHT JOIN [Ordini Ricevuti Dettagli] ON Iva.IDIva = [Ordini Ricevuti
Dettagli].IDIva) ON [Ordini Ricevuti].IDVsordine = [Ordini Ricevuti
Dettagli].IDVsordine WHERE ((([Ordini
Ricevuti].IDVsordine)=[Fatture].[IDVsOrdine]));

Ho commesso qualche errore? Come posso rimediare?

Grazie!
--
Kru
giorgio rancati
2006-07-06 14:20:00 UTC
Permalink
Post by Kru
Ciao a tutti.
Ho inserito una query di accodamento sql come codice VB dell'evento "dopo
aggiornamento" di un controllo in una maschera. La sua funzione è quella di
inserire sulla sottomaschera alcuni record presenti su una tabella, in base
alla selezione fatta con la combo che la esegue.
Se eseguo due volte (per due diversi record della maschera) la query di
accodamento, anche se con diverso valore della selezione nella combo, mi
accoda i record precedenti e quelli attuali. E'0 come se dopo la prima
esecuzione, la query restasse "carica" dei dati, nonostante sia parametrica!
parametrica ?
Post by Kru
INSERT INTO [Dettagli fattura] ( DescrizioneProdotto, Quantità, IDFattura,
Prezzo, CodiceProd, IDCategoria, [IVA%], [IDUnità di Misura] ) SELECT [Ordini
Ricevuti Dettagli].DescrizioneProdotto, [Ordini Ricevuti
Dettagli].Quantità,
Post by Kru
Fatture.IDFattura, [Ordini Ricevuti Dettagli].Prezzo, [Ordini Ricevuti
Dettagli].Codice, [Ordini Ricevuti Dettagli].IDCategoria, Iva.[IVA%], [Ordini
Ricevuti Dettagli].[IDUnità di Misura]FROM (Fatture LEFT JOIN [Ordini
Ricevuti] ON Fatture.IDVsOrdine = [Ordini Ricevuti].IDVsordine) LEFT JOIN
(Iva RIGHT JOIN [Ordini Ricevuti Dettagli] ON Iva.IDIva = [Ordini Ricevuti
Dettagli].IDIva) ON [Ordini Ricevuti].IDVsordine = [Ordini Ricevuti
Dettagli].IDVsordine WHERE ((([Ordini
Ricevuti].IDVsordine)=[Fatture].[IDVsOrdine]));
io non vedo nessun parametro :-)

Ciao
--
Giorgio Rancati
[Office Access MVP]
Kru
2006-07-06 14:35:03 UTC
Permalink
Post by Kru
Post by Kru
INSERT INTO [Dettagli fattura] ( DescrizioneProdotto, Quantità, IDFattura,
Prezzo, CodiceProd, IDCategoria, [IVA%], [IDUnità di Misura] ) SELECT
[Ordini
Post by Kru
Ricevuti Dettagli].DescrizioneProdotto, [Ordini Ricevuti
Dettagli].Quantità,
Post by Kru
Fatture.IDFattura, [Ordini Ricevuti Dettagli].Prezzo, [Ordini Ricevuti
Dettagli].Codice, [Ordini Ricevuti Dettagli].IDCategoria, Iva.[IVA%],
[Ordini
Post by Kru
Ricevuti Dettagli].[IDUnità di Misura]FROM (Fatture LEFT JOIN [Ordini
Ricevuti] ON Fatture.IDVsOrdine = [Ordini Ricevuti].IDVsordine) LEFT JOIN
(Iva RIGHT JOIN [Ordini Ricevuti Dettagli] ON Iva.IDIva = [Ordini Ricevuti
Dettagli].IDIva) ON [Ordini Ricevuti].IDVsordine = [Ordini Ricevuti
Dettagli].IDVsordine>
io non vedo nessun parametro :-)
WHERE ((([Ordini Ricevuti].IDVsordine)=[Fatture].[IDVsOrdine]));

e probabilmente è proprio quì l'errore!
--
Kru
giorgio rancati
2006-07-06 15:47:07 UTC
Permalink
Post by Kru
Post by giorgio rancati
io non vedo nessun parametro :-)
WHERE ((([Ordini Ricevuti].IDVsordine)=[Fatture].[IDVsOrdine]));
e probabilmente è proprio quì l'errore!
ma quello non è un parametro, è un filtro fatti sui campi delle tabelle
esposte nella clausola From, tra le altre cose è un filtro che serve a poco.
Visto che il confronto
----
[Ordini Ricevuti].IDVsordine)=[Fatture].[IDVsOrdine]
----
è già esistente nella Left Join
----
FROM (Fatture LEFT JOIN [Ordini Ricevuti] ON Fatture.IDVsOrdine = [Ordini
Ricevuti].IDVsordine)
----
L'unico effetto che ha il tuo filtro è quello di trasformare la Left Join in
Inner Join.

Una query parmetrica ha un filtro che valorizzi con una costante o con il
contenuto di una casella testo di una maschera.
Esempio
----
SELECT *
FROM Tabella
Where Campo1=Forms!NomeMaschera!NomeControllo
----

Ciao
--
Giorgio Rancati
[Office Access MVP]
Kru
2006-07-06 17:06:02 UTC
Permalink
Post by giorgio rancati
Una query parmetrica ha un filtro che valorizzi con una costante o con il
contenuto di una casella testo di una maschera.
Esempio
----
SELECT *
FROM Tabella
Where Campo1=Forms!NomeMaschera!NomeControllo
----
Ciao di nuovo.

Ho modificato così la mia query, che funziona bene.


INSERT INTO [Dettagli fattura] ( DescrizioneProdotto, Quantità, Prezzo,
CodiceProd, IDCategoria, [IVA%], [IDUnità di Misura] ) SELECT [Ordini
Ricevuti Dettagli].DescrizioneProdotto, [Ordini Ricevuti Dettagli].Quantità,
[Ordini Ricevuti Dettagli].Prezzo, [Ordini Ricevuti Dettagli].Codice, [Ordini
Ricevuti Dettagli].IDCategoria, Iva.[IVA%], [Ordini Ricevuti
Dettagli].[IDUnità di Misura] FROM [Ordini Ricevuti] LEFT JOIN (Iva RIGHT
JOIN [Ordini Ricevuti Dettagli] ON Iva.IDIva = [Ordini Ricevuti
Dettagli].IDIva) ON [Ordini Ricevuti].IDVsordine = [Ordini Ricevuti
Dettagli].IDVsordine WHERE ((([Ordini
Ricevuti].IDVsordine)=[Fatture].[IDVsOrdine]));

Però adesso sulla tabella "Dettagli fattura", correlata a quella "Fatture"
tramite il campo IDFattura, non vengono memorizzati i record sul campo
IDFattura.E' normale, dato che ho tolto dalla query il campo
[Fatture].[IDFattura] da accodare, ma non so come inserirlo.

Mi puoi aiutare?

Grazie in anticipo.

Ciao!
--
Kru
Kru
2006-07-06 17:21:02 UTC
Permalink
Ciao.

Come non detto, ho risolto.

Secondo te va bene?
Ho inserito fra i campi da accodare IDFattura, su SELECT ho messo
Forms!Fatture!IDFattura, e il tutto sembra andare benissimo!

Ti pongo un'altra domandina, però.

E' possibile evitare che all'atto dell'esecuzione della query compaia la
finestra "Numero di righe che verranno accodate xxx, continuare?" ?

Ciao!
--
Kru
giorgio rancati
2006-07-06 18:03:44 UTC
Permalink
Post by Kru
Ciao.
Come non detto, ho risolto.
Secondo te va bene?
Ho inserito fra i campi da accodare IDFattura, su SELECT ho messo
Forms!Fatture!IDFattura, e il tutto sembra andare benissimo!
immagino tu l'abbia messo anche nella Where giusto ?
Post by Kru
Ti pongo un'altra domandina, però.
E' possibile evitare che all'atto dell'esecuzione della query compaia la
finestra "Numero di righe che verranno accodate xxx, continuare?" ?
prima di eseguire la query inserisci il comando
-----
docmd.SetWarnings False
----
e dopo l'esecuzione ripristini i messaggi di avviso con
----
docmd.SetWarnings True
----

Ciao
--
Giorgio Rancati
[Office Access MVP]
Kru
2006-07-06 18:24:02 UTC
Permalink
Post by giorgio rancati
immagino tu l'abbia messo anche nella Where giusto ?
Veramente... NO!

Ma comunque funziona, mi serviva solo per inserire sulla tabella dettagli
fattura il rispettivo IDFattura, altrim i dati stavano non correlati alla
fattura.

Per il resto, sembra funzionare tutto bene (magari perchè ci sono comunque i
riferimenti di Join giusti), oppure pensi di no?

Ciao, Buona serata!
--
Kru
giorgio rancati
2006-07-07 08:24:29 UTC
Permalink
Post by Kru
Post by giorgio rancati
immagino tu l'abbia messo anche nella Where giusto ?
Veramente... NO!
Ma comunque funziona, mi serviva solo per inserire sulla tabella dettagli
fattura il rispettivo IDFattura, altrim i dati stavano non correlati alla
fattura.
Per il resto, sembra funzionare tutto bene (magari perchè ci sono comunque i
riferimenti di Join giusti), oppure pensi di no?
Questa è la tua query
----
INSERT INTO [Dettagli fattura]
( DescrizioneProdotto, Quantità, Prezzo, CodiceProd, IDCategoria, [IVA%],
[IDUnità di Misura] )
SELECT [Ordini Ricevuti Dettagli].DescrizioneProdotto,
[Ordini Ricevuti Dettagli].Quantità,
[Ordini Ricevuti Dettagli].Prezzo,
[Ordini Ricevuti Dettagli].Codice,
[Ordini Ricevuti Dettagli].IDCategoria,
Iva.[IVA%],
[Ordini Ricevuti Dettagli].[IDUnità di Misura]
FROM [Ordini Ricevuti]
LEFT JOIN
(Iva RIGHT JOIN [Ordini Ricevuti Dettagli] ON Iva.IDIva = [Ordini
Ricevuti Dettagli].IDIva)
ON [Ordini Ricevuti].IDVsordine = [Ordini Ricevuti
Dettagli].IDVsordine
WHERE ((([Ordini Ricevuti].IDVsordine)=[Fatture].[IDVsOrdine]));
----
come vedi nella where usi la tabella fatture che non esiste nella clausola
From, questo genera un errore o una richiesta di parametro a seconda del
caso.

se non ho capito male il funzionamento dovresti mettere
----
WHERE [Ordini Ricevuti].IDVsordine=Forms!Fatture!IDFattura
----

Ciao
--
Giorgio Rancati
[Office Access MVP]
Kru
2006-07-07 20:36:01 UTC
Permalink
Post by giorgio rancati
se non ho capito male il funzionamento dovresti mettere
----
WHERE [Ordini Ricevuti].IDVsordine=Forms!Fatture!IDFattura
----
Si, probabilmente hai capito male il funzionamento.

In effetti, il tutto è un po complesso. Sulla maschera Fatture posso
inserire sia i record manualmente, sia selezionando quelli che in precedenza
ho memorizzato come Ordine, dalla tabella Ordini e Dettagli Ordini. Perchè
dover rifare tutto daccapo se i prodotti già li ho inseriti sull'ordine?

Dunque ho lasciato aperte entrambe le possibilità; se richiamo l'ordine, con
una combo (quella che lancia questa query dopo aggiornamento), seleziono
tutti i campi che mi interessano dalla tab "Ordini". Poi ho inserito il
comando per memorizzare i record richiamati (mi serviva IDVsOrdine). Infine,
la query Sql deve richiamare i prodotti. Dunque, forse, avrei potuto usare
WHERE [Ordini Ricevuti].IDVsordine=Forms!Fatture!IDVsOrdine, non IDFattura.

Ciao, e grazie per il tuo aiuto!
--
Kru
giorgio rancati
2006-07-07 22:10:55 UTC
Permalink
Post by Kru
Post by giorgio rancati
se non ho capito male il funzionamento dovresti mettere
----
WHERE [Ordini Ricevuti].IDVsordine=Forms!Fatture!IDFattura
----
Si, probabilmente hai capito male il funzionamento.
In effetti, il tutto è un po complesso. Sulla maschera Fatture posso
inserire sia i record manualmente, sia selezionando quelli che in precedenza
ho memorizzato come Ordine, dalla tabella Ordini e Dettagli Ordini. Perchè
dover rifare tutto daccapo se i prodotti già li ho inseriti sull'ordine?
Dunque ho lasciato aperte entrambe le possibilità; se richiamo l'ordine, con
una combo (quella che lancia questa query dopo aggiornamento), seleziono
tutti i campi che mi interessano dalla tab "Ordini". Poi ho inserito il
comando per memorizzare i record richiamati (mi serviva IDVsOrdine). Infine,
la query Sql deve richiamare i prodotti. Dunque, forse, avrei potuto usare
WHERE [Ordini Ricevuti].IDVsordine=Forms!Fatture!IDVsOrdine, non IDFattura.
e sì, penso proprio che dovrai usare quella Where, altrimenti accodi sempre
tutte le righe di [Ordini Ricevuti Dettagli] di tutti gli ordini che hai in
archivio.

Ciao
--
Giorgio Rancati
[Office Access MVP]
Continua a leggere su narkive:
Risultati di ricerca per 'Problema query accodamento!' (Domande e Risposte)
8
risposte
eludere proxy della rete lan?
iniziato 2012-10-09 02:54:11 UTC
sicurezza
Loading...