Actualizar campo si/no access según los valores en una tabla

Quisiera pedir vuestra colaboración si fuera posible y si realmente es posible realizar lo que pretendo.

Tengo una tabla con los siguientes campos:id(auto), idIntervencion(numero), prosfesional.

Sobre esta tabla cree un formulario continuo para usarlo como subformulario.

Después cree sobre una tabla llamada TDatos un formulario FProfesioneles y cogí solo el campo id y añadí el subformulario anterior vinculando el id de este formulario al idIntervencion del subformulario de esta manera me quedan registrados los profesionales que intervienene en cada intervención.

Para registrar las intervenciones tengo un formulario FDatos basado en TDatos con todos los campos este si y un botón para abrir FProfesionales con el siguiente código:

 Dim nProf As Long
    nProf = Nz(Me.id.Value, 0)
    If nProf = 0 Then Exit Sub
    DoCmd.OpenForm "FProfesionales", , , "[Id]=" & nProf
    Forms! FProfesionales. SubFrmProfesionales.Form. Profesional. SetFocus

Además en este formulario tengo un campo si/no llamado Varios Tecnicos. Pues bien lo que quiero hacer es si es posible es que si al registrar una intervencion se insertan varios tecnicos mas de uno ese check se active solo, es decir:

Creo una nueva intervencion la 100 inserto todos los datos y al llegar al cmd para abrir FProfesionales para insertar 2 profesionales, pues que cuando lo cierre el campo Varios Tecnicos se marque .

Si alguien me puede echar una mano se lo agradecería.

2 respuestas

Respuesta
1

No consigo aclararme, así que voy a poner ejemplos. Supongamos que el formulario se llama Ventas y el subformulario se llama DetalleVenta. Si la casilla de verificación se llama(Propiedades-Otras-Nombre) Veri y está en el formulario y le quieres decir que cambie desde el subformulario, en algún evento pon

Forms!Ventas!Veri=true

Si está en el formulario y quieres que cambie también desde el formulario

Veri=true

Si la casilla está en el subformulario y quieres que cambie desde el formulario

Me.DetalleVenta.Form!Veri = True

Si la casilla está en el subformulario y la quieres activar también desde el subformulario

Forms!ventas!DetalleVenta.Form!Veri = True

Dejo un ejemplo de la bd solo con la información de las tablas y formularios sobre la pregunta paa que se hagan una idea de como esta montada y se vea más claro ya que quizá no me explique bien.

https://mega.nz/#!0xM1nZAa!IYA4DOYzV5PlQossWswUpdkT87WmH0KIiARROY1IfL0

En el evento Al cerrar del formulario Fprofesionales ponle

Private Sub Form_Close()
If DCount("Idintervencion", "tintervinientes", "idintervencion=forms!fprofesionales!id") > 1 Then
Forms!fdatos![Varios Tecnicos] = True
End If
End Sub

Lo que hará es que cunado vayas a cerrarlo contará los técnicos que hayas escrito y si has puesto más de uno te marcará la casilla, si sólo has escrito 1 nada.

Muchas gracias ante todo, he realizado lo que me dices y he puesto el código ene el evento en el botón para cerrar el formulario el código y le he añadido un else para en caso que en algún momento se borre un registro y quede solo uno se desmarque el Check.

Private Sub cmdCerrar_Click()
    If DCount("idIntervencion", "TIntervinientes", "idIntervencion=Forms!FProfesionales!Id") > 1 Then
        Forms!FDatos![Varios Tecnicos] = True
            Else
        Forms!FDatos![Varios Tecnicos] = False
    End If
    DoCmd.Close acForm, Me.Name
End Sub

Quería preguntarte si esta es la manera correcta para ello o habría otra mejor.

Un saludo

Está bien. Pienso que cada uno debe optar por su mejor idea, que se adapta a sus necesidades, no aceptar porque sí la que den otros. Otra cosa es que no funcionara.

Respuesta
1

Utiliza Dcount() para contar el número de registros que tiene la tabla (la de los campos id(auto), idIntervencion(numero), prosfesional) con el mismo id de tu intervención.

Si Dcount() te devuelve 2 o más, marcas el check.

Puedes hacer la comprobación al cerrar "FProfesionales".

Otra opción sería contar los registros del formulario antes de cerrarlo, con Me. RecordsetClone. RecordCount

Buenas noches Sveinbjorn gracias por los consejos como siempre, lo he puesto de esta manera

Private Sub cmdCerrar_Click()
    If DCount("idIntervencion", "TIntervinientes", "idIntervencion=Forms!FProfesionales!Id") > 1 Then
        Forms!FDatos![Varios Tecnicos] = True
            Else
        Forms!FDatos![Varios Tecnicos] = False
    End If
    DoCmd.Close acForm, Me.Name
End Sub

Me podrías decir como sería la opción del RecorssetClone? Porque habría que poner la línea en el evento al cerrar pero luego como lo compararía para decirle que marque o no el check?

Un saludo

Pues sería igual, pero en vez del Dcount usas el recordcount en el if

Lo he intentado y me da error 3219 operación no valida.

If Me.RecordsetClone.RecordCount("idIntervencion", "TIntervinientes", "idIntervencion=Forms!FProfesionales!Id") > 1 Then
Forms!FDatos![Varios Tecnicos] = True
    Else
        Forms!FDatos![Varios Tecnicos] = False
End If

entonces probé a meterlo en una variable:

Dim vReg As Variant
vReg = Me.RecordsetClone.RecordCount
If vReg("idIntervencion", "TIntervinientes", "idIntervencion=Forms!FProfesionales!Id") > 1 Then
Forms!FDatos![Varios Tecnicos] = True
    Else
        Forms!FDatos![Varios Tecnicos] = False
End If

y me da error 13 no coinciden los tipos.

Me. RecordsetClone. Recordcount no es una función. Cuando te digo que lo uses en vez del Dcount() es exactamente eso, que lo uses en vez de la función, no que cmabies unas palabras por otras.

Consulta la ayuda sobre el recordsetclone y el recordcount para ver cómo se usan, y ya verás tu error.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas