powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пометка поля на удаление
25 сообщений из 27, страница 1 из 2
Пометка поля на удаление
    #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
Пометка поля на удаление
    #39107845
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокМужики, че-та не соображу, подмогните, плз.
но сервак стопорится в отладчике с ошибкой "Column unknown" на строке c полем NEW.KIND_ACT_FLD

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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