Newsgroup: it.comp.appl.access
Titolo: Come individuare a codice se un campo è di tipo Contatore?!

Mi serve sapere se un Campo di una Tabella sia di tipo "Contatore", ma
non ci riesco in alcun modo.
Dovrebbe esserci una proprietą "NewValues" propria dei soli campi
Contatore, per cui se trovassi che un campo ha quella proprietą sarei
certo che si tratta di un campo Contatore, ma quella proprietą non la
trovo da nessuna parte.
Anche eseguendo un codice come quello sotto indicato, non riesco
nell'intento. I campi Contatore hanno le stesse proprietą dei campi
"Intero lungo". A parte due proprietą che riscontro solo nei campi
"Intero lungo": DecimalPlaces e DisplayControl. Queste due proprietą
non le ho viste nei campi "Contatore".  La presenza di queste
proprietą puņ essere utilizzata come discriminante? Mi lascia
perplesso. Preferirei trovare una caratteristica che mi garantisca con
assoluta certezza che si tratta di un campo "Contatore".
Mi potete aiutare? Grazie.
    Dim db As Database
    Dim Tabelle As Object
    Dim Tabella As TableDef
    Dim NomeTabella As String
    Dim Campi As Object
    Dim Campo As Object
    Dim NomeCampo As String
    Dim TipoCampo As Integer
    Dim Proprietą As Object
    Dim Proprietąs As Object
    Dim ProprietąNome As Variant
    Dim ProprietąTipo As Variant
 
    Set db = CurrentDb
    Set Tabelle = db.TableDefs
 
    For Each Tabella In Tabelle
        NomeTabella = Tabella.Name
        If NomeTabella = "Tipi" Then
            Set Campi = Tabella.Fields
            For Each Campo In Campi
                NomeCampo = Campo.Name
                TipoCampo = Campo.Type
                Set Proprietąs = Campo.Properties
                For Each Proprietą In Proprietąs
                    ProprietąNome = Proprietą.Name
                    ProprietąTipo = Proprietą.Type
                    Debug.Print NomeCampo & " " & TipoCampo & " " &
ProprietąNome & " " & ProprietąTipo
                Next
            Next
        End If
    Next


prova con cosi, con "ADO" c'č la proprietā ISAUTOINCREMENT:
 Dim db As Object 'Database
    Dim Tabelle As Object
    Dim Tabella As Object
    Dim NomeTabella As String
    Dim Campi As Object
    Dim Campo As Object
    Dim NomeCampo As String
    Dim TipoCampo As Integer
    Dim Proprietā As Object
    Dim Proprietās As Object
    Dim ProprietāNome As Variant
    Dim ProprietāTipo As Variant
    Set db = CreateObject("adodb.recordset")
    Set Tabelle = Application.CodeData
    db.Open "tabella1", CurrentProject.Connection
'   Set Tabelle = db.TableDefs
    For Each Tabella In Tabelle.AllTables
        NomeTabella = Tabella.Name
        If NomeTabella = "tabella1" Then
            Set Campi = db.Fields
            For Each Campo In Campi
                NomeCampo = Campo.Name
                TipoCampo = Campo.Type
                Set Proprietās = Campo.Properties
                For Each Proprietā In Proprietās
                    ProprietāNome = Proprietā.Name
                    ProprietāTipo = Proprietā.Type
                    Debug.Print NomeCampo & " " & TipoCampo & " " & 
ProprietāNome & " " & ProprietāTipo
                Next
            Next
        End If
    Next
-- 
Ciao
Geppo 



Grazie, Geppo, ma la proprietā ISAUTOINCREMENT c'č anche per gli altri
tipi di campo. Ho eseguito la tua routine e questo č il risultato:
Long 3 BASECOLUMNNAME 202
Long 3 BASETABLENAME 202
Long 3 ISAUTOINCREMENT 11
Long 3 ISCASESENSITIVE 11
Long 3 COLLATINGSEQUENCE 3
Contatore 3 BASECOLUMNNAME 202
Contatore 3 BASETABLENAME 202
Contatore 3 ISAUTOINCREMENT 11
Contatore 3 ISCASESENSITIVE 11
Contatore 3 COLLATINGSEQUENCE 3
Long 3 BASECOLUMNNAME 202
Long 3 BASETABLENAME 202
Long 3 ISAUTOINCREMENT 11
Long 3 ISCASESENSITIVE 11
Long 3 COLLATINGSEQUENCE 3
Contatore 3 BASECOLUMNNAME 202
Contatore 3 BASETABLENAME 202
Contatore 3 ISAUTOINCREMENT 11
Contatore 3 ISCASESENSITIVE 11
Contatore 3 COLLATINGSEQUENCE 3
Intero 2 BASECOLUMNNAME 202
Intero 2 BASETABLENAME 202
Intero 2 ISAUTOINCREMENT 11
Intero 2 ISCASESENSITIVE 11
Intero 2 COLLATINGSEQUENCE 3
Byte 17 BASECOLUMNNAME 202
Byte 17 BASETABLENAME 202
Byte 17 ISAUTOINCREMENT 11
Byte 17 ISCASESENSITIVE 11
Byte 17 COLLATINGSEQUENCE 3
Stranamente, tutti i tipi di campo hanno le stesse proprietā, con gli
stessi valori!?

 trovo da nessuna parte.
Ciao Ludus,
l'attributo da testare è dbAutoIncrField, qui un esempio di funzione che 
ritorna il nome del campo che ha l'attributo contatore in base al nome della 
tabella passato.
----
Function NomeCampoContatore(ByVal NomeTabella As String) As String
    Dim db As DAO.Database
    Dim Tabella As DAO.TableDef
    Dim Campo As DAO.Field
    Dim Responso As String
    Set db = CurrentDb
    Set Tabella = db.TableDefs(NomeTabella)
    For Each Campo In Tabella.Fields
        If (Campo.Attributes And dbAutoIncrField) = dbAutoIncrField Then
            Responso = Campo.Name
            Exit For
        End If
    Next
    Set Tabella = Nothing
    Set db = Nothing
    NomeCampoContatore = Responso
End Function
----
Ciao
Giorgio 

 stessi valori!?
perchč stampi tutto tranne il valore della proprietą, prova adesso, con le 
modifiche che ho apportato, č vedrai che solo il campo contatore avrą 
ISAUTOINCREMENT impostato a "true".
-- 
Ciao
Geppo



Grazie, Giorgio.  Funziona!
Quindi la caratteristica "contatore" è un attributo, non una
proprietà, anche se non mi è molto chiara la differenza. 
Approfondirò, sempre che riesca a individuare dove cercare!. Comunque
grazie ancora.
Ludus.

Comunque grazie ancora
prego, ciao
Giorgio 


"Attributes" è una proprietà del Field...(DAO)
"dbAutoIncrField" è una costante tra le sette di "FieldAttributeEnum", 
dunque una delle caratteristiche di Field.
Ma "Attributes" non si riferisce solo all'oggetto (classe) Field ma anche 
all'oggetto "Relation" e "TableDef".
Dunque questi oggetti hanno diversi "attributi" che, a seconda dell'oggetto, 
si "manifestano" in una o più caratteristiche definite "costanti" e che 
esprimono proprio una particolare caratteristica di quella proprietà 
("Attributes").
Così la costante "dbAutoIncrField" specifica l'autoincremento del campo e
"dbHyperlinkField" specifica che il campo contiene informazioni 
ipertestuali, oppure
"dbUpdatableField" sta a significare che il campo può essere modificato.
La proprietà è "Attributes", le caratteristiche di questa proprietà sono 
definite dalle costanti.
Le proprietà si applicano agli oggetti, le caratteristiche alla proprietà di 
quell'oggetto.
Per tornare al nostro esempio, "contatore" è una caratteristica (esplicitata 
da una costante numerica) di una proprietà che appartiene ad un'oggetto.
Ludus (oggetto) canta (proprietà, attibutes) con voce baritonale, melodiosa, 
squillante sono caratteristiche di quella proprietà.
Ciao, Carlo 

 ----
Stavamo rispondendo allo stesso tempo...
E' un po' che non ti leggo. Lavoro?
Un saluto, Carlo 

 Un saluto, Carlo
un abbraccio :-)
Giorgio 



Grazie a tutti.
Siete stati gentili e competenti!
Ludus.

 ha scritto nel messaggio 
news:68kdo4ltq1eqin4it...@4ax.com...

Pensavi di non trovarne di gente competente qui???
Poi dopo un post di Carlo! :-)))
Ciao
-- 
Roberto da Parma


...ma se sono il più impreparato di tutti!
E allora i vari Girogio, MA, Karl, Matteo, Sergio, Ciroteo, Alex, Cinzia, 
Massimo, ecc. solo per citarne alcuni, cosa sono?
A Robè, vacci piano che qualcuno poi ci crede!
Grazie, comunque e a buon rendere.
ciao, Carlo 

 ha scritto nel 
messaggio news:gma25k$ukb$1...@tdi.cu.mi.it...

Beh non era per sminuire gli altri...ma piuttosto a sottolineare che di 
"bravi" (non quelli dei promessi sposi....anche se su Matteo :-))... ce nè!!
A presto Carlo


 ha scritto
cut
 (non quelli dei promessi sposi....anche se su Matteo :-))... ce nč!!
:-))
:-))
:-))
...ancora non si č sposato?
Ciao, Carlo 

 ha scritto nel 
messaggio news:gma5tt$2jj$1...@tdi.cu.mi.it...

Lui aspetta me..... :-))) ...aspetta aspetta....
