powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Oracle Forms
25 сообщений из 28, страница 1 из 2
Oracle Forms
    #33164244
Фотография Lilia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Подскажите возможные пути решения следующей задачи:
1.Имеется некая база в файле DBF. Структура таблиц заранее не известна.
Нужно перегнать ее в Oracle.
2. В Oracle Forms нужно создать интерфейс администратора к этой базе, позволяющий редактировать все поля во всех таблицах (каких именно заранее не известно). Т.е. формы генерятся динамически.
Это возможно сделать средствами Oracle? Или все-таки нужно искать другие пути? Все должно работать под Linux.
Спасибо
...
Рейтинг: 0 / 0
Oracle Forms
    #33164356
Фотография Tolmachov Dmitiry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделать, конечно, можно. Только вот что делать?
По п.1 "Перенос БД". Как планируется осуществить перенос из DBF в Oracle? Для этой задачи Forms не нужен вообще. Ручками, только ручками переносить. При этом требуется детальная проработка (возможно переработка) структуры БД и схемы хранения.
По п. 2 "Редактирование любых полей любых таблиц с заранее неопределенными структурами". Так может для этой задачи пользоваться не Forms, а каким-нибудь PL/SQL Developer'ом или SQL Navigator. Они для этой задачки подходят идеально и программировать ничего не надо!
...
Рейтинг: 0 / 0
Oracle Forms
    #33164509
Двоюшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По пункту номер 2:
Теоретически можно зделать на формс...
Блок должен быть основан на From clause query
Создать на фоме грид с 100 или сколько нужно полей

Динамически генерить запрос типа (select * from твоя_таблица)
Код: plaintext
1.
2.
3.
vQuery := '(select * from '|| vTable || ')';
Set_Block_Property('BLOCKNAME',QUERY_DATA_SOURCE_NAME,vQuery);
execute_query;

Узнать сколько полей в таблице (ALL_TAB_COLUMNS или DBA_TAB_COLUMNS), зделать видимими.
Можно также из ALL_TAB_COMMENTS или DBA_TAB_COMMENTS вытянуть коменты и их присвоить Промтам...

И так далее... зависит от фантазии...

---
Ну ты заходи ежели чё...
...
Рейтинг: 0 / 0
Oracle Forms
    #33175388
Фотография Lilia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо "Двоюшник"
Пытаюсь реализовать по вашему совету:

Задаю дата блок вручную при помощи визарда
на From clause query
на триггере вешаю New_Instance_Form
пытаюсь прописать свойства дата блока

Когда запускается форма
Событие New_Instance_Form не успевает сработать
И выдается ошибка FRM-41380: Cannot set blocks query data source.....
...
Рейтинг: 0 / 0
Oracle Forms
    #33175576
Двоюшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Check the form and make sure that the specified block is not a control block and the block status is new.

А какая версия Формсов?

---
Ну ты заходи ежели чё...
...
Рейтинг: 0 / 0
Oracle Forms
    #33175802
Фотография Tolmachov Dmitiry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй сделать не визардом, а ручками. Создаешь блок, ставишь свойство "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), потом выполнить его. Порядок именно такой. Режим очистки задаешь по задачке. Если блок основан на запросе, то тебе надо будет писать собственные методы вставки, обновления и удаления данных. Про это отдельно...
...
Рейтинг: 0 / 0
Oracle Forms
    #33175994
Двоюшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tolmachov DmitiryЕсли блок основан на запросе, то тебе надо будет писать собственные методы вставки, обновления и удаления данных. Про это отдельно...
Если запрос вида "select * from your_table" то собственные методы вставки, обновления и удаления данных писать не надо. В свойстве DML Data Target Type -> Table и будет тебе счастье :-)
...
Рейтинг: 0 / 0
Oracle Forms
    #33176672
Фотография Tolmachov Dmitiry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Двоюшник:

Точно. Для простых запросов это подходит. А вот когда уже начинаются соединения таблиц, то уже нет.
...
Рейтинг: 0 / 0
Oracle Forms
    #33178306
Фотография Lilia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за помощь.
Но проблема осталась...

В 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), потом выполнить его. Порядок именно такой. Режим очистки задаешь по задачке.
...
Рейтинг: 0 / 0
Oracle Forms
    #33178609
Фотография Tolmachov Dmitiry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привожу код, который работает:

Код: plaintext
1.
2.
3.
4.
go_block('DYNAMIC');
Clear_Block(no_validate);
Set_Block_Property('DYNAMIC',QUERY_DATA_SOURCE_NAME, 
'(select t.custno_, t.invoice_ from sav_i_e_dbf t)');
execute_query;

Всё как я объяснял выше. Для уверенности рекомендую элементы управления, которые рулят содержимым блока, размещать в отдельном блоке.

P.S. Обрати внимание, что запрос находится в скобках
...
Рейтинг: 0 / 0
Oracle Forms
    #33181235
4uBaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Воспользовался вашими советами и вроде у меня тоже получилось динамически заполнить даннами 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.

Какие варианты дальнейшего развития ситуации?
Мне придеться писать процедуры на обновление и добавление записей или все таки я что то упустил?
...
Рейтинг: 0 / 0
Oracle Forms
    #33182195
Kovalchuk Vitaly V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4uBaKFRM-40501: ORACLE error: unable to reserve record for update or delete.

Какие варианты дальнейшего развития ситуации?
Мне придеться писать процедуры на обновление и добавление записей или все таки я что то упустил?
На блоке создай триггер
ON-LOCK
TEXT =
Код: plaintext
1.
2.
begin
  null;
end;
Или вставь какой нибудь свой код для блокировки записи.
...
Рейтинг: 0 / 0
Oracle Forms
    #33182508
4uBaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Kovalchuk Vitaly
Спасибо получилось. Теперь я могу изменять данные в Text Item'ах, но вот при
попытке Commit_form выбрасывает такую ошибку.
FRM-40509: ORACLE error: unable to UPDATE record.
В хелпе про нее написано что она выскакивает если такая таблица не существует(это не верно. Таблица присутствует), пользователь не имеет прав на работу с ней(тоже не верно. Таблица создана под этим пользователем) и т.д.
Что за засада за засадой?? Как это побороть?
...
Рейтинг: 0 / 0
Oracle Forms
    #33182795
Фотография Tolmachov Dmitiry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту ошибка может возникать из-за кучи причин. После ее появления нажми Shift+F1 для получения более подробной информации
...
Рейтинг: 0 / 0
Oracle Forms
    #33182966
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LiliaДобрый день!
Подскажите возможные пути решения следующей задачи:
1.Имеется некая база в файле DBF. Структура таблиц заранее не известна.
Нужно перегнать ее в Oracle.
2. В Oracle Forms нужно создать интерфейс администратора к этой базе, позволяющий редактировать все поля во всех таблицах (каких именно заранее не известно). Т.е. формы генерятся динамически.
Это возможно сделать средствами Oracle? Или все-таки нужно искать другие пути? Все должно работать под Linux.
Спасибо

В заголовке файла DBF в первый 200-200 байтах описана его структура. Это можно прочитать и пропарсить. Затем можно создать с вариантами
а) динамически - таблица БД оракле. и динамический форма - где много полей в рекорде - которые динамически отображат данные строки.

б) деревянный интерфейс - когда в форме делается элемент htree в котором исключительно за счет SQL формируется дерево узлов, где
узел = имена таблиц ,
подузел = имя поля,
строка узла = значение поля.

Тогда надо будет иметь в форме всего Одно (или четыре) айтема для редактирования содержимого поля...бр-р-р
...
Рейтинг: 0 / 0
Oracle Forms
    #33183091
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UK0IAIВ заголовке файла DBF в первый 200-200 байтах описана его структура. Это можно прочитать и пропарсить.

Брррр. Oracle OCA /Open Client Adapter/ + MS ODBC драйвер. Правда EXEC_SQL.DESCRIBE_COLUMN работало с ошибкой на 1-ой колонке, ее просто не замечало. В Forms 6.0, возможно в последних патчах исправили.

Структура таблиц заранее не известна.
Делать на чем угодно, только не на Форм. IMHO. Если нужно забивать гвозди - взять молоток, Forms для этого не лучшее средство.
...
Рейтинг: 0 / 0
Oracle Forms
    #33183102
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 и было бы у меня счастье :))
Почему оно до меня еще не дошло ? Не соображу ни как.
...
Рейтинг: 0 / 0
Oracle Forms
    #33183552
Kovalchuk Vitaly V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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')
...
Рейтинг: 0 / 0
Oracle Forms
    #33183588
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4uBaKВо первых я прописал программно свойство Query Data Source Name
свой запрос - (select * from terminals)
....
выставить свойство DML Data Target Type -> Table и было бы у меня счастье

Почему Table, еслу ты делаеш блок на запросе? Если блок на запросе DML Data Target Type должен быть "FROM clause query".
...
Рейтинг: 0 / 0
Oracle Forms
    #33183595
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry ошибся, невнимательно посмотрел пред. посты :=(.

Kovalchuk Vitaly V правильно сказал!
...
Рейтинг: 0 / 0
Oracle Forms
    #33183797
4uBaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда-а-а-а...
И последнее... А блин как прописать программно значение Column Name для Text Item?
Иначе то смысл теряется в динамическом построение форм.
Есть способы программной привязки text item'ов к полям таблицы?
...
Рейтинг: 0 / 0
Oracle Forms
    #33183966
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4uBaKМда-а-а-а...
И последнее... А блин как прописать программно значение Column Name для Text Item?
Иначе то смысл теряется в динамическом построение форм.
Есть способы программной привязки text item'ов к полям таблицы?

процедуры COPY и NAME_IN - в хелпе примеры - позволяют программно задавать имена айтемов для чтения/записи в них валуе
...
Рейтинг: 0 / 0
Oracle Forms
    #33183976
Фотография UK0IAI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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% универсально. Затем , на лету, можно создавать таблицы в ОРАКЛЕ и к ним делать формы. Для задач администрирования - достаточно иметь доступ все к одной строке, а не к гриду.
...
Рейтинг: 0 / 0
Oracle Forms
    #33184486
4uBaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UK0IAI 4uBaKМда-а-а-а...
И последнее... А блин как прописать программно значение Column Name для Text Item?
Иначе то смысл теряется в динамическом построение форм.
Есть способы программной привязки text item'ов к полям таблицы?

процедуры COPY и NAME_IN - в хелпе примеры - позволяют программно задавать имена айтемов для чтения/записи в них валуе

Нужно не задавать имена айтемов, а привязывать их к полям ( Свойство Column Name). Это две разных весчи.
...
Рейтинг: 0 / 0
Oracle Forms
    #33184711
Фотография 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, обновлять поля.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Oracle Forms
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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