31.08.2006, 13:03 | #1 |
Участник
|
overwriteSystemfields
Возникла необходимость изменять значения полей "modifiedDate", "modifiedTime" и "modifiedBy" в записи. Столкнулся с такой проблемой: изменения входят в силу, только если в записи, кроме перечисленных выше полей изменяется и какое-либо из несистемных полей, в противном случае - изменений не происходит.
Можете что-нибудь посоветовать? Спасибо. |
|
31.08.2006, 13:07 | #2 |
Участник
|
Ну заведи полечко свое и меня его...какие проблем :-)
__________________
любитель портвейна и снов с прокисшей капустой в усах |
|
31.08.2006, 13:09 | #3 |
Участник
|
Да вот изменять другие поля не нужно.
А заводить для этих целей отдельное поле, мне кажется, не целесообразным. |
|
31.08.2006, 14:02 | #4 |
Участник
|
Правильно делают, что не меняются. Иначе какой смысл с них?
Если я себе закажу 3 машины, а в строке заказа поменяю modifiedby на соседа, то все нормально, да? Создайте такие поля, как вам нужно, и меняйте их, а системные оставьте системе. |
|
31.08.2006, 14:17 | #5 |
Гость
|
Цитата:
Сообщение от tricky
Да вот изменять другие поля не нужно.
А заводить для этих целей отдельное поле, мне кажется, не целесообразным. |
|
31.08.2006, 14:26 | #6 |
Участник
|
Нет, ну, если нужно туда подтягивать значения, которые и так бы туда подтянулись, то просто можно изменить значение какого-то поля этой таблицы - любого, сохранив перед этим пред. значение, а потом изменить его назад.
Только, ИМХО, это изврат |
|
31.08.2006, 14:29 | #7 |
Участник
|
Первый вариант, обновлять системное поле напрямую в базе данных :
Connection connection = new Connection(); Statement stmt = connection.createStatement(); str sql; ; sql = strfmt("UPDATE table1 " + " SET recId = 3 " + " WHERE table1.RecId = 2 AND " + " table1.dataAreaId = '%1' ", curext()); stmt.executeUpdate(sql); |
|
31.08.2006, 14:34 | #8 |
Модератор
|
Кстати, имхо, они у вас и не обновлялись совсем. Просто при модификации поля они формировались заного, с текущим значением даты и времени.
Возможно и так, проверьте. С Уважением, Георгий |
|
31.08.2006, 14:35 | #9 |
Участник
|
и второй вариант использование метода "overwriteSystemFields"
Table2 table2; ; ttsbegin; select forupdate firstonly table2; table2.overwriteSystemfields(true); table2.(fieldNum(table2, modifiedBy)) = "абр"; table2.doUpdate(); ttscommit; |
|
|
За это сообщение автора поблагодарили: tricky (1). |
31.08.2006, 14:36 | #10 |
Участник
|
второй наверно предпочтительней
|
|
31.08.2006, 15:28 | #11 |
Участник
|
2 George Nordic: Нет, они обновляются (видно в дебУгере), только после Upate изменений нет. К тому же, если я для компании изменняю какое-нить другое поле, то все Ок.
2 poul: 2-й вариант не годится, т.к. именно так я поступаю. Идея 1-го варианта интересна, но что-то мне подсказывает, что это не гибкое решение. Однако, спасибо! |
|
31.08.2006, 15:38 | #12 |
Участник
|
Цитата:
Сообщение от tricky
2-й вариант не годится, т.к. именно так я поступаю.
|
|