Shahkalpesh's answer est très bien si votre moteur de base de données prend en charge ALTER TABLE ALTER COLUMN. Si vous utilisez le moteur de base de données Access (Jet .mdb, ACE .accdb, etc), vous pouvez utiliser ALTER COLUMN dans ANSI-92 Query Mode (Jet 4.0 et Access 2002 et versions ultérieures).
Dans le passé, je l'ai fait comme ça entièrement à travers le code. Le code ci-dessous convertit un champ de chaîne en un double flottant sans utiliser ALTER COLUMN. Il crée un nouveau champ avec un nom différent et le type de données correct, copie les données, supprime le champ d'origine et renomme le nouveau champ au nom d'origine. Vous pouvez facilement adapter cela pour faire des entiers longs.
Dim fld As DAO.Field
' Cant just change the type of an existing field. '
' Instead have to create the new field with a temporary name, '
' fill it with the required data, delete the old MyField field '
' and then rename the new field. The renaming has to be done '
' with DAO - cant do it through SQL '
' Add TEMP_MyField field: required double field. Will be renamed later '
sSQL = "ALTER TABLE MyTable " & _
"ADD COLUMN TEMP_MyField DOUBLE NOT NULL "
dbDatabase.Execute sSQL, dbFailOnError
' Copy the MyField values to the TEMP_MyField field '
sSQL = "UPDATE MyTable SET TEMP_MyField = CDbl(MyField)"
dbDatabase.Execute sSQL, dbFailOnError
' Delete the original MyField field (the text field) '
sSQL = "ALTER TABLE MyTable DROP COLUMN MyField"
dbDatabase.Execute sSQL, dbFailOnError
' Need to refresh the TableDefs to make sure new field shows up '
dbDatabase.TableDefs.Refresh
' Get a reference to the temporary MyField field we just created '
Set fld = dbDatabase.TableDefs("MyTable").Fields("TEMP_MyField")
' Rename it to the final name we want it to have '
fld.Name = "MyField"
Ceci est un système automatisé « mise à niveau » outil, pas une tâche une seule fois – BrianH