Recorrer recordset ADO

Vuelvo a agradecerte tu aporte.
Espero no cansarte con mis consultas. Jajaja
Resulta que ahora quiero recorrer el recordset pero me dice que
Error '3704' en tiempo de ejecución. La operación no está permitida si el objeto está cerrado.
Este es el código que utilizo:
Private Sub cmdAnterior_Click()
Set rstVoluntarios = New ADODB.Recordset
If rstVoluntarios.BOF Then
    MsgBox "este es el primer registro"
End If
End Sub
¿Me puedes explicar porque?

1 Respuesta

Respuesta
1
Según has puesto en el código, has definido el recordset, pero no lo has abierto. Si recuerdas el código que te puse, después de
Set rstVoluntarios = New ADODB.Recordset
Tendría que ir algo así:
RstVoluntarios. Open Sql, ConexionADO
Y luego puedes preguntar por el BOF o EOF, lo que más te guste porque si está vacío ambos coinciden (yo siempre uso el EOF).
Amigo.
A ver si entiendo:
Para poder recorrer el recordset, lo primero que tengo que hacer es: Abrir la base de datos (conexión), luego "setear" el recordset y abrirlo pasándole el string: "¿Select * from Voluntarios" a la conexión?
Ahora hice las modificaciones pero no se me corre del primer registro que me muestra. El cual en la base de datos es el primero que ingresé.
Aquí el código:
Private Sub cmdAnterior_Click()
      AbrirBase ' Variable declarada como Public en un módulo, de esta forma:
Public Sub AbrirBase()
    Set Base = New ADODB.Connection
    Base.ConnectionString = strConnect
    Base.CursorLocation = adUseClient
    Base.ConnectionTimeout = 30
    Base.Open
End Sub
'***********
CODIGO EN EL BOTON DE COMANDO
Dim cadenaStr As String
cadenaStr = "Select * from Voluntarios"
Set rstVoluntarios = New ADODB.Recordset
rstVoluntarios.Open cadenaStr, Base
If rstVoluntarios.EOF Then
    MsgBox "este es el primer registro"
End If
End Sub
Por ahí con lo que estoy trabado, o lo que quisiera saber es como es el tema de la fuente de datos. Ya sea para ejecutar una consulta, o para abrir la conexión.
¿Se entiende mi pregunta?
Gracias!
Cuando haces esto:
RstVoluntarios. Open cadenaStr, Base
If rstVoluntarios.EOF Then
    MsgBox "este es el primer registro"
End If
Lo que le dices es que te abra el recordset y que si está vacío te diga
que es el primer registro... como tu lo que quieres es recorrerte todos
los registros cambialo por esto:
RstVoluntarios. Open cadenaStr, Base
do while rstVoluntarios.EOF = False
    Codigo para que imprima los registros
    rstVoluntarios.movenext
Loop
Estimado amigo. No hay caso. No lo puedo hacer andar!
Este es el código que le pongo al botón:
Private Sub cmdSiguiente_Click()
Set rstVoluntarios = New ADODB.Recordset
rstVoluntarios.Open "select * from Voluntarios", Base
'rstVoluntarios.Open cadenaStr, Base
Do While rstVoluntarios.EOF = False
    Mostrar
    rstVoluntarios.MoveNext
Loop
End Sub
el procedimiento mostrar es el que habíamos estado viendo, y funciona.
Private Sub Mostrar()
    Dim MiConexion As New ADODB.Connection
    Dim rstVoluntarios As New ADODB.Recordset
    Dim cadenaconexion As String
    Dim cadenaStr As String
    cadenaconexion = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=CruzRoja;Data Source=DANIEL-adasdfas\SQLEXPRESS"
    MiConexion.ConnectionString = cadenaconexion
    MiConexion.CommandTimeout = 30
    MiConexion.CursorLocation = adUseServer
    MiConexion.Open
    cadenaStr = "Select * from Voluntarios"
    Set rstVoluntarios = MiConexion.Execute(cadenaStr)
    'rstVoluntarios.Open cadenaStr, MiConexion
    If rstVoluntarios.EOF = False Then
            txtModVoluntario(0).Text = rstVoluntarios!ApeVol
            txtModVoluntario(1).Text = rstVoluntarios!NomVol
            'DTPFNac.Value = rstVoluntarios.Fields("")
            txtModVoluntario(2).Text = rstVoluntarios!FNacVol
            cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
            txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
            txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
            txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
            txtModVoluntario(6).Text = rstVoluntarios!Celular
            txtModVoluntario(7).Text = rstVoluntarios!EMail
            txtModVoluntario(8).Text = rstVoluntarios!Profesion
            txtModVoluntario(9).Text = rstVoluntarios!Tipo_Contribucion
    End If
    rstVoluntarios.Close
End Sub
Ya no se que hacer!
¿Por qué no anda?
Saludos y muchas gracias!
Viendo el código que me has puesto, no entiendo la lógica del programa. Te explico.
En el procedimiento que has llamado Mostrar, lo que haces es conectarte a la base de datos y coger el primer registro de la tabla para ponerlo en las cajas de texto, entiendo que tienes un formulario con todas las cajas de texto.
Ahora bien, no entiendo esta parte
Private Sub cmdSiguiente_Click()
Set rstVoluntarios = New ADODB.Recordset
rstVoluntarios.Open "select * from Voluntarios", Base
'rstVoluntarios.Open cadenaStr, Base
Do While rstVoluntarios.EOF = False
    Mostrar
    rstVoluntarios.MoveNext
Loop
End Sub
Por el nombre que has puesto parece que quieres hacer un botón para ver el siguiente registro de la base de datos... ¿es así?.. porque si es así, el planteamiento no está bien hecho.
Veamos.. si lo que quieres es hacer un programa que te cargue los registros en el formulario y luego puedas avanzar, el código de siguiente solo tiene que tener este código:
Private Sub cmdSiguiente_Click()
if rstVoluntarios.EOF = False
            rstVoluntarios.MoveNext
            txtModVoluntario(0).Text = rstVoluntarios!ApeVol
            txtModVoluntario(1).Text = rstVoluntarios!NomVol
            'DTPFNac.Value = rstVoluntarios.Fields("")
            txtModVoluntario(2).Text = rstVoluntarios!FNacVol
            cmbTipoDoc.Text = rstVoluntarios!TipoDocumento
            txtModVoluntario(3).Text = rstVoluntarios!NumDocumento
            txtModVoluntario(4).Text = rstVoluntarios!DomicilioParticular
            txtModVoluntario(5).Text = rstVoluntarios!TelefonoParticular
            txtModVoluntario(6).Text = rstVoluntarios!Celular
            txtModVoluntario(7).Text = rstVoluntarios!EMail
            txtModVoluntario(8).Text = rstVoluntarios!Profesion
            txtModVoluntario(9).Text = rstVoluntarios!Tipo_ContribucionLoop
end if
y por supuesto, estas lineas
Dim MiConexion As New ADODB.Connection
    Dim rstVoluntarios As New ADODB.Recordset
que tienes en el procedimiento Mostrar, tienen que estar como variables
globales en el formulario (minimo) y la linea
rstVoluntarios.Close
tienes que quitarla, porque si cierras el recordset no podras acceder mas a él desde el boton de avanzar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas