Измените столбец DAO DBEngine DataTable с DataType dbInteger на dbLong в VB6

Я унаследовал устаревшее приложение VB6 для поддержки, и мой VB6 более чем ржавый...

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

2 ответа

Решение

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

РЕДАКТИРОВАТЬ: Вы можете выполнить оператор ALTER для объекта базы данных

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

Ответ Шахкалпеша хорош, если ваш движок базы данных поддерживает ALTER TABLE ALTER COLUMN. Если вы используете ядро ​​базы данных Access (Jet .mdb, ACE .accdb и т. Д.), Вы можете использовать ALTER COLUMN в режиме запросов ANSI-92 (Jet 4.0 и Access 2002 и далее).

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