-
Здравствуйте! Возникла проблема. Есть БД Access, программа на Дельфи, работающая с ней через ADO. Все было нормально, программа эксплуатируется в нескольких местах. Однако, возникла следующая необходимость, как всегда заказчики не додумали, хтя времени и вопросов было много):
В одной из таблиц БД существует столбец, на который в Access (через конструктор таблиц) было установлено проверочное условие на значение, например Between 1 and 100. Сейчас это условие расширилось до Between 1 and 300. Базы находятся в разных городах в количестве более 15ти. Самый лучший способ модификации - (делал так с добавлением столбца в таблицу) - в exe программы встраиваю скрипт, который проверяет есть ли столбец и, если нет, то добавляет его с помощью Alter table add column.... Перечень столбцов таблиц при этом (для первичной проверки) вытаскиваю с помощью AdoConnection.OpenSchema(...)
НО при попытке убить таким образом условие на значение - ValidationRule (см. выше) происходит затык. При подключении БД той же командой AdoConnection.OpenSchema(...) вытаскиваю имена всех constraints. Нахожу там свою. Вижу, что Access создал для нее имя типа [имя столбца].ValidationRude, например, [test].ValidationRule. Далее через ADO пытаюсь убить это условие: alter table test1 drop constraint [имя столбца].ValidationRule (пробовал вариант и со скобками, и без)
Результат - ошибка синтаксиса SQL. Подскажите, правильный ли я способ использую для того, чтобы из своей программы уничтожить условие на значение или задача в такой постановке не решается? Access 2003, MSDN пока не помог
P.S. Условие добавлялось именно через конструктор таблиц в Access, а не через Alter table add constraint... Спасибо.
-
Я конечно могу ошибаться, но такие действия просто так неделаются. Нужно так: 1. Создать таблицу с идентичной структурой, но уже с новым ValidationRule 2. Наполнить ее из старой 3. Удалить старую 4. переименовать новую в такое же имя как старая.
-
> P.S. Условие добавлялось именно через конструктор таблиц в Access, а не через Alter table add constraint... получается добавил правило поля, а меняешь констраинт... до собственно значений поля через sql не доберешься. имхо. может и есть способ конечно, но... (кроме дефаултного значение, это насколько помню совпадает) как работать со значением ValidationRule через объекты есть в справке, на бейсике правда. встань на "условия на значение" у поля в аксесс да нажми F1.
но вообще можно проще, чем "опускаться до объектов", просто "пересоздать" поле, т.е. Alter table alter column ... в новом, правила в поле не должно быть (гарантий не даю. не пробовал), данные пострадать не должны. после сделать нормальный констраинт с другим условием. и с этого момента работать только через Alter table add constraint...
|