|
Как в Forms обновить запись?
|
|||
---|---|---|---|
#18+
Скажите, кто-нибудь решал в Forms такую задачу: если текущая строка формы была изменена хранимой процедурой, то дальше ее редактировать невозможно, пока Execute_query не выполнишь, иначе ошибка "Запись была изменена другим пользователем". Хочется обновить все поля в текущей строке (не делая Execute_query, т.к. обновятся и другие строки) каким-нибудь простым способом - но есть ли он? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2006, 16:33 |
|
Как в Forms обновить запись?
|
|||
---|---|---|---|
#18+
Mr_FrostСкажите, кто-нибудь решал в Forms такую задачу: если текущая строка формы была изменена хранимой процедурой, то дальше ее редактировать невозможно, пока Execute_query не выполнишь, иначе ошибка "Запись была изменена другим пользователем". Хочется обновить все поля в текущей строке (не делая Execute_query, т.к. обновятся и другие строки) каким-нибудь простым способом - но есть ли он? Есть. С некоторыми ограничениями. Для себя написал такую библиотечную функцию... Сейчас принцип опишу... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2006, 16:35 |
|
Как в Forms обновить запись?
|
|||
---|---|---|---|
#18+
Заготавливаю строку l_select:='select rowid'; 1. Пробегаюсь по блоку l_itm := Get_Block_Property(l_block,First_Item); while l_itm is not null loop 1.1 и если тип элемента Get_Item_Property(l_block||'.'||l_itm,ITEM_TYPE) среди TEXT ITEM,CHECKBOX,LIST,RADIO GROUP (остальные мне не нужно было) то его обрабатываем 1.2 Если поле базовое - обрабатываем, небазовые пропускаем. 1.3 нахожу, какое поле из таблицы ему соответствует l_col_name:=get_item_property(l_block||'.'||l_itm,column_name); Если пусто - значит имя элемента есть имя поля. 1.4 наращиваю строку l_select:=l_select||','||l_col_name; 1.5 конец цикла На выходе имею кусок селекта и запомненные (я не указал это) поля в списке полей с их типом (дата, число, строка). 2. завершаю строку l_select - определяю на какой таблице строится блок и делаю ограничения по rowid или каким-то еще известным характеристикам ИМЕННО НУЖНОЙ СТРОКИ. 3. Устанавливаю блоку set_block_property(l_block,LOCKING_MODE,DELAYED); (предварительно запомнив, что было), и если строка в статусе Query - ставлю ей Changed. Не помню для чего, но раз сделал, значит ломалось. Сам бы я это с нуля не стал писать. 4. Открываю курсор l_cursor := dbms_sql.open_cursor; 5. Парсю строку l_select для курсора l_cursor 6. Далее биндю все поля в соответствии с собранными. в п1. 7. выполняю курсор и фетчу строку. 8. Бегаю по собранным элементам блока и пихаю в них собранные значения. 9. Закрываю курсор 10. Восстанавливаю set_block_property(l_block,LOCKING_MODE,l_rest_lck); 11. Если нахожусь в обрабаываемом блоке, то выполняю execute_trigger('POST-QUERY'); Чтобы заполнились небазовые поля и прочая дребедень. 12. Ставлю строке статус query - мне так удобно. Это уже по обстоятельствам. Ограничения: как видно - работает только на таблицах, так как используется rowid. Но если подумать, возможно есть варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2006, 16:52 |
|
Как в Forms обновить запись?
|
|||
---|---|---|---|
#18+
Ок, спасибо, идею понял. Жаль, что у Формса нет встроенного чего-то подобного :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
21.04.2006, 16:59 |
|
Как в Forms обновить запись?
|
|||
---|---|---|---|
#18+
Mr_Frost, Спасибо большое!!!! Модератор: Тема перенесена из форума "Oracle". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2018, 11:46 |
|
Как в Forms обновить запись?
|
|||
---|---|---|---|
#18+
По мотивам Pamir, с некоторыми упрощениями, допущением, что ключ числовой из одного поля. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2019, 11:52 |
|
|
start [/forum/topic.php?fid=51&msg=39776101&tid=1877916]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
1141ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 1258ms |
0 / 0 |