• Viernes 29 de Marzo de 2024, 15:13

Autor Tema:  Campos Obligatorios En Un Form Con Subform  (Leído 1688 veces)

voninet

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Campos Obligatorios En Un Form Con Subform
« en: Martes 14 de Agosto de 2007, 14:43 »
0
Hola Amigos foreros!!!
 
Les cuento que despues de mucho recorrer por el foro y ver varios ejemplos de como requerir campos, he puesto esto:
 
 
'GRACIAS XAVI
Public Function verificardatos(nombreform As String, NombreTabla As String)
' definimos las variables
Dim ctl As Control ' para recorrer los controles
Dim msg As String ' para generar el mensaje
Dim algomal As Boolean ' para controlar si algo esta mal
' constantes de color para colorear los campos erroneos
Const colorMalo As Double = vbRed
Const colorbueno As Double = vbWhite
' iniciamos las variables
algomal = False
msg = "Faltan datos por introducir. Verifica los siguientes campos." & vbCrLf & vbCrLf
' recorremos los controles del formulario que hemos pasado como argumento
For Each ctl In Forms(nombreform).Controls
' si el control esta en la seccion detalle
With Forms(nombreform).Controls(ctl.Name)
If .Section = acDetail Then
' y su Origen del control no es nulo y que este no sea algo
' que referencie a otros controles o campos calculados
' (de ahí esa verificacion a que el primer caracter no sea =)
On Error GoTo errVerifica ' controlaremos que exista esa propiedad
If Trim(Nz(.ControlSource, "")) <> "" And Left(.ControlSource, 1) <> "=" Then
' verificamos los datos que contiene y que sean datos requeridos
If IsNull(.Value) And CampoRequerido(NombreTabla, Forms(nombreform).Controls(ctl.Name).ControlSource) Then
' parece que no hay nada escrito
algomal = True
msg = msg & vbCrLf
msg = msg & "· " & .Tag
.BackColor = colorMalo
Else
.BackColor = colorbueno
End If
End If
End If
End With
' aqui es donde continuamos si se ha producido un error
continua:
On Error GoTo 0
Next
msg = msg & vbCrLf & vbCrLf & "Son los que aparecen en rojo."
If algomal Then
MsgBox msg, vbCritical, "Verificación de datos"
End If
exitVerifica:
Exit Function
errVerifica:
' manejamos el error 438, que es cuando intentamos acceder o modificar una propiedad que no existe
' para un control
If Err.Number = 438 Then
Resume continua
Else
MsgBox Err.Number & "-" & Err.Description
Exit Function
End If
End Function
 
' GRACIAS TARIBO
Public Function CampoRequerido(Tabla As String, Campo As String) As Boolean
   
    Dim dbs As DAO.Database
    Dim Campito As DAO.Field
    Dim Tablita As TableDef
   
    Set dbs = CurrentDb
    Set Tablita = dbs.TableDefs(Tabla)
   
    For Each Campito In Tablita.Fields
        If Campito.Name = Campo Then
            If Campito.Required = True Then
                CampoRequerido = True
                Exit Function
            Else
                CampoRequerido = False
                Exit Function
            End If
        End If
    Next Campito
    Set Tablita = Nothing
    dbs.Close
    Set dbs = Nothing
End Function
 
y en el Botón en el evento al hacer click:
 
Call verificardatos(Me.Name, Me.RecordSource)
 
 
Bueno hasta ahí me funciona perfecto pero...
 
solamente me lo hace en el Form principal..
 
Les cuento como tengo armado el Form:
 
El principal es Ingreso con el orgen de datos de la tabla Articulos
y el SubForm es ING_Talles con el origen de datos de la tabla talles.
 
el boton se encuentra en la Form principal osea Ingreso...
 
Alguien sabe como hacer para que tambien verifique El SubForm ING_Talles
 
Desde ya muchas gracias
 
Saludos