2009-07-20 7 views
0

Я унаследовал приложение наследие VB6 поддерживать, и моя vb6 больше, чем немного ржавый ...Изменить DAO DBEngine DataTable от DataType dbInteger к dbLong в VB6

У меня DAO таблицы, что было поле типа DAO.DataTypeEnum.dbInteger, которое необходимо изменить для типа DAO.DataTypeEnum.dbLong. Есть ли способ для установки этого нового типа данных в виде ярлыка vb6 и сохранения существующих значений, или мне нужно создать временный столбец для хранения данных, затем удалить и воссоздать столбец с новым типом данных, а затем перенести данные вручную?

+0

Это автоматический «обновить» инструмент, а не один раз задача – BrianH

ответ

1

Если это одноразовое задание, вы можете открыть базу данных Access и изменить тип данных.
Добавить комментарий к этому сообщению, в противном случае.

EDIT: Вы можете оформить заявление ALTER на объект базы данных

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

Это автоматический «обновить» инструмент, а не 1 раз задача – BrianH

+0

Смотрите, если выше ответ помогает. – shahkalpesh

+0

+ для SQL DDL :) – onedaywhen

2

Shahkalpesh's answer это хорошо, если ваш двигатель базы данных поддерживает ALTER TABLE ALTER COLUMN. Если вы используете механизм базы данных Access (Jet .mdb, ACE .accdb и т. Д.), Вы можете использовать ALTER COLUMN, когда в ANSI-92 Query Mode (Jet 4.0 и Access 2002 и далее).

В прошлом я делал это так, используя код. Код ниже преобразует поле строки в double с плавающей запятой без использования 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"