ACCESS. ¿Como copiar valor de inputbox en un registro?

Soy nueva por aquí, necesito que alguien muy amablemente me conteste, como puedo introducir el valor de un INPUTBOX en un REGISTRO.

En principio he gastado este código pero no consigo nada, solo se me abre el 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 INTERVENCION (HORA_FIN) VALUE (vFin.value)"
          End If
End Sub

1 Respuesta

Respuesta
1

Tienes que asignarle el valor introducido en el inputbox al cuadro de texto de tu formulario. Por ejemplo, suponiendo que se llame HORA_FIN, sería:

Private Sub F_RESULTADO_Click()
       Dim vFin As Date
  If F_RESULTADO = "FINALIZADO" Then
       vFin = CDate(InputBox("INTRODUCE HORA_FIN"))
        Me.HORA_FIN=vFin
 End If
End Sub

Si lo que quieres es añadir un registro a una tabla, al código que tienes le falta ejecutar la consulta SQL que defines:

Private Sub F_RESULTADO_Click()
       Dim codigo As String
       Dim vFin As Date
  If F_RESULTADO = "FINALIZADO" Then
       vFin = CDate(InputBox("INTRODUCE HORA_FIN"))
        codigo = "insert into INTERVENCION (HORA_FIN) VALUE (#" & Format(vFin,"mm/dd/yyyy") & ")"

     CurrentDb.Execute codigo
  End If

End Sub

Hola,

No me funciona! je je creo que te voy a poner un reto!

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?

Prueba con este código:

Private Sub F_RESULTADO_Click()
Dim vFin As Date
If F_RESULTADO = "FINALIZADO" Then
  vFin = CDate(InputBox("INTRODUCE HORA_FIN"))
  Me.SUBCORRECTIVA.Form.HORA_FIN=vFin
End If
End Sub

Como alternativa, que sería la que yo usaría, te propongo esta:

1º/ Dejar bloqueado el campo F_Resultado (propiedad Bloqueado: Sí), y con valor predeterminado "pendiente", como ya tienes.

2º/ En el evento "Después de actualizar" del campo HORA_FIN del subformulario, le pones este código:

Private Sub HORA_FIN_AfterUpdate()
If IsNull(Me.HORA_FIN) OR Me.HORA_FIN="" Then
Me.Parent.F_RESULTADO="Pendiente"
Else
Me.Parent.F_RESULTADO="Finalizado"
End If
End Sub

A ver si te sirve

Hola,

El de bloquearlo y tal y que se ponga finalizado es buena idea, pero el problema es que se pueden hacer varias INTERVENCIONES en el subformulario (SUB_CORRECTIVA), es decir, se puede insertar varias HORA_FIN y que la actividad quede pendiente, pero solo que pongan finalizado cuando realmente la hayan acabado siempre que HORA_FIN aparezca escrito.

No se si me explico es que es muy complejo.

Si no tienes claras las condiciones, es muy difícil programarte algo que te vaya a funcionar siempre.

¿Probaste el primer código de la respuesta anterior? Te debería funcionar y va en la linea en que estabas trabajando inicialmente.

Por darte una alternativa con el tercer método que pensaste (si marcan "finalizado" que compruebe si hora_fin tiene algún dato), podría ser algo así:

En el evento "Antes de actualizar" de F_Resultado, le pones este código:

If Me.F_Resultado="Finalizado" Then  'Pon "Finalizado" exactamente como lo tienes

Dim datosCorrectos as Integer

Dim rst As DAO.Recordset

datosCorrectos=False

Set rst=Me.SUB_CORRECTIVA.Form.Recodsetclone

If rst.recordcount<>0 Then 

Do Until rst.EOF

If rst("HORA_FIN")<>"" Or Not IsNull(rst("HORA_FIN")) Then

datosCorrectos=True

Exit Do

End If

rst.MoveNext

Loop

End If

rst.Close

If datosCorrectos=False Then

MsgBox "Antes de marcar el proceso como Finalizado, tienes que introducir una Hora_Fin en el subformulario",vbInformation+vbOkOnly,"AVISO"

Cancel=True

End If

De esta manera, si hay algún registro del subformulario que tenga una hora_fin, te dejará cambiar y si no hay ninguna, te avisa y no te deja seguir.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas