Newsgroup: it.comp.lang.visual-basic
Titolo: Properties di un Field

Ho questo Problema :
Voglio cambiare delle proprieta' di un oggetto field in runtime...ho provato
a modificarlo normalmente ma mi da errore dicendomi che non e' possibile nel
contesto corrente (?), non e' che devo aprire il database o il recordset in
modo particolare? se si come? Grazie MIlle
    Riga


dipende da che proprietà devi modificare...
se per es. devi cambiare la proprietà AllowZeroLenght non c'è problema... ma
se devi cambiare il tipo di dati o il Size allora è un casino...
io avevo risolto
- aggiungendo un campo temporaneo con tipo & dimensione = al campo vecchio
- mettendo il contenuto del campo vecchio nel campo nuovo (con UPDATE ecc..)
- togliendo il campo vecchio
- aggiungendo un campo nuovo con le caratteristiche che mi servivano
- trasferendo i dati dal campo temporaneo a quello nuovo
- cancellando il campo temporaneo
è un gran giro, lo so, ma non ho trovato altra soluzione e dovevo farlo...
un altro problema è: se il campo in questione fosse indicizzato? beh, va
fatta una copia degli indici che lo riguardano, per poi cancellarli e
ricrearli dopo aver concluso il procedimento di prima...
Se qualcuno ha una soluzione più pulita sarebbe una manna    :)
Ciao
Faber

Ok, ci avevo pensato ma diventa troppo lungo... in particolare io volevo
cambiare la proprieta' del field ISAUTOINCREMENT su true... Il mio problema
e' creare un field con l''abilità'' contatore =) solo che con SQL non riesco
e gestendo le proprieta' con un oggetto ado mi restituiva quel
messaggio...Come posso fare?

Un altro problema e' che mi impedisce proprio di Modificare, ho appena
provato append, ma anch'esso mi restituisce il messagio "impossibile nel
contesto corrente" forse una questione di apertura o della connessione o del
Recordset, ma di fatto ne ho provate tutte ma nn riesco!!Cavolo!
Alberto

 Ciao > Faber
ciao, a.

 indici interessati, per poi rifarli a colonna alterata.
il problema è di farlo da VB, con DAO...
Ciao
Faber

 il problema è di farlo da VB, con DAO...
faberuccio mio, mi costringi a tirare fuori il caro manualone cartaceo di
vb4, e l'altrettanto caro hlp. nei chm di vb6 ancora mi ci perdo.
ho cercato di mettere l'essenziale, ma mi sto addormentando ( ops ! lo dico
io a te ! gaffe ! :)e non ne sono sicuro. d'altra parte i non db-isti del ng
penso ne abbiano gia' abbastanza cosi'...
se non lo trovi, e se hai una casella capiente, ti mando il vb.hlp. 3.85,
2.7 in zip.
dimmi tu.
ciao, a.
nb: direi parli sempre di access.
---> eliminazione di un indice:
Dim MyDB As Database, MyTableDef As TableDef, MyIndex As Index
' Apre il database.
Set MyDB = Workspaces(0).OpenDatabase("BIBLIO.MDB")
Set MyTableDef = MyDB.TableDefs("Editori") ' Imposta TableDef.
Set MyIndex = MyTableDef.CreateIndex("Nome autore")
Set MyField = MyIndex.CreateField("Autore")
MyIndex.Fields.Append MyField ' Aggiunge Field a Index.
MyRsDef.Indexes.Append MyIndex ' Aggiunge Index a TableDef.
'[nota pal: interessante l'entrata in scena di un myrsdef non dimmato. mi
auguro una svista per mytabledef]
...
MyRsDef.Indexes.Delete "Nome autore" ' Elimina Index.
---> aggiunta di un indice a una tabella
Dim MyDB As Database, Fd As Field
Const dbText = 10 ' Imposta la costante relativa al tipo di campo.
Set MyDB = Workspaces(0).OpenDatabase("BIBLIO.MDB")  ' Apre un database.
Fd.Name = "Telefono" ' Imposta le proprietà per il campo.
Fd.Type = dbText
Fd.Size = 15
MyDB.TableDefs("Autori").Fields.Append Fd ' Aggiunge il campo all'insieme.
---> eliminazione di una colonna:
Insiemi:  Il metodo Delete consente di eliminare un oggetto fisso. Se,
tuttavia, si tratta di un insieme Databases, Recordsets o Workspaces,
archiviato solo in memoria, è possibile rimuovere un oggetto aperto o attivo
chiudendolo con il metodo Close.
L'eliminazione di un oggetto memorizzato viene eseguita immediatamente. È
comunque possibile utilizzare il metodo Refresh per qualsiasi altro insieme
che possa risentire delle modifiche apportate alla struttura del database.
L'eliminazione di un oggetto TableDef dall'insieme TableDefs comporta
l'eliminazione della definizione della tabella e dei dati in essa contenuti.
Nella tabella che segue sono indicate alcune limitazioni all'utilizzo del
metodo Delete. L'oggetto indicato nella prima colonna contiene l'insieme
indicato nella seconda. Nella terza colonna è indicato se e quando è
possibile eliminare un oggetto dall'insieme specificato. Non è possibile, ad
esempio, eliminare un oggetto Container dall'insieme Containers di un
oggetto Database.
Oggetto Insieme Quando è possibile utilizzare il metodo Delete
DBEngine Workspaces Mai. Utilizzare il metodo Close
Workspace Databases Mai. Utilizzare il metodo Close
Database Containers Mai
Database Recordsets Mai. Utilizzare il metodo Close
Container Documents Mai
Index Fields Per i nuovi oggetti che non sono mai stati aggiunti al database
QueryDef Fields Mai
QueryDef Parameters Mai
Recordset Fields Mai
Relation Fields Per i nuovi oggetti che non sono mai stati aggiunti al
database
TableDef Fields Per i nuovi oggetti che non sono mai stati aggiunti al
database oppure quando la proprietà Updatable dell'oggetto TableDef è
impostata su True
TableDef Indexes Per i nuovi oggetti che non sono mai stati aggiunti al
database oppure quando la proprietà Updatable dell'oggetto TableDef è
impostata su True
Database, Field, Index, QueryDef, TableDef Properties Quando la proprietà è
definita dall'utente
---> aggiunta di una colonna
Il metodo Append consente di aggiungere una nuova tabella ad un database,
oppure un campo a una tabella o a un indice.
L'oggetto aggiunto diventa un oggetto fisso che rimarrà memorizzato su disco
finché non verrà eliminato utilizzando il metodo Delete. Se si tratta di un
insieme Workspaces, archiviato solo in memoria, l'oggetto rimarrà attivo
finché non verrà rimosso utilizzando il metodo Close.
L'aggiunta di un nuovo oggetto viene eseguita immediatamente. È comunque
possibile utilizzare il metodo Refresh per qualsiasi altro insieme a cui
siano state applicate le modifiche apportate alla struttura del database.
Se l'oggetto che si desidera aggiungere non è completo (ovvero, ad esempio,
se non sono stati aggiunti oggetti Field ad un insieme Fields prima che
questo venga aggiunto a sua volta ad un insieme Indexes) o se le proprietà
impostate in uno o più oggetti subordinati non sono corrette, il metodo
Append genererà un errore intercettabile. Se, ad esempio, viene specificato
un tipo di campo non valido e quindi si cerca di aggiungere l'oggetto Field
all'insieme Fields di un oggetto TableDef, verrà generato un errore
intercettabile.
Nella tabella che segue vengono indicate alcune limitazioni all'utilizzo del
metodo Append. L'oggetto riportato nella prima colonna contiene l'insieme
indicato nella seconda colonna. Nella terza colonna viene indicato se è
possibile aggiungere un oggetto all'insieme specificato. Non è possibile, ad
esempio, aggiungere un oggetto Container all'insieme Containers di un
oggetto Database.
Oggetto Insieme Quando è possibile utilizzare il metodo Append
Workspace Databases Mai. Utilizzare il metodo OpenDatabase
Database Containers Mai
Database Recordsets Mai. Utilizzare il metodo OpenRecordset
Container Documents Mai
Index Fields Quando Index è un oggetto nuovo che non è mai stato aggiunto
QueryDef Fields Mai
QueryDef Parameters Mai
Recordset Fields Mai
Relation Fields Mai
TableDef Fields Quando la proprietà Updatable dell'oggetto TableDef è
impostata su True
TableDef Indexes Quando la proprietà Updatable dell'oggetto TableDef è
impostata su True
Database, Field, Index, QueryDef, TableDef Properties Quando l'oggetto
Database, Field, Index, QueryDef o TableDef è un oggetto fisso