Newsgroup: it.comp.appl.access
Titolo: Trovare il nome del campo contatore in una tabella

SAlve a tutti un piccolo aiuto dovrei cambiare l'id delle tabelle
del mio programma. Ora tutti gli id sono di tipo contatore e per 
archivuarle in uno storico diventa un grande problema
allora avrei deciso di modificare l'id da contatore a numerico così 
posso eseguire gli accodamenti senza perdere l'identificativo parlo di 
una sessantina di tabelle. La mia idea è la seguente creare un id 
temporaneo di tipo numerico copiarci dentro i valori dell'id contatore e 
rinominare l'id numerico con il nome dell'id contatore e questu'ultimo 
con un nuovo nome. Il mio problema è il seguente dovrei individuare per 
ogni tabella quale è il nome delcampo contatore per eseguire ciò che ho 
detto come posso fare?
grazie

gianfranco ha scritto:

Se devi solo salvare i dati in tabelle storiche non serve modificare
niente, i contatori sono campi numerici di tipo intero lungo, quindi li
puoi accodare a campi di altre tabelle purché siano di quel tipo.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Si lo so che sono campi numerici dev comunque creare delle id di tipo 
numerico long per trasferire i dati e nominarli con il nome dell'id 
principale altrimenti perdo tutti i collegamenti per questo volevo 
trovare il modo di individuare il nome del campo contatore trasferire i
dati nel nuovo campo numerico. Tramite VB come posso individuare nella 
tabella il nomne del campo contatore. In pratica come trovo il campo 
tipo contatore da VB?

 wrote in
news:E2EZn.208594$
813.1...@tornado.fastwebnet.it
: 

???
le tabelle originali restano con id di tipo contatore.
le tabelle di storico avranno la colonna che contiene il valore dell'id 
di tipo numerico.
non mi e' chiaro cosa vuoi trasferire e rinominare...
quanto al perdere i collegamenti, se copi nello storico gli id, come fai 
a perdere i collegamenti?
-- 
Paolo opg
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--


Come gli altri non capisco cosa vuoi fare e perché, ma se assolutamente
vuoi trovare il campo contatore in una tabella puoi usare questo codice:
Public Function fctCounterName(strTableName As String) As String
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Set db = CurrentDb
Set tdf = db.TableDefs(strTableName)
For Each fld In tdf.Fields
    If (fld.Attributes And dbAutoIncrField) Then
        fctCounterName = fld.Name
    End If
Next fld
End Function
Dove certo manca ancora la gestione di errori.
-- 
Ciao
Karl
*********
Access FAQ: 
www.donkarl.com/it
 


Si pefetto quello che io volevo fare con il primo trasferimento allo 
storico era quello di creare un nuovo id numerico e trasferirci i dati 
dell'id contatore per poi avere come ai detto tu un id di tipo numerico. 
Bene per poter fare ciò devo conoscere il nome del campo id contatore 
perchè sulle 60 tabelle l'id è id_clienti, id_fornitori ecc..
quello che voglio fare è individurare il campo e trasferire tutto su un 
altro campo, spero di essere stato chiaro. Io ho cercato di identificare 
tramite la proprietà Type ma mi riporta sempre il valore 4 come per il 
long, avevo pensato alla proprietà attributes che sembra avere un valore 
49, diverso dagli altri, una volta individuato posso trasferire il tutto 
sull'altro campo e rinominarlo con il nome originale
farlo manualmente diventa massacrante con la routine giusta pochi 
secondi non credi?
grazie cmq dell'aiuto


Karl sempre grande era quello che volevo. Quello che voglio fare è 
questo:  individuo il campo contatore  con la tua routine trasferisco il 
tutto su un campo numerico rinomino il campo numerico con il nome del 
campo id , dopodichè con il campo numerico posso eseguire i 
trasferimenti direttamente, spero di essere stato chiaro ti ringrazio 
della routine. Ho provato e in meno di 10 sec ho eseguito le modifiche a 
circa 60 tabelle. se può essere utile questa è la routine che ho fatto:
dopo aver creato il nuovo campo in tutte le tabelle eseguo la sub
Sub TipiOggetto()
Dim dbs As Database, tdf As TableDef
Dim fld As Field, temp1 As Recordset, temp2 As Recordset  		Dim Tot as 
Long, x As Long, tabelle(200, 3)
  Set dbs = CurrentDb
      'la query recupera i nomi delle tabelle da MSysObjects
      Set temp1 = dbs.OpenRecordset("Tabelle", DB_OPEN_DYNASET)
      Tot = 0
      If Not (temp1.BOF And temp1.EOF) Then
         temp1.MoveLast
         Tot = temp1.RecordCount
         temp1.MoveFirst
     End If
     For x = 1 To Tot
         Set temp2 = dbs.OpenRecordset(temp1!nome)
         For Each fld In temp2.Fields
             If (fld.Attributes And dbAutoIncrField) Then
                 strsql = "UPDATE DISTINCTROW [" & temp1!nome & "] SET 
[idtemporaneo]=[" & fld.Name & "];"
                 dbs.Execute strsql
		'copio tabella e nome id
                 tabelle(x, 1) = temp1!nome
                 tabelle(x, 2) = fld.Name
                 Exit For
             End If
         Next
         temp1.MoveNext
     Next
     temp1.Close
     temp2.Close
' eseguo il cambio nome
     For x = 1 To Tot
         dbs.TableDefs(tabelle(x, 1)).Fields(tabelle(x, 2)).Name = 
"IdContTemp"
         dbs.TableDefs(tabelle(x, 1)).Fields("idtemporaneo").Name = 
tabelle(x, 2)
     Next
End Sub