Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
|

start [/forum/topic.php?fid=51&msg=33183797&tid=1879366]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
134ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 266ms |
| total: | 497ms |

| 0 / 0 |
