Форум: "Базы";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];
ВнизПереопределить условие на значение (Delphi, ADO, Access) Найти похожие ветки
← →
Николай2008 (2008-10-16 15:08) [0]Здравствуйте!
Возникла проблема. Есть БД 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...
Спасибо.
← →
stas © (2008-10-16 15:23) [1]Я конечно могу ошибаться, но такие действия просто так неделаются.
Нужно так:
1. Создать таблицу с идентичной структурой, но уже с новым ValidationRule
2. Наполнить ее из старой
3. Удалить старую
4. переименовать новую в такое же имя как старая.
← →
sniknik © (2008-10-17 11:36) [2]> P.S. Условие добавлялось именно через конструктор таблиц в Access, а не через Alter table add constraint...
получается добавил правило поля, а меняешь констраинт...
до собственно значений поля через sql не доберешься. имхо. может и есть способ конечно, но... (кроме дефаултного значение, это насколько помню совпадает)
как работать со значением ValidationRule через объекты есть в справке, на бейсике правда. встань на "условия на значение" у поля в аксесс да нажми F1.
но вообще можно проще, чем "опускаться до объектов", просто "пересоздать" поле, т.е. Alter table alter column ...
в новом, правила в поле не должно быть (гарантий не даю. не пробовал), данные пострадать не должны. после сделать нормальный констраинт с другим условием.
и с этого момента работать только через Alter table add constraint...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c