Newsgroup: it.comp.appl.access
Titolo: recordset da 4 diversi recordset

Vorrei capire se in vba è possibile creare un recordset con dati provenienti 
da 4 altri recordset...mi spiego
In una maschera credo molto complessa con annessa una sottomaschera, tramite 
l'evento clic di un pulsante apro 4 differenti recordset relativi ai codici 
articoli, uno per ogni tipologia di valore:
Esempio
Recordset 1 per gli articoli di carico
Recordset 2 per gli articoli di scarico
Ecc...
Adesso vorrei crearmi un recordset sempre relativo agli articoli con la sola 
differenza, che lo stesso dovrebbe contenere un campo con la somma degli 
scarichi, carichi ecc. dei precedenti recordset....come faccio? è 
possibbile?
Potreri ricorrere a varie query, ma voglio eseguire tutto da codice....
Mi fate un esempio?
Saluti Max


Per ogni query
Dim rstAcq as Dao.recordset
Dim strAcq as string
Dim rst as dao.recordset
strAcq = "Select sum(qtà) as Q from Tuatabella where Tuocriterio"
set rstAcq = currentdb.openrecordset(strAcq)
Set rst = currentdb.openrecordset("select * from tuatabella where
tuocriterio")
with rst
    !Giacenza = nz(rstAcq!q)
end with
e poi ti chiudi tutti i recordset
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

 Saluti Max
Hai provato, invece che ad aprire dei recordset o usando delle queries ad
usare le funzione di aggregazione sui dominii, tipo DSum (vedi help).
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------


Grazie per l'esempio .....adesso lo metto in atto sul mio db
Ti volevo chiedere se è possibile farlo con gli ADO e non con Dao.......la 
mia versione di access è 2003
Saluti max e grazie nuovamente
 

 Saluti max e grazie nuovamente
E qual'è il problema, basta mettere i riferimenti a Dao.
Si pùò cmq fare, in sostanza ho solo aperto due recordset, ma la tecnica è
la stessa, seppure l'istruzione diversa


 Info:  
www.donkarl.com/it
Ho provato il codice ma ritorna un errore
"campo giacenza non aggiornabile"

 "campo giacenza non aggiornabile"
Il mio ragionamento presuppone che nella tabella ci sia un campo giacenza.
Non uno calcolato con una query


 Info:  
www.donkarl.com/it
Credevo si potesse fare con un campo calcolato, comunque ho creato un campo 
nella tabella di nome giacenza e provo ad eseguire il codice, pultroppo mi 
ritorna l'errore
"Metodo Update o CancelUpdate senza AddNew o Edit"
Sbaglio in qualcosa? Ho seguito alla lettara il tuo codice di esempio.

 Sbaglio in qualcosa? Ho seguito alla lettara il tuo codice di esempio.
Evidentemente sì, posta il codice.



Scusami se sono imbranato......
Il suddetto codice prevede un campo giacenza nella tabella anaart1
Private Sub Comando38_Click()
Dim rst As DAO.Recordset
Dim str As String
Dim rstrisultato As DAO.Recordset
str = "SELECT tblDettagliMovimentiMagazzino.IDArticolo, 
tblCausaliMovimentiMagazzino.QtaCarico, 
tblCausaliMovimentiMagazzino.ValoreCarico, 
Sum(tblDettagliMovimentiMagazzino.Quantità) AS SommaDiQuantità, 
Sum(tblDettagliMovimentiMagazzino.Importo) AS SommaDiImporto, 
tblDettagliMovimentiMagazzino.FlagChiusuraMagazzino, 
tblMovimentiMagazzino.Anno" _
& " FROM (tblCausaliMovimentiMagazzino INNER JOIN tblMovimentiMagazzino ON 
tblCausaliMovimentiMagazzino.IDCausaliMovimentiMagazzino = 
tblMovimentiMagazzino.IDCausaliMovimentiMagazzino) INNER JOIN 
tblDettagliMovimentiMagazzino ON tblMovimentiMagazzino.IDMovimentiMagazzino 
= tblDettagliMovimentiMagazzino.IDMovimentiMagazzino" _
& " GROUP BY tblDettagliMovimentiMagazzino.IDArticolo, 
tblCausaliMovimentiMagazzino.QtaCarico, 
tblCausaliMovimentiMagazzino.ValoreCarico, 
tblDettagliMovimentiMagazzino.FlagChiusuraMagazzino, 
tblMovimentiMagazzino.Anno" _
& " HAVING (((tblCausaliMovimentiMagazzino.qtacarico) = -1) And 
((tblCausaliMovimentiMagazzino.valorecarico) = -1) And 
((tblDettagliMovimentiMagazzino.FlagChiusuraMagazzino) = NO) And 
((tblMovimentiMagazzino.Anno) = AnnoElaborazione())) Or 
(((tblCausaliMovimentiMagazzino.qtacarico) = -1) And 
((tblCausaliMovimentiMagazzino.valorecarico) = 0) And 
((tblDettagliMovimentiMagazzino.FlagChiusuraMagazzino) = NO) And 
((tblMovimentiMagazzino.Anno) = AnnoElaborazione()))" _
& " ORDER BY tblDettagliMovimentiMagazzino.IDArticolo"
Set rst = CurrentDb.OpenRecordset(str)
Set rstrisultato = CurrentDb.OpenRecordset("SELECT ANAART1.*, 
CauIva.Percentuale, Marchio.Marchio" _
& " FROM Marchio RIGHT JOIN ((ANAART1 INNER JOIN CauIva ON ANAART1.IDCodiva 
= CauIva.IDCodiva) LEFT JOIN AnaFor ON ANAART1.IDFornitore = 
AnaFor.IDfornitore)" _
& " ON Marchio.IDMarchio = ANAART1.IDMarchio")
With rstrisultato
!Giacenza = Nz(rst!SommaDiQuantità)
End With
End Sub
Se non voglio il campo giacenza nella tabella anaart1 e posso creare il 
campo calcolato nel recordset "rstrisultato" come si fa? cosa significa 
addendi? scusami ma sono alle prime armi e ho una gran voglia di imparare

 voglia di imparare
-- 


 Info:  
www.donkarl.com/it
Adesso funziona e mi modifca il valore solamente del primo record di 
rstrisultato.
Per modificare tutti i record devo fare un ciclo con Do Until?
Mi fai un esempio su come creare modificare il cmpo calcolato e non un campo 
della tabella?


ne parliamo domani mattina
posta il codice così parliamo con i dati certi
buona serata


 Info:  
www.donkarl.com/it
OK grazie 

 buona serata
Buongiorno Massimiliano
Private Sub Comando38_Click()
Dim rst As DAO.Recordset
Dim str As String
Dim rstrisultato As DAO.Recordset
str = "SELECT tblDettagliMovimentiMagazzino.IDArticolo, 
tblCausaliMovimentiMagazzino.QtaCarico, 
tblCausaliMovimentiMagazzino.ValoreCarico, 
tblDettagliMovimentiMagazzino.Quantità, 
tblDettagliMovimentiMagazzino.Importo, 
tblDettagliMovimentiMagazzino.FlagChiusuraMagazzino, 
tblMovimentiMagazzino.Anno FROM (tblCausaliMovimentiMagazzino INNER JOIN 
tblMovimentiMagazzino ON 
tblCausaliMovimentiMagazzino.IDCausaliMovimentiMagazzino = 
tblMovimentiMagazzino.IDCausaliMovimentiMagazzino)
INNER JOIN tblDettagliMovimentiMagazzino ON 
tblMovimentiMagazzino.IDMovimentiMagazzino 
=tblDettagliMovimentiMagazzino.IDMovimentiMagazzino WHERE 
(((tblCausaliMovimentiMagazzino.qtacarico) = -1) And 
((tblCausaliMovimentiMagazzino.valorecarico) = -1) And 
((tblDettagliMovimentiMagazzino.FlagChiusuraMagazzino) = NO) And 
((tblMovimentiMagazzino.Anno) = AnnoElaborazione())) Or 
(((tblCausaliMovimentiMagazzino.qtacarico) = -1) And 
((tblCausaliMovimentiMagazzino.valorecarico) = 0) And 
((tblDettagliMovimentiMagazzino.FlagChiusuraMagazzino) = NO) And 
((tblMovimentiMagazzino.Anno) = AnnoElaborazione())) ORDER BY 
tblDettagliMovimentiMagazzino.IDArticolo"
Set rst = CurrentDb.OpenRecordset(str)
Set rstrisultato = CurrentDb.OpenRecordset("SELECT ANAART1.*, 
CauIva.Percentuale, Marchio.Marchio, 0 AS giacenza FROM Marchio RIGHT JOIN 
(ANAART1 INNER JOIN CauIva ON ANAART1.IDCodiva = CauIva.IDCodiva) ON 
Marchio.IDMarchio = ANAART1.IDMarchio")
With rstrisultato
.Edit
!Giacenza = Nz(rst!Quantità)
.Update
.Close
End With
Set rstrisultato = Nothing
End Sub
Ieri sera mi sono accorto che rst non mi raggruppava tutti i record per una 
differenza nei valori dei campi si/no pertanto ho dovuto togliere il 
raggruppamento.
Adesso vorrei crearmi nel recordset rst un campo calcolato dal nome 
quantità, che mi sommi tutte le quantità di ogni IDArticolo ( se possibile 
mi modifichi il codice? )
Poi, vorrei aprire il recordset rstrisultato, e aggiornare il campo 
calcolato giacenza con il campo calcolato quantità del recordset rst, 
naturalmente per IDArticolo di tutte e due i recordset
Esempio:
rst
IDArticolo                                      203
quantità       (campo calcolato)           12
quantità       (campo calcolato)           20
quantità       (campo calcolato)           25
rstrisultato
IDArticolo                                      203
giacenza     (campo calcolato)           57
considera che rstrisultato contiene quasi 3000 record.


Ferma un attimo.
La struttura che io ti propongo (da quello che ho capito da te) è una tab
articoli e una movimenti
Ora in tab articoli tu hai anche un campo Giacenza.
La strittura che ci serve e quindi sensa gli altri campi che fanno da
contorno è
tab articoli: idArticolo (cont), gaicenza (numerico)
tab movimenti: rif_Idarticolo(numerico), qtà (numerico), motivazione(testo)
bene se è così (poi mi spieghi a cosa ti serve FlagChiusuraMagazzino)
ti basta avere
dim rst as dao.recordset
dim rstAcq as dao.recordset
dim rstVen as dao.recordset
set rst = currentdb.openrecordset("articoli")
with rst
    do
        set rstAcq = currentdb.openrecordset("select sum(qtà) as Q from
tabMovimenti where motivazione = 'Acq' and rif_idarticolo = " & !idArticolo
        set rstVen = currentdb.openrecordset("select sum(qtà) as Q from
tabMovimenti where motivazione = 'Ven' and rif_idarticolo = " & !idArticolo
        .edit
            !giacenza =  rstAcq!Q + rstVen!Q
        .update
        .movenext
loop until .eof
end with
A questo punto ti basta solo gestire eventuali valori null


 bene se è così (poi mi spieghi a cosa ti serve FlagChiusuraMagazzino)
In pratica gestisco la chiusura di magazzino, a fine anno o nel periodo 
dell'anno, che mi valorizza il prezzo iniziale dell'articolo nella tabella 
AnaArt1 con il prezzo medio di acquisto per l'inventario di fine anno.
Il FlagChiusuraMagazzino mi serve a prendere solamente i record che non sono 
stati chiusi nell'anno di apparteneza
Ti spiego....
Sono tre anni che lavoro col mio gestionale, usato nella mia azienda di 
prodotti edilizi,  sia dal punto di vista elaborazione dati che da 
programmazione.
Infatti sono riuscito a gestire praticamente tutto:
-Gestione Anagrafiche
     anagrafica clienti, anagrafica fornitori, anagrafica causali movimenti 
contabili, anagrafica causali movimenti magazzino ecc...
-Gestione magazzino
     anagrafiche articoli,  valorizzazione inventari, ecc..
-Gestione Vendite
     anagrafiche causali documenti, gestione documenti, gestione resi, 
gestione movimenti magazzino ecc....
- Gestione Contabile
     tutta la gestione contabile con tutti i vari automatismi che vanno 
dalla fatturazione alla contabilità
     scadenziario pagamenti, gestione delle riba fornitori, gestione degli 
estratti conto.....
Comunque è così complesso che ci vogliono pagine per descrivere quello che 
fa, e naturalmente tutto funzionante.
E che voglio creare alcune procedure direttamente da vba per velocizzare 
tipo alcune interrogazione come quella in questione, chiamata Interrogazione 
Articoli.