Pasar datos de un recordset a un informe

He creado una platilla como informe a la que le paso los valores desde un modulo. Estos valores proceden de un recordset.
El asunto es que no consigo automatizarlo con un bucle For... Next, para simplificar el código.
Un ejemplo:
Reports![Inf 04]![RC11] = ![DES%RC]
Reports![Inf 04]![AD12] = ![DES%AD]
Reports![Inf 04]![CT13] = ![DES%CT]
.movenext
Reports![Inf 04]![RC21] = ![DES%RC]
Reports![Inf 04]![AD22] = ![DES%AD]
Reports![Inf 04]![CT23] = ![DES%CT]
.movenext
Reports![Inf 04]![RC31] = ![DES%RC]
Reports![Inf 04]![AD32] = ![DES%AD]
Reports![Inf 04]![CT33] = ![DES%CT]
etc....
He tratado de crear un bucle For...next, algo así:
For n= 1 to 3
For m = 1 to 3
Reports![Inf 04]![RCnm] = ![DES%RC]
Reports![Inf 04]![ADnm] = ![DES%AD]
Reports![Inf 04]![CTnm] = ![DES%CT]
Next
Next
El problema es que esto, evidentemente da error. He probado a crear una cadena, pero también me falla:
"Reports![Inf 04]![RC" & " n " & " m " & "] = ![DES%RC]"
¿Alguna solución?.

1 Respuesta

Respuesta
1
Si lees un recordset, utiliza
rst.movefirst
do while not rst.EOF
    código para tu caso
    rst.move next
loop
Rst. EOF lo mismo que un End Of File de toda la vida al leer un archivo
Ante todo muchas gracias por tu rápida respuesta, pero mi problema está en simplificar el paso de datos al informe. Éste no tiene como origen de datos el recordset, es una plantilla que me hge creado asignando nombres a los cuadros de texto y a los que les paso los valores desde un función.
En vez de teclear todo el código de arriba apra rellenar toto del informe, he tratado de crear un bucle For.. Nex, como el de abajo, pero eso de [RCnm], evidente mente no funciona, no sé como crear la cadena de tal manera que, según cambien n y m, me vaya rellenando los controles del informe
rst.movefirst
For n= 1 to 3
For m = 1 to 3
Reports![Inf 04]![RCnm] = ![DES%RC]
Reports![Inf 04]![ADnm] = ![DES%AD]
Reports![Inf 04]![CTnm] = ![DES%CT]
Next
rst. movenext
Next
Muchas gracias por anticipado.
Claro, n y m son variables que van tomando lo valores del bucle, sin embargo [RCnm] es siempre el control RCnm del informe Inf_04, de manera que da igual los valores que tome n o m.
La manera de llamar a los controles de Access por el !, es cómoda pero tiene sus limitaciones, y además el VBA de Access no permite el array de controles como VB.
Tienes que aplicar el bucle al nombre del control
Lo que quieres hacer sería algo así:
For n = 1 to 3
For m = 1 to 13
    "RC" & n & m
    "AD" & n & m
    "CT" & n & m
Next
Next
Aquí en cada bucle si se vuelve a componer la cadena RC11, AD11, CT11, ...
Cuando tengas el bucle montado según ti caso, has de aplicarselo al nombre del control
dim ctrl as control
for each ctrl  in me.controls
    Inserta las siguientes líneas con las operaciones de tus datos en el bucle
    if left(ctrl.name) = "RC" then ...
    if left(ctrl.name) = "AD" then ...
    if left(ctrl.name) = "CT" then ...
next
De nuevo muchas gracias.
Voy a tratar de hacer lo que me dices a ver si lo consigo.
Mientras lo intento, a ver si me puedes echar un mano con el siguiente problema.
En el mismo infomre del que hemos estado hablado, los controles tiene formato condicional para que, si el valor es menor que 0 el color del texto sea rojo. Sin embargo, cuando lo ejecuto (mandándole los datos con mi rudimentario sistema), no me tiene en cuenta el signo "-". Es decir, un valor como -0,2 me lo deja en negro, pero si el formato condicional lo cambio a < 0,3 (¡Positivo!) Sí que lo pone en rojo.
Otra cuRiosidad es que si creo un control nuevo, cuyo origen de datos sea el del -0,2 y le pongo el formato condicional de <0 color de texto = rojo, sí que lo hace. ¿Por qué no me tiene en cuanta el signo - en el primer caso?.
Muchas gracias de nievo.
Tendría que ver el informe y el origen de datos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas