¿Cómo copiar un dato insertado en inputbox a un registro?ACCESS
He publicado una pregunta pero aun no entiendo el funcionamiento de esta página, necesito saber como puedo copiar el valor introducido en un INPUTBOX (HORA) en un registro de un subformulario (INTERVENCION) dentro de un formulario (CORRECTIVA).
He gastado este código pero lo único que me sale es el cuadro del inputbox:
Private Sub F_RESULTADO_Click()
Dim codigo As Variant
Dim vFin As Date
If F_RESULTADO = "FINALIZADO" Then
vFin = CDate(InputBox("INTRODUCE HORA_FIN"))
codigo = "insert into CORRECTIVA (HORA_FIN)VALUE(vFin.value)"
End If
End Sub
Anita: Aquí no acabo de ver el uso de INSERT...
Tenemos>> Formulario-CORRECTIVA
SubFormulario -INTERVENCION
Por el Código creo que debo deducir que el TextBox de SubFormulario se llama CORRECTIVA
Y que ese TextBox tiene como Dato Origen un Campo de una Tabla.
Pués bien si esto es así:
Private Sub F_RESULTADO_Click()
Dim vFin As Date
If F_RESULTADO = "FINALIZADO" Then
vFin = CDate(InputBox("INTRODUCE HORA_FIN"))
Me!INTERVENCION.Form.CORRECTIVA = vFin
End If
End Sub
De éste modo verás la Fecha introducida en el InputBox, en el TextBox CORRECTIVA del SubFormulario INTERVENCION.
Ya me comentarás como te ha ido >> Jacinto
Anita: Te he puesto el Código entendiendo que tu TextBox del SubFormulario INTERVENCION se llama como el Formulario.
Si ésto es así Cambia el Nombre del TextBox a.., FechaCorregida, FechaNueva o lo que sea,
Y de ese modo nos aseguramos de que no hay Nombres duplicados. Un saludo >> Jacinto
Hola Jacinto,
No me funciona! je je
Veras te comento mi problema desde el principio ya que es bastante complejo. Barajo opciones, trato de buscar la más sencilla ya que no tengo ni idea de programación. Espero explicarme bien:
Tengo un formulario llamado CORRECTIVA, dentro de este tengo diferentes campos o etiquetas en las que se pueden introducir datos. Entre ellas hay una que se llama F_RESULTADO y se puede seleccionar la opción - "finalizado" o "pendiente".
El caso es que en ese mismo formulario (CORRECTIVA), tengo un subformulario llamado SUB_CORRECTIVA, con sus diferentes campos o etiquetas que se redireccionan a una tabla llamada INTERVENCION.
El caso es que dentro de esos campos de SUB_CORRECTIVA, tengo un campo llamado HORA_FIN.
La intención es que el campo F_RESULTADO de CORRECTIVA, no se pueda seleccionar "FINALIZADO" a no ser que HORA_FIN este escrito, pero si se puede dejar en "PENDIENTE" (lo tengo así por defecto) y se puede navegar entre las diferentes intervenciones.. o añadir nuevas etc.. pero que cuando se apreté en "FINALIZADO" obligatoriamente tenga que estar escrita la HORA_FIN.
HABÍA PENSADO EN DIFERENTES MÉTODOS, uno el comentado, otro bloquear el registro FINALIZADO y que se active cada vez que escriben Hora_fin y luego se vuelva a bloquear, y otro decir que si marcan "finalizado" que compruebe si hora_fin tiene algún dato y si no lo tiene se quede en pendiente y muestre un cuadro de texto de aviso.
El caso es que la más sencilla me había parecido esta. ¿Qué me aconsejas?
Anita: Como bien apuntas, no hay una única manera de hacerlo.
Lo que yo haría en éste caso es programar el Evento BeforeUpdate del Control F_RESULTADO, sondeando si la HORA_FIN Es Nulo, lanzar un Mensaje, deshacer la acción y salir sin actualizar.
Ahora estaré "missing" durante dos o tres horas.
Si no logras salirte me avisas >> Jacinto
Hola Jacinto,
Llevo 3 días intentando sacar el código... sin exagerar, me he hecho 3 "cursos de access" de internet pero nada... me resulta ya patético decirlo jajaja
He probado a poner el siguiente código:
Private Sub F_RESULTADO_AfterUpdate()
If F_RESULTADO = "FINALIZADO" And IsNull(Me.HORA_FIN) Or Me.HORA_FIN = "" Then
DoCmd.CancelEvent
MsgBox "FALTA INTRODUCIR LA HORA FIN"
End If
End Sub
Pero me dice: ERROR DE COMPILACIÓN, NO SE ENCONTRÓ EL MÉTODO O EL DATO MIEMBRO.
Seguiré probando si se me ocurre algo nuevo, pero mi problema es que no entiendo bien los códigos ni los conozco al detalle como para sacarlos por mi misma... Lo que tiene no haber estudiado lenguaje de programación ni access je je
Gracias por todo en especial por tu tiempo y tu paciencia. Creo que en acabar esta base de datos al final me haré una "experta" en ACCESS, me esta dando un trabajo!
Anita: Denuevo ando en el tajo. Por si tienes dificultades, el Código que te menciono arriba sería así:
Private Sub F_RESULTADO_BeforeUpdate(Cancel As Integer)
On Error GoTo F_RESULTADO_BeforeUpdate_Err
If Me.F_Resultado.Value <> "Pendiente" Then
If IsNull(Me!SUB_CORRECTIVA.Form.HORA_FIN) Or Me!SUB_CORRECTIVA.Form.HORA_FIN = "" Then
Beep
MsgBox "El Control HORA_FIN de SUB_CORRECTIVA está vacio." & vbCrLf & "Tienes que introducir una HORA." & vbCrLf & vbCrLf & _
"Solo señala FINALIZADO si HORA_FIN tiene un Dato", vbCritical, "CUADRO DE TEXTO VACIO"
‘Cancelamos el Evento y deshacemos los Cambios
DoCmd.CancelEvent
Me!F_Resultado.Undo
Exit Sub’ Opcional dependiendo del código que haya después. Aquí no necesario
End If
End If
F_RESULTADO_BeforeUpdate_Exit:
Exit Sub
F_RESULTADO_BeforeUpdate_Err:
MsgBox Error$
Resume F_RESULTADO_BeforeUpdate_Exit
End Sub 'F_RESULTADO_BeforeUpdate(Cancel As Integer)
De forma intencionada te he puesto: If Me.F_Resultado.Value <> "Pendiente" Then
Es equivalente a: If Me.F_Resultado.Value = "Finalizado" Then..
Pero no es lo mismo, porque el primero te actúa ante todo lo que “No sea” Pendiente, mientras que el segundo lo hace “Solo”, cuando es Finalizado
Espero que esto solucione tu problema. Saludos>> Jacinto
Anita: Ha habido un cruce, porque justo cuando he enviado el mensaje, he recibido el tuyo.
Prueba el código y me comentas. Saludos >> Jacinto
He copiado tu código por probar.
Me marca en rojo la parte de: MsgBox "El Control HORA_FIN de SUB_CORRECTIVA está vacio."& vbCrLf & "Tienes que introducir una HORA." & vbCrLf & vbCrLf & _
y cuando ejecuto la acción me vuelve a salir: ERROR DE COMPILACIÓN, NO SE ENCONTRÓ EL MÉTODO O EL DATO MIEMBRO.
Anita: Esa línea tiene una continuación que es:
"Solo señala FINALIZADO si HORA_FIN tiene un Dato", vbCritical, "CUADRO DE TEXTO VACÍO"
Está cortada en ...& _ para que el código se lea mejor, pero para evitarte problemas, ponlo todo en una línea, sin el guión.
Te que daría:
MsgBox "El Control HORA_FIN de SUB_CORRECTIVA está vacio." & vbCrLf & "Tienes que introducir una HORA." & vbCrLf & vbCrLf & "Solo señala FINALIZADO si HORA_FIN tiene un Dato", vbCritical, "CUADRO DE TEXTO VACIO"
Al fin y al cabo es un Mensaje que tu puedes cambiar si quieres.
Incluso lo puedes dejar en >> MsgBox "Rellena Hora" sin nada más
Me dices que tal >> Jacinto
Anita: Por la captura de pantalla no me parece que SUB_CORRECTIVA sea un SubFormulario que esté dentro de del Formulario CORRECTIVA, de éste modo es lógico que te de error porque la línea:
If IsNull(Me!SUB_CORRECTIVA.Form.HORA_FIN) Or Me!SUB_CORRECTIVA.Form.HORA_FIN = "" Then
Está diciendo >> Si el control HORA_FIN de Me! SubFormulario.Form es Nulo o está vacio haz algo.
Lo de .Form hay quien no lo pone porque es Opcional, yo por cuestiones de repaso de código y costumbre siempre lo pongo.
Resumiendo: Ese código no te funcionará si no tienes SUB_CORRECTIVA insertado en CORRECTIVA, que en éste caso hace de Me
Para salir del atasco tenemos:
1.- Lo más lógico a mi parecer es que realmente insertes el Subformulario en el Formulario y que el "Control" se llame SUB_CORRECTIVA
2.- Si no tienes datos confidenciales, puedes poner la BD en un enlace o mandarmela a [email protected]
3.- Otra solución que a ti te parezca.
Mis saludos>> Jacinto
- Compartir respuesta