Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Добрый день! Подскажите возможные пути решения следующей задачи: 1.Имеется некая база в файле DBF. Структура таблиц заранее не известна. Нужно перегнать ее в Oracle. 2. В Oracle Forms нужно создать интерфейс администратора к этой базе, позволяющий редактировать все поля во всех таблицах (каких именно заранее не известно). Т.е. формы генерятся динамически. Это возможно сделать средствами Oracle? Или все-таки нужно искать другие пути? Все должно работать под Linux. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 17:14 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Сделать, конечно, можно. Только вот что делать? По п.1 "Перенос БД". Как планируется осуществить перенос из DBF в Oracle? Для этой задачи Forms не нужен вообще. Ручками, только ручками переносить. При этом требуется детальная проработка (возможно переработка) структуры БД и схемы хранения. По п. 2 "Редактирование любых полей любых таблиц с заранее неопределенными структурами". Так может для этой задачи пользоваться не Forms, а каким-нибудь PL/SQL Developer'ом или SQL Navigator. Они для этой задачки подходят идеально и программировать ничего не надо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 17:43 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
По пункту номер 2: Теоретически можно зделать на формс... Блок должен быть основан на From clause query Создать на фоме грид с 100 или сколько нужно полей Динамически генерить запрос типа (select * from твоя_таблица) Код: plaintext 1. 2. 3. Узнать сколько полей в таблице (ALL_TAB_COLUMNS или DBA_TAB_COLUMNS), зделать видимими. Можно также из ALL_TAB_COMMENTS или DBA_TAB_COMMENTS вытянуть коменты и их присвоить Промтам... И так далее... зависит от фантазии... --- Ну ты заходи ежели чё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2005, 18:48 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Спасибо "Двоюшник" Пытаюсь реализовать по вашему совету: Задаю дата блок вручную при помощи визарда на From clause query на триггере вешаю New_Instance_Form пытаюсь прописать свойства дата блока Когда запускается форма Событие New_Instance_Form не успевает сработать И выдается ошибка FRM-41380: Cannot set blocks query data source..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 11:53 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Check the form and make sure that the specified block is not a control block and the block status is new. А какая версия Формсов? --- Ну ты заходи ежели чё... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 12:47 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Попробуй сделать не визардом, а ручками. Создаешь блок, ставишь свойство "Query Data Source Type" в "From clause query". В поле "Query Data Source Name" прописываешь запрос. Поле "DML Data Target Name" сбрось в Null. Потом в блоке ручками создай поля (Items) одноименные со столбцами результирующего набора запроса. У полей свойство "Database Item" д.б. "Yes". Если хочешь программно изменять запрос для блока, то сначала надо его очистить Clear_Block, потом задать запрос Set_Block_Property('BLOCKNAME',QUERY_DATA_SOURCE_NAME,vQuery), потом выполнить его. Порядок именно такой. Режим очистки задаешь по задачке. Если блок основан на запросе, то тебе надо будет писать собственные методы вставки, обновления и удаления данных. Про это отдельно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 13:49 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Tolmachov DmitiryЕсли блок основан на запросе, то тебе надо будет писать собственные методы вставки, обновления и удаления данных. Про это отдельно... Если запрос вида "select * from your_table" то собственные методы вставки, обновления и удаления данных писать не надо. В свойстве DML Data Target Type -> Table и будет тебе счастье :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 14:30 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
To Двоюшник: Точно. Для простых запросов это подходит. А вот когда уже начинаются соединения таблиц, то уже нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2005, 17:50 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за помощь. Но проблема осталась... В Runtime выполняем Set_Block_Property('BLOCKNAME',QUERY_DATA_SOURCE_NAME,vQuery), выдается ошибка FRM-41380: Cannot set blocks query data source Вот это получается >Попробуй сделать не визардом, а ручками. Создаешь блок, ставишь свойство "Query Data Source Type" в "From clause query". В поле "Query Data Source Name" прописываешь запрос. Поле "DML Data Target Name" сбрось в Null. Потом в блоке ручками создай поля (Items) одноименные со столбцами результирующего набора запроса. У полей свойство "Database Item" д.б. "Yes". А здесь он выдает ошибку >Если хочешь программно изменять запрос для блока, то сначала надо его очистить Clear_Block, потом задать запрос Set_Block_Property('BLOCKNAME',QUERY_DATA_SOURCE_NAME,vQuery), потом выполнить его. Порядок именно такой. Режим очистки задаешь по задачке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2005, 15:23 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Привожу код, который работает: Код: plaintext 1. 2. 3. 4. Всё как я объяснял выше. Для уверенности рекомендую элементы управления, которые рулят содержимым блока, размещать в отдельном блоке. P.S. Обрати внимание, что запрос находится в скобках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2005, 16:55 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Воспользовался вашими советами и вроде у меня тоже получилось динамически заполнить даннами Text Item'ы!!! Запрос простой выборка из одной таблицы типа select TerminalId, TerminalName from terminals. Хочу что бы у меня обновления данных происходило автоматически без написания хранимых процедур. Выставляю у блока DML Data Target Type - Table. Forms хотят что бы был выставлен Primary Key. Выставляю у одного из полей свойство Primary Key в YES. Но вот когда я пытаюсь внести изменения или внести новую запись у меня выбрасывает такую ошибку FRM-40501: ORACLE error: unable to reserve record for update or delete. Какие варианты дальнейшего развития ситуации? Мне придеться писать процедуры на обновление и добавление записей или все таки я что то упустил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2005, 14:29 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
4uBaKFRM-40501: ORACLE error: unable to reserve record for update or delete. Какие варианты дальнейшего развития ситуации? Мне придеться писать процедуры на обновление и добавление записей или все таки я что то упустил? На блоке создай триггер ON-LOCK TEXT = Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 11:30 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
to Kovalchuk Vitaly Спасибо получилось. Теперь я могу изменять данные в Text Item'ах, но вот при попытке Commit_form выбрасывает такую ошибку. FRM-40509: ORACLE error: unable to UPDATE record. В хелпе про нее написано что она выскакивает если такая таблица не существует(это не верно. Таблица присутствует), пользователь не имеет прав на работу с ней(тоже не верно. Таблица создана под этим пользователем) и т.д. Что за засада за засадой?? Как это побороть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 13:17 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Эту ошибка может возникать из-за кучи причин. После ее появления нажми Shift+F1 для получения более подробной информации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 14:44 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
LiliaДобрый день! Подскажите возможные пути решения следующей задачи: 1.Имеется некая база в файле DBF. Структура таблиц заранее не известна. Нужно перегнать ее в Oracle. 2. В Oracle Forms нужно создать интерфейс администратора к этой базе, позволяющий редактировать все поля во всех таблицах (каких именно заранее не известно). Т.е. формы генерятся динамически. Это возможно сделать средствами Oracle? Или все-таки нужно искать другие пути? Все должно работать под Linux. Спасибо В заголовке файла DBF в первый 200-200 байтах описана его структура. Это можно прочитать и пропарсить. Затем можно создать с вариантами а) динамически - таблица БД оракле. и динамический форма - где много полей в рекорде - которые динамически отображат данные строки. б) деревянный интерфейс - когда в форме делается элемент htree в котором исключительно за счет SQL формируется дерево узлов, где узел = имена таблиц , подузел = имя поля, строка узла = значение поля. Тогда надо будет иметь в форме всего Одно (или четыре) айтема для редактирования содержимого поля...бр-р-р ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 15:27 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
UK0IAIВ заголовке файла DBF в первый 200-200 байтах описана его структура. Это можно прочитать и пропарсить. Брррр. Oracle OCA /Open Client Adapter/ + MS ODBC драйвер. Правда EXEC_SQL.DESCRIBE_COLUMN работало с ошибкой на 1-ой колонке, ее просто не замечало. В Forms 6.0, возможно в последних патчах исправили. Структура таблиц заранее не известна. Делать на чем угодно, только не на Форм. IMHO. Если нужно забивать гвозди - взять молоток, Forms для этого не лучшее средство. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 16:08 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Tolmachov DmitiryЭту ошибка может возникать из-за кучи причин. После ее появления нажми Shift+F1 для получения более подробной информации При нажатие Shift+F1 вот что пишет засранец. UPDATE Select * from dual SET test=:1 WHERE ROWID=:2 Во первых я прописал программно свойство Query Data Source Name свой запрос - (select * from terminals) Select * from dual это перевоначально в Design Mode прописал иначе выдает ошибку FRM-41380: Cannot set blocks query data source при попытке программно изменить это свойство. Так что я упустил? Судя по сообщениям в данном топике мне достаточно было выставить свойство DML Data Target Type -> Table и было бы у меня счастье :)) Почему оно до меня еще не дошло ? Не соображу ни как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 16:11 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
4uBaK Tolmachov DmitiryЭту ошибка может возникать из-за кучи причин. После ее появления нажми Shift+F1 для получения более подробной информации При нажатие Shift+F1 вот что пишет засранец. UPDATE Select * from dual SET test=:1 WHERE ROWID=:2 Во первых я прописал программно свойство Query Data Source Name свой запрос - (select * from terminals) Select * from dual это перевоначально в Design Mode прописал иначе выдает ошибку FRM-41380: Cannot set blocks query data source при попытке программно изменить это свойство. Так что я упустил? Судя по сообщениям в данном топике мне достаточно было выставить свойство DML Data Target Type -> Table и было бы у меня счастье :)) Почему оно до меня еще не дошло ? Не соображу ни как. По моему ещё надо сделать так Set_Block_Property(blk1,DML_DATA_TARGET_NAME,'terminals') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 18:48 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
4uBaKВо первых я прописал программно свойство Query Data Source Name свой запрос - (select * from terminals) .... выставить свойство DML Data Target Type -> Table и было бы у меня счастье Почему Table, еслу ты делаеш блок на запросе? Если блок на запросе DML Data Target Type должен быть "FROM clause query". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 19:00 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Sorry ошибся, невнимательно посмотрел пред. посты :=(. Kovalchuk Vitaly V правильно сказал! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 19:02 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Мда-а-а-а... И последнее... А блин как прописать программно значение Column Name для Text Item? Иначе то смысл теряется в динамическом построение форм. Есть способы программной привязки text item'ов к полям таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 23:55 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
4uBaKМда-а-а-а... И последнее... А блин как прописать программно значение Column Name для Text Item? Иначе то смысл теряется в динамическом построение форм. Есть способы программной привязки text item'ов к полям таблицы? процедуры COPY и NAME_IN - в хелпе примеры - позволяют программно задавать имена айтемов для чтения/записи в них валуе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 08:43 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev UK0IAIВ заголовке файла DBF в первый 200-200 байтах описана его структура. Это можно прочитать и пропарсить. Брррр. Oracle OCA /Open Client Adapter/ + MS ODBC драйвер. Правда EXEC_SQL.DESCRIBE_COLUMN работало с ошибкой на 1-ой колонке, ее просто не замечало. В Forms 6.0, возможно в последних патчах исправили. Структура таблиц заранее не известна. Делать на чем угодно, только не на Форм. IMHO. Если нужно забивать гвозди - взять молоток, Forms для этого не лучшее средство. Я говорил про ...шлюз к DBF - когда DBF есть произвольный файл. И мы читая заголовок - можем выкинуть в интерфейс имена полян. И на затем автомате прочитать с DBF то что нужно. 100% универсально. Затем , на лету, можно создавать таблицы в ОРАКЛЕ и к ним делать формы. Для задач администрирования - достаточно иметь доступ все к одной строке, а не к гриду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 08:48 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
UK0IAI 4uBaKМда-а-а-а... И последнее... А блин как прописать программно значение Column Name для Text Item? Иначе то смысл теряется в динамическом построение форм. Есть способы программной привязки text item'ов к полям таблицы? процедуры COPY и NAME_IN - в хелпе примеры - позволяют программно задавать имена айтемов для чтения/записи в них валуе Нужно не задавать имена айтемов, а привязывать их к полям ( Свойство Column Name). Это две разных весчи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 11:58 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Задавать имена полей (Name property) в блоке , а также Column Name, программно нельзя! В этом вся и загвоздка. Можно накидать в блок полей типа key, value1, value2 и т.д., выполнять запрос типа Select id as key, fio as value1 from person. Но тогда отвалиться процесс обновления, так как форма будет пытаться выполнить команду Update person Set value1 = <...> вместо Update person Set fio = <...>. Поэтому в этой ситуации можно предложить в качестве возможного решения написать триггер ON-UPDATE, в котором, используя динамический SQL, обновлять поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 12:52 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
Tolmachov DmitiryЗадавать имена полей (Name property) в блоке , а также Column Name, программно нельзя! В этом вся и загвоздка. Можно накидать в блок полей типа key, value1, value2 и т.д., выполнять запрос типа Select id as key, fio as value1 from person. Но тогда отвалиться процесс обновления, так как форма будет пытаться выполнить команду Update person Set value1 = <...> вместо Update person Set fio = <...>. Поэтому в этой ситуации можно предложить в качестве возможного решения написать триггер ON-UPDATE, в котором, используя динамический SQL, обновлять поля. Да-а-а-а... На это я вчера наткнулся.. Блин грустно :( Придется корячиться и писать процедуры на вставки и обновления :(( Абидна.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 14:16 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
4uBaK Tolmachov DmitiryЗадавать имена полей (Name property) в блоке , а также Column Name, программно нельзя! В этом вся и загвоздка. Можно накидать в блок полей типа key, value1, value2 и т.д., выполнять запрос типа Select id as key, fio as value1 from person. Но тогда отвалиться процесс обновления, так как форма будет пытаться выполнить команду Update person Set value1 = <...> вместо Update person Set fio = <...>. Поэтому в этой ситуации можно предложить в качестве возможного решения написать триггер ON-UPDATE, в котором, используя динамический SQL, обновлять поля. Да-а-а-а... На это я вчера наткнулся.. Блин грустно :( Придется корячиться и писать процедуры на вставки и обновления :(( Абидна.. тут нет ничего сложного (в дбф-е всего 4 типа данных). Поэтому, данные одной строки всегда могут быть помещены в одномерный массив символьного типа. Поэтому все что вам нужно - это сделать свой "переходник" что при чтении строки из БД (ораклы уже) сразу помещает их в одномерный символьный массив. (в динамическом sql - этакий парсер свой) И ваша задача - в Формсе - научиться демострировать "ячейки" массива в соотвествущих Айтемах, имеющих тупую нотацию ...типа фиелд_1, фиелд_2.... где индекс в имени фиелда совпадает с номером элемента массива. Тут то и используются функции copy и name_in... при момощи которых можно все в три строки цикла - все перегонять все валуе. После этого, у вас будет обратнаяч задача - считать айтемы (в цикле) и запихать валуе в другой одномерный массив. И уже изх него - в динамическом SQL реализовать процедуру update/insert. Все надо знать для этого - структуры таблицы БД из словарей. Мы (давно) делали эту тему - наши условия ЕЩЕ хуже были...пришлось строить Генератор БД, что генерил спец_листинги включенные в модули как инклюды. И все компилировалось. А потом - САМО все работало - универсальный доступ к данным любой таблицы БД в универсальном интерфейсе. В Оракле - все легче, ибо есть динамич SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 16:06 |
|
||
|
Oracle Forms
|
|||
|---|---|---|---|
|
#18+
что мне видно занятся было нечем :-) ....вот скрипт что читает данные любой таблицы и выводит их на экран . В моем случае я жестко прописал имя табло = SYS.ALL_TABLES Код: plaintext 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. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. ЗАПУС ПРОЦЕДУРЫ В PL/SQL DEVELOPOER В ОКНЕ ТЕСТА Begin -- Call the procedure tst_sql; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2005, 18:44 |
|
||
|
|

start [/forum/topic.php?all=1&fid=51&tid=1879366]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 257ms |
| total: | 395ms |

| 0 / 0 |
