Newsgroup: it.comp.appl.access
Titolo: recordset non funziona...

ciao,
il mio problema è che a fine codice si blocca dicendo che c'è un do senza
loop??
ho una tabella principale "registro" e una tabella "Tabella_riempito_da"
le due sono collegate nella mia maschera attraverso il campo id_Località e
US
quello che vorrei è che se lancio la procedura il sistema mi possa inserire
i valori nella tabella "Registro" automaticamente pescandoli dalla
"Tabella_riempito_da"
 
Function riempito_da()
'genera valore in campo memo riempie
 Dim a1 As DAO.Recordset
 Dim a2 As DAO.Recordset
 Dim db As Database
 Dim id_localitàRegistro As String
 Dim RegistroUS As String
 Dim RegistroRiempitoDa As String
 
 Dim id_localitàRiempitoDa As String
 Dim RiempitoDaUS As String
 Dim RiempitoDa_RiempitoDa As String
 
 Dim str As String
 
 Dim pos
 Dim dove As Integer
 
  Set db = CurrentDb
  Set a1 = db.OpenRecordset("registro", dbOpenDynaset)
  Set a2 = db.OpenRecordset("Tabella_riempito_da", dbOpenDynaset)
 
  a1.MoveFirst
  Do Until a1.EOF
 
  id_localitàRegistro = a1("id_località")
  RegistroUS = a1("us")
  RegistroRiempitoDa = a1("riempito_da")
 
  id_localitàRiempitoDa = a2("id_località")
  RiempitoDaUS = a2("us")
  RiempitoDa_RiempitoDa = a2("riempito da")
 
    pos = a1.Bookmark
    a1.MoveNext
    If a1.EOF Then
    Exit Do
    Do Until a1.EOF
        If id_localitàRiempitoDa = id_localitàRegistro And RiempitoDaUS = RegistroUS
Then
        str = [RiempitoDa_RiempitoDa] & ", " & str
        RegistroRiempitoDa = str
        End If
        a1.MoveNext
    Loop
    a1.Bookmark = pos
    a1.MoveNext
  Loop
  a1.Close
  a2.Close
 
End Function
in realtà sono riuscito a far funzionare il tutto dalla maschera sul record
corrente
 ' Dim cs8 As DAO.Recordset
 ' Dim db8 As Database
 ' Dim appoggio8 As String
 ' Set db8 = CurrentDb
 ' Set cs8 = db8.OpenRecordset("Query_riempie", dbOpenDynaset)
   ' cs8.MoveFirst
   ' Do Until cs8.EOF
    ' If cs8("us") = Me.US And cs8("ID_Località") = Me.ID_Località Then
    ' appoggio8 = cs8![riempie] & ", " & appoggio8
     ' End If
    ' cs8.MoveNext
    'Loop
   'If appoggio8 = "" Then
   'Forms![ma_schedatura]![riempie] = "*"
   'ElseIf appoggio8 <> "" Then
    ' Forms![ma_schedatura]![riempie] = Left(appoggio8, Len(appoggio8) - 2)
    'End If
ma vorrei gestirlo non dal record corrente...
grazie....
Tiz
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 
a occhio mi sembra che ti manca un endif.
Ahhhh... se usassi una migliore indentazione!
--
a.cara

 --
Ciao non funziona ancora...mannaggia!
 ciao l'indentazione è il nome delle variabili che ho inserito?
così da imparare un pò di terminologia...non fa mai male!
Ciao


Loop
Non ho letto tutto il codice, ma ad occhio e croce questo dovrebbe essere
Do Until ...
    ...
    If a1.EOF Then Exit Do
    ...
Loop
se invece l'accapo è voluto dovebbe essere
Do ...
    ...
    If a1.EOF Then
        Exit Do
        .... ' Altro
    End If
    ...
Loop
e quindi manca un End If. Inoltre in questo secondo caso se a1 è a EOF 
l'Exit Do fa passare il programma direttamente a oltre Loop, quindi tutto 
ciò che lo segue (Altro) non verrà mai eseguito.
IG

 così da imparare un pò di terminologia...non fa mai male!
Il Gatto (????) ti ha spiegato la questione dell'endif non so se la hai 
messa al posto giusto
L'indentazione (mettere un dente?) e' un modo "ordinato" di scrivere.
Riuso il tuo codice con una "indentazione" corretta
a1.MoveFirst
Do Until a1.EOF
     id_localitàRegistro = a1("id_località")
     RegistroUS = a1("us")
     RegistroRiempitoDa = a1("riempito_da")
     id_localitàRiempitoDa = a2("id_località")
     RiempitoDaUS = a2("us")
     RiempitoDa_RiempitoDa = a2("riempito da")
     pos = a1.Bookmark
     a1.MoveNext
     If a1.EOF Then <------------------------------
	Exit Do
         Do Until a1.EOF
	    If id_localitàRiempitoDa = id_localitàRegistro _
               And RiempitoDaUS = RegistroUS Then
	        str = [RiempitoDa_RiempitoDa] & ", " & str
		RegistroRiempitoDa = str
	    End If
  	    a1.MoveNext
         Loop
	a1.Bookmark = pos
	a1.MoveNext
     End If <---------------------------
Loop
a1.Close
a2.Close
come vedi le istruzioni che sono all'interno di cicli o if sono spostate 
verso destra.
Da questa scrittura si evince "subito", mi sembra te lo abbia detto il 
Gatto (gran chiacchierone), che hai una exit do che non ti fara' "mai" 
fare la "do" piu' interna. Si nota inoltre, sempre che nella 
sistemazione sia tutto ok, che hai una movenext su a1 che avviene "dopo" 
la eof per non parlare del bookmark sull'eof. Inoltre quella if messa 
cosi' non mi  pare serva a granche' poiche' se a1 e' gia' ad eof le 
istruzioni all'interno del secondo "do until a1.eof" non verranno cmq 
eseguite.
Al fondo mi sembra che hai complicato, oserei dire inutilmente, il 
codice. Il loop piu' interno forse non ti serve.
Mi viene il dubbio che l'"a1" del do interno sia invece un "a2"
--
a.cara

[cut]
P.S. : Chiedo scusa. Credo di aver "accodato" il mio post nel punto 
sbagliato.
--
a.cara


ciao, grazie per le spiegazioni, il rapporto uno a molti è tra la tabella
"registro" e la tabella "Tabella_riempito_da" ad un record di registro
possono esserci molti in Tabella_riempito_da.
mi hai detto che ho complicato il codice, dove sbaglio?o meglio come
dovrebbe essere compilato correttamente?
Ti/vi ringrazio per le delucidazioni...


 Ciao
Sul codice, se e' quello che ho "indentato" (male per la verita')  c'e' 
qualcosa che non va perche' usi sempre il recordset a1.
Perdonami ma non ho capito cosa vuoi fare.
Il codice da te postato mi sembra faccia questo:
-mette in tre variabili i relativi valori provenienti dal 1' record di a2
-mette in tre variabili i relativi valori provenienti dall'ultimo record 
di a1
invece quello che vorresti fare dovrebbe essere:
- concatena e metti in un campo memo di tabella 1 a parita' di 
"localita'" e "registro" il campo "riempitoda" di tabella 2
se e' questo, il codice da te postato fa ben altro.
.....
v1=a2.c1 & a2.c2
do until a1.eof
	 str =""
	 do while not a2.eof and a1!c1 & a1!c2 <= v1
	  	str = str & a2!c3 & ";"
		v1 = a2!c1 & a2!c2
		a2.movenext
		if a2.eof then exit do
	 loop
	 if v1 = a1!c1 & a1!c2 then
	 	a1.edit
	 	a1!c3 = str
	 	a1.update
	 endif
	 if a2.eof then exit do
	 if a1!c1 & a1!c2 < v1 then a1.movenext
loop
.....
fine
il codice e' "incasinato" per tener conto dei "buchi", se non ci sono i 
predetti e' molto piu' semplice (ottenibile, tramite query,  con un a1 
contenente solo gli id presenti in a2)
--
a.cara



ciao che io non capisca nulla è scontato, lo so...cerco di capire ma non è
semplicissimo.
Dunque io desidererei che a parità di:
a1 = db.OpenRecordset("Tabella_riempito_da", dbOpenDynaset)
e
a2 = db.OpenRecordset("registro", dbOpenDynaset)
per i campi rispettivamente:
di a1:
a1("id_località")
a1("us")
e di a2:
a2("id_località")
a2("us")
il valore di a1("riempito da") per quanti record soddisfino la condizione di
uguaglianza
venga inserito in a2("riempito_da").
Spero di esser chiaro non lo sono mai e sono spesso cazziato per questo
motivo, è giusto!
Ciao e grazie per il tempo che ci dedichi.


ciao,
scusa se rompo ancora ma non comprendo i c1 c2 c3 v1 etc...
ciao :-(


 Tiz
come immaginavo.Quello che  ho scritto e' esattamente quello che vuoi.
c1 c2 c3 sono i nomi di campo fittizi, sostituiscili con i tuoi nomi.
dal tuo codice mi sembrava che testavi l'uguaglianza di 2 campi
i.e: id_localitąRiempitoDa = id_localitąRegistro And RiempitoDaUS = 
registroUS Then
per questo facevo v1 <= a1.c1 & a1.c2
se il test riguarda un campo solo e', ovviamente
v1<= a1.c1
uhmmm.....la questione dei "buchi" ti e' chiara?
--
a.cara

 a.cara
Ciao,
mi spiace non aver potuto replicare ieri, ora proverò a modificare i dati
sperando di riuscire a far funzionare qualcosa,non appena ne vengo fuori te
ne darò notizia.
Grazie.


non so come fare...
Function riempito_da()
 'genera valore in campo memo riempie
 Dim a1 As DAO.Recordset
 Dim a2 As DAO.Recordset
 Dim db As Database
 
 Dim id_localitàRegistro As String
 Dim RegistroUS As String
 Dim RegistroRiempitoDa As String
 Dim id_localitàRiempitoDa As String
 Dim RiempitoDaUS As String
 Dim RiempitoDa_RiempitoDa As String
 Dim str As String
Dim v1 As String
 Dim pos
 Dim dove As Integer
 Set db = CurrentDb
 Set a1 = db.OpenRecordset("registro", dbOpenDynaset)
 Set a2 = db.OpenRecordset("Tabella_riempito_da", dbOpenDynaset)
 
a1.MoveFirst
Do Until a1.EOF
If a1.EOF Then Exit Do
 id_localitàRegistro = a1("id_località")
 RegistroUS = a1("us")
 RegistroRiempitoDa = a1("riempito_da")
 
 id_localitàRiempitoDa = a2("id_località")
 RiempitoDaUS = a2("us")
 RiempitoDa_RiempitoDa = a2("riempito da")
 pos = a1.Bookmark
    v1 = a2!id_localitàRiempitoDa & a2!RiempitoDaUS
    Do Until a1.EOF
    str = ""
        Do While Not a2.EOF And a1!id_localitàRegistro & a1!RegistroUS <= v1
            str = str & a2!RiempitoDa_RiempitoDa & ";"
            v1 = a2!id_localitàRiempitoDa & a2!RiempitoDaUS
            a2.MoveNext
            If a2.EOF Then Exit Do
        Loop
    If v1 = a1!id_localitàRegistro & a1!RegistroUS Then
        a1.Edit
        a1!RegistroRiempitoDa = str
        a1.Update
    End If
    If a2.EOF Then Exit Do
    If a1!id_localitàRegistro & a1!RegistroUS < v1 Then a1.MoveNext
    Loop
Loop
 a1.Close
 a2.Close
End Function
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

non funziona si blocca...
non so più che fare...
ciao Tiz
 Function riempito_da()
 'genera valore in campo memo riempie
 Dim a1 As DAO.Recordset
 Dim a2 As DAO.Recordset
 Dim db As Database
 
 Dim id_localitàRegistro As String
 Dim RegistroUS As String
 Dim RegistroRiempitoDa As String
 Dim id_localitàRiempitoDa As String
 Dim RiempitoDaUS As String
 Dim RiempitoDa_RiempitoDa As String
 Dim str As String
Dim v1 As String
 Dim pos
 Dim dove As Integer
 Set db = CurrentDb
 Set a1 = db.OpenRecordset("registro", dbOpenDynaset)
 Set a2 = db.OpenRecordset("Tabella_riempito_da", dbOpenDynaset)
 
a1.MoveFirst
Do Until a1.EOF
If a1.EOF Then Exit Do
 id_localitàRegistro = a1("id_località")
 RegistroUS = a1("us")
 RegistroRiempitoDa = a1("riempito_da")
 
 id_localitàRiempitoDa = a2("ID_Località")
 RiempitoDaUS = a2("us")
 RiempitoDa_RiempitoDa = a2("riempito da")
<------------------------------------------------------- non riconosce
"id_localitàRiempitoDa "
    v1 = a2!id_localitàRiempitoDa & a2!RiempitoDaUS
    Do Until a1.EOF
    str = ""
        Do While Not a2.EOF And a1!id_localitàRegistro & a1!RegistroUS <= v1
            str = str & a2!RiempitoDa_RiempitoDa & ";"
            v1 = a2!id_localitàRiempitoDa & a2!RiempitoDaUS
            a2.MoveNext
            If a2.EOF Then Exit Do
        Loop
    If v1 = a1!id_localitàRegistro & a1!RegistroUS Then
        a1.Edit
        a1!RegistroRiempitoDa = str
        a1.Update
    End If
    If a2.EOF Then Exit Do
    If a1!id_localitàRegistro & a1!RegistroUS < v1 Then a1.MoveNext
    Loop
Loop
 a1.Close
 a2.Close
End Function
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/