** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - ERROR EN FUNCIÓN VERIFICACIÓN
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoERROR EN FUNCIÓN VERIFICACIÓN

 Responder Responder
Autor
Mensaje
Goliat2000 Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 11/Noviembre/2014
Localización: Madrid
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Tema: ERROR EN FUNCIÓN VERIFICACIÓN
    Enviado: 11/Octubre/2017 a las 18:06
Hola amigos, quiero exponeros un problema con una función, que no consigo haga el resultado deseado. Tengo una tabla en la que cada registro tiene bastantes campos; todos los campos han de tener un valor numérico, siendo el valor por defecto el cero (0). Sucede que algunas veces, tampoco tengo muy claro el porqué, algún campo se torna a "vacío" o "nulo", por lo que me da error en un formulario cuando pretendo mediante código, importar los valores de todos los campos de un registro. La idea que quiero conseguir con la función, es que, antes de abrir el formulario que corresponda, dicha función me recorra todos los campos de todos los registros y, si detecta algún campo vacío o nulo, le asigne el valor cero (0). Algo hago mal, porque el bucle for no parece "sumar" o incrementar el valor según recorre los campos. He de decir que la función he intentado adaptarla a mis necesidades dado que la copié de algún sitio. Por favor, si alguno puede corregirla lo agradecería mucho. Seguidamente posteo la función. Gracias

Public Function ActualizarCamposVaciosRecetas()

 Dim bytIngrediente As Byte

 Dim bd As Database

 Dim rc As Recordset

 Dim I As Integer

 

 On Error GoTo Err_HayError

 

    Set bd = CurrentDb()

    Set rc = bd.OpenRecordset("SELECT tbBASICORECETAS.Ingrediente1, tbBASICORECETAS.Peso1, tbBASICORECETAS.Ingrediente2," _

         & " tbBASICORECETAS.Peso2, tbBASICORECETAS.Ingrediente3, tbBASICORECETAS.Peso3, tbBASICORECETAS.Ingrediente4," _

         & " tbBASICORECETAS.Peso4, tbBASICORECETAS.Ingrediente5, tbBASICORECETAS.Peso5, tbBASICORECETAS.Ingrediente6," _

         & " tbBASICORECETAS.Peso6, tbBASICORECETAS.Ingrediente7, tbBASICORECETAS.Peso7, tbBASICORECETAS.Ingrediente8," _

         & " tbBASICORECETAS.Peso8, tbBASICORECETAS.Ingrediente9, tbBASICORECETAS.Peso9, tbBASICORECETAS.Ingrediente10," _

         & " tbBASICORECETAS.Peso10, tbBASICORECETAS.Ingrediente11, tbBASICORECETAS.Peso11, tbBASICORECETAS.Ingrediente12," _

         & " tbBASICORECETAS.Peso12, tbBASICORECETAS.Ingrediente13, tbBASICORECETAS.Peso13, tbBASICORECETAS.Peso14," _

         & " tbBASICORECETAS.Ingrediente15, tbBASICORECETAS.Peso15, tbBASICORECETAS.Ingrediente16, tbBASICORECETAS.Peso16," _

         & " tbBASICORECETAS.Alerg1, tbBASICORECETAS.Alerg2, tbBASICORECETAS.Alerg3, tbBASICORECETAS.Alerg4, tbBASICORECETAS.Alerg5," _

         & " tbBASICORECETAS.Alerg6 FROM tbBASICORECETAS;", dbOpenDynaset)

  

        rc.MoveLast

        rc.MoveFirst

 

   While Not rc.EOF

        'recorremos todos los campos del registro

        For I = 0 To rc.Fields.Count - 1

            If rc.Fields(I) <> "" Or Not IsNull(rc.Fields(I)) Then

      

           Exit For

            End If

        Next I

        'si i es menor que rc.Fields.Count -1, hay campos con valor

        'si i es igual a rc.Fields.Count -1, puede ser que éste tenga algun valor. Lo comprobamos

        'con las siguientes líneas:

        If I = rc.Fields.Count - 1 Then

           If rc.Fields(I) = "" Or IsNull(rc.Fields(I)) Then

               rc.Edit

              rc.Fields(I) = 0

              rc.Update

           End If

        End If

       

        rc.MoveNext

    

     Wend

 

     rc.Close

     Set rc = Nothing

    

Exit_ActualizarCamposVaciosRecetas:

    Exit Function

Err_HayError:

    If Err.Number = 3021 Then

       Resume Exit_ActualizarCamposVaciosRecetas

    End If

 

End Function

Muchas gracias, aunque sólo lo hayas leído.
Arriba
pezuarco Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 04/Octubre/2008
Localización: Colombia
Estado: Sin conexión
Puntos: 366
Enlace directo a este mensaje Enviado: 11/Octubre/2017 a las 18:47
Una posible ayuda es que deberias colocar en la tabla  Valor predeterminado = 0; tambien utilizar la funcion nz para tratar de evitar los nulos y los blancos...

Muchas veces lo hacemos dificil....deberiamos verlo sencillo....todo es facil... necesitas logica ..paciencia...sapiencia....
Arriba
Goliat2000 Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 11/Noviembre/2014
Localización: Madrid
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 12/Octubre/2017 a las 13:48
Gracias Pezuarco por contestar. En la tabla tengo habilitado el valor predeterminado, pero si en un campo de un registro desaparece el cero (0) el valor predeterminado sólo vale para los nuevos campos del nuevo registro. He incorporado la función NZ en las línes de código oportunas, pero quiero también disponer de la función.
Muchas gracias, aunque sólo lo hayas leído.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Alcalá Meco
Estado: Sin conexión
Puntos: 2888
Enlace directo a este mensaje Enviado: 12/Octubre/2017 a las 14:20
¿Y algo similar a esto?

Update tabla set campox = 0 where campoX =NULL or campoX = ""


Quitas de una sola todos los campos erróneos y te evitas validar uno por uno.

Luis
Quod natura non dat, Salmantica non præstat
Arriba
pezuarco Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 04/Octubre/2008
Localización: Colombia
Estado: Sin conexión
Puntos: 366
Enlace directo a este mensaje Enviado: 12/Octubre/2017 a las 21:26
".... los campos han de tener un valor numérico, siendo el valor por defecto el cero (0). Sucede que algunas veces, tampoco tengo muy claro el porqué, algún campo se torna a "vacío" o "nulo", por lo que me da error en un formulario cuando pretendo mediante código...".


En la tabla REQUERIDO = SI
REGLA DE VALIDACION  >=0


Y......   solucionado


Muchas veces lo hacemos dificil....deberiamos verlo sencillo....todo es facil... necesitas logica ..paciencia...sapiencia....
Arriba
Goliat2000 Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 11/Noviembre/2014
Localización: Madrid
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 13/Octubre/2017 a las 18:27
HOla amigos, gracias a todos por aportarme soluciones; tomo buena nota de vuestras observaciones. No obstante, deciros que he conseguido desarrollar satisfactoriamente la función que deje anotada, y que, nuevamente y ahora funcionando, dejo aquí en el post por si le fuera de utilidad a alguien o incluso para mejorarla. Gracias nuevamente a todos. Un saludo.

Public Function ActualizarCamposVaciosRecetas()
 Dim bytIngrediente As Byte
 Dim bd As Database
 Dim rc As Recordset
 Dim I As Integer
 Dim NUM As Integer
 NUM = 0
 On Error GoTo Err_HayError
 
    Set bd = CurrentDb()
    Set rc = bd.OpenRecordset("SELECT tbBASICORECETAS.Ingrediente1, tbBASICORECETAS.Peso1, tbBASICORECETAS.Ingrediente2," _
         & " tbBASICORECETAS.Peso2, tbBASICORECETAS.Ingrediente3, tbBASICORECETAS.Peso3, tbBASICORECETAS.Ingrediente4," _
         & " tbBASICORECETAS.Peso4, tbBASICORECETAS.Ingrediente5, tbBASICORECETAS.Peso5, tbBASICORECETAS.Ingrediente6," _
         & " tbBASICORECETAS.Peso6, tbBASICORECETAS.Ingrediente7, tbBASICORECETAS.Peso7, tbBASICORECETAS.Ingrediente8," _
         & " tbBASICORECETAS.Peso8, tbBASICORECETAS.Ingrediente9, tbBASICORECETAS.Peso9, tbBASICORECETAS.Ingrediente10," _
         & " tbBASICORECETAS.Peso10, tbBASICORECETAS.Ingrediente11, tbBASICORECETAS.Peso11, tbBASICORECETAS.Ingrediente12," _
         & " tbBASICORECETAS.Peso12, tbBASICORECETAS.Ingrediente13, tbBASICORECETAS.Peso13, tbBASICORECETAS.Peso14," _
         & " tbBASICORECETAS.Ingrediente15, tbBASICORECETAS.Peso15, tbBASICORECETAS.Ingrediente16, tbBASICORECETAS.Peso16," _
         & " tbBASICORECETAS.Alerg1, tbBASICORECETAS.Alerg2, tbBASICORECETAS.Alerg3, tbBASICORECETAS.Alerg4, tbBASICORECETAS.Alerg5," _
         & " tbBASICORECETAS.Alerg6 FROM tbBASICORECETAS ORDER BY tbBASICORECETAS.IdProducto;", dbOpenDynaset)
   
        rc.MoveLast
        rc.MoveFirst
  
   While Not rc.EOF
        'recorremos todos los campos del registro
        For I = 0 To rc.Fields.Count - 1
            If rc.Fields(I) <> "" Or Not IsNull(rc.Fields(I)) Then
            End If
 
            If rc.Fields(I) = "" Or IsNull(rc.Fields(I)) Then
               rc.Edit
               rc.Fields(I) = 0
               rc.Update
            End If
        Next
        NUM = NUM + 1
        rc.MoveNext
   Wend
  
     rc.Close
     Set rc = Nothing
     
Exit_ActualizarCamposVaciosRecetas:
    Exit Function
Err_HayError:
    If Err.Number = 3021 Then
       Resume Exit_ActualizarCamposVaciosRecetas
    End If
End Function

Muchas gracias, aunque sólo lo hayas leído.
Arriba
Goliat2000 Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 11/Noviembre/2014
Localización: Madrid
Estado: Sin conexión
Puntos: 202
Enlace directo a este mensaje Enviado: 13/Octubre/2017 a las 18:28
Perdón, el hilo puede cerrarse.
Muchas gracias, aunque sólo lo hayas leído.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable