Encontrar registros vacíos, duplicados y campos con nulos usando un cuadro combinado

En otra pregunta el experto Neckkito me muestra la posibilidad de encontrar los nulos de un campo determinado usando un combo mediante este código:

Private Sub cboCampos_AfterUpdate()

Dim miFiltro As String
Dim elCampo As String
elCampo = Nz(Me.CboCampos.Value, "")
If elCampo = "" Then Exit Sub
miFiltro = "IsNull([" & elCampo & "])"
Me.Filter = miFiltro
Me.FilterOn = True
End Sub

Lo que me planteaba ahora es añadir la opción al combo de a través de sus valores encontrar no solo los nulos de un campo concreto sino también los registros vacíos y los duplicados.

Había pensado que como en el combo creo que ya no puedo meter ahora, "tipo de origen de fila: lista de campos" tal vez podría solucionarlo usando como "tipo de origen de la fila: lista de valores" y así meto:

"Titulo", "Autor", "FechaImpresion", "Cantidad", "registros vacíos", "registros duplicados" y en función de lo que selecccione en el combo o me muestra los nulos de cada campo (titulo, autor,...) o si selecciono como valor del combo "registros vacíos " o "registros duplicados" me devuelve entonces aquéllos registros sin información o duplicados.

Nota: los registros vacíos lo entiendo como aquéllos que tienen solo el campo "id" con valor autonumérico y el resto de campos (titulo, autor, FechaImpresion, Cantidad) vacíos.

Tabla:TLibros

Formulario:FLibros

Cuadro combinado: CboCampos

Campos de tabla: Titulo, Autor, FechaImpresion (valor fecha) Cantidad (éste último es un valor numérico)

Si me puedes indicar Neckkito cómo quedaría el código anterior que me propusiste con las nuevas posibilidades.

1 respuesta

Respuesta
1

Access tiene herramientas propias para hacer lo que quieres, y operar todo lo que pides sobre el mismo formulario requeriría, para lo que pides, cambiar orígenes de datos, lo que implicaría situar el formulario en vista diseño en tiempo de ejecución. Y el conjunto del proceso es relativamente complejo y no tengo tiempo de desarrollarlo y explicártelo aquí.

El sistema más sencillo que se me ocurre es:

Créate una consulta, a través del asistente para consultas, con todos los campos que necesites, y en todos los campos le pones de filtro

Null

La guardas como CRegistrosVacios

Créate otra consulta utilizando el asistente para consultas. El asistente te permitirá construir una consulta de duplicados. Llámala CRegistrosDuplicados.

Si quieres puedes crearte formularios sobre esas consultas si quieres la vista más "bonita". Por ejemplo, "FRegistrosVacios" y "FRegistrosDuplicados"

Tu código quedaría así:

...

Private Sub cboCampos_AfterUpdate()

Dim miFiltro As String
Dim elCampo As String
elCampo = Nz(Me.CboCampos.Value, "")
If elCampo = "" Then Exit Sub

Select case elCampo

Case "registros vacíos"

docmd.openquery "CRegistrosVacios" ' O docmd.openform "FRegistrosVacios"

Case "registros duplicados"

docmd.openquery "CRegistrosDuplicados" 'O su form equivalente

Case else
miFiltro = "IsNull([" & elCampo & "])"
Me.Filter = miFiltro
Me.FilterOn = True

End select
End Sub

...

Según para qué lo necesites, y si lo haces a través de formularios, puedes situar esos formularios con las propiedades "emergente" y "modal" activadas, con lo que te aseguras que el usuario deba dar una respuesta antes de volver a tu form principal.

Hola

La verdad es que lo de hacerlo abriendo una consulta, como tú bien dices, no es la opción más vistosa y lo de los forms emergentes no era lo que buscaba... Me venía mejor que los registros vacíos, duplicados y campos con nulos, me apareciera todo si es posible en el mismo formulario a través de lo que selecciono en el combo.

¿No se podría añadir al combo más filtros para buscar los registros vacíos y duplicados tipo?:

miFiltro = "IsNull([" & elCampo & "])" or"

miFiltro = ... or"       (con los "..." me refiero al código a implementar)

miFiltro=... or"

O no sé, usar una SQL tipo Recordsource = " select ... from ... where..."

Si ahora no te viene bien, ¿podrías indicarme en otro momento cómo quedaría al final, el código del combo en "AfterUpdate"?

Si no pudieras y otro experto ve alguna otra posibilidad para que se mostrara todo en el mismo formulario usando el combo, lo agradecería.

Pues si no te parece bien la solución que te he aportado lamento decirte que no puedo ayudarte con lo que pides.

A ver si otro experto puede darte una solución.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas