2009-07-20 9 views
0

Ich habe ein Vermächtnis VB6 app zu halten geerbt, und meine VB6 ist mehr als nur ein wenig rostig ...ändern DAO DBEngine Datatable der Spalte von Datentyp dbInteger zu dbLong in VB6

Ich habe eine DAO Tabelle Kapiert hatte ein Feld vom Typ DAO.DataTypeEnum.dbInteger, das geändert werden muss, um DAO.DataTypeEnum.dbLong zu schreiben. Gibt es eine Möglichkeit, diesen neuen Datentyp zu verwenden und die vorhandenen Werte beizubehalten, oder muss ich eine temporäre Spalte zum Speichern der Daten erstellen, dann die Spalte mit dem neuen Datentyp entfernen und neu erstellen und dann die Daten manuell migrieren?

+0

Dies ist eine automatisierte „Upgrade“ Werkzeug, nicht eine einmalige Aufgabe – BrianH

Antwort

1

Wenn dies ein einmaliger Auftrag ist, können Sie die Access-Datenbank öffnen und den Datentyp ändern.
Fügen Sie sonst einen Kommentar zu diesem Post hinzu.

EDIT: Sie könnten eine ALTER-Anweisung auf das Datenbankobjekt Ausgabe

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

Dies ist eine automatisierte „Upgrade“ Werkzeug, kein 1mal Aufgabe – BrianH

+0

Prüfen Sie, ob die oben genannte Antwort hilft. – shahkalpesh

+0

+ für SQL DDL :) – onedaywhen

2

Shahkalpesh's answer Ordnung ist, wenn Sie Ihre Datenbank-Engine ALTER TABLE ALTER COLUMN unterstützt. Wenn Sie das Access-Datenbankmodul (Jet .mdb, ACE .accdb usw.) verwenden, können Sie ALTER COLUMN in ANSI-92 Query Mode (Jet 4.0 und Access 2002 ab) verwenden.

In der Vergangenheit habe ich es so ganz durch Code gemacht. Der folgende Code konvertiert ein Zeichenfolgenfeld zu einem Gleitkommadoppel, ohne ALTER COLUMN zu verwenden. Es erstellt ein neues Feld mit einem anderen Namen und dem richtigen Datentyp, kopiert die Daten, löscht das ursprüngliche Feld und benennt das neue Feld in den ursprünglichen Namen um. Sie könnten dies leicht anpassen, um integer zu long zu machen.

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"