15 junio 2006

Errores de programación (II)

Después del error de programación de ayer que, en el fondo, era bastante retorcido, hoy toca hacer un poco de memoria. Cuando, hace ya bastantes años, estaba empezando a trabajar con DAO, el sistema que había en Visual Basic para acceder a bases de datos, solía tener, a menudo, un despiste.

Un “recordset” es un objeto que representa un grupo de registros de una base de datos, que están ordenados de determinada forma. Para moverse a lo largo del conjunto, existen métodos como “Movefirst” (ir al primer registro de la colección), “MoveNext” (pasar al siguiente registro), etc… Supongamos que quiero recorrer un “recordset” desde el principio hasta el final, que está marcado por la función “EOF”, cambiando el campo Leido a “S”. Hoy, animo a los lectores a que me digan dónde está el error en el fragmento de código siguiente (que no es de DAO sino de ADO):

Dim Rs as ADODB.recordset
Dim sql as string=”SELECT * FROM Tabla”
‘ Abrimos el “Recordset” ejecutando la consulta SQL escrita en la variable sql.
Rs.Open sql, m_ConnectionString, adOpenKeyset, adLockOptimistic
‘ Comienza el bucle.
Rs.MoveFirst
While not Rs.EOF

Rs.Fields(“Leido”).value=”S”
Rs.Update

End While

El que quiera nota, que, además, diga lo que le va a pasar al pobre ordenador que intente ejecutar esto.

2 comentarios:

Anónimo dijo...

MoveNext al recordset sino se queda ciclado :S

Juan dijo...

Hola

Efectivamente. Si no pongo Rs.MoveNext antes de End While, hago un bucle sin fin y el programa se cuelga. :-).

¡Bien respondido! :-D.

Un saludo.


Juan.