Newsgroup: it.comp.appl.access
Titolo: ciclo Do Loop

Ciao e buon 2009.
Ho due tabelle:
Tbl1 con 16 campi -> Data, E1:E15 (per una visualizzazione migliore
nell'esempio metterò solo campo Data con altri 3 campi)
Tbl2 con 7 campi -> P1:P7 (metterò 3 campi anche qui).
Tbl1:
Data        E1    E2    E3
01/01/09   2      5      1
02/01/09   3     2       4
03/01/09   1     3       3
ecc...
Tbl2:
Pi    P2    P3
1      4     12
2      8     15
3     21     3
4     22     9
5     18     14
ecc...
Quello che debbo fare è controllare ogni campo della Tbl1 con lo
stesso valore (numero) corrispondente al solo campo P1 dell Tbl2; una
volta individuato non faccio altro che prendere tutto il record della
Tbl2 + il campo Data della Tbl1 ed inserirli in una nuova tabella
(Tbl3).
CurrentDb.Execute "Delete * from Tbl3"
Set Rs1 = CurrentDb.OpenRecordset("select * from Tbl1 order by data")
For i = 1 To 15
Set Rs2 = CurrentDb.OpenRecordset("select * from Tbl2 where P1=" &
Rs1.Fields("E" & i))
Set Rs3 = CurrentDb.OpenRecordset("Tbl3")
Do Until Rs2.EOF
Rs3.AddNew
Rs3!Data = Rs1!Data
Rs3!E1 = Rs2!p1
Rs3!E2 = Rs2!p2
Rs3!E3 = Rs2!p3
Rs3!E4 = Rs2!p4
Rs3!E5 = Rs2!p5
Rs3!E6 = Rs2!p6
Rs3!E7 = Rs2!p7
Rs3.Update
Rs2.MoveNext
Loop
Next
ho il seguente risultato (considerando solo i soliti 3 campi):
Data        E1    E2    E3
01/01/09   2      8      15
01/01/09   5     18     14
01/01/09   1      4      12
cioè mi sviluppa solo il primo record della Tbl1 mentre ho bisogno di
sviluppare anche il secondo record, il terzo record ecc... fino alla
fine.
In definitiva dovrei avere (rispetto all'esempio):
Data        E1    E2    E3
01/01/09   2      8      15
01/01/09   5     18     14
01/01/09   1      4      12
02/01/09   3     21      3
02/01/09   2      8      15
02/01/09   4     22      9
03/01/09   1      4      12
03/01/09   3     21      3
03/01/09   3     21      3
Spero di essere riuscito a farmi capire.
Grazie Vladimiro.

 ha scritto nel messaggio 
news:c995f1b4-689e-458e...@o4g2000pra.googlegroups.com...
Ciao e buon 2009.
Ho due tabelle:
Tbl1 con 16 campi -> Data, E1:E15 (per una visualizzazione migliore
nell'esempio metterņ solo campo Data con altri 3 campi)
Tbl2 con 7 campi -> P1:P7 (metterņ 3 campi anche qui).
Tbl1:
Data        E1    E2    E3
01/01/09   2      5      1
02/01/09   3     2       4
03/01/09   1     3       3
ecc...
Tbl2:
Pi    P2    P3
1      4     12
2      8     15
3     21     3
4     22     9
5     18     14
ecc...
Quello che debbo fare č controllare ogni campo della Tbl1 con lo




cioč mi sviluppa solo il primo record della Tbl1 mentre ho bisogno di
sviluppare anche il secondo record, il terzo record ecc... fino alla
fine.
In definitiva dovrei avere (rispetto all'esempio):
Data        E1    E2    E3
01/01/09   2      8      15
01/01/09   5     18     14
01/01/09   1      4      12
02/01/09   3     21      3
02/01/09   2      8      15
02/01/09   4     22      9
03/01/09   1      4      12
03/01/09   3     21      3
03/01/09   3     21      3
Spero di essere riuscito a farmi capire.
Grazie Vladimiro.
--------------RISPOSTA ---------------------
Ciao Vladimiro,
se ho capito bene ti manca un ciclo esterno:
Set Rs1 = CurrentDb.OpenRecordset("select * from Tbl1 order by data")
while not RS1.eof
    For i = 1 To 15
    Set Rs2 = CurrentDb.OpenRecordset("select * from Tbl2 where P1=" &
    Rs1.Fields("E" & i))
    Set Rs3 = CurrentDb.OpenRecordset("Tbl3")
        Do Until Rs2.EOF
            Rs3.AddNew
            Rs3!Data = Rs1!Data
            Rs3!E1 = Rs2!p1
            Rs3!E2 = Rs2!p2
            Rs3!E3 = Rs2!p3
            Rs3!E4 = Rs2!p4
            Rs3!E5 = Rs2!p5
            Rs3!E6 = Rs2!p6
            Rs3!E7 = Rs2!p7
            Rs3.Update
            Rs2.MoveNext
        Loop
    Next
    RS1.MoveNext
wend
-- 
Cinzia [Office Access MVP]
_______________________
 
www.riolab.org
http://accessdaziacin.spaces.live.com
---------------------------------------- 

 cioè mi sviluppa solo il primo record della Tbl1 mentre ho bisogno di

Ciao Cinzia, hai capito perfettamente.
A me questi cicli Do Loop fanno impazzire (while not RS1.EOF o Do
Until Rs1.EOF è la stessa cosa giusto?)
Non sai quante volte ho provato, ma l'errore era che mettevo insieme:
Do Until Rs1.EOF
Do Until Rs2.EOF
            Rs3.AddNew
ecc...
non considerando la posizione del Next.
Ti ringrazio tantissimo.
Vladimiro.

Vladimiro.
Ciao Vladimiro,
While  ... Wend     e Do... Until  sono la stessa cosa differiscono 
solo nel momento in cui viene effettuata la verifica della condizione 
di uscita dal loop nel caso di while ... wend viene effettuata 
all'inizio di ogni ciclo, per cui se la  condizione è falsa subito il 
ciclo non viene proprio eseguito, Do...Until invece verifica la 
condizione alla fine dell'esecuzione di ogni ciclo per cui è sempre 
eseguito almeno una volta.


 ha scritto nel messaggionews:c43a97cc-a86d-4e1b...@n33g2000pri.googlegroups.com...

Questo è vero però leggendo l'help:
Suggerimento   L’istruzione Do...Loop consente un'esecuzione dei cicli
più strutturata e flessibile.
ho sempre pensato che il ciclo fosse più veloce.
Ho fatto una prova con la routine suddetta; per implementare 62460
records:
Do Loop 104 secondi
While Wend 106 secondi
Stiamo lì :-)
Di nuovo
Vladimiro.