powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / SetItemStatus при изменении Key поля
14 сообщений из 14, страница 1 из 1
SetItemStatus при изменении Key поля
    #33100562
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в следуюущем:
1) DW retrieve и строки получают NotModified!
2) Меняю ключевое поле (указано как KeyColumns в Specify Update Properties) через setitem и строка меняет статус на DataModified!
3) Меняю статус этого ключевого поля на NotModified!
dw.SetItemStatus( row, columnkey, Primary!, NotModified! )
и статус строки меняется как NotModified!

Не ясно изменения статуса в третьем пункте... я же меняю статус поля а не строки, а при этом меняется статус всех остальных полей с DataModified! на NotModified!

То что мне нужно достигается дополнительным
dw.SetItemStatus( row, 0, Primary!, DataModified! )
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33100602
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что не ясно то?
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33102068
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не ясен пункт 3. Почему при изменении статуса ПОЛЯ на NotModified! статус всей строки меняется на NotModified!
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33102175
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что это было ЕДИНСТВЕННОЕ измененное поле в строке и при смене статуса его на NotModified! нет смысла строке быть DataModified! Более того, то что вы принудительно меняете статус строке на DataModified! не даст вам желаемого эффекта - выполняемый Update будет пустым, т.е. ни одного поля в секции set field = <value> не будет до тех пор, пока вы не присвоите значения каким-либо столбцам или не смените статус этих СТОЛБЦОВ на DataModified!.
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33102187
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
E-docПотому что это было ЕДИНСТВЕННОЕ измененное поле в строке и при смене статуса его на NotModified! нет смысла строке быть DataModified! Более того, то что вы принудительно меняете статус строке на DataModified! не даст вам желаемого эффекта - выполняемый Update будет пустым, т.е. ни одного поля в секции set field = <value> не будет до тех пор, пока вы не присвоите значения каким-либо столбцам или не смените статус этих СТОЛБЦОВ на DataModified!.

О! все понял... действительно единственное.
А вот насчет того что не будет иметь эффекта изменение статуса строки на
DataModified!, тут вы не правы... эффект есть (без изменения любого знаяения или статуса каждого столбца).
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33103813
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СотниковА вот насчет того что не будет иметь эффекта изменение статуса строки на DataModified!, тут вы не правы... эффект есть (без изменения любого знаяения или статуса каждого столбца). Странно... И какой эффект в данном случае? Update проходит? Как он выглядит если смотреть его в событии sqlpreview?
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33104866
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Послу установки на строку DataModify. Update есть и формируется по всем полям перечисленным при вызове StoredProcedure на Update
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33106295
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как значит... Вообще-то вы не говорили что для Update используется StoredProcedure. :)) Для простых SQL-Update'ов он не генерируется. Для процедурного Update видимо все совсем иначе. Тогда можно пару вопросов?

Если в процедуру передаются значения для всех полей, то как вы разбираете их в процедуре для Update на старые и новые значения - используете двойной набор параметров?

Как вы рассматриваете ситуации если значение в каком-то поле не поменялось? Все равно его присваиваете? В этом случае наверно могут быть ложные срабатывания триггеров на after update, если есть проверки на имя столбца.
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33106948
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
E-docВот как значит... Вообще-то вы не говорили что для Update используется StoredProcedure. :)) Для простых SQL-Update'ов он не генерируется. Для процедурного Update видимо все совсем иначе. Тогда можно пару вопросов?


Извините, просто я с самого начала работал только со SP, а не напрямую с таблицами, поэтому я просто не знал что может быть такие отличия в генерации Update, но я прочитал Хелп и понял что если работать на прямую, то сам Update генрится если строка DataModified!, а поля в этом для Update генерятся только для тех, которые DataModified! ;-) Правильно? Просто со SP это не так ж-)

E-doc
Если в процедуру передаются значения для всех полей, то как вы разбираете их в процедуре для Update на старые и новые значения - используете двойной набор параметров?


В процедуру можно передавать значения не всех полей, это определяется набором входных параметров в процедуру и указывается соответствие в коне настройки Update SP.
Я немного не понял что значит разбирать на старые/новые.
Процедура принимает входные параметры - это те данные, на которые нужно изменить значения. А в самой процедре пишется стандартный Update.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  update FACE set
    id_type_face            = @id_type_face,
    name_first              = @name_first,
    name_second             = @name_second,
    name_otchest            = @name_otchest
  where
    id_face = @id_face

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

E-doc
Как вы рассматриваете ситуации если значение в каком-то поле не поменялось? Все равно его присваиваете? В этом случае наверно могут быть ложные срабатывания триггеров на after update, если есть проверки на имя столбца.


Да так и делается... если любое значение в строке изменилось, то в процедуре идет Update по всем полям.
Мы вообще не используем триггеры, это не принцип, это необходимость, возникшая для проведения выемки из одной базы данных и подкачка их в другую... при этом в подкачиваемой базе триггеры только мешают, можно и отключать, но мы выбрали такой способ.
Все, что нужно делать в триггерах, прекрасно реализуется всё в тех же процедурах, на вставку, изменение или удаление.
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33107200
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СотниковЯ немного не понял что значит разбирать на старые/новые. Я не совсем понятно выразился, наверно. Например, для реализации варианта истории изменений, когда фиксируется старое и новое значение на смену значения конкретного поля таблицы при простом Update можно было бы вешать триггер с условием для этого поля таблицы. Как быть в случае с процедурой? Тут надо или сравнивать значение с тем, что уже есть в таблице или иметь два параметра - для нового и старого значения, чтобы иметь возможность их сравнить.
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33107307
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
E-doc СотниковЯ немного не понял что значит разбирать на старые/новые. Я не совсем понятно выразился, наверно. Например, для реализации варианта истории изменений, когда фиксируется старое и новое значение на смену значения конкретного поля таблицы при простом Update можно было бы вешать триггер с условием для этого поля таблицы. Как быть в случае с процедурой? Тут надо или сравнивать значение с тем, что уже есть в таблице или иметь два параметра - для нового и старого значения, чтобы иметь возможность их сравнить.

Думаю не только, но и по вашему варианту тоже все работать будет, то есть можно:
1) "сравнивать значение с тем, что уже есть в таблице", только можно это делать не дя каждого поля, а сразу скопом для нужных полей в одной процедуре,
2) "иметь два параметра - для нового и старого значения"
3) повесить триггер на ДО Update, и сравнивать нужные значения полей в нем?
Код: plaintext
1.
2.
  select @name_first_old = deleted.name_first from deleted
  
  select @name_first = inserted.name_first from inserted
и если сравнение не пройдет генерить статистику на изменение, все равно же триггер на Update выполниться в любом случае, хоть вы обновляете все поля и ли хотя бы одно.
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33107385
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СотниковПроцедура принимает входные параметры - это те данные, на которые нужно изменить значения. А в самой процедре пишется стандартный Update.
То есть тупо молча перезаписываем изменения поверх, даже если другой пользователь поменял данные пока мы пялились на resultset и вбивали новые значения. Зашибись - никаких тебе "Запись была изменена другим пользователем".
И зачем только эти умники из Sybase/Powersoft придумали использовать старые значения в условии Where Проще надо быть
А то напридумывают каких-то optimistic concurrency control scheme...
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33107495
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрей СотниковПроцедура принимает входные параметры - это те данные, на которые нужно изменить значения. А в самой процедре пишется стандартный Update.
То есть тупо молча перезаписываем изменения поверх, даже если другой пользователь поменял данные пока мы пялились на resultset и вбивали новые значения. Зашибись - никаких тебе "Запись была изменена другим пользователем".
И зачем только эти умники из Sybase/Powersoft придумали использовать старые значения в условии Where Проще надо быть
А то напридумывают каких-то optimistic concurrency control scheme...

ПОЛНОСТЬЮ с вами согласен.
НО в нашем случае добаление данных (почти только этим и занимаются), а также изменений (не так много операций) занимается отдельный отдел, остальным нужны выборки... и так сложилось что у нас задача с concurrency не стоит.
...
Рейтинг: 0 / 0
SetItemStatus при изменении Key поля
    #33107505
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда Сразу вопрос к Андрею. Как организовать concurrency используя SP, это на будущее просто ж-)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / SetItemStatus при изменении Key поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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