Problemas con recordset

Buenas estoy empezando a programar en visula studio ya que yo nunca lo había echo es por cuestión de trabajo y estoy trancado en el sistema que estoy desarrollando con el recordset.
Estoy tratando de insertar con recordset y el addnew pero me manda un erro que dice que el recordset actual no permite actualizaciones. Lo que entiendo es que solo puedo consultar pero no modificar en el y ese es el error te enseño mi código para ver que hago mal y de como me puedes ayudar:
/******Codigo para guardar******/
Private Sub btnguardar_Click() 'Boton de guardar
On Error GoTo error
'Variables declaradas
Dim PacienteRs As ADODB.Recordset
Dim pregunta As String
Dim CODIGO As Integer
Dim CONT, REGIS As Integer
Dim PESO As Double
pregunta = MsgBox("¿Desea guardar este caso?", vbQuestion + vbYesNo, "Guardar caso")
If pregunta = vbYes Then
''''''''verificamos que los campos no se queden en blanco
If Me.txtcodigo.Text = "" Then
    MsgBox "Debe llenar el campo.Introduzca el codigo de laboratorio"
    Me.txtcodigo.SetFocus
    Exit Sub
End If
If Me.cbosexo.Text = "" Then
    MsgBox "Debe llenar el campo.Seleccione el sexo del Paciente"
    Me.cbosexo.SetFocus
    Exit Sub
End If
If Me.Dtpfecham.Value = "" Then
    MsgBox "Debe llenar el campo.Introduzca la fecha de la muestra"
    Me.Dtpfecham.SetFocus
    Exit Sub
End If
Set PacienteRs = New ADODB.Recordset
With PacienteRs
.Open "Select * From paciente", CONEXION_ADO, adOpenForwardOnly, adLockReadOnly
    If .RecordCount <> 0 Then
            .MoveFirst
        Do
            .AddNew
            .Fields("num_tarjeta") = Me.txttarjeta.Text
            .Fields("codigo_lab") = Me.txtcodigo.Text
            .Fields("nombre") = Me.txtnombre.Text
            .Fields("primer_apellido") = Me.txtapellido1.Text
            .Fields("segundo_apellido") = Me.txtapellido2.Text
            .Fields("sexo") = Me.cbosexo.ListIndex
            .Fields("peso_kg") = Me.txtpeso.Text
            .Fields("semana_gestacion") = Me.txtgestacion.Text
            .Fields("hospital_procedencia") = Me.txtprocedencia.Text
            .Fields("hospital_nacimiento") = Me.txtnacimiento.Text
                '.Fields("fecha_nacimiento") = Format(Me.txtfechan.Text, "dd/mm/yy")
                '.Fields("fecha_nacimiento") = Me.Dtpfechan.Value
            .Fields("fecha_nacimiento") = Me.txtfechan.Text
               '.Fields("fecha_muestra") = Format(Me.Dtpfecham.Value, "dd/mm/yy")
               '.Fields("fecha_muestra") = Me.Dtpfecham.Value
            .Fields("fecha_muestra") = Me.txtfechan.Text
            .Fields("telefono_cel") = Me.txtcelular.Text
            .Fields("telefono_res") = Me.txtresidencial.Text
            .Update
            .Close
            CONT = CONT + 1 'cuenta mas 1 para poder agregar un registro a la ves
        Loop While REGIS <= CONT
    End If
.Close
End With
Set PacienteRs = Nothing
End If
Exit Sub
error:
MsgBox Err.Description, vbCritical, "Mensaje"
End Sub
Respuesta
1
Cuando abres el recordset:
Open "Select * From paciente", CONEXION_ADO, adOpenForwardOnly, adLockReadOnly
Le estas diciendo que lo abra de solo lectura : adLockReadOnly, adOpenForwardOnly
Si recuerdo bien debes cambiar adopenforwardonly por adOpenDynamic, al otra no recuerdo como debes cambiarlo, estas trabajando con VB6 que ya esta descontinuado.
Gracias por responder bueno ya lo cambie en el .open
1 - .Open "Select * From paciente where codigo_lab = '" & Me.txtcodigo.Text & "'", CONEXION_ADO, adOpenStatic
no hace nada no inserta ni tampoco me manda error
2- .Open "Select * From paciente where codigo_lab = '" & Me.txtcodigo.Text & "'", CONEXION_ADO, adOpenStatic, adLockOptimistic
no hace nada no inserta tampoco me manda error
3- .Open "Select * From paciente where codigo_lab = '" & Me.txtcodigo.Text & "'", CONEXION_ADO, adOpenStatic, adLockPessimistic
no hace nada no inserta ni tampoco me manda error
4- le quite el where
.Open "Select * From paciente", CONEXION_ADO, adOpenStatic, adLockPessimistic (o adLockOptimistic)
Me manda el siguiente error (La operación de múltiplos pasos dfe OLE DB genero errores, comprueba los valores de estado de OLE DB si es posible . No se realizado ningún trabajo.
Bueno no se si me explique bien lo que necesito es que inserte ya que la tabla la primera ves estará vacía pero la segunda no, y lastimosamente estoy programando en eso porque la empresa solo tiene licencia para eso a ver si me puedes ayudar. Gracias
nota el codigo_lab de la tabla el autoincrementa por ser la llave primiaria.
Creo que no has entendido, adOpenStatic significa abra la tabla de manera que no pueda cambiarse, estática
En www.elguille.info hay un manual muy buenos de vb6 creo que seria bueno que lo revises así como los artículos que hablen de ADO para VB6
Bueno le voy a leer pero me sigue diciendo si le pongo el adOpenDynamic y sigue diciendo recordset actual no permite actualizaciones.
Y he leído pero no logre solucionar el problema saber si me puedes ayudar estoy desesperado sigue diciendo que no se puede modificar el recordset.
Open "paciente", CONEXION_ADO, adOpenDymanic, adLocOptimitic
Gracias pude arreglar el código para que haga el inser.
Una consulta más y disculpa sabes que antes de cerrar quiero que haga un refresh pero no me deja usar ese método mira como esta el código
With PacienteRs
.Open "Select * From paciente", CONEXION_ADO, adOpenDynamic, adLockOptimistic
            .AddNew
            .Fields("num_tarjeta") = Me.txttarjeta.Text
            .Fields("codigo_lab") = Me.txtcodigo.Text
            .Fields("nombre") = Me.txtnombre.Text
            .Fields("primer_apellido") = Me.txtapellido1.Text
            .Fields("segundo_apellido") = Me.txtapellido2.Text
            .Fields("cedula") = Me.txtcedula.Text
            .Fields("sexo") = Me.cbosexo.ListIndex
            .Fields("peso_kg") = Me.txtpeso.Text
            .Fields("semana_gestacion") = Me.txtgestacion.Text
            .Fields("hospital_procedencia") = Me.txtprocedencia.Text
            .Fields("hospital_nacimiento") = Me.txtnacimiento.Text
            .Fields("fecha_nacimiento") = Me.txtfechan.Text
            .Fields("fecha_muestra") = Me.txtfechan.Text
            .Fields("telefono_cel") = Me.txtcelular.Text
            .Fields("telefono_res") = Me.txtresidencial.Text
            .Update
       .Refresh -------------- aquí debe hacer eso pero me manda error "NO SE ENCONTRÓ EL MÉTODO O MIEMBRO DE LOS DATOS"
.Close
End With
Ese método no existe, por eso el error, si lo que ue quieres es volver a cargar los datos en una grilla debes volver a realizar todo el proceso de ecargue de datos de la grilla
Disculpa si no me explico en que quiero que haga:
Cuando el guarda en la base de dato que me mande un mensaje que diga datos gurdados y que me limpie la ventana y me deje todo en blanco.
msgbox "Los datos han sido guardado de manera correcta"
' Limpiar la apntalla
textbox1.text=""
Etc, etc

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas