Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.19;
Скачать: CL | DM;

Вниз

Переопределить условие на значение (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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
15-1242661994
Игорь
2009-05-18 19:53
2009.07.19
Delphi на русском


2-1243081532
@!!ex
2009-05-23 16:25
2009.07.19
Как сделать UDP Server работающий со всеми интерфейсами?


2-1243162261
Dr.Andrew
2009-05-24 14:51
2009.07.19
Как перевести на делфи строку int s=length/sizeof(short)?


2-1243158685
KiLLiR
2009-05-24 13:51
2009.07.19
Отображение времени в DBGrid (подгрузка из access)


15-1242723217
lincal
2009-05-19 12:53
2009.07.19
InstallShield Installation Information