ошибка: FRM47337 Tree node label can not be null при выполнении скрипта DECLARE |
Файловый ввод/вывод в Oracle Forms
Файловый ввод/вывод в Oracle Forms
TEXT_IO - это пакет, который содержит набор процедур и функций для работы с файлами операционной системы. Нет смысла рассказывать о необходимости и полезности этого инструмента, поскольку потребность работать с файлами операционной системы была и будет всегда. Следует заметить, что TEXT_IO в отличие от пакетов VBX, OLE2, DDE поддерживается в последних версиях Forms, тогда как все вышеперечисленные закончили свое существование в Forms 6i. В этой главе мы рассмотрим различные примеры, которые продемонстрируют нам возможности записи и чтения данных.
Спецификация пакета
Пакет TEXT_IO включает в себя все необходимые методы (табл. 14.1) для работы с файлами операционной системы. Для обращения к процедурам или функциям этого пакета вы должны использовать слово " TEXT_IO ".
Процедура FOpen может открывать файл в трех режимах:
- R - открывает файл только для чтения;
- W - открывает файл для чтения и записи, удаляя при этом существующие строки;
- A - открывает файл для чтения и вставки данных, но при этом существующие данные не удаляются, то есть, по сути, происходит операция вставки.
Запись данных в файл
Для записи данных в файл необходимо придерживаться такой последовательности:
- Создать ссылку на файл, которая в дальнейшем будет указателем на файл при обращении к нему в других методах.
- Открыть файл для замены или для добавления текста.
- Записать данные в файл.
- Закрыть файл, вызвав Fclose.
Для того чтобы убедиться в вышесказанном, выполним пример, который покажет, как записать в Excel данные из формы:
WHEN_BUTTON_PRESSED declare out_file Text_IO.File_Type; flnm varchar2(200); begin flnm := GET_FILE_NAME('H:\', 'file_name.xls', 'XLS Files (*.xls)|*.xls|', NULL, SAVE_FILE, TRUE); out_file:=Text_IO.Fopen(flnm, 'w'); LOOP Text_IO.New_Line(out_file); Text_IO.Put(out_file, :ITEM1); Text_IO.Put(out_file, CHR(9)); Text_IO.Put(out_file, :ITEM); IF :system.last_record = 'TRUE' THEN EXIT; ELSE next_record; END IF; Text_IO.Fclose (out_file); end;
Чтение данных из файла
Для чтения данных из файла придерживайтесь такой последовательности:
- Создать ссылку на файл, которая в дальнейшем будет указателем на файл при обращении к нему в других методах.
- Создать буфер для хранения строки данных из файла.
- Открыть файл в режиме чтения.
- Прочесть данные из буфера ( Get_Line ).
- Закрыть файл.
Выполните небольшой пример, который наглядно продемонстрирует вам вышесказанное.
- Создайте файл os_file.txt.
- Создайте кнопку и определите для нее триггер WHEN-BUTTON-PRESSED. В теле триггера напишите следующий код:
WHEN_BUTTON_PRESSED Declare file1 Text_io.file_type; z varchar2(2000); Begin file1 := text_io.fopen('c:\r.txt','r'); text_io.get_line(file1,z); message(z); text_io.fclose(file1); exception when no_data_found then text_io.fclose(file1); end;
Если вы хотите прочесть все данные, находящиеся в файле, то выполните команду Get_Line цикле.