我繼承遺產VB6應用程序維護,我的VB6比有點生疏更多...更改DAO用到dbengine DataTable的數據類型,從到dbInteger列dbLong在VB6
我有一個DAO表有一個DAO.DataTypeEnum.dbInteger類型的字段需要更改爲DAO.DataTypeEnum.dbLong類型。是否有快捷方式設置這種新數據類型並保留現有值的方式,還是需要創建一個臨時列來存儲數據,然後刪除並重新創建具有新數據類型的列,然後手動遷移數據?
我繼承遺產VB6應用程序維護,我的VB6比有點生疏更多...更改DAO用到dbengine DataTable的數據類型,從到dbInteger列dbLong在VB6
我有一個DAO表有一個DAO.DataTypeEnum.dbInteger類型的字段需要更改爲DAO.DataTypeEnum.dbLong類型。是否有快捷方式設置這種新數據類型並保留現有值的方式,還是需要創建一個臨時列來存儲數據,然後刪除並重新創建具有新數據類型的列,然後手動遷移數據?
如果這是一次性工作,您可以打開Access數據庫並更改數據類型。
添加評論到這個職位,否則。
編輯:如果你的數據庫引擎支持ALTER TABLE ALTER COLUMN可以發出數據庫對象
CurrentDb.Execute "ALTER TABLE myTable ALTER Column myIntegerColumn Long"
這是一個自動「升級」的工具,而不是1次任務 – BrianH 2009-07-20 21:09:02
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"
這是一個自動「升級」的工具,而不是一個一次性任務 – BrianH 2009-07-20 21:08:22