| Tables |
| 1.2 Come si possono modificare via codice le proprietà dei campi di tabella? (1) |
| Stefano Bettini |
|
(D) Come si possono modificare via codice le proprietà (Nome, Dimensioni, Tipo di Dati, ecc.) dei campi di tabella? (R) Purtroppo la gestione diretta delle proprietà DAO dei campi di tabella non è possibile, poichè tali proprietà diventano di sola lettura una volta che l' oggetto (field) risulta acodato (salvato) all'insieme cui appartiene. L' escamotage per uscire dall' impiccio è utilizzare un campo temporaneo di appoggio; è sufficiente accodarlo alla tabella, copiarci il contenuto del vecchio campo, eliminare il vecchio campo, rinomimare il nuovo ed accodarlo all' insieme. Di seguito una semplice funzione che tramite istruzioni DDL permette di modificare il tipo di dati di un campo di tabella; adattare la funzione in modo da poter modificare altre proprietà DAO dovrebbe essere piuttosto semplice per chiunque.
Function AlterFieldType(Tbl As String, Fld As String, NewType As String) As Boolean
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim ris As Boolean
On Error GoTo AlterFieldType_ERR
ris = True
Set db = CurrentDb()
' Creazione QueryDef temporaneo
Set qdf = db.CreateQueryDef("", "Select * from MSysObjects")
' Aggiunta campo temporaneo a tabella
qdf.SQL = "ALTER TABLE " & Tbl & " ADD COLUMN tmpCampo " & NewType
qdf.Execute
' Copia il contenuto del vecchio campo sul nuovo
qdf.SQL = "UPDATE DISTINCTROW " & Tbl & " SET tmpCampo = " & Fld
qdf.Execute
' Elimina il vecchio campo
qdf.SQL = "ALTER TABLE " & Tbl & " DROP COLUMN " & Fld
qdf.Execute
' Rinomina il campo temporaneo come il vecchio campo
db.TableDefs(Tbl).Fields("tmpCampo").Name = Fld
GoTo FineFunc
AlterFieldType_ERR:
ris = False
FineFunc:
AlterFieldType = ris
End Function
NOTA La funzione di cui sopra fa riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97, è necessario aggiungere al database i riferimenti a Microsoft DAO 3.6 Object Library. |