¿Como puedo hacer para cambiar la propiedad de los registros de la tabla después de usar el formulario de confirmación?

Mi problema es que tengo una bd para controlar certificados, y necesito que después de confirmar la entrega desde un formulario se bloquee para la escritura los registros actualizados. ¿Cómo puedo hacer para cambiar la propiedad de los registros de la tabla después de usar el formulario de confirmación?

1 respuesta

Respuesta
1

De la tabla no se puede, del formulario sí. Supongamos que tienes una tabla Clientes, con NombreCompañía, localidad, País. Supongamos también que tienes un campo Entregado (Si/No) donde reflejas si se ha entregado el certificado, y con ella has hecho el formulario. En sus propiedades-eventos-Al activar el registro, crea un procedimiento de evento y entre Private Sub y End Sub escribe

If Entregado = True Then
NombreCompañía.Enabled = False
País.Enabled = False
Ciudad.Enabled = False
Else
NombreCompañía.Enabled = True
País.Enabled = True
Ciudad.Enabled = True
End If

Y en las propiedades de la casilla de verificación Entregado, en sus propiedades-eventos-Después de actualizar pon lo mismo. Así, cuando estés en un registro, y marques la casilla Entregado, se inhabilitarán los cuadros de texto, y cuando cierres y abras el formulario, en aquellos registros con la casilla=true estarán inhabilitados esos cuadro de texto.

Por cierto, si en el formulario hubiera muchos cuadros de texto, para no tener que ir escribiendo uno por uno, quizá te sea más sencillo, sustituir el código anterior en ambos sitios por

For Each Control In Me.Controls
If Control.ControlType = acTextBox And Entregado = True Then
Control.Enabled = False
ElseIf Control.ControlType = acTextBox And Entregado = False Then
Control.Enabled = True
End If
Next Control

Muchas gracias, no lo he probado pues no tengo ninguna casilla de verificacion en el formulario de confirmacion, lo tengo configurado para buscar los certificados por el nº interno que es automatico en la tabla.

¿donde tengo que cargar el evento, y que linea del evento tengo que modificar? 

Pero, en algún sitio tendrás que decirle que has confirmado la entrega, porque sino como sabes que ya lo has entregado. Entonces podrías decir en el evento al cargar del formulario

form.recordsource="select * from nombre de tabla where entregado="no"

O algo similar.

De todas formas, si quieres, mándame una copia vacía(sin registros) de la tabla y el formulario, le echo un vistazo y te digo. Mi email es [email protected]. Si lo haces en el Asunto del mensaje pon tu alias escgpa, porque si no, no los abro.

Disculpar que sea tan pesado, he probado y funciona muy bien si creo el botón de "Entregado" pero el problema que tengo es que con el botón una vez activado, se puede desbloquear otra vez, y lo que necesito es que una vez confirmado no se pueda desde ese botón de Entregado desbloquear los registros.

Cambien tengo un campo del formulario que depende de una tabla diferente y al ejecutar el botón de "Entregado" no se bloquea, ¿donde tengo que insertar la instrucción para que ese dato se bloquee también, y la misma instrucción vale?

Muchísimas gracias de antemano

Con respecto a lo del cuadro de texto de otra tabla, tiene que dar exactamente igual, lo que hace el código es bloquear TODOS los cuadros de texto del formulario, a menos que no sea un cuadro de texto. Para que te bloquee también la casilla, pon el código así

For Each Control In Me.Controls
If Control.ControlType = acTextBox Or Control.ControlType = acCheckBox Then
    If Entregado = True Then
    Control.Enabled = False
    Else
    Control.Enabled = True
    End If
End If
Next Control

¡MIL Gracias! 

Me has salvado el puesto de trabajo.

Te debo una cerveza.

Tenias toda la  razón, no es un cuadro de texto es un cuadro combinado. 

¿como puedo incluirlo en el código anterior?

Muchas gracias

If Control.ControlType = acTextBox Or Control.ControlType = acCheckBox or control.controltype=accombobox Then...

¡Gracias!  

Buenas, muchas gracias me ha ido de perlas,

Pero .. ahora me dicen que si puede ser ¿quelos campos que se rellenan 3 cuadros de texto y 1 cuadro combinado sean obligatorios al perder el enfoque?

Disculpa pero lo mismo no me he explicado bien

Necesito que los 3 cuadros de texto y 1 cuadro combinado contengan datos antes de pasar al siguiente sin que se pueda usar el ratón para ir a estos 4 elementos, (hay mas controles (cuadro de texto) que si se necesita poder seleccionar tanto con el ratón como por teclado.

Muchas gracias de antemano

Entiendo que lo que quieres es que los cuadros de texto tengan valor. Si el cuadro tiene un origen de control en un campo de una tabla, con ponerle en el campo de la tabla, en la solapa General, Requerido=Sí, ya te obliga a que en el formulario tengas que poner un valor. Lo mismo con el combinado.

""sin que se pueda usar el ratón para ir a estos 4 elementos, (hay mas controles (cuadro de texto) que si se necesita poder seleccionar tanto con el ratón como por teclado""

Aquí si que ya no he entendido nada

Disculpa mi torpeza al explicarme. 

El caso es que tengo un formulario, que tiene 9 Cuadros de texto y 2 Cuadros Combinados

Cuadros Combinados

El 1 Cuadro Combinado

Es para buscar el Nº de entrada para confirmar. (este no puede ser bloqueado por tenerlo que usar).

El 2 Cuadro Combinado

Es para incluir el Mensajero "que entrega el documento" que depende de una tabla, la cual una vez verificada la entrega se tiene que bloquear (tema solucionado en el comentario anterior).

Este control si tiene que tener valor antes  de pasar al siguiente campo (tenemos que asignar un  nº de mensajero de la tabla asociada).

Cuadros de Texto

 6 son para ver información y en el formulario no dan entrada a ningún dato.

pero hay que verlos para poder confirmar que son los registros que queremos confirmar.

Los 3 cuadros de texto restantes son los que quiero que no puedan quedar sin valor antes de pasar al siguiente campo. 

El tema de bloquear estos campos ya lo solucionamos con el comentario anterior igual que el"Cuadro Combinado 2".

Y por ultimo tengo una casilla de verificación"SI/NO" para activar el bloqueo de campos.

La cuestión es que no quiero que se pueda activar ningún Cuadro de Texto ni el Cuadro Combinado 2 con el ratón, si no que tenga que acceder con el teclado bien con el intro o con el tabulador.  (Este tema del ratón no me es imprescindible pero me vendría bien). Muchas gracias de nuevo.

Si te vas desplazando con el tabulador, puedes poner en el evento Al perder el enfoque del cuadro combinado

If isnull([nombrecombinado]) then

Msgbox"No puede quedar sin valor"

Docmd. Cancelevent

end if

Lo mismo en los cuadros de texto

Lo del ratón sigo sin entenderlo, si el cuadro de texto está bloqueado o inhabilitado aunque con el ratón pongas el cursor encima no hace nada

He probado el evento pero no me bloquea el paso a otros controles

solo me indica que "no puede quedar sin valor", y lo que necesito es que no se pueda avanzar a otro elemento si no esta completo el anterior.

Y lo del ratón olvídalo no es imprescindible,

Muchisimas gracias

Tendrás que combinar varias cosas

1º para que no te permita cambiar de registro, ni hacer nada

Private Sub Form_BeforeUpdate(Cancel As Integer)
If IsNull([FechaEnvío]) Then
DoCmd.CancelEvent
End If
End Sub

y para que al poner el cursor en otro control, vuelva al anterior

If isnull([fechaenvío]) then

fechaenvío.setfocus

end if

Y creo que con eso ya llega

¡Gracias!  Lo probaré lo antes posible mil millones de gracias 

Buenos días, he intentado el bloqueo de las dos formas que me indicas en cada campo de datos a rellenar del formulario y lo que me hace es que me bloquea todo y no puedo rellenar los campos,

Lo que necesito es que no se pueda pasar a otro campo hasta que en el que estas tenga valor.

La estructura que tengo es "Cuadro de texto [Recibe]" pasa a "Cuadro de texto [HoraEntrega]" pasa a "Cuadro Combinado [Mensajero] pasa a "Cuadro de texto [Fecha Recepción] y por ultimo pasa a "Casilla de Verificación [Entregado]

Estos son los campos que quiero que no se pueda pasar de uno a otro hasta que no estén con datos pero que no me bloqueen los datos introducidos hasta no usar la casilla de Verificación [Entregado]

El tema de bloqueo con la casilla de Verificación esta ya resuelta con el código anterior.

Espero haberme explicado bien de todas formas gracias.

En las propiedades de horaentrega, en el evento Al recibir el enfoque pon

If IsNull([recibe]) Then
DoCmd. CancelEvent
Recibe. SetFocus
End If

Así, cuando el cursor, bien con el tabulador bien con el ratón llegue a horaentrega, se irá a Recibe

Y así los demás

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas