Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пометка поля на удаление / 25 сообщений из 27, страница 1 из 2
19.11.2015, 15:10
    #39107838
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Мужики, че-та не соображу, подмогните, плз.

Есть табля
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
--==========================

CREATE TABLE TEST_TBL (
    TEST_ID       INTEGER NOT NULL,
    KIND_ACT_FLD  VARCHAR(1) DEFAULT 'I' NOT NULL
);

--==========================
ALTER TABLE TEST_TBL ADD CHECK (UPPER(KIND_ACT_FLD) SIMILAR TO '[IUD]');


Нужно при попытке удаления в зависимости от условия Condition либо грохнуть запись, либо пометить "виртуальное" удаление и оставить ее живой.

Пытался в триггере BD,
Код: sql
1.
2.
3.
4.
5.
  IF (CONDITION) THEN
  BEGIN
    NEW.KIND_ACT_FLD = 'D';
    EXCEPTION A13_NONADMIN_CANT_DELETE_RECORD;
  END


но сервак стопорится в отладчике с ошибкой "Column unknown" на строке c полем NEW.KIND_ACT_FLD

Чую, не так и не там копаю. В поиске не нашел. Пните, плз, в нужном направлении.
=================
Док.

FB 2.5.2 26539, диалект 3, SS, Lazarus 1.5; FPC 2.7.1, UIB
...
Рейтинг: 0 / 0
19.11.2015, 15:15
    #39107845
pastor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
ДокМужики, че-та не соображу, подмогните, плз.
но сервак стопорится в отладчике с ошибкой "Column unknown" на строке c полем NEW.KIND_ACT_FLD

Чую, не так и не там копаю. В поиске не нашел. Пните, плз, в нужном направлении.


Поиск не может найти то чего нет. В частности, NEW.XXX в триггерах на удаление
...
Рейтинг: 0 / 0
19.11.2015, 15:18
    #39107850
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
pastor,

по сути вопроса есть, что сказать?
...
Рейтинг: 0 / 0
19.11.2015, 15:22
    #39107855
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Док,

он и сказал по сути, указал направление. :)
Смотри в old.
...
Рейтинг: 0 / 0
19.11.2015, 15:22
    #39107856
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Док, OLD.KIND_ACT_FLD?
...
Рейтинг: 0 / 0
19.11.2015, 15:24
    #39107859
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
ДокНужно при попытке удаления в зависимости от условия Condition либо грохнуть запись, либо пометить "виртуальное" удаление и оставить ее живой.

В триггере на таблицу ты этого не сможешь сделать
...
Рейтинг: 0 / 0
19.11.2015, 15:37
    #39107879
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Симонов Денис,

exception выкинуть?
...
Рейтинг: 0 / 0
19.11.2015, 15:48
    #39107890
Barmaley57
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Не, тут походу только на клиенте вместо delete делать update
...
Рейтинг: 0 / 0
19.11.2015, 16:00
    #39107903
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Barmaley57,
почему? Это точно останавливает удаление.
Если делать через ibdataset, то проще конечно через процедуру.
...
Рейтинг: 0 / 0
19.11.2015, 16:00
    #39107904
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
навесь на таблицу UPDATABLE VIEW.
работай через неё.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.11.2015, 16:02
    #39107907
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
wadman,

exception выкинуть без проблем, а вот сделать пометку (проапдейтить) вместо удаления нет. На клиенте конечно обработать можно, но есть риск что поймаешь не то исключение. Так что тут либо делать это удаление через ХП, либо писать VIEW где триггеры выполнят любую логику
...
Рейтинг: 0 / 0
19.11.2015, 16:57
    #39108006
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Док,
Ты не сможешь "отменить удаление" на сервере. И уже верно подсказали два варианта решения проблемы - либо не работать непосредственно с таблицей, а работать с view/sp и, например, в тригере BD вьюхи делать update твоей test_tbl (в большинстве случаев сам так делаю), либо же из клиентского приложения вместо delete делать update. IBX/FIB позволяют в свойстве DeleteSQL указать любой запрос, в том числе update вместо delete.
...
Рейтинг: 0 / 0
19.11.2015, 17:38
    #39108061
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
удаление заменить на установку флага "видимо"-"невидимо"
...
Рейтинг: 0 / 0
19.11.2015, 17:39
    #39108065
peter64
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
sorry, и проверять в триггере before update
...
Рейтинг: 0 / 0
19.11.2015, 23:22
    #39108381
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Barmaley57Док, OLD.KIND_ACT_FLD?
судя по мануалу, эта переменная RO

Симонов Денисесть риск что поймаешь не то исключение
имхо, от компонентов зависит. В дельфях я пользовал FIBErrorHandler. Пользовательские исключения дают GDSCode 335544517, а там уже отлавливал ErrorHandler.ExceptionNumber. Правда все исключения пришлось искусственно ранжировать, чтобы они не путались между собой.

Симонов Денисexception выкинуть без проблем, а вот сделать пометку (проапдейтить) вместо удаления нет.
точно, щас вспомнилось, что Хелен еще в первом издании писала, что при удалении в триггере можно апдейтить только чужую таблю.

Спасибо всем за идеи. Пойду думать и "пробывать" :)
...
Рейтинг: 0 / 0
20.11.2015, 09:43
    #39108568
afgm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Док, если таки прозрачно, то совет Мимопроходящего самый подходящий.
...
Рейтинг: 0 / 0
20.11.2015, 17:13
    #39109301
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
afgm,

читаю уже ... с вьюхами работать не приходилось...
...
Рейтинг: 0 / 0
20.11.2015, 17:23
    #39109314
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Докчитаю уже ... с вьюхами работать не приходилось...Не боись, "оне не кусаются". Зато штука зело полезная.
...
Рейтинг: 0 / 0
20.11.2015, 17:40
    #39109329
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Док, я извиняюсь, что встреваю в ваш великосветский
разговор и рекомендации бест-практик, но херню они
тебе советуют. В смысле, ты, всё равно согласишься и
заюзаешь, конечно, но таки Dixi et animam levavi.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.11.2015, 19:37
    #39109448
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
Гаджимурадов Рустам,

ты вводишь меня в смятение Ты бы что посоветовал?
...
Рейтинг: 0 / 0
20.11.2015, 19:52
    #39109468
ZeroMQ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
ДокГаджимурадов Рустам,

ты вводишь меня в смятение Ты бы что посоветовал?

У тебя вопрос чисто технического плана, но ведь решаешь ты логическую задачу. Которая, возможно, и не требует так вот "помечать запись на удаление".
Ты нам расскажи, что делаешь, а уж мы старательно тебе объясним, что ты неправ...
...
Рейтинг: 0 / 0
20.11.2015, 23:42
    #39109554
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
ZeroMQТы нам расскажи, что делаешь
Задача тривиальна: предотвратить физическое удаление записей из таблицы юзером, не имеющим на то полномочий. Сделать это на клиенте не составляет труда, но... Мне кажется правильнее реализовывать логику ограничений средствами сервера, конечно, если это возможно и не требует чрезмерных усилий.

Если вьюхи понравятся, пожалуй, на них и завяжусь.
...
Рейтинг: 0 / 0
21.11.2015, 01:49
    #39109582
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
ДокZeroMQТы нам расскажи, что делаешь
Задача тривиальна: предотвратить физическое удаление записей из таблицы юзером, не имеющим на то полномочий. Сделать это на клиенте не составляет труда, но... Мне кажется правильнее реализовывать логику ограничений средствами сервера, конечно, если это возможно и не требует чрезмерных усилий.

Если вьюхи понравятся, пожалуй, на них и завяжусь.
Задачи у всех, конечно, разные, но тем не менее.

У нас пользователь (любой) не может удалить из базы ничего. От слов "совсем" и "никогда". Везде при попытке удаления (в большинстве случаев - через вьюху, очень редко - из клиента) ставится deleted=1. И во всех выборках этот deleted учитывается.

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

И - да. Я тоже не понял Рустама. Хотя и латынь мы изучали, и гугло-переводчик никто не отменял.
...
Рейтинг: 0 / 0
21.11.2015, 02:00
    #39109583
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
ДокZeroMQТы нам расскажи, что делаешь
Задача тривиальна: предотвратить физическое удаление записей из таблицы юзером, не имеющим на то полномочий. Сделать это на клиенте не составляет труда, но... Мне кажется правильнее реализовывать логику ограничений средствами сервера, конечно, если это возможно и не требует чрезмерных усилий.

Если вьюхи понравятся, пожалуй, на них и завяжусь.
Ну, как бы, если пользователю не дать прав на удаление - то он и не сможет удалить. И следить за этим будет таки да, сервер. И ничего делать не надо, от слова совсем.
...
Рейтинг: 0 / 0
21.11.2015, 12:40
    #39109659
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пометка поля на удаление
YuRockДокпропущено...

Задача тривиальна: предотвратить физическое удаление записей из таблицы юзером, не имеющим на то полномочий. Сделать это на клиенте не составляет труда, но... Мне кажется правильнее реализовывать логику ограничений средствами сервера, конечно, если это возможно и не требует чрезмерных усилий.

Если вьюхи понравятся, пожалуй, на них и завяжусь.
Ну, как бы, если пользователю не дать прав на удаление - то он и не сможет удалить. И следить за этим будет таки да, сервер. И ничего делать не надо, от слова совсем.
+1, для этого есть роли и их права. Ну и логирование не помешает, чтоб знать кому руки потом оторвать. :)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пометка поля на удаление / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]