¿Cómo utilizar adecuadamente un recordset?

Tengo una tabla “resultadocupos” y un formulario “formcupos” que trabaja sobre dicha tabla. La importo miles de registros desde libros Excel.

Lo que quiero es que el valor de uno de los campos de la tabla “objetivocupomayoroigual” nunca sobrepase el valor 100

Sé que se puede hacer fácilmente a través de una consulta de actualización de datos, pero quisiera hacerlo a través de un recordset, si como supongo, éste es un caso típico para utilizarlo, y de paso empezar a conocerlo, y utilizarlo de manera prevechosa en el futuro.

He intentado varios códigos en el evento “afterupdate” del formulario que muestra los registros…. Pero nada…. El último es éste

Dim DB As Database

Dim RS As Recordset

Set DB = CurrentDb

Set RS = DB.OpenRecordset("RESULTADOCUPOS")

Do Until RS.EOF

If ObjetivoCupoMAYORoIGUAL.Value > 100 Then

ObjetivoCupoMAYORoIGUAL.Value = 100

End If

RS.MoveNext

Loop

RS.Close

Set RS = Nothing

1 Respuesta

Respuesta
1

Como veo que tu intención es aprender permíteme que te haga unos cuantos comentarios sobre tu consulta:

1.- Si trabajas sobre el propio recordset del formulario te será más cómodo clonarlo que no trabajar sobre la tabla origen. Deja el trabajo sobre las tablas para aquellas "a distancia" que no tengan que ver con la que estás trabajando (esto es una recomendación general, pero puede haber excepciones).

2.- Ten en cuenta que hay unas constantes que te permiten optimizar la apertura del recordset. No te las explico aquí pero, por ejemplo, sería ... openrecordset("Tabla", dbOpenSnapshot) -> Te la abre en sólo lectura, con lo que el recorrido de los registros es más rápido, si no tienes que modificarlos.

3.- Tienes que hacer siempre referencia al campo que quieres examinar con la propiedad recordset. Fields. En tu código, en el bloque if, no lo estás utilizando.

4.- Para editar un registro necesitas tres pasos:

Rst. Edit

rst.Fields("NombreCampo").value = NuevoValor

rst.Update

5- Necesitas indicar (a veces no es necesario, pero yo siempre lo suelo utilizar) que el puntero del recorset se mueva al primer registro. Eso se hace con rst. MoveFirst

6.- Antes de utilizar un recordset piensa si no te convendría utilizar una SQL de actualización. Podría ser que ganases en rapidez (y eso sólo se sabe cronomentrando).

7.- Si quieres saber alguna cosa más de recordsets te invito a que eches un vistazo a este manual, en los capítulos 10 y 11: http://bit.ly/1qaZNXO

8.- Ten en cuenta que hay varias maneras para designar los recordsets. Lo digo porque si encuentras otras expresiones para el manejo de recordset que sepas que son equivalentes.

9.- El evento que intentas usar para ejecutar el código no es el mejor. Lo más práctico es que te montes un botón de comando y lo ejecutes desde ahí, sobre todo si quieres aprender a manejarlos.

10.- Tu código debería quedar así (te lo pongo sin bloque With para que lo veas mejor, y recuerda lo del clonado del recordset):

...

Dim DB As Database

Dim RS As Recordset

Set DB = CurrentDb

Set RS = DB.OpenRecordset("RESULTADOCUPOS")

RS.movefirst

Do Until RS.EOF

If RS.Fields("ObjetivoCupoMAYORoIGUAL").Value > 100 Then

RS.Edit

RS.Fields("ObjetivoCupoMAYORoIGUAL").Value = 100

RS.Update

End If

RS.MoveNext

Loop

RS.Close

DB.Close 'No te olvides también de cerrar el DB

Set RS = Nothing

Set DB=Nothing 'Y también de eliminar su instancia

...

¡Gracias!

Lo primero de todo darte las gracias enormemente por tu ayuda, que intentaré ponerla en práctica hoy o mañana, a ver si me funciona.

Pero sólo ver tu dedicación así como tu esfuerzo por adaptar tus conocimientos a un lenguaje "más llevadero" para los que somoS noveles en este mundo de VBA, es realmente digno de elogio

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas