Измените столбец DAO DBEngine DataTable с DataType dbInteger на dbLong в VB6 - PullRequest
0 голосов
/ 21 июля 2009

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

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

Ответы [ 2 ]

2 голосов
/ 21 июля 2009

Ответ Шахкальпеша хорошо, если ваш движок базы данных поддерживает ALTER TABLE ALTER COLUMN. Если вы используете ядро ​​базы данных Access (Jet .mdb, ACE .accdb и т. Д.), Вы можете использовать ALTER COLUMN в режиме ANSI-92 Query (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"
1 голос
/ 21 июля 2009

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

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

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