none
agregar un nuevo registro usando ADODB.Recorset en visual basic 6.0 RRS feed

  • Pregunta

  • Hola soy nuevo en esto y quiero agregar un registro nuevo pero no me lo permite, este es mi codigo:

    Dim Cn As New ADODB.Connection
    Private WithEvents Rs As ADODB.Recordset
    _________________________________________________

    Private Sub CmdAnterior_Click()
    If Rs.BOF = False Then
        Rs.MovePrevious
    End If
    End Sub
    _________________________________________________
    Private Sub CmdCerrar_Click()
    Rs.Close
    Cn.Close
    End
    End Sub
    _________________________________________________________________________________
    Private Sub CmdNuevo_Click()
    If Rs.EOF = False Then
        Rs.MoveLast 'TENGO UN BOTON LLAMADO NUEVO PERO NO ME AGREGA NADA
        Rs.AddNew 'Y MARCA ERROR, Y NO SE COMO HACERLE
    End If
    End Sub
    _________________________________________________________________________________
    Private Sub CmdPrimero_Click()
    Rs.MoveFirst
    End Sub
    __________________________________________________
    Private Sub CmdSiguiente_Click()
    If Rs.EOF = False Then
        Rs.MoveNext
    End If
    End Sub
    __________________________________________________
    Private Sub CmdUltimo_Click()
    Rs.MoveLast
    End Sub
    __________________________________________________
    Private Sub Form_Load()
    Set Rs = New ADODB.Recordset
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Archivos de programa\Microsoft Visual Studio\VB98\EJERCICIOS\EJERCICIOprueba\BaseDatos\Codex.mdb;Persist Security Info=False"

    Rs.Source = "CArticulos"
    Rs.CursorType = adOpenKeyset
    Rs.LockType = adLockOptimistic

    Rs.Open "select * from CArticulos", Cn
    Rs.MoveFirst

    TxtClave.Text = Rs.Fields(0)
    TxtBarra.Text = Rs.Fields(1)
    TxtMarca.Text = Rs.Fields(2)
    TxtTipo.Text = Rs.Fields(3)
    TxtCodigo.Text = Rs.Fields(4)
    TxtDescripcion.Text = Rs.Fields(5)
    TxtUnidad.Text = Rs.Fields(6)

    End Sub
    _____________________________________________________________
    Private Sub rs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

    If Rs.BOF = True Then
        Rs.MoveFirst
    ElseIf Rs.EOF = True Then
        Rs.MoveLast
    Else
        TxtClave.Text = Rs.Fields(0)
        TxtBarra.Text = Rs.Fields(1)
        TxtMarca.Text = Rs.Fields(2)
        TxtTipo.Text = Rs.Fields(3)
        TxtCodigo.Text = Rs.Fields(4)
        TxtDescripcion.Text = Rs.Fields(5)
        TxtUnidad.Text = Rs.Fields(6)
    End If
    End Sub

    Espero me puedan ayudar gracias

    lunes, 10 de noviembre de 2014 21:12

Respuestas

  • En el código del botón de añadir registro no tiene sentido que hagas un movelast

    Private Sub CmdNuevo_Click()
    If Rs.EOF = False Then
        Rs.AddNew 
    End If
    End Sub

    En el load puedes quitar la linea Rs.Source = "CArticulos" porque ya se define la tabla en la clausula Open.

    ¿Que error te muestra al hacer rs.AddNew ?


    Saludos, Javier J

    • Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
    martes, 11 de noviembre de 2014 12:16
  • El error te lo da porque estás asignando un valor nulo. Puedes controlar esta situación haciendo

    Txtmarca.Text = vbNullString & Rs.Fields(2)

    Esto debes hacerlo en todas las asignaciones.


    Saludos, Javier J

    • Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
    martes, 11 de noviembre de 2014 16:29
  • Deberías usar los nombres de los campos en lugar de los números para ver el código más claro.

    Bueno, se trata de un campo que no puede estar vacío. Puedes controlarlo con

    If Not String.IsNullOrEmpty(TxtMarca.Text) Then

        Rs.Fields(2) = TxtMarca.Text

    Endif

    Como en la respuesta anterior te aconsejo que hagas esto con todos los campos que no puedan tener valores vacíos.


    Saludos, Javier J

    • Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
    miércoles, 12 de noviembre de 2014 8:11

Todas las respuestas

  • En el código del botón de añadir registro no tiene sentido que hagas un movelast

    Private Sub CmdNuevo_Click()
    If Rs.EOF = False Then
        Rs.AddNew 
    End If
    End Sub

    En el load puedes quitar la linea Rs.Source = "CArticulos" porque ya se define la tabla en la clausula Open.

    ¿Que error te muestra al hacer rs.AddNew ?


    Saludos, Javier J

    • Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
    martes, 11 de noviembre de 2014 12:16
  • Hola Javier J, ya puse la parte que me marcaste en el boton Nuevo pero me sigue mandando el error

    Error '94' en tiempo de ejecucion:

    Uso no valido de Null

    y al depurar me muestra la linea siguiente:

    Private Sub rs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)

    If Rs.BOF = True Then
        Rs.MoveFirst
    ElseIf Rs.EOF = True Then
        Rs.MoveLast
    Else
        TxtClave.Text = Rs.Fields(0)
        TxtBarra.Text = Rs.Fields(1)

        TxtMarca.Text = Rs.Fields(2)   ------esta linea es la que me marca
        TxtTipo.Text = Rs.Fields(3)
        TxtCodigo.Text = Rs.Fields(4)
        TxtDescripcion.Text = Rs.Fields(5)
        TxtUnidad.Text = Rs.Fields(6)
    End If
    End Sub

    Todos los campos son de texto y admiten valores nulls, solamente el primer campo llamado "clave" es "autonumerico" y tiene clave principal, 

    martes, 11 de noviembre de 2014 15:24
  • El error te lo da porque estás asignando un valor nulo. Puedes controlar esta situación haciendo

    Txtmarca.Text = vbNullString & Rs.Fields(2)

    Esto debes hacerlo en todas las asignaciones.


    Saludos, Javier J

    • Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
    martes, 11 de noviembre de 2014 16:29
  • Muchas Gracias, Javier J, ya no aparece el error '94'

    ya agrega el registro nuevo, pero solo agrega el campo de clave "Principal"y los demas datos no, entiendo que al dar click en el boton "Nuevo" agrega todo, solo que no comprendo como limpiar las cajas de texto antes de dar click al boton "Nuevo"

    hice lo siguiente pero me marca error: "El campo "marca" no puede tener longitud cero"


    Private Sub CmdNuevo_Click()
    If Rs.EOF = False Then
        Rs.AddNew ---------------- aquí anexa el nuevo registro
        Rs.Fields(0) = TxtClave.Text
        Rs.Fields(1) = Val(TxtBarra.Text)
        Rs.Fields(2) = TxtMarca.Text
        Rs.Fields(3) = TxtTipo.Text
        Rs.Fields(4) = TxtCodigo.Text
        Rs.Fields(5) = TxtDescripcion.Text
        Rs.Fields(6) = TxtUnidad.Text
    End If
    End Sub
    ________________________________________

    Private Sub CmdGuardar_Click()
    Rs.Update --------------------------- al dar click en "Guardar" me marca el error 
    End Sub

    Te agradeceria contar con tu ayuda nuevamente

    martes, 11 de noviembre de 2014 20:03
  • Deberías usar los nombres de los campos en lugar de los números para ver el código más claro.

    Bueno, se trata de un campo que no puede estar vacío. Puedes controlarlo con

    If Not String.IsNullOrEmpty(TxtMarca.Text) Then

        Rs.Fields(2) = TxtMarca.Text

    Endif

    Como en la respuesta anterior te aconsejo que hagas esto con todos los campos que no puedan tener valores vacíos.


    Saludos, Javier J

    • Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
    miércoles, 12 de noviembre de 2014 8:11
  • Gracias por tu ayuda, Javier J y doy por cerrado el tema. ^_^ 
    miércoles, 12 de noviembre de 2014 15:07