none
rs.Requery 1 RRS feed

  • Pregunta

  • Hola tengo un problema el cual explico en el codigo si porfavor me pueden ayudar de antemano agradesco con su ayuda.

    Private Sub btnGuardar_Click()
      On Error GoTo ErrorSub
     
      If Trim(Text1(1)) = "" Then
        MsgBox "La Descripción no puede estar vacio", vbCritical, "Datos incompletos"
        Text1(1).SetFocus
        Exit Sub
      ElseIf Trim(Text1(2)) = "" Then
        MsgBox "El Precio no puede estar vacio", vbCritical, "Datos incompletos"
        Text1(2).SetFocus
        Exit Sub
      ElseIf Trim(Text1(3)) = "" Then
        MsgBox "El Precio no puede estar vacio", vbCritical, "Datos incompletos"
        Text1(3).SetFocus
        Exit Sub
      End If

    Select Case Accion
      Case EditarRegistro
        cn.Execute "UPDATE Producto SET Descripcion = '" & Text1(1) & _
                                    "', PrecioMe = '" & Text1(2) & _
                                    "', PrecioMa = '" & Text1(3) & _
                                    "' WHERE Codigo = " & lblCodigo.Caption & ""
      Case AgregarRegistro ----- CUANDO AGREGO UN REGISTRO SALE EL ERRO QUE COMENTO MAS ABAJO
        cn.Execute "INSERT INTO Producto VALUES('" & lblCodigo.Caption & "','" & Text1(1) & "','" & _
                                                                                 Text1(2) & "','" & _
                                                                                 Text1(3) & "')"
      End Select
     
      rs.Requery 1  ------ DE AQUI SALTA AL MENSAJE ERROR
      
      DoEvents
      Unload Me
      Set frmEditar = Nothing
    Exit Sub
    ErrorSub:
    MsgBox Err.Description   ------ A ESTE ERROR
    End Sub

    El mensaje dice que la variable de tipo object o la variable de bloque with no esta establecida.

    Atte. Pedro

     

     

    martes, 9 de noviembre de 2010 0:41

Respuestas

  • Hola Pedro. Hice una excepción y descargué tu ejercicio. Solo hice un par de cosas y pude editar registros.

    En el formulario frmDatos modifiqué esta línea:

    Public Sub Form_Load()
      Call Conectar

    .....

     

    en el formulario frmeditar:

    'comenta o elimina rs.requery 1

    y a continuación, lo agregado está  en itálica


      DoEvents
      Unload Me
      Set frmEditar = Nothing
      frmDatos.Form_Load
    lbl_salir:

        Exit Sub

    ErrorSub:
    MsgBox Err.Description
        Resume lbl_salir
    Como comenté al principio, pude editar contra una base de datos mía (no creé tu base de datos)

    • Marcado como respuesta Pedro Ávila jueves, 11 de noviembre de 2010 21:50
    miércoles, 10 de noviembre de 2010 4:12
  • Lo de 'excepcion' es porque tengo (3) antivirus de versiones gratuitas, los cuales no protegen del todo; por eso, no descargo nada. Según pude apreciar, deseas refrescar la grid después de editar, que me parece 100% lógico. Una manera que se me ocurrió, fué cambiar a público el procedimiento load del formulario frmDatos; por eso llamo a ese evento, que lo que hará es volver a cargar la grid con los cambios (de haberlos). En resumen, cambia a público el proc. Form_Load .

     

    En cuanto a las etiquetas, se utilizan para control de flujo sobre todo, en caso de error.

    Si no hay error, pasa por lbl_salir y llega hasta exit sub.

    Si se produce un error, la instrucción al inicio del procedimiento On error goto ErrorSub, manda el cursor al tratamiento de errores; luego que aparece el mensaje de error, se le indica que continúe en la etiqueta lbl_salir.

    La idea principal es que no se quede 'colgada' la aplicación al momento de producirse un error. Tiene muchas otras aplicaciones: echar para atrás una transacción iniciada, validaciones, etc

     

    • Marcado como respuesta Pedro Ávila jueves, 11 de noviembre de 2010 21:50
    jueves, 11 de noviembre de 2010 2:51

Todas las respuestas

  • te falta definir el rs como adodb.recordset y cursorlocation=aduseclient
    • Propuesto como respuesta guarracuco martes, 9 de noviembre de 2010 2:30
    martes, 9 de noviembre de 2010 1:21
  • Como bien te indica Luis Tarzia, no has declarado, al menos en el código que muestras, el objeto rs.

    Por otro lado, si me permites una 'mejora'. Se trata de una función que te servirá para el resto de la aplicación. La idea es pasarle el formulario. En los formularios los campos de texto que tengan en la propiedad Tag, un asterisco, serán de caracter obligatorio.

    La función la colocas en un módulo estandar:

    Function campos_obligatorios(este As Form) As Boolean
    Dim frm As Form
    Set frm = este

    For Each ctl In frm.Controls
        If TypeOf ctl Is TextBox Then
            If frm.Controls(ctl.Name).Tag = "*" And frm.Controls(ctl.Name).Text = "" Then
                campos_obligatorios = False
                MsgBox "El campo " & ctl.Name & " es obligatorio.", vbCritical, tiTulo
                frm.Controls(ctl.Name).SetFocus
                Exit Function
            End If
        End If
    Next
    campos_obligatorios = True
    End Function

     

    y la llamas desde cualquier formulario así:

    Private Sub cmdejecutar_Click()

    If campos_obligatorios(Me) = False Then Exit Sub

    '...procesos

    '...mas procesos

    End Sub

    martes, 9 de noviembre de 2010 2:29
  • Aqui te mando el ejercicio Luis esta tambien la DB

    http://www.sendspace.com/file/jc9ey6

     

    Pedro.

    martes, 9 de noviembre de 2010 3:50
  • Gracias por la funcion me parece interesante lo voy a implementar aca te mando la aplicacion para que la revises esta tambien la db

    http://www.sendspace.com/file/jc9ey6

    Pedro.

    martes, 9 de noviembre de 2010 3:52
  • Hola guarracuco, te postee la aplicacion para que me pudedas ver en que estoy fallando o pego por este medio toda la aplicacion no se dime tu.

     

    Pedro

    miércoles, 10 de noviembre de 2010 2:28
  • Hola Pedro. Hice una excepción y descargué tu ejercicio. Solo hice un par de cosas y pude editar registros.

    En el formulario frmDatos modifiqué esta línea:

    Public Sub Form_Load()
      Call Conectar

    .....

     

    en el formulario frmeditar:

    'comenta o elimina rs.requery 1

    y a continuación, lo agregado está  en itálica


      DoEvents
      Unload Me
      Set frmEditar = Nothing
      frmDatos.Form_Load
    lbl_salir:

        Exit Sub

    ErrorSub:
    MsgBox Err.Description
        Resume lbl_salir
    Como comenté al principio, pude editar contra una base de datos mía (no creé tu base de datos)

    • Marcado como respuesta Pedro Ávila jueves, 11 de noviembre de 2010 21:50
    miércoles, 10 de noviembre de 2010 4:12
  • Hola no me esta dando resultado, gracias por la excepción

    DoEvents
      Unload Me
      Set frmEditar = Nothing
      frmDatos.Form_Load --------- A QUE TE REFIERES CON ESTO  AL EVENTO LOAD DEL FRMDATOS? Y DENTRO DE ESTE EVENTO DE ESTA LINEA     HACIA ABAJO
    lbl_salir:
        Exit Sub

    ErrorSub:
    MsgBox Err.Description
        Resume lbl_salir

     

    NO ME QUEDO CLARO

    Pedro 

    miércoles, 10 de noviembre de 2010 22:07
  • Lo de 'excepcion' es porque tengo (3) antivirus de versiones gratuitas, los cuales no protegen del todo; por eso, no descargo nada. Según pude apreciar, deseas refrescar la grid después de editar, que me parece 100% lógico. Una manera que se me ocurrió, fué cambiar a público el procedimiento load del formulario frmDatos; por eso llamo a ese evento, que lo que hará es volver a cargar la grid con los cambios (de haberlos). En resumen, cambia a público el proc. Form_Load .

     

    En cuanto a las etiquetas, se utilizan para control de flujo sobre todo, en caso de error.

    Si no hay error, pasa por lbl_salir y llega hasta exit sub.

    Si se produce un error, la instrucción al inicio del procedimiento On error goto ErrorSub, manda el cursor al tratamiento de errores; luego que aparece el mensaje de error, se le indica que continúe en la etiqueta lbl_salir.

    La idea principal es que no se quede 'colgada' la aplicación al momento de producirse un error. Tiene muchas otras aplicaciones: echar para atrás una transacción iniciada, validaciones, etc

     

    • Marcado como respuesta Pedro Ávila jueves, 11 de noviembre de 2010 21:50
    jueves, 11 de noviembre de 2010 2:51
  • Hola Guarracuco ahora si me salio no había puesto como Public el form_load me ayudo a resolver mi aplicación muchisimas gracias

    Atte. Pedro

    jueves, 11 de noviembre de 2010 21:50