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 SubLa 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. |