2009-07-20 59 views
0

我繼承遺產VB6應用程序維護,我的VB6比有點生疏更多...更改DAO用到dbengine DataTable的數據類型,從到dbInteger列dbLong在VB6

我有一個DAO表有一個DAO.DataTypeEnum.dbInteger類型的字段需要更改爲DAO.DataTypeEnum.dbLong類型。是否有快捷方式設置這種新數據類型並保留現有值的方式,還是需要創建一個臨時列來存儲數據,然後刪除並重新創建具有新數據類型的列,然後手動遷移數據?

+0

這是一個自動「升級」的工具,而不是一個一次性任務 – BrianH 2009-07-20 21:08:22

回答

1

如果這是一次性工作,您可以打開Access數據庫並更改數據類型。
添加評論到這個職位,否則。

編輯:如果你的數據庫引擎支持ALTER TABLE ALTER COLUMN可以發出數據庫對象

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

這是一個自動「升級」的工具,而不是1次任務 – BrianH 2009-07-20 21:09:02

2

Shahkalpesh's answer是罰款的ALTER語句。如果您使用Access數據庫引擎(Jet .mdb,ACE .accdb等),則可以在ANSI-92 Query Mode(Jet 4.0和Access 2002以上)中使用ALTER COLUMN。

在過去,我完全通過代碼完成它。下面的代碼將字符串字段轉換爲浮點型雙精度型,而不使用ALTER COLUMN。它使用不同的名稱和正確的數據類型創建新字段,複製數據,刪除原始字段,並將新字段重命名爲原始名稱。你可以很容易地適應這個做整數長。

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"