Access - Urgente bucles anidados

 
Vista:

Urgente bucles anidados

Publicado por roberto (11 intervenciones) el 18/05/2003 22:49:24
Tengo esto:
Open "C:\rtdo.txt" For Output As #1

Dim dbs As Database
Dim rst As Recordset
Dim sql As String
Set dbs = CurrentDb
Dim dbs1 As Database
Dim rst1 As Recordset
Dim sql1 As String
Set dbs1 = CurrentDb
sql = "Select * from nombres"
sql1 = "Select * from nombres1"
Set rst = dbs.OpenRecordset(sql)
Set rst1 = dbs1.OpenRecordset(sql1)
rst1.MoveFirst
rst.MoveFirst
Do While Not rst1.EOF
Do While Not rst.EOF
Print #1, rst1.Fields(1) & " - " & rst.Fields(1)
rst.MoveNext
Loop
rst1.MoveNext
Loop
rst.Close
rst1.Close
Close #1
Call Shell("notepad.exe C:\rtdo.txt", vbNormalFocus)

El resultado del texto es:
registro1tablanombres1 - registro1tablanombres
registro1tablanombres1 - registro2tablanombres

Es decir solo me hace el bucle más interno. Sabeis donde está el error. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Urgente bucles anidados

Publicado por Mariano (4 intervenciones) el 19/05/2003 20:29:57
A mi parecer, te lo esta haciendo bien aunque claro está lo que te hace no es lo que tu quieres.Veamos, si pones los margenes de cada sentencia se verá mejor:Do While Not rst1.EOF
rst1.MoveFirst
rst.MoveFirst
Do While Not rst1.EOF
Do While Not rst.EOF
Print #1, rst1.Fields(1) & " - " & rst.Fields(1)
rst.MoveNext
Loop
rst1.MoveNext
Loop
rst.Close
rst1.Close

Es decir en el bucle interno, el de "rst" te imprimira todos los registros diferentes de "tablanombres" y el mismo registro de "rst1", de tablanombres1.Cuando acaba todo el bucle interno (rst) una vez, sale al bucle externo y cambia al registro2 de tabalanopmbres1.
Lo que te hace es esto, si lo vemos con mas registros:
registro1tablanombres1 - registro1tablanombres
registro1tablanombres1 - registro2tablanombres
registro1tablanombres1 - registro3tablanombres
registro1tablanombres1 - registro4tablanombres
registro2tablanombres1 - registro1tablanombres
registro2tablanombres1 - registro2tablanombres
registro2tablanombres1 - registro3tablanombres

Es decir, por cada reggistro de "rst1" te sacará todos los registros de "rst". Si lo que quieres es otra cosa, explica qué es lo que quieres que haga exactamente y veremos los cambios que hay que hacer.

un saludo

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente bucles anidados

Publicado por ROBERTO (11 intervenciones) el 19/05/2003 22:46:10
Muchisimas gracias, lo probaré.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente bucles anidados

Publicado por No funciona (11 intervenciones) el 20/05/2003 19:18:00
No me funciona. tengo estos dos bucles anidados, donde intento que por cada registro de la tabla nombres1 me imprima con todos los registros de la tabla nombres, pero el bucle más externo no corre.
*** Código completo
Private Sub Comando0_Click()
Open "C:\rtdo.txt" For Output As #1
Dim dbs As Database
Dim rst As Recordset
Dim sql As String
Set dbs = CurrentDb
Dim dbs1 As Database
Dim rst1 As Recordset
Dim sql1 As String
Set dbs1 = CurrentDb
sql = "Select * from nombres"
sql1 = "Select * from nombres1"
Set rst = dbs.OpenRecordset(sql)
Set rst1 = dbs1.OpenRecordset(sql1)

rst1.MoveFirst
rst.MoveFirst
Do While Not rst1.EOF
Do While Not rst.EOF
Print #1, rst1.Fields(1) & " - " & rst.Fields(1)
rst.MoveNext
Loop
rst1.MoveNext
Loop
rst.Close
rst1.Close
Close #1
Call Shell("notepad.exe C:\rtdo.txt", vbNormalFocus)
End Sub
*** Fin del código

Por Favor una solución Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente bucles anidados

Publicado por Mariano (4 intervenciones) el 20/05/2003 19:30:04
Lo que debes hacer es ejecutar paso a paso con F5 el bucle y ver exactamente lo que pasa.
De todas formas prueba poniendo "movelast" porque a veces el recordset no se carga con solo "movefirst". No creo que sea eso, pero pruebalo. Tambien en vez de poner Fields(1) pon una variable String y mete en ella el valor del campo de la tabla.
---------------------------------------------
rst1.MoveLast
rst.MoveLast
rst1.MoveFirst
rst.MoveFirst
Do While Not rst1.EOF
Do While Not rst.EOF
Print #1, rst1.Fields(1) & " - " & rst.Fields(1)
rst.MoveNext
Loop
rst1.MoveNext
Loop
rst.Close
rst1.Close

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente bucles anidados

Publicado por ok ya lo encontré (11 intervenciones) el 20/05/2003 20:32:24
rst1.MoveLast
rst1.MoveFirst
Do While Not rst1.EOF
rst.MoveLast
rst.MoveFirst
Do While Not rst.EOF
Print #1, rst1.Fields(1) & " - " & rst.Fields(1)
rst.MoveNext
Loop
rst1.MoveNext
Loop
rst.Close
rst1.Close

Como siempre, pura lógica, hay que actualizar el recorset al primer registro dentro del While. Muchas gracias mariano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar