Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > смена типа поля


Автор: z-END 7.4.2005, 14:46
Можно как-нить програмным путем (не через DBD) у таблицы Paradox в которой содержатся данные, сменить тип поля ID(primary key) с типа integer на тип AutoInc?

Автор: Vit 7.4.2005, 16:20
Способ первый: Запустить запрос Alter Table
Способ второй: Прямой вызов функций BDE

Автор: z-END 8.4.2005, 13:52
Цитата(Vit @ 7.4.2005, 17:20)
Запустить запрос Alter Table

а можно поподробней я просто никогда не работал с данным оператором.. как это осушествляется?

Автор: DimW 8.4.2005, 14:37
Допустим в TABEL_NAME есть поле FIELD_NAME у которого тип CHAR.

Изменяем тип этого поля на INTEGER:

ALTER TABLE TABEL_NAME MODIFY (FIELD_NAME INTEGER);

Автор: z-END 8.4.2005, 15:00
тобишь мине надо так:ALTER TABLE MyTable MODIFY (ID AUTOINC); ?
просто дельфей нет под рукой, проверить не могу.

Автор: DimW 8.4.2005, 15:15
я незнаю типов СУБД Paradox, если есть AUTOINC то ставь его.
главное чтобы титы не противоречили друг другу, вернее данные прежнего типа данным нового.

Автор: Vit 8.4.2005, 15:39
В BDE есть файл localsql.hlp - там синтаксис SQL описан

Автор: z-END 8.4.2005, 15:49
Vit я б судовольствием так и поступил, только вот нет у меня этой хэлпы, в поиске че-то нашел там тож предлагают какой-то файл из Doc\ прочитать, у меня там тож пусто..
По этому и спраишваю ибо прочитать негде.

Автор: Vit 8.4.2005, 17:43
Вот он!

Автор: DimW 11.4.2005, 13:04
Цитата
ALTER TABLE TABEL_NAME MODIFY (FIELD_NAME INTEGER);


А что это не прокатило?
Я же проверял, все уменя изменилось, но только на Paradox я не проверял...

Автор: Петрович 11.4.2005, 18:33
Цитата(DimW @ 11.4.2005, 14:04)
А что это не прокатило?

Точно не скажу, но насколько я помню, под BDE на локальных таблицах (включая PARADOX) такое не прокатит. Но, давно с такими таблицами не работал. Могу и ошибиться.

Автор: DimW 12.4.2005, 08:47
Цитата
на локальных таблицах (включая PARADOX) такое не прокатит


Да, действительно не прокатило... и под ADO тоже самое.... smile

Автор: bursa 12.4.2005, 14:50
Cоздать таблицу со структурой как в начальной таблице, но с измененым типом поля, затем переносить записи с проверкой соответствия типов, затем удалять первоначальную таблицу, переименовывать и переиндексировать новую.

Автор: Петрович 12.4.2005, 16:39
Цитата(bursa @ 12.4.2005, 15:50)
Cоздать таблицу со структурой как в начальной таблице, но с измененым типом поля, затем переносить записи с проверкой соответствия типов, затем удалять первоначальную таблицу, переименовывать и переиндексировать новую.

Можно и в одной таблице:
- добавляешь новое поле нового типа
- копируешь в него содержимое старого
- удаляешь старое

Если нужно сохранить имя поля, то еще раз повторяешь это операцию.

Иногда так удобнее, когда на таблицу навешено много всяких тригеров, ограничений, индексов и внешних ключей.

Автор: z-END 12.4.2005, 16:41
раз с sql не вышло, хотелось бы с помощью вот энтого:
Цитата(Vit @ 7.4.2005, 17:20)
Прямой вызов функций BDE


Автор: bursa 13.4.2005, 07:30
Цитата
- удаляешь старое

Только в тех базах, где можно удалить поле

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)