запрет редактирования
запрет редактирования
народ помогите реализовать триггер - надо запретить редактировать
поле NAME если поле ID равно отределенному значению,к примеру 0
и показался месадж типа "низзя"
пасиб
поле NAME если поле ID равно отределенному значению,к примеру 0
и показался месадж типа "низзя"
пасиб
Код: Выделить всё
if (old.ID = 0) then
if (old.NAME != new.NAME) then
exception myexcept 'низзя';
ИМХО, такие проверки лучше сразу делать на клиенте, просто выключая редактирование соответствующих полей.
WildSery
У меня фиксированій справочник и меняться будет токо одно поле и то не для асех записей
пасиб за ответ.
я пока ждал реализовал так
AS
begin
if ((new.KOD_GRYPU=0) or (old.KOD_GRYPU=1) or (old.KOD_GRYPU=4) or (old.KOD_GRYPU=7) or (old.KOD_GRYPU=10)) then
begin
exception ZAPRET_RED;
new.byhchet=old.byhchet; - токо не уверен нужна ли ета строка
end
end
У меня фиксированій справочник и меняться будет токо одно поле и то не для асех записей
пасиб за ответ.
я пока ждал реализовал так
AS
begin
if ((new.KOD_GRYPU=0) or (old.KOD_GRYPU=1) or (old.KOD_GRYPU=4) or (old.KOD_GRYPU=7) or (old.KOD_GRYPU=10)) then
begin
exception ZAPRET_RED;
new.byhchet=old.byhchet; - токо не уверен нужна ли ета строка
end
end
ясно.Пасиб всем.
Вопрос не по етой теме -
как реализовать прогресс выполнения процедуры - я на коиенте запустил процедуру и хочу видеть сикоко записей отработалось -
самый простой вариант в клиентском приложении показать какой-то
сплаш типа ждите, а вот как получать колво выполненных операций
для цыкла на клиентском приложении или в идеале как реализовать
прогрес на сервере?
Вопрос не по етой теме -
как реализовать прогресс выполнения процедуры - я на коиенте запустил процедуру и хочу видеть сикоко записей отработалось -
самый простой вариант в клиентском приложении показать какой-то
сплаш типа ждите, а вот как получать колво выполненных операций
для цыкла на клиентском приложении или в идеале как реализовать
прогрес на сервере?
kdv - а на сервере?, или токо через юдф?
Если не достал , еще такой вопрос - есть местер-датал табличка,
в детале история изменения по % как выбрать все записи мастера
и одну максимальную запись детайла,
такой запрос выдает две записи детайла - в нем две записи с различными датами
select m.NAME,MAX(d.DATA),d.PROC,m.BYHCHET from grupa m left join proc_grypu d on m.master_id=d.master_grypu
group by m.NAME,d.DATA,d.PROC,m.BYHCHET
Если не достал , еще такой вопрос - есть местер-датал табличка,
в детале история изменения по % как выбрать все записи мастера
и одну максимальную запись детайла,
такой запрос выдает две записи детайла - в нем две записи с различными датами
select m.NAME,MAX(d.DATA),d.PROC,m.BYHCHET from grupa m left join proc_grypu d on m.master_id=d.master_grypu
group by m.NAME,d.DATA,d.PROC,m.BYHCHET
Последний раз редактировалось Antarey 19 июн 2008, 14:33, всего редактировалось 1 раз.
что, блин, "на сервере"? сервер прогресс-бар будет крутить?
Твоя понимай, где сервера, а где клиента? и что "токо через юдф"?
Юдф достанет кочергу и будет бить клиента по заднице?
сервер на запрос клиента может че-то сделать и выдать обратно инфу, клиенту. Также сервер может думать и ничего не выдавать клиенту.
Процедура, которая что-то долго делает - это с точки зрения клиента "серверный думатель". Чтобы клиент не плакал, ожидаючи, можно симулировать вызов процедуры как обычный селект, который что-то периодически возвращает.
Например, как запрос, который мееееедленно возвращает циферки 1, 2, 3, 4...
Я тебе и привел пример - делаешь селективную процедуру, возвращающую числовую переменную. И т.д.
Твоя понимай, где сервера, а где клиента? и что "токо через юдф"?
Юдф достанет кочергу и будет бить клиента по заднице?
сервер на запрос клиента может че-то сделать и выдать обратно инфу, клиенту. Также сервер может думать и ничего не выдавать клиенту.
Процедура, которая что-то долго делает - это с точки зрения клиента "серверный думатель". Чтобы клиент не плакал, ожидаючи, можно симулировать вызов процедуры как обычный селект, который что-то периодически возвращает.
Например, как запрос, который мееееедленно возвращает циферки 1, 2, 3, 4...
Я тебе и привел пример - делаешь селективную процедуру, возвращающую числовую переменную. И т.д.
Сдаёццо мне, что сия долгодумающая процедура не мульён записей обрабатывает, а сотни две. И весь резалтсет пульнет бар-художнику в самом конце - сетевого пакета не наберёт Такшта не просто по select, а по select for update. И через правильные компоненты, которые его понимают. А лучше поправить консерваторию и пролетать она будет за секундуkdv писал(а):процедуру с возвращаемым значением (числом) и suspend.
которая будет периодически запихивать нечто в это число и вызывать suspend. Процедуру надо будет вызывать по select.
это не грубо. это так, с прибаутками
насчет запроса - запрос неправильный.
в group by надо убрать d.DATA. И вообще. Для понятности желательно
в селекте указывать сначала столбцы группировки, потом агрегатные функции.
типа
насчет запроса - запрос неправильный.
Код: Выделить всё
select m.NAME,MAX(d.DATA),d.PROC,m.BYHCHET
...
group by m.NAME,d.DATA,d.PROC,m.BYHCHET
в селекте указывать сначала столбцы группировки, потом агрегатные функции.
типа
Код: Выделить всё
select a, b, c, max(d), avg(e)
...
group by a, b, c
kdv
по твоему совету такой код
select m.NAME,m.BYHCHET,d.proc,MAX(d.DATA) from grupa m
left join proc_grypu d on m.master_id=d.master_grypu
group by m.NAME,m.BYHCHET,d.proc
но он мне показывает две записи из детайла ибо в нем разные даты
и соответственно разые %,если я убираю поле d.proc то да мне показывается одна дата а мне надо один % ну и желательно шоб я увидел дату его изменения
по твоему совету такой код
select m.NAME,m.BYHCHET,d.proc,MAX(d.DATA) from grupa m
left join proc_grypu d on m.master_id=d.master_grypu
group by m.NAME,m.BYHCHET,d.proc
но он мне показывает две записи из детайла ибо в нем разные даты
и соответственно разые %,если я убираю поле d.proc то да мне показывается одна дата а мне надо один % ну и желательно шоб я увидел дату его изменения