Tema: Error 3001
Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/06/2008, 17:31
Avatar de Txoco
Txoco
 
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: Error 3001

Hola de nuevo!

A mí me sucede que en ocasiones trabajo contra una base de datos cuyo ODBC no me permite el uso de AbsolutePosition, que me devuelve siempre -1, por lo que ni siquiera me sirve como referencia.

Los métodos Move (MoveFirst, MovePrevious, MoveNext y MoveLast) te permiten desplazarte incondicionalmente por el recordset y no requieren parámetros: si quisieras recorrer el recordset entero de principio a fin, tendrías que hacer algo como:

Código:
    RecBD.MoveFirst
    Do While Not RecBD.EOF
        .... ' Aquí haces cosas con el registro actual
        RecBD.MoveNext
    Loop
¡Pero con cuidado! Si al abrir el recordset lo has creado como "ForwardOnly" (necesitamos saber cómo has creado RecBD para explicártelo mejor), no podrás utilizar MoveFirst ni MovePrevious.

Por cierto: MoveFirst va al primer registro, MovePrevious al anterior al actual, MoveNext al siguiente al actual y MoveLast al último de todos. También tienes el método Move a secas, que te permite avanzar o retroceder el número de registros que quieras: RecBD.Move(-3) retrocede tres registros, y RecBD.Move(1) es exactamente lo mismo que RecBD.MoveNext.

El método Find te permite buscar un registro concreto dándole una condición, que es igual que lo que pondrías en el WHERE de una instrucción SQL, pero sin el "WHERE", por ejemplo:

Código:
    RecBD.Find("codigo='UNO'")
te seleccionaría el primer registro con el valor "UNO" en el campo "código". Ten en cuenta si utilizas este método que busca a partir del registro actual, por lo que para buscar en todo el recordset, primero tendrías que hacer un RecBD.MoveFirst y luego el RecBD.Find. Esto es así porque si por ejemplo, quieres buscar a todas las personas llamadas "JOSE", puedes encontrarlas y tratarlas a todas con algo así:

Código:
    RecBD.MoveFirst
    RecBD.Find("nombre='JOSE'")
    Do While Not RecBD.EOF
        ' Aquí, por ejemplo, le mandas un e-mail para 
        '  felicitarle por participar en un ejemplo de VB :-)
        RecBD.Find("nombre='JOSE'")
    Loop
Find tiene más parámetros, pero por no alargarme más, te recomiendo que le eches un vistazo a la ayuda.

Espero no haberte liado mucho! (hoy no puedo dormir y tiendo a divagar...)