domingo, 2 de noviembre de 2008

PROPIEDADES ÍNDICES


Se trata de una consulta que explora los í­ndices de una tabla determinada, devolviendo la siguiente información :

- Nombre del í­ndice
- Si es o no Clave primaria
- Si es o no Clave externa
- Si admite o no valores repetidos
- Nombres de los campos que forman parte del í­ndice

Para poder utiliar esta consulta, es imprescindible tener en la base de datos una tabla (de nombre 'Nums') con un solo campo (de nombre 'Num'), Entero largo, campo clave, con valores desde 0 a 99. Así mismo, puesto que usamos funciones de vba, será necesario establecer un nivel de seguridad apropiado (Dependerá de la versión de Access que utilicemos).

Esta es la consulta :

PARAMETERS Tabla Text ( 255 );
SELECT T.*,
Eval("CurrentDb.TableDefs('" & Tabla & "').Indexes('" & CStr(T.Nombre_del_índice) & "').Fields(" & Num & ").Name") AS Nombre_del_campo
FROM
(
Select Eval("CurrentDb.TableDefs('" & Tabla & "').Indexes(" & Num & ").Name") As Nombre_del_índice,
Choose(Abs(Eval("CurrentDb.TableDefs('" & Tabla & "').Indexes(" & Num & ").Primary"))+1,"No","") As Es_clave_primaria,
Choose(Abs(Eval("CurrentDb.TableDefs('" & Tabla & "').Indexes(" & Num & ").Foreign"))+1,"No","") As Es_clave_externa,
Choose(Abs(Eval("CurrentDb.TableDefs('" & Tabla & "').Indexes(" & Num & ").Unique"))+1,"No","") As Sin_repeticiones
From Nums
Where Nums.Num<Eval("CurrentDb.TableDefs('" & Tabla & "').Indexes.Count")
) AS T,
(
Select Top 10 Num From Nums
) AS Nums
WHERE Num<Eval("CurrentDb.TableDefs('" & Tabla & "').Indexes('" & CStr(T.Nombre_del_índice) & "').Fields.Count")
ORDER BY T.Nombre_del_índice;

Ramon Poch. Terrassa, a 07/12/2007.