Tables

1.35 Come si possono modificare via codice le proprietà dei campi di tabella? (2)
  Alessandro Baraldi

Quando manualmente si modificano le proprietà di un campo di una tabella, Access esegue durante questa operazione alcune azioni:
- Aggiunge un nuovo campo con le proprietà richieste
- Copia i dati dal campo originale al nuovo campo
- Elimina il vecchio campo

Per questo se si vuole effettuare questa operazione via codice si deve effettuare la stessa sequenza di operazioni.
Quì trovate un demo di funzione che tramite predicato SQL esegue questo.
Purtroppo ci sono proprietà che via SQL non possono essere modificate per questo motivo è obbligatorio appoggiarsi a DAO (come in questo caso per rinominare il campo).
Sub sChangeField(strTableName As String, strFieldName As String, strFieldType As String)
    Dim db As DAO.Database
    Dim strSQL As String
    Set db = CurrentDb
'   Aggiunge il Nuovo Campo nella Tabella con un Nome Temporaneo(TempField)
    strSQL = "ALTER TABLE [" & strTableName & "] ADD COLUMN [TempField] " & strFieldType & ";"
    db.Execute strSQL
'   Copia i Dati dal Campo Esistente al Nuovo
    strSQL = "UPDATE DISTINCTROW [" & strTableName & "] SET [" & strFieldName & "]=[TempField];"
    db.Execute strSQL
'   Elimina il Vecchio campo
    strSQL = "ALTER TABLE [" & strTableName & "] DROP COLUMN [" & strFieldName & "];"
    db.Execute strSQL
'   Rinomina il Nuovo Campo con il nome del campo esistente
    db.TableDefs(strTableName).Fields("TempField").Name = strFieldName
    Set db = Nothing
End Sub
La Sub sChangeField() può essere richiamata nel seguebte modo:
Call sChangeField("tblName","fldName","TEXT(100)")
Come già accennato precedentemente, nella Sub sChangeField() si fa riferimento alla libreria Microsoft DAO quindi, se si usa una versione di Access successiva ad Access 97, è necessario aggiungere tale libreria ai riferimenti del database.
Se, sempre tramite DAO, si ha la necessità di aggiungere altre proprietà e/o attributi al nuovo campo, vedere quanto realizzato con il codice VBA pubblicato nella Sezione Tables del Sito Comune nella FAQ di Enrico Oemi intitolata 1.9 Modificare la struttura dati del BE via codice, direttamente dal FE.

Nota di Giorgio Rancati
Quanto scritto sopra è necessario solo se si usa Access 97; se si ha invece una versione di Access >= 2000 è sufficiente un Alter Column, come fra l'altro indicato nella KB Microsoft nell'articolo 275561:

Description of the new features that are included in Microsoft Jet 4.0 Modifying existing tables
http://support.microsoft.com/default.aspx?scid=kb;en-us;275561

Ovvero:
Currentdb.Execute "Alter Table NomeTabella Alter Column NomeCampo Datetime"
ovviamente i dati nel tipo di campo testo devono rispettare il formato Data.


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.