Newsgroup: it.comp.appl.access
Titolo: Query di Accodamento

Ho un database che gestisce delle commesse di lavorazione.
Una tabella (tblCommesse) nella quali inserisco (tramite maschera) il numero
della commessa il mese, l'anno e il reparto di appartenenza.
Una tabella (tblMacchine) con 5 macchinari che contiene il nome del
macchinario e i relativi costi orari.
Questi macchinari sono comuni a tutte le commesse, quindi devo avere una
maschera con nella testata i dati della commessa e nella sottomaschera i
macchinari che mi devono venire proposti sempre uguali ogni volta (io
inseriro' a mano di volta in volta le ore macchina lavorate per quella
commessa).
Ho bisogno di una tabella contenitore dove mettere i dati relativi alle
macchine per ogni commessa.
Ho creato una query di unione che mette insieme la nuova commessa con i
macchinari ( select * from tblCommesse, tblMacchine;)
Con una seconda query accodo le righe create dalla query di unione, nella
tabella contenitore.
La tabella contenitore e' l'origine per i dati nella sottomaschera dove
inserisco volta per volta le ore lavorare per ogni macchina.
Sembra funzionare, pero' mi sono accorto che si verifica questo problema:
Esempio:
nella tabella commesse metto la prima commessa e le assegno il numero 1.
Con la query di unione creo le 5 righe dei macchinari che hanno un campo con
l'idCommessa numero 1.
Accodo alla tabella contenitore.
Ok.
Creo una seconda commessa (numero 2).
Ora con la query di unione avro' invece 10 righe, visto che mi unisce da
zero la tabella commesse che ha 2 righe e la tabella macchine che ha 5
righe.
Se ora accodo dovrei accodare solo le righe relative alla nuova commessa,
invece mi accoda tutte e 10 le righe, cosi' nella tabella contenitore ho 10
righe per la commessa 1 e 5 per la commessa 2.
Se creo una terza commessa, avro' una volta accodato, 15 righe per la
commessa 1, 10 per la 2 e 5 per la 3 e cosi' via.
Io vorrei che al momento dell'accodamento mi accodasse solo le righe dove
l'IdCommessa non e' gia' compreso nella tabella contenitore.
Oppure c'e' un modo per costruire la query di unione prendendo sempre tutte
le righe dei macchinari, ma solo l'ultima riga della tabella commesse?
Spero di essere stato sufficentemente chiaro.
Grazie a tutti.

Voglio dire che ho risolto in questa maniera, pero' se qualcuno mi sa
suggerire un metodo piu' efficente per risolvere il mio
problema ogni consiglio sara' ben accetto.
Con Sql ho estratto l'ultimo record dalla tabella commesse.
Con questa query creo una tabella che conterra' ogni volta solo l'ultimo
record della tabella commesse
L'unione avviene non piu' con la tabella commesse (che contiene tutti i
record delle precedenti commesse) e la tabella macchine, ma con la tabella
macchine e la tabella che contiene solo l'ultimo record.
A questo punto se accodo il risultato della unione, mi vengono esattamente
accodati solo i record dell'ultima commessa.
Pero' una domanda.
Per estrarre con Sql l'ultimo record ho scritto:
SELECT Last([IdCommessa]) AS idComm, Last([NumeroCommessa]) AS CommessaNr,
Last([Mese]) AS [Month], Last([Anno]) AS [Year], Last([idReparto]) AS
Reparto, Last([Data]) AS DataCommessa INTO Ultimo
FROM Commesse;
Per fortuna i campi sono pochi, ma se fossero stati molti di piu'?
C'e' un comando per dire Seleziona Tutto l'ultimo record, senza per forza
dover scrivere tutti i campi uno a uno?
Grazie


 ha scritto nel messaggio
news:am85uu$58n$1...@serv1.albacom.net...

Io ho capito che a te serve che, quando inserisci una nuova commessa, nella
sottomaschera ti compaiano i 5 record relativi ai 5 macchinari pronti per
inserire solo la quantità di ore macchina per quella commessa; vuoi inoltre
che tali record siano registrati in una tabella tblContenitore.
Se la tabella tblCommesse ha una struttura simile a questa:
IDCommessa                 Contatore e chiave primaria
NumeroCommessa         Testo
MeseCommessa             Numerico
AnnoCommessa             Numerico
RepartoAppartenenza     Testo
ecc. ecc.
Se la tabella tblMacchine ha una struttura simile a questa:
IDMacchina                    Contatore e chiave primaria
Macchina                        Testo
Se la tabella *contenitore* si chiama tblContenitore ed ha una struttura
simile a questa:
ID                                   Contatore e chiave primaria
IDCommessa                   Numerico
IDMacchina                     Numerico
OreLavorate                    Numerico
Se la tabella tblContenitore è in relazione uno-a-molti con tblCommesse
tramite i campi IDCommessa ed in relazione uno-a-molti con la tabella
IDMacchina in base ai campi IDMacchina.
Se la maschera principale si chiama frmCommesse.
Se la sottomaschera contenuta in frmCommesse si chiama SubFrmContenitore.
Creati una query di accodamento Query1 che abbia il seguente codice SQL:
INSERT INTO tblContenitore ( IDMaccina, IDCommessa )
SELECT tblMacchine.IDMacchina, [Forms]![frmCommesse]![IDCommessa] AS Espr1
FROM tblMacchine;
A fronte dell'evento dopo aggiornamento del controllo NumeroCommessa
contenuto in frmCommesse genera il seguente codice VBA:
Private Sub NumeroCommessa_AfterUpdate()
DoCmd.RunCommand acCmdSaveRecord
If DCount("*", "tblContenitore", _
"IDCommessa=" & Me!IDCommessa) = 0 Then
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "Query1"
    DoCmd.SetWarnings True
    Me!SubFrmContenitore.Requery
End If
End Sub
Spero che sia quello che volevi.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

Subject: Re: Query di Accodamento