Снять not null constraint

Bab
Дата: 21.12.2011 08:36:15
Hi All
Есть таблица, в ней есть not null поле. Внешние условия поменялись и ограничение not null более не актуально. Как отменить это ограничение программно.
До кучи поле индексированное и участвует во внешних связях.
Если иметь под рукой Access - дело десяти секунд - в конструкторе в комбобоксе выбираем "обязательное - нет" - и все чудесно. Проблема в том, что клиент - далеко и акцеса у него нет и покупать его для десятисекундного дела клиент не будет. Отсюда и обязательное требование к программности отмены ограничения - надо написать патчер базы.
Имея некоторый опыт разработки я полагаю, что то, что можно сделать через гуёвый интерфейс можно сделать и программно, но вот никак у меня что-то не получается.
Решил пойти обходным путём: удаляю индексы искомого поля, удаляю ограничения по внешним связям, добавляю "временное" поле без ограничения not null, переношу данные из искомого поля во временное, удаляю искомое поле, создаю искомое поле заново но без ограничения, переношу данные из временного столбца в новое искомое, создаю индексы и теперь надо бы восстановить внешние связи, но тут крах - ошибка синтаксиса alter table на on update!
Итого, две проблемы:
1) как программно удалить ограничение not null столбца;
или
2) как программно добавить внешний ключ с каскадным обновлением/удалением.
Ответ на любой из этих вопросов решит мою проблему.
qwerty112
Дата: 21.12.2011 08:55:33
Bab,

1
5513072
только там NOT NULL - а вам нужно NULL
Bab
Дата: 21.12.2011 09:14:57
qwerty112,

Анатолий ( Киев )
изменить это свойство ALTER COLUMN не умеет. Только удалить и снова добавить поле.
mds_world
Дата: 21.12.2011 09:19:45
Bab
qwerty112,

Анатолий ( Киев )
изменить это свойство ALTER COLUMN не умеет. Только удалить и снова добавить поле.

Но там же есть и другая подсказка
Currentdb.TableDefs("UnMoveableProperty").Fields("reg_num").Required = False 
Bab
Дата: 21.12.2011 09:26:33
Currentdb.TableDefs("UnMoveableProperty").Fields("reg_num").Required = False 

Я видел.
Но не понимаю, куда ее засунуть во внешнее приложение, которое должно изменить базу.
qwerty112
Дата: 21.12.2011 09:27:51
Bab
qwerty112,

Анатолий ( Киев )
изменить это свойство ALTER COLUMN не умеет. Только удалить и снова добавить поле.

прыкольно ... ))

с NULL на NOT NULL - меняет (проверил)
currentproject.Connection.Execute "alter table T alter column Item varchar(50) not null" 

а наоборот - нет ... .. как так ?
alvk
Дата: 21.12.2011 09:47:37
qwerty112,

логически должно быть как раз наоборот.
mds_world
Дата: 21.12.2011 09:50:03
Bab
Currentdb.TableDefs("UnMoveableProperty").Fields("reg_num").Required = False 

Я видел.
Но не понимаю, куда ее засунуть во внешнее приложение, которое должно изменить базу.

Dim db as database
Set db = DBEngine(0).OpenDatabase("c:\МояБД.mdb")
db.TableDefs("МояТаблица").Fields("МоеПоле").Properties("Required") = False
Bab
Дата: 21.12.2011 12:47:18
Dim db as database
Set db = DBEngine(0).OpenDatabase("c:\МояБД.mdb")
db.TableDefs("МояТаблица").Fields("МоеПоле").Properties("Required") = False

DAO?
полином
Дата: 21.12.2011 13:00:40
установить для поля свойство
DefaultValue