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

Вниз

FB SQL проблема с изменением данных   Найти похожие ветки 

 
Труп Васи Доброго ©   (2005-11-28 14:26) [0]

Привет всем живущим!
Стыдно спрашивать, но чего то я дико торможу.
Простая вроде бы задача: не допустить одновременного появления в одном поле разных записей таблицы более одного определённого значения.
Пример: В таблице есть поле, в котором может быть или 0 или 1, количество записей с нулями не ограничено, а вот единица должна быть только одна. При появлении новой единице на месте старой ставится 0. Вот, собственно и всё.
Я естественно засунул это дело в триггер примерно такого содержания:
CREATE TRIGGER MYTABLE_BIU0 FOR MYTABLE
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
begin
 if (new.activ = "1") then
  begin
    update MYTABLE set MYTABLE.activ="0" where (MYTABLE.activ="1");
  end
end

Однако при вставке/изменении происходит ошибка: Too many concurrent executions of the same request.
Как бы это решить?


 
Труп Васи Доброго ©   (2005-11-28 14:34) [1]

Опаньки.. ещё никто не ответил???
Народ, мне срочно надо.


 
Дмитрий_Б ©   (2005-11-28 14:54) [2]

А если так:

update MYTABLE set MYTABLE.activ="0" where (MYTABLE.activ="1") and
    MYTABLE.id <> new.id


 
Труп Васи Доброго ©   (2005-11-28 14:59) [3]

Дмитрий_Б ©   (28.11.05 14:54) [2]
А если так:

Смысла никакого нет, при смене 0 на 0 он вообще должен триггер мимо ушей пропустить!
Хрень какая то! Всё просто обязано работать!


 
wicked ©   (2005-11-28 15:03) [4]


> Простая вроде бы задача: не допустить одновременного появления
> в одном поле разных записей таблицы более одного определённого
> значения.
> Пример: В таблице есть поле, в котором может быть или 0
> или 1, количество записей с нулями не ограничено, а вот
> единица должна быть только одна. При появлении новой единице
> на месте старой ставится 0. Вот, собственно и всё.

предлагаю пересмотреть логику хранения данных - модель не должна допускать излишеств и аномалий данных....
вот, собственно, и всё....


 
Sergey13 ©   (2005-11-28 15:11) [5]

2Труп Васи Доброго ©   (28.11.05 14:26)
Попробуй индекс на это поле повесить.


 
Труп Васи Доброго ©   (2005-11-28 15:19) [6]

Всем спасибо! Нашёл!
Правильный мой триггер! Просто не надо ничего делать по пьяни! Оказалось что я на выходных уже впендюрил такой же триггер, только на апдейт, вот они и грызлись между собой.
Ну идиот, извиняюсь за беспокойство.

wicked ©   (28.11.05 15:03) [4]
предлагаю пересмотреть логику хранения данных

От это ты что-то умное зарядил! Куда уж проще и без излишеств - все нули и одна единица!


 
wicked ©   (2005-11-28 15:27) [7]

> Труп Васи Доброго ©   (28.11.05 15:19) [6]

> От это ты что-то умное зарядил! Куда уж проще и без излишеств
> - все нули и одна единица!

спорить не буду, так как не знаю ПО.... но даже без этого знания вижу способ получше, чем
> все нули и одна единица

но...... каждый грызет свои кактусы по своему....


 
КаПиБаРа ©   (2005-11-29 05:41) [8]

Труп Васи Доброго ©   (28.11.05 15:19) [6]
От это ты что-то умное зарядил! Куда уж проще и без излишеств - все нули и одна единица!


Вариант: хранить в таблице ID активного элемента.



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
2-1133467887
sedot
2005-12-01 23:11
2005.12.18
Работа с текстовыми файлами


2-1133172693
Dilman
2005-11-28 13:11
2005.12.18
Пример работы с DLL


14-1132830130
TUser
2005-11-24 14:02
2005.12.18
Берем Аляску?


2-1133252752
sapsi
2005-11-29 11:25
2005.12.18
Одна таблица- 2 грида


4-1129315283
Jetus
2005-10-14 22:41
2005.12.18
Скриншот в файл на чистом API?