Validación de subformularios dentro de un formulario padre en Access

Estoy realmente nueva en el tema de access y VBA, ahora estoy validando un formulario donde registro un producto que va asociado a un cliente o varios, además estos clientes están asociados a unos tipos de garantías, mi formulario padre es el registro del producto nuevo ya que es un 1 producto para varios clientes y varios clientes para varias garantías, mis subformularios son cliente y garantías, ¿cómo puedo validar que al momento de registrar en el formulario padre no me queden los subformularios vacíos?

1 respuesta

Respuesta
1

Tienes que añadir código al evento 'Al hacer clic' del botón que cierre el formulario o pase a un nuevo registro o el botón que uses para validar datos.

Básicamente hay que usar la propiedad recorsetclone aplicada a los subformularios y contar el número de registros que contiene ese o esos recordsets. Si el valor es 0 quiere decir que no hay registros en el subformulario y puedes inhibir el cierre o la salida del registro.

Te copio unas lineas de código que validarían la existencia de datos en un subformulario (en el ejemplo hay un Formulario1 con un Subformulario1 y un botón para validar). En tu caso simplemente hay que validar los dos subformularios antes de guardar o...

Cordiales saludos.

Option Compare Database 
Option Explicit 
Private Sub Validar_Click() 
On Error GoTo Err_Validar_Click 
    Dim msg As String, estilo, title As String 
    estilo = vbCritical + vbOKOnly 
    title = "Error en la inserción por falta de datos" 
    msg = "No se han podido crear los registros solicitados por no existir ninguna entrada en el campo " 
    Dim miBD As Database, misRegistros As Recordset, cuantosRegistros As Integer 
    Set miBD = CurrentDb 
    Set misRegistros = Forms![Formulario1]![Subformulario1].Form.RecordsetClone 
    With misRegistros 
        .MoveLast 
        cuantosRegistros = .RecordCount 
        .Close 
    End With 
    Set miBD = Nothing 
    If cuantosRegistros < 1 Then 
        'AÑADIR CÓDIGO DESEADO CUANDO NO HAYA REGISTROS EN EL SUBFORMULARIO 
    End If 
Exit_Validar_Click: 
    Exit Sub 
Err_Validar_Click: 
    MsgBox Err.Description 
    Resume Exit_Validar_Click 
End Sub 

Hola LasChanas, muchas gracias por tu respuesta, como dije soy muy nueva, entonces permíteme consultarte algo más, ¿cómo son 2 subformularios el set misRegistros lo haría dos veces? ¿Es decir para cada subformulario o puedo utilizar ese mismo para ambos? ¿Entonces cómo seria? ¿Mis registros debo asumir es mi tabla o es mi formulario? De verdad disculpa mi ignorancia pero estoy aprendiendo sola.^_^!

Te contesto en un par de horas con el ejemplo modificado para que compruebe y exija valor en dos subformularios (ahora no tengo tiempo).

Mis registros es un recordset, es decir, un conjunto de registros en memoria que se obtienen de donde le indiques (del origen de datos de un subformulario, definido explicitamente, de una tabla, de una consulta...).

Cordiales saludos.

Volviendo a misRegistros, como te decía es un recordset (algo temporal para usar y que luego desaparece) que usamos para acceder a registros. En tu caso a los registros que haya en los dos subformularios. Primero le decimos que se llene con los registros del primer subformulario y contamos cuantos hay, luego igual con los del segundo. Luego miramos cuantos hay en uno y en otro, si no hay en alguno avisamos y añades código para lo que quieras hacer. Si hay registros en ambos añades código donde te indico.

En este código solo debes de sustituir los nombres del Formulario1, Subformulario1, Subformulario2 y el del botón Validar por los que desees usar.

Espero te valga.

Cordiales saludos.

Private Sub Validar_Click()
On Error GoTo Err_Validar_Click
    Dim msg As String, estilo, title As String
    estilo = vbCritical + vbOKOnly
    title = "Error en la inserción por falta de datos"
    Dim miBD As Database, misRegistros As Recordset, cuantosRegistrosDeSub1 As Integer, cuantosRegistrosDeSub2 As Integer
    Set miBD = CurrentDb
    Set misRegistros = Forms![Formulario1]![Subformulario1].Form.RecordsetClone
    With misRegistros
        .MoveLast
        cuantosRegistrosDeSub1 = .RecordCount
        .Close
        Set misRegistros = Forms![Formulario1]![Subformulario2].Form.RecordsetClone
        .MoveLast
        cuantosRegistrosDeSub2 = .RecordCount
        .Close
    End With
    Set miBD = Nothing
    If cuantosRegistrosDeSub1 < 1 Then
        msg = "No se han podido crear los registros solicitados por no existir ningun registro en el subformulario 1."
        MsgBox msg, estilo, title
        'AÑADIR CÓDIGO DESEADO CUANDO NO HAYA REGISTROS EN EL SUBFORMULARIO 1
    ElseIf cuantosRegistrosDeSub2 < 1 Then
        msg = "No se han podido crear los registros solicitados por no existir ningun registro en el subformulario 2."
        MsgBox msg, estilo, title
        'AÑADIR CÓDIGO DESEADO CUANDO NO HAYA REGISTROS EN EL SUBFORMULARIO 2
    Else
        'AÑADIR CÓDIGO DESEADO CUANDO HAY REGISTROS EN AMBOS SUBFORMULARIOS
    End If
Exit_Validar_Click:
    Exit Sub
Err_Validar_Click:
    MsgBox Err.Description
    Resume Exit_Validar_Click
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas