Newsgroup: it.comp.appl.access
Titolo: [Contributo] Elenco Indici e Relazioni

Ogni tanto mi commuovo...
Eccomi con un piccolo contributo indirizzato principalmente ai neofiti.
Lo spunto mi è stato dato da 
al...@libero.it
 con il suo post "Troppi indici 
sulla tabella..." dove non si spiega come sia impossibile creare più di 32 
relazioni per tabella.
L'esempio proposto consente proprio di verificare se si sono raggiunti i 
limiti di Access quanto a indici o relazioni oppure più semplicemente per 
avere sottomano la situazione indici/relazioni del db.
Si tratta di una routine che elenca tutti gli indici presenti in un db 
insieme al numero di tabelle; non tralascia le relazioni riportandone GUID, 
TblPrincipale e TblEsterna. Richiede DAO.
La routine si appoggia ad una tabella chiamata "Tbl_Relazioni" che andrà 
implementata con queste caratteristiche:
GUID_Relazione     campo testo 255 caratteri
TblPrincipale     campo testo 255 caratteri
TblEsterna     campo testo 255 caratteri
NIndici     campo Numerico
NTabelle    campo Numerico
Nessun indice o chiave primaria.
(ovviamente ognuno potra crearsi la propria tabella modificando 
opportunamente il codice)
Questa la routine da inserire in un modulo pubblico:
Option Compare Database
Option Explicit
Public Sub ScansionePerIndiciAndRelazioni()
'Autore Carlo Costarella
'Azioni: Accoda in una tabella (Tbl_Relazioni)
'sia il numero di indici presenti nel DB
'che il numero di tabelle (comprese quelle di sistema)
'Inoltre aggiunge alla tabella tutte le relazioni presenti nel DB
'con la propria GUID, tabella principale e tabella esterna
'N.B. Richiede DAO
On Error GoTo errore
    Dim ContaI As Integer
    Dim NTbl As Integer
    Dim RR As Relation
    Dim dbs As Database
    Dim Tdf As TableDef
    Dim TblR As Recordset
Set dbs = CurrentDb
    NTbl = 0
    ContaI = 0
    dbs.CreateRelation
    For Each Tdf In dbs.TableDefs
    Set Tdf = dbs.TableDefs(Tdf.Name)
        NTbl = NTbl + 1
        With Tdf
        ContaI = ContaI + .Indexes.Count
    End With
    Next
DoCmd.SetWarnings False
DoCmd.RunSQL "delete * from Tbl_Relazioni;"
DoCmd.SetWarnings True
Set TblR = CurrentDb.OpenRecordset("Tbl_Relazioni")
    With TblR
        .AddNew
        !NIndici = ContaI
        !NTabelle = NTbl
        .Update
        End With
    For Each RR In dbs.Relations
        With TblR
        .AddNew
        !GUID_Relazione = RR.Name
        !TblPrincipale = RR.Table
        !TblEsterna = RR.ForeignTable
        .Update
        End With
    Next
errore:
 If Err.Number = 3110 Then Resume Next
dbs.Close
TblR.Close
Set TblR = Nothing
End Sub
Ovviamente i webMaster dei siti collegati possono liberamente copiare e 
pubblicare il tutto.
Ciao, Carlo 

Dimenticavo di aggiungere che i limiti sono:
32 indici per tabella
32 relazioni per tabella MENO il numero di indici per quella tabella .
Ciao, Carlo 

Questa:
     NTbl = 0
    ContaI = 0
    dbs.CreateRelation
    For Each Tdf In dbs.TableDefs
 va corretta in:
     NTbl = 0
    ContaI = 0
    For Each Tdf In dbs.TableDefs
Va eliminato dbs.CreateRelation...un refuso di codice.
Ciao, Carlo 

 Ciao, Carlo
Ciao.
-- 
Sergio MAZZA 

 ha scritto nel messaggio 
news:gljujs$hsu$1...@tdi.cu.mi.it...

Nella commozione partorisce cose....così.... :-)))
Ciao Carlo
-- 
Roberto da Parma