Конференция "Базы" » Переопределить условие на значение (Delphi, ADO, Access) [D7, access]
 
  • Николай2008 (16.10.08 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 © (16.10.08 15:23) [1]
    Я конечно могу ошибаться, но такие действия просто так неделаются.
    Нужно так:
    1. Создать таблицу с идентичной структурой, но уже с новым ValidationRule
    2. Наполнить ее из старой
    3. Удалить старую
    4. переименовать новую в такое же имя как старая.
  • sniknik © (17.10.08 11:36) [2]
    > P.S. Условие добавлялось именно через конструктор таблиц в Access, а не через Alter table add constraint...
    получается добавил правило поля, а меняешь констраинт...
    до собственно значений поля через sql не доберешься. имхо. может и есть способ конечно, но... (кроме дефаултного значение, это насколько помню совпадает)
    как работать со значением ValidationRule через объекты есть в справке, на бейсике правда. встань на "условия на значение" у поля в аксесс да нажми F1.

    но вообще можно проще, чем "опускаться до объектов", просто "пересоздать" поле, т.е. Alter table alter column ...
    в новом, правила в поле не должно быть (гарантий не даю. не пробовал), данные пострадать не должны. после сделать нормальный констраинт с другим условием.
    и с этого момента работать только через Alter table add constraint...
 
Конференция "Базы" » Переопределить условие на значение (Delphi, ADO, Access) [D7, access]
Есть новые Нет новых   [134477   +39][b:0][p:0]