viernes, 9 de mayo de 2008

LIMITAR Nº REGISTROS EN TABLA


Desde la versión 4.0 del motor Jet, se incorporaron algunas características nuevas, para mayor compatibilidad de Access con otros sistemas de bases de datos. En concreto esta versión de Jet, mediante ADO, permite crear restricciones Check sobre tablas o columnas, al estilo de Sql Server.
Para ello, o modificamos (en versiones superiores a Access 2000) 'Herramientas' => 'Opciones' => 'Tablas o consultas' => 'Sintaxis compatible con Sql Server (ANSI 92)' => 'Esta base de datos' (Hay que marcar el check box), y ejecutamos la sentencia ddl desde la vista sql de una consulta, o deberemos utilizar ADO (esta instrucción sql fallará si intentamos ejecutarla mediante DAO).
Una restricción Check es una regla de validación para una columna o una tabla. A diferéncia de la propiedad 'Regla de validación' de los campos de una tabla en vista diseño, con una restricción check podemos definir una regla basada en una instrucción sql (en la vista diseño de una tabla, ni siquiera podemos usar funciones agregadas de dominio como regla de validación).

Ejemplo : Crear una regla de validación a nivel de tabla, que limite la cantidad de registros :

(En este ejemplo, la tabla se llama MiTabla, y el número de registros que permitiremos será de 1)

CurrentProject.Connection.Execute _
"ALTER TABLE MiTabla ADD CONSTRAINT Regla1 " & _
"CHECK ((Select Count(*) From MiTabla) <= 1);"

Una vez ejecutado este código, el número máximo de registros que admitirá MiTabla será de uno. Tampoco podremos eliminar la tabla sin antes eliminar la restricción.

Para eliminar la restricción anterior :

CurrentProject.Connection.Execute _
"ALTER TABLE MiTabla DROP CONSTRAINT Regla1"

Finalmente comentar que este tipo de reglas solo están visibles en la tabla del sistema MSysObjects.

Ramon Poch. Terrassa a 03/01/2007.