Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Copiare _tutta_ la struttura di una tabella con Adox

Salve a tutti!
Sto realizzando una copia di tabelle tra due database con Adox, ed utilizzo
la funzione che riporto dopo la firma.
non riesco però a copiare tutte le proprietà delle colonne.
In generale mi succede che se creo una Adox.table e la popolo con le varie
colonne per poi farne l'append nell'adox.catalog, l'insieme delle proprietà
è vuoto, e quindi non posso copiarle.
Se invece assegno il parentcatalog alla adox.table, l'insieme delle
proprietà esiste, e posso tranquillamente copiarle, ma quando eseguo
l'append mi dice che si è verificato un errore in una operazione Ado
composta da più operazioni, e l'append fallisce.
Sembrerebbe che non tutte le proprietà si possano assegnare, ma non sono
riuscito a capire come determinare se una certa proprietà va saltata oppure
no.
Inutile precisare che ho massacrato sia Msdn che google, dove la cosa +
vicina che ho trovato riguarda soltanto la proprietà defaultvalue, ma non è
l'errore che ho io.
Spero che qualcuno ne sappia qualcosa...
Ciao e grazie
Alfonso
------------------------------------------------------------------
Public Function CopiaTabella(CatNew As ADOX.Catalog, CatOld As ADOX.Catalog,
stName As String)
Dim tblTableOld As ADOX.Table, tblTableNew As ADOX.Table
Dim iI As Long, iJ As Long
Dim idxNew As ADOX.Index
Set tblTableNew = New ADOX.Table
Set tblTableNew = New ADOX.Table
Set tblTableOld = CatOld.Tables(stName)
tblTableNew.Name = tblTableOld.Name
tblTableNew.ParentCatalog = CatOld
For iI = 0 To tblTableOld.Columns.Count - 1
   tblTableNew.Columns.Append tblTableOld.Columns(iI).Name,
tblTableOld.Columns(iI).Type, tblTableOld.Columns(iI).DefinedSize
   For iJ = 0 To tblTableOld.Columns(iI).Properties.Count - 1
'     Debug.Print
tblTableNew.Columns(tblTableOld.Columns(iI).Name).Properties(iJ).Name
     tblTableNew.Columns(tblTableOld.Columns(iI).Name).Properties(iJ).Value
= tblTableOld.Columns(iI).Properties(iJ).Value
   Next
'   Debug.Print tblTableOld.Columns(iI).Name, tblTableOld.Columns(iI).Type,
tblTableOld.Columns(iI).DefinedSize
Next
For iI = 0 To tblTableOld.Indexes.Count - 1
   Set idxNew = New ADOX.Index
   idxNew.Name = tblTableOld.Indexes(iI).Name
   'colonne
   For iJ = 0 To tblTableOld.Indexes(iI).Columns.Count - 1
      idxNew.Columns.Append tblTableOld.Indexes(iI).Columns(iJ).Name
   Next
   'attributi
   idxNew.PrimaryKey = tblTableOld.Indexes(iI).PrimaryKey
   idxNew.IndexNulls = tblTableOld.Indexes(iI).IndexNulls
   idxNew.Unique = tblTableOld.Indexes(iI).Unique
   idxNew.Clustered = tblTableOld.Indexes(iI).Clustered
   ' Aggiunge l'indice alla tabella
   tblTableNew.Indexes.Append idxNew
   Set idxNew = Nothing
Next
CatNew.Tables.Append tblTableNew
Set tblTableOld = Nothing
Set tblTableNew = Nothing
End Function

 ha scritto nel messaggio
news:9v4gjn$9u0d6$1...@ID-89238.news.dfncis.de...


 solito, funziona benissimo...
Mai! E poi chi lo sente Pal...
Ado fino alla morte:)
io W2000 SP1
Vb6 sp5
mdac non precisato (quello di w2000)
cmq, il codice dopo la firma va bene, adesso.
Magari provalo anche tu, così confrontiamo i risultati...
ciao
Alfonso
----------------------------------------------------------------------
Public Function CopiaTabella(CatNew As ADOX.Catalog, CatOld As ADOX.Catalog,
stName As String)
Dim tblTableOld As ADOX.Table, tblTableNew As ADOX.Table
Dim iI As Long, iJ As Long
Dim idxNew As ADOX.Index
Dim stProprietà(0 To 9) As String
Set tblTableNew = New ADOX.Table
Set tblTableNew = New ADOX.Table
Set tblTableOld = CatOld.Tables(stName)
tblTableNew.Name = tblTableOld.Name
tblTableNew.ParentCatalog = CatNew
stProprietà(0) = "Jet OLEDB:One BLOB per Page"
stProprietà(1) = "Jet OLEDB:Compressed UNICODE Strings"
stProprietà(2) = "Jet OLEDB:Allow Zero Length"
stProprietà(3) = "Autoincrement"
stProprietà(4) = "Default"
stProprietà(5) = "Description"
stProprietà(6) = "Fixed Length"
stProprietà(7) = "Jet OLEDB:Column Validation Text"
stProprietà(8) = "Jet OLEDB:Column Validation Rule"
stProprietà(9) = "Jet OLEDB:IISAM Not Last Column"
'stProprietà(NO) = "Jet OLEDB: AutoGenerate"
'stProprietà(NO) = "Jet OLEDB: Hyperlink"
'stProprietà(NO) = "Seed"
'stProprietà(NO) = "Increment"
'stProprietà(NO) = "Nullable"
For iI = 0 To tblTableOld.Columns.Count - 1
   tblTableNew.Columns.Append tblTableOld.Columns(iI).Name,
tblTableOld.Columns(iI).Type, tblTableOld.Columns(iI).DefinedSize
   ' scommentando questo va tutto in crash
   'tblTableNew.Columns(tblTableOld.Columns(iI).Name).Attributes =
tblTableOld.Columns(iI).Attributes
   For iJ = 0 To UBound(stProprietà)
tblTableNew.Columns(tblTableOld.Columns(iI).Name).Properties(stProprietà(iJ)
).Value = tblTableOld.Columns(iI).Properties(stProprietà(iJ)).Value
   Next
