Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/07/2008, 17:01
Avatar de Txoco
Txoco
 
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 16 años, 10 meses
Puntos: 7
Respuesta: contar campos vacios de un registro especifico

Hola!

El objeto Recordset tiene una propiedad que es Fields (campos), que es una colección en la que cada uno de sus elementos tiene a su vez la propiedad Value, entre otras, que es el contenido del campo dentro del registro actual.

Puedes obtener el número de campos que tiene la consulta mediante la propiedad <nombre del recordset>.Fields.Count, y luego el valor de cada campo mediante <nombre del recordset>.Fields(<indice>).Value.

¡Recuerda que un campo vacío es una cosa y que un valor nulo es otra! La distinción debes hacerla con la función IsNull, y es necesario hacerlo en dos comprobaciones distintas, más o menos así:

Código:
If IsNull(<nombre del recordset>.Fields(<indice>).Value) Then
    CuentaVacios = CuentaVacios + 1
ElseIf <nombre del recordset>.Fields(<indice>).Value="" Then
    CuentaVacios = CuentaVacios + 1
End If
Adelantándome a dudas , la razón de que lo siguiente no funcione:
Código:
If IsNull(<nombre del recordset>.Fields(<indice>).Value) Or <nombre del recordset>.Fields(<indice>).Value="" Then
    CuentaVacios = CuentaVacios + 1
End If
es que VB intenta evaluar todas las expresiones de un mismo If antes de decidir si se cumple por completo o no.

Por ejemplo, si das con un campo nulo, según este segundo ejemplo, la primera expresión ya sería cierta (la del IsNull), con lo que en teoría no haría falta evaluar la segunda. Sin embargo, VB sigue evaluando, y no se puede comparar un valor nulo con nada (una cadena vacía en este caso), ya que produce un error.