Indice de varios campos

He creado un indice de tres campos de texto en una tabla donde indico que deben ser registros únicos y que no ignoraren los registros nulos, los campos tienen la opción no requeridos, y cuando entro datos los registros que son iguales por ejemplo:
campo1 campo2 campo3
aaa fff ssss
aaa fff ssss
No lo acepta lo cual esta bien pero
Cuando introduzco
campo1 campo2 campo3
aaa fff
aaa fff
Lo acepta lo cual no debería ser
Pregunta ¿qué pasa, que acepta registros duplicados cuando uno o dos campos son nulos?
¿Qué debo hacer para que no acepte registros duplicados cuando un campo es nulo?

1 respuesta

Respuesta
1
No te vale hacerlo así. Esa opción especifica si los valores nulos entran o no en el índice. Poniéndole que entren, lo único que se hace es acelerar las búsquedas por valores nulos.
En cuanto a la comparación, no te detecta que están duplicados porque internamente en cualquier base de datos las comparaciones en las que interviene un nulo siempre develven falso. Es decir, access compara registro a registro a ver si (r1.c1=r2.c1) and (r1.c2=r2.c2) and (r1.c3=r2. C3). En tu segundo ejemplo, la tercera parte se queda (null=null), que devuelve falso, (curioso, ¿Eh?) Y por tanto toda la expresión es falsa. Y entonces, guarda el registro.
Lo único que se me ocurre es que las inserciones sean desde un formulario, y que en el evento de insertar nuevo registro te programes la comparación con el resto de registros.
Si te interesa, avisa. Pero si lo que quieres es evitar que un usuario cualquiera introduzca duplicados, así no puedes.
También puedes hacer otra cosa, ponerle a los 3 campos la propiedad de que no admita nulos y que admita longitud cero (si son de texto). Y le dices a los usuarios que para campos en blanco introduzcan un espacio. Access hace entonces un trim, lo deja como cadena vacía ("") y ahí si que te funcionaría el índice único..
En fin, como verás la cosa está liada. Ahora te toca decidir por dónde atacar el tema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas