2009-07-20 4 views
0

J'ai hérité d'une application VB6 héritage à maintenir, et mon VB6 est plus un peu rouillé ...changement DAO DBEngine la colonne DataTable de DataType dbInteger à dbLong dans VB6

J'ai une table de DAO avait un champ de type DAO.DataTypeEnum.dbInteger qui doit être modifié pour taper DAO.DataTypeEnum.dbLong. Existe-t-il un raccourci vb6 pour définir ce nouveau type de données et conserver les valeurs existantes ou dois-je créer une colonne temporaire pour stocker les données, puis supprimer et recréer la colonne avec le nouveau type de données, puis migrer les données manuellement?

+0

Ceci est un système automatisé « mise à niveau » outil, pas une tâche une seule fois – BrianH

Répondre

1

S'il s'agit d'un travail ponctuel, vous pouvez ouvrir la base de données Access et modifier le type de données.
Ajoutez un commentaire à cet article, sinon.

EDIT: Vous pouvez publier une déclaration sur l'objet ALTER de base de données

CurrentDb.Execute "ALTER TABLE myTable ALTER Column myIntegerColumn Long" 
+0

Ceci est un outil automatisé « mise à niveau », pas une tâche de temps 1 – BrianH

+0

Voir si la réponse ci-dessus aide. – shahkalpesh

+0

+ pour SQL DDL :) – onedaywhen

2

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" 
Questions connexes