Principales respuestas
rs.Requery 1

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 IfSelect 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 SubEl mensaje dice que la variable de tipo object o la variable de bloque with no esta establecida.
Atte. Pedro
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
-
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
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
-
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 Functiony la llamas desde cualquier formulario así:
Private Sub cmdejecutar_Click()
If campos_obligatorios(Me) = False Then Exit Sub
'...procesos
'...mas procesos
End Sub
-
-
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.
-
-
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
-
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 SubErrorSub:
MsgBox Err.Description
Resume lbl_salirNO ME QUEDO CLARO
Pedro
-
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
-