ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



                                 GORACLEH
                 GПособие оператора по  SQL*FormsH
                                GВерсия 2.0H
                 Система управления реляционной базой данных
                                GПредисловиеH
          Пособие пользователя по SQL*Forms является одновременно справочным
пособием и самоучителем.Оно расскажет вам как:
 *  запускать формы
 *  использовать клавиатуру для выбора и редактирования записей
 *  извлекать данные из БД ORACLE RDBMS при помощи простых или сложных крите-
    риев выбора
 *  вводить,модифицировать или удалять записи
 *  выполнять транзакции (групповые операции) над записями в БД ORACLE RDBMS.
          Это пособие не показывает вам как проектировать или модифицировать
формы.Для выполнения этих заданий обратитесь к книге SQL*Forms Desiner's Guide.
     
                                GАудиторияH
          Это пособие предназначено для операторов,работающих с записями дан-
ных.Однако оно полезно и для программистов и для администраторов БД.
     
                  GКак организовано данное пособиеH
          Данное пособие разделено на 4 части:
     Часть I:   Введение
     Часть II:  Самоучитель
     Часть III: Справочник
     Часть IV:  Приложения
          Cюда также включены Глоссарий и Форма комментария пользователя.
     
                     GКак использовать это пособиеH
          Если вы являетесь оператором по вводу данных и не знакомы с SQL*
Forms,то прочтите Главы 1 и 2,а затем выполните упражнения в самоучителе,обра-
щаясь по мере необходимости к Главам 10 - 13.Предполагается,что у вас имеется
терминал,на котором вы работаете.Не пропускайте эту часть самоучителя! Если во
время работы вы получите сообщение об ошибке,то обратитесь к Приложению А.
          Для программистов,администраторов БД и опытных операторов нужно про-
читать Главы 1 и 2 и по мере необходимости обращаться к Главам 10 - 13.Выпол-
нять упражнения в самоучителе не обязательно.
     
                  GСоглашения,используемые в этом пособииH
          В Пособии оператора по SQL*Forms выполняются следующие  соглашения:
 GИмена файловH   G Hпишутся большими буквами,например,INT.ORA.Изменяемая
                 часть имени пишется маленькими буквами,например,SGADEFx.ORA.
 GКлючевые словаH G Hпишутся большими буквами в примерах и тексте,что
                 означает их ввод так как показано.
 GИмена клавиш    Hпишутся жирным шрифтом и заключены в квадратные
                     скобки,например,G[Return].H
     
                             GСодержаниеH
     GЧасть I: ВведениеH
     GГлава 1     HОб этой Главе .............................
                 Что такое форма ...........................
                 Формы и БД ORACLE RDBMS ..........
                 Что могут делать формы? ...................
     GГлава 2     HОб этой главе ...........................
                 Требования к установке ....................
                 Функциональные клавиши ....................
                          Перемещение курсора ..............
                          Запросы ..........................
                          Обработка транзакций .............
                          Редактирование данных ............
                          Помощь пользователю ..............
                 Экран SQL*Forms и рабочее пространство ....
                          Формат экрана ....................
                          Рабочее пространство ............
                 Запуск SQL*Forms ..........................
                          Вход и выход из системы .........
                          Запуск формы .....................
                 Получение помощи .........................
                          Дополнительная помощь ...........
     GЧасть II: СамоучительH
     GГлава 3 H    Об этой главе .........................
                 Что предполагать ..........................
     GГлава 4     HОб этой главе .........................
                 Доступ к форме-примеру ....................
                 О форме-примере ..........................
     GГлава 5     HОб этой главе .........................
                 Когда запрашивать базу данных .............
                 Извлечение всех данных ...................
     GГлава 6 H    Об этой главе .........................
                 Перемещение от блока к блоку ..............
                 Перемещение от записи к записи ............
                 Перемещение от поля к полю ...............
                 Перемещение от страницы к странице ........
     GГлава 7    H Об этой главе ........................
                 Сравнение точных значений ................
                 Ввод переменных условий ..................
                          Задание диапазона значений ......
                          Другие способы применения клаузы
                          WHERE ...........................
     GГлава 8     HОб этой главе .........................
                 Обновление записей .......................
                 Сохранение проделанной работы ............
                 Удаление информации из БД .......
     GГлава 9     HОб этой главе ........................
                 Создание блока ORDERS ....................
                 Создание блока LINEITEMS .................
                 Создание блока CLIENT_DATA ...............
GЧасть III: СправочникH
     GГлава 10H    Об этой главе ........................
                 Выбор блока ..............................
                 Редактирование записей ...................
                          Перемещение курсора .............
                          Замена,ввод и удаление символов .
                          Очистка поля .....................
                 Выполнение горизонтальной прокрутки ......
                 Работа с несколькими блоками ..............
                 Завершение сессии редактирования ..........
     GГлава 11 H   Об этой главе ........................
                 Выполнение запроса .......................
                 Извлечение всех записей ..................
                 Извлечение избранных записей ..............
                          Извлечение диапазона записей .....
                          Использование сложных критери
                          поиска ...........................
                          Переиспользование критерия поиска
                          Подсчет записей запроса ..........
                          Использование SQL*Plus ..........
                 Прекращение запроса .......................
     GГлава 12    HОб этой главе ........................
                 Создание новых записей ...................
                 Обновление записей ........................
                 Удаление записей .........................
                 Проверка достоверности ...................
     GГлава 13    HОб этой главе .........................
                 Выполнение транзакций .....................
                 Обратное прокручивание транзакций .........
                 Приглашение к сохранению (commit) .......
                 Проверка достоверности при сохранении .....
     GПриложенияH
     GПриложение А    HСообщения об ошибках
     GПриложение В    HТипы полей и их характеристики
     GГлоссарийH
     
+                   GЧасть I:             ВведениеH
                           GГлава 1      ОбзорH
                             GОб этой главеH
         Для эффективного использования SQL*Forms (произносится сикуэль формс)
нужно знать следующее:
     *  что такое форма
     *  как форма взаимодействует с БД ORACLE RDBMS
     *  что форма может делать
          В данной главе показано,что форма это не только строки и квадраты на
экране,из которых можно извлечь записи.Вы можете использовать форму для ввода,
модификации или удаления информации в БД ORACLE RDBMS,которая организует дан-
ные в таблицах,состоящих из строк и колонок.Кроме того,вы увидите что проекти-
ровщик может настроить форму при помощи различных возможностей SQL*Forms.
     
                              GЧто такое форма?H
          Как и напечатанная форма - форма в данном случае это изображение на
экране с пустыми местами.Она является представлением в виде бланка информации
БД,что позволяет эффективно вводить,обновлять и запрашивать данные.(Смотри
рис 1-1).Для обновления или извлечения записей БД без формы требуется примени-
ть язык структурированных запросов (SQL),набор команд близких к английским
словам.
     Рис 1-1     Пример формы
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID  xxxxxxxxx          ORDERDATE xxxxxxxxxxx            |
     |   SALESID  xxxxxxxxx           CLIENTID xxxxxxxxxxx            |
     |  SHIPDATE  xxxxxxxxx           ORDERTOT xxxxxxxxxxx            |
     | |           ^               MAXLINEITEM xxxxxxxxxxx            |
     | |___________|______________________________________|           |
     |             |            |                                     |
     | ____________|____________|___________________________________  |
     |             |            |                                     |
     |  char Mode: Replace      |   Page 1                 Count: *0  |
     |_____________|____________|_____________________________________|
                 поле         блок
          Форма имеет один или несколько блоков; каждый блок соответствует од-
ной таблице БД.Блок содержит записи и обновляет информацию таблицы,кроме того
он содержит пустые пространства называемые полями.Поля используются для запи-
сей данных и имеют фиксированный размер и положение.Они могут иметь и другие
характеристики,такие как ограничения на записи данных.Блок ORDERS на рис 1-1
имеет 7 полей,одно из них ORDERID,к примеру.
          Блок может содержать одну запись,как на рис 1-1,или несколько запи-
сей как на рис 1-2.Блоки с одной записью обычно выводят поля записи в несколь-
ких строках,в то время как блок с многими записями выводит каждую запись в
одной строке.
     Рис 1-2     Блок со многими записями и значениями полей
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |ORDERID ORDERDATE  SALESID CLIENTID SHIPDATE ORDERTOT MAXLINEIT |
     | 10001  11-DEC-86  1001    9001     15-DEC-86 5345.00  5        |
     | 10002  12-DEC-86  1002    9002     16-DEC-86 4345.00  3        |
     | 10345  09-DEC-86  1010    9781     15-DEC-86 345.00   1        |
     | 10056  13-DEC-86  1001    8005     15-DEC-86 8345.00  7        |
     | 10549  06-DEC-86  1005    7001     10-DEC-86 745.00   1        |
     | _____________________________________________________________  |
     |  char Mode: Replace          Page 1                 Count: *0  |
     |________________________________________________________________|
     
                           GФормы и БД ORACLE RDBMSH
          БД ORACLE RDBMS организует данные в таблицы родственной информации.
Таблицы состоят из колонок (вертикальных) и строк (горизонтальных).Колонка
идентифицирует единственный тип данных и поименована,например,ORDERID.Строки
перерезают колонки и образуют поля.Поле может иметь 3 типа данных: числа,сим-
волы или данные.Несколько полей составляют запись и она соответствует строке в
таблице.Например,первая строка таблицы ORDERS (рис 1-3) является одной записью
и она имеет 7 полей,начинаясь с ORDERID и заканчиваясь MAXLINEITEM.Значение
10001 является результатом на пересечении первой строки и колонки ORDERID.Это
значение хранится в поле по имени ORDERID.
     Рис 1-3     Таблица ORDERS со значениями полей
      ________________________________________________________________
     |ORDERID ORDERDATE  SALESID CLIENTID SHIPDATE ORDERTOT MAXLINEIT |
     |_______________________________________________________________ |
     | 10001  11-DEC-86  1001    9001     15-DEC-86 5345.00  5   <--  |
     | 10002  12-DEC-86  1002    9002     16-DEC-86 4345.00  3      | |
     | 10345  09-DEC-86  1010    9781     15-DEC-86 345.00   1      | |
     | 10056  13-DEC-86  1001    8005     15-DEC-86 8345.00  7      | |
     | 10549  06-DEC-86  1005    7001     10-DEC-86 745.00   1      | |
     |  ^                                                           | |
     |__|___________________________________________________________|_|
      колонка                                                   строка
                                                               
          Эта таблица на рис 1-3 имеет 7 колонок (по именам ORDERID,ORDERDATE,
SALESID,CLIENTID,SHIPDATE,ORDERTOT,MAXLINEITEM) и 5 строк (по одной для Order-
ID 10001,10002,10345,10056 и 10549).
          Как это все соотносится с формой? Имена полей блоков идентичны име-
нам колонок таблицы,соответствующей блоку.Когда вы делаете запрос в блок,то
каждая появляющаяся в нем запись исходит из строки таблицы.Если вы вводите,мо-
дифицируете или удаляете запись в блоке,ваше действие вызывает ввод,модифика-
цию или удаление соответствующей строки в таблице.
          Например,имена полей в блоке Orders (рис 1-1) являются именами коло-
нок в таблице Orders (рис 1-3).Запись,выведенная в блоке Orders,является пер-
вой строкой в таблице Orders.Поле ORDERID блока Orders имеет ту же самую вели-
чину,что и поле ORDERID в таблице Orders.Если вы измените поле ORDERID с 10001
на 10006,то соответствующее изменение будет в поле ORDERID.Рис 1-4 иллюстриру-
ет это соответствие.
    Рис 1-4     Соотношение между таблицей и формой
      ORDERID ORDERDATE  SALESID CLIENTID SHIPDATE ORDERTOT MAXLINEIT
      _______________________________________________________________
       10001  11-DEC-86  1001    9001     15-DEC-86 5345.00  5   <---
       10002  12-DEC-86  1002    9002     16-DEC-86 4345.00  3       |
       10345  09-DEC-86  1010    9781     15-DEC-86 345.00   1       |
       10056  13-DEC-86  1001    8005     15-DEC-86 8345.00  7       |
       10549  06-DEC-86  1005    7001     10-DEC-86 745.00   1       |
      ______________________________________________________________ |
                 ============= ORDERS =================              |
      ORDERID ORDERDATE  SALESID CLIENTID SHIPDATE ORDERTOT MAXLINEIT|
       10001  11-DEC-86  1001    9001     15-DEC-86 5345.00  5   <---
       10002  12-DEC-86  1002    9002     16-DEC-86 4345.00  3
       10345  09-DEC-86  1010    9781     15-DEC-86 345.00   1
       10056  13-DEC-86  1001    8005     15-DEC-86 8345.00  7
       10549  06-DEC-86  1005    7001     10-DEC-86 745.00   1
     ________________________________________________________________
        Char Mode: Replace        Page 1               Count:  *0
     
                            GЧто может форма?H
          Пока вы увидели форму простых записей без сопровождающих комментари-
ев ее скрытой сложности.Зная кое-что об этой сложности можно лучше понять как
работает форма.
          Как сложна SQL*Forms? Она имеет 3 части:
     Form Designer -    разработчик   формы - создает форму используя
                        информацию по умолчанию из окон или форму-обра-
                        зец при помощи рисования на экране.
     Form Generator -   генератор формы - компилирует форму,аналогичен компи-
                        лятору программ,который транслирует каждый оператор
                        исходной программы в эквивалентную инструкцию машинно-
                        го языка.
     Form Processor -   процессор формы - запускает форму,которая  изв-
                        лекает и обновляет записи.
          Но это еще не все.В любой форме разработчик может предусмотреть три-
ггеры,макро и пользовательские выходы.Триггер может влиять на запись данных не
только на уровне поля,но и блока или формы.Триггер может состоять из операто-
ров SQL,команд SQL*Forms или команд пользовательского выхода и вычисляется при
наступлении события,например,при входе курсора в поле.
          Триггеры выполняют нечисленные функции,они могут:
     *  верифицировать записи в поле блока
     *  вывести на экран данные из другой таблицы
     *  вычислить значения полей
     *  установить соотношения данных в таблицах
     *  генерировать значение нового поля
     *  ограничить доступ оператора.
          Макро ускоряют ввод данных и обеспечивают гибкость клавиатуры.Они
вызывают последовательность действий при помощи одного нажатия там,где обычно
нужно несколько нажатий.уменьшая тем самым строки вводимых символов и исключая
повторные вводы.Макро могут запускать действия,не обрабатываемые функциональ-
ными клавишами (эти клавиши рассматриваются в Главе 2) и пользователи применя-
ют их с языком SQL для выполнения сложных действий.
          Написанные на языке высокого уровня типа Фортран и введенные в фор-
му,пользовательские выходы осуществляют сложные верификации полей,обновляют
операции и вычисления не управляемые триггерами.Для выполнения,например,стати-
стического анализа продаж разработчик может использовать пользовательский вы-
ход,содержащий программу,написанную на Фортране.Эта программа выполнит вычис-
ления и форма сохранится в БД.
          Но теперь вы можете лучше понять что такое форма,что она может дела-
ть и как разработчики могут ее модифицировать.В следующей главе вы прочтете о
требованиях к установке,о функциональных клавиших и получите другие сведения,
полезные при запуске.

+                GГлава 2      Запуск  SQL*FormsH
                           GОб этой главеH
          Перед запуском формы вам нужно иметь работающее оборудование
     и вы д.б. знакомы с:
          *  функциональными клавишами оператора
          *  экранами и рабочим пространством,используемым SQL*Forms
     А также вам нужно знать как:
          *  входить и выходить из строки
          *  запускать форму
          *  получить помощь от системы
          Эти  разделы  раскрыты в данной главе и они приготовят вас к
     обучению по данному пособию.
     
                         GТребования к установкеH
          SQL*Forms может работать на многих типах компьютеров и компьютеры,на
которых SQL*Forms работает,называются главными.Каждый главный компьютер имеет
операционную систему,которая управляет ресурсами главного компьютера.Для полу-
чения информации,специфической для вашего компьютера,прочтите книгу ORACLE
Installation and User's Guide.
          Отметим,что SQL*Forms работает с системой управления реляционной БД
ORACLE (ORACLE RDBMS).Для запуска SQL*Forms вам нужно сперва установить ORACLE
RDBMS на вашем компьютере.Для установки этой системы обратитесь к книге ORACLE
Installation and User's Guide.
          После установки SQL*Forms вам нужно иметь идентификатор пользователя
и пароль.Идентификатор обозначает вас как авторизованного пользователя ORACLE
RDBMS и пароль доказывает,что вы являетесь правильным владельцем данного иден-
тификатора.
          Получили ли вы идентификатор и пароль? Если ваш компьютер разделяет-
ся другими пользователями,то получите эти данные от администратора БД.Если же
вы являетесь единственным владельцем,то должны воспринять обязанности админис-
тратора на себя.В этом случае вы можете использовать идентификатор SCOTT и па-
роль TIGER до тех пор пока не определите свои собственные.Если же ваш компью-
тер работает в системе разделения времени,то вам нужно иметь дополнительный
идентификатор пользователя и пароль.Ваш АБД - администратор БД - может вам их
создать.
     
                          GФункциональные клавишиH
          После запуска SQL*Forms вы будете нажимать различные клавиши для пе-
ремещения курсора,ввода или модификации данных или для приказа компьютеру сох-
ранить информацию.Эти клавиши называют функциональными,поскольку они выполняют
операции или функции SQL*Forms.
          Вообще,функциональные клавиши могут подразумевать любое количество
введенных символов.Эти строки являются одновременными,последовательными или их
комбинацией,например,G[Esc]--[^X].HЕсли первое имя клавиши в 2-хклавишной
последовательности - G[^] Hили G[SHIFT]H,то нажмите эти клавиши и держите
при нажатии второй клавиши.
     (Клавиша G[^] Hзначит управление - "Control" и маркируется Ctrl на бо-
льшинстве клавиатур.) Если первая клавиша не из этих,то нажмите и освободите
ее,а потом нажимайте вторую.
          Поскольку SQL*Forms запускается на нескольких разных компьютерах,не-
возможно некоторые функции,например,G [Next Field]H,представлять одной и той
же клавишей.Для решения этой проблемы SQL*Forms определяет функциональные кла-
виши для конкретных целей и эти имена присваиваются клавишам,что отражается в
карте клавиатуры.
          Отметим,что эта карта может варьироваться поскольку терминалы не
идентичны.Карта клавиатуры м.б. унифицирована и разработчик может изменить
присвоение некоторых клавиш.Такое изменение имеет эффект при запуске формы в
некотором контексте,например,когда курсор достигнет поля.(Проконсультируйтесь
по документации,приданной вашей форме для ввода изменений в карту клавиатуры.)
          Существует несколько способов получения карты клавиатуры.В книге
ORACLE Installation and User's Guide просмотрите главу по SQL*Forms,содержащую
стандартную карту клавиатуры для широко используемых терминалов.Если ваша ор-
ганизация унифицировала эту карту,то обратитесь к АБД за копией.А при запуске
SQL*Forms вы можете вывести на экран карту клавиатуры нажав клавишу G [ShowH
GFunction Keys]H.
     
                              GДвижение курсораH
          Курсор - это индикатор позиции на дисплее,в которую нужно вводить
информацию.На большинстве компьютеров курсор появляется в виде мерцающего пря-
моугольничка или знака подчеркивания.
         G[Move Cursor Left] HиG [Move Cursor Right]H
         G[Move Cursor Left] Hперемещает курсор на один символ влево;
         G[Move Cursor Right] Hперемещает курсор на один символ вправо;
         Применяйте эти клавиши для перемещения курсора по полю.На большинстве
терминалов G[Move Cursor Left]H иG [Move Cursor Right]H представлены кла-
вишами с маркировкой [<-] и [->],соответственно.
     G[Move Cursor Down] HиG [Move Cursor Up]H
         G[Move Cursor Down]H перемещает курсор вниз на одну строку.
         G[Move Cursir up]H перемещает курсор на одну строку вверх.
     G[Next Field]H иG [Previous Field]H
        G[Next Field]H перемещает курсор в начало следующего вводимого поля.
         G[Previous Field]H перемещает курсор в начало предыдущего поля.
         Если  курсор в последнем поле записи,тоG [Next Field] Hпереместит
его в первое поле.А G[Previous Field] Hпри курсоре в первом поле,переместит
его в последнее поле.Если следующее/предыдущее поле находится на другой стра-
нице то соответствующая страница выводится на экран и курсор помещается в со-
ответствующее поле.
     G[Next Primary Key Field]H Эта клавиша помещает курсор в начало следую-
щего поля,позволяющего ввод данных; иными словами эта клавиша работает как
         G[Next Field]H.Она помогает убедиться в уникальности записи,таким
образом 2 записи не будут содержать одинаковую информацию в своих полях перви-
чных ключей.
     G[Scroll Left] HиG [Scroll Right]H Первая функциональная клавиша сд-
вигает поля влево на 80% их выводимой ширины,а вторая - направо.Применяйте эти
клавиши для просмотра порций полей,выходящих за рамки экрана.
     G[Next Record] HиG [Previous Record]H Во время запроса
G [Next Record]H выводит следующую запись,удовлетворяющую запросу,а
G [Previous Record]H - предыдущую.Если блок может вывести на экран несколько
записей,то первая функциональная клавиша перемещает курсор вниз на одну запи-
сь,а вторая - вверх.Когда курсор достигнет последней  выводимой записи,
G[Next Record] Hпереместит записи вверх на одну строку.Вторая функциональная
клавиша,дойдя до верхней записи,переместит записи вниз на одну запись.Если но-
вая запись вводится,то G[Next Record]H завершит запись и переустановит поля
в их начальные значения,так что м.б. добавлена другая запись.Если блок выводит
несколько записей одновременно,то завершенные записи двигаются по экрану.
     G[Next Set of Records]H Во время запроса эта функциональная клавиша за-
меняет все записи,выведенные ранее,следующим набором записей.Если блок содер-
жит несколько записей,то эта функциональная клавиша поставляет записи быстрее
чемG [Next Record]H.
     G[Next Block] HиG [Previous Block]H
         G[Next Block] Hперемещает курсор к следующему блоку,а вторая клави-
ша - к предыдущему.Если курсор в последнем блоке,то первая клавиша переместит
его в первый,а при курсоре в первом блоке - вторая клавиша - в последний.При
применении этих клавиш курсор перемещается в первое поле первой записи нового
блока.Если курсор возвращается в блок во время текущей сессии редактирования,
то он может не попасть в первую запись; более того,он возвратится в запись,в
которой он был последним.Отметим,что если запрос действует во время движения
курсора вне блока,то запрос остается активным при возврате курсора в блок.
     G[Block Menu]H Эта функциональная клавиша выводит на экран меню блоков,
принадлежащих форме.Когда вы выбрали блок из меню,курсор перемещается в этот
блок.Если форма имеет много блоков,то данная клавиша переместит курсор быстрее
чем G [Next Block]H и G[Previous Block]H.
     
                                   GЗапросыH
          Запрос - это операция выбора набора записей (строк) из таблицы БД и
помещения их в рабочее пространство.

     G[Enter Query]H Эта функциональная клавиша инициализирует запрос.Если
ее нажать второй раз,то она выведет на экран критерий поиска,использованный в
предыдущем запросе.

     G[Execute Query]H Когда вы нажмете ее после G[Enter Query]H,то эта
клавиша выполнит запрос с критериями поиска.При ее использовании в одиночку
выполнится запрос без критерия поиска.

     G[Count Query Hits]H При ее использовании после G[Enter Query]H эта
функциональная клавиша подсчитает число записей,соответствующих заданному кри-
терию запроса.При использовании в одиночку будет подсчитано общее количество
записей в таблице.
          Заметим,что если вы нажмете эту функциональную клавишу после
G[Execute Query]H,то она подавляет запрос,очищает все записи в рабочем прос-
транстве,очищает все записи в рабочем пространстве и считает все записи в таб-
лице,которые можно извлечь блоком.
     
                          GОбработка транзакцийH
          Транзакция - это последовательность обновлений,примененная к БД как
единица работы.Применяя транзакции к БД говорят о блокировании транзакций.
          Если любая часть транзакции приведет к ошибке во время исполнения,то
вся транзакция отменится (выполнится откат).Это случается,например,когда тран-
закция отказывает при передаче поля или записи с проверкой ее достоверности,
заданной в форме.Перед выполнением такой транзакции вам нужно устранить причи-
ну отказа.

     G[Create Record]H  Эта функциональная клавиша позволяет вам добавлять
новую запись в рабочее пространство.

     G[Delete Record]H  Эта функциональная клавиша удаляет запись из БД.За-
пись удаляется при выполнении текущей транзакции.Когда это произойдет,запись
исчезнет из поля зрения и ее нельзя будет снова вывести на экран.
     
     G[Commit]H Эта клавиша вводит текущую транзакцию в БД.
     
                            GРедактирование данныхH
          Редактирование данных - это процесс модификации сушествующей записи.
Изменения,которые вы внесли в запись,будут записаны в БД после выполнения те-
кущей транзакции.
     G[Delete Character]H
         Эта клавиша удаляет символ в положении курсора  и  перемещает
         следующий символ влево.Курсор не перемещается.

     G[Delete Backward]H Эта клавиша удаляет символы перед курсором и пере-
мещает его и все последующие символы влево.Если курсор в самом левом видимом
положении,то ничего не произойдет.

     G[Insert/Replace]H  Эта функциональная клавиша переключает режим ввода
на режим замены и наоборот.Когда режим ввода активен,то вводимый символ сдви-
гает все символы вправо.Курсор,однако,остается под первым символом.В режиме
замены вводимый символ заменяет символ под курсором,а следующий символ не из-
меняется.Курсор,однако,перемещается вправо и устанавливается под следующим
символом.

     G[Clear Field]H  Эта функциональная клавиша стирает символы от положе-
ния курсора до конца поля.Если курсор где-то в середине поля,вы можете стереть
все поле нажав клавишу дважды.

     G[Clear Record]H Эта клавиша очищает поля записи на экране и в рабочем
пространстве.Если новая запись или модификация существующей очищается перед ее
сохранением в рабочем пространстве,то они удаляются.Отметим,что эта клавиша не
удаляет существующие записи из БД.
     
     G[Clear Block]H  Эта клавиша очищат все записи в блоке и если запрос
активен,то она прекращает этот запрос.Она не удаляет записи из БД и не выпол-
няет откат; она только удаляет записи из рабочего пространства.Если после пос-
леднего запоминания какие-либо записи были обновлены,введены или удалены,то
SQL*Forms выведет на экран сообщение: "Commit Changes?" (запомнить измене-
ния?).Если вы ответите утвердительно - Yes -то эти изменения будут внесены в
БД перед удалением блока.При отрицательном ответе - No - изменения будут
стерты.

     G[Clear Form/Rollback]H Эта клавиша очищает рабочее пространство от
всех записей,принадлежавших каждому блоку в форме; она отменяет все изменения
в текущей транзакции.Если запрос активен,то он прекращается.Если с последнего
сохранения были сделаны какие-то изменения,то SQL*Forms спросит об их сохране-
нии.при отрицательном ответе изменения стираются.
     
                          GПомощь пользователюH
          Следующие функциональные клавиши помогают вам вводить данные путем
уменьшения размеров вводимых строк или предоставляя соответствующую информацию
о других клавишах.

     G[List Field Values]H  Эта клавиша выводит на экран первое значение в
списке значений текущего поля.Для вывода каждого последующего значения нужно
нажимать клавишу G [Next  Field]H.Для прекращения этой функции нажмите
G [Exit/Cancel]H.

     G[Duplicate Field]H Эта клавиша дает текущему полю то же самое значение
как соответствующее поле в предыдущей записи.Можно при желании модифицировать
это значение.

     G[Duplicate Record]H Эта клавиша дает каждому полю в текущей записи та-
кое же значение,как у предыдущей.При желании запись можно модифицировать.

     G[Show Function Keys]H  Эта клавиша выводит на экран карту клавиатуры
SQL*Forms.
     
     G[Help]H  Эта клавиша выводит на экран информацию о текущем поле.нажми-
те ее один раз для краткой информации; нажмите эту клавишу снова для получения
дополнительной информации.Если разработчик формы не создал двух уровней подс-
казки,то нажимать эту клавишу нужно только один раз.

     G[Display Error]H  Эта клавиша выводит на экран подсказку для поля,в
котором обнаружена ошибка.Она выводит  и само сообщение об ошибке.

     G[Redisplay Page]H  Эта клавиша стирает экран и восстанавливает его со-
держимое.Применять ее нужно для удаления системных сообщений,возникающих прои-
звольно.

     G[Print]H  Эта клавиша записывает информацию в файл ОС и затем распеча-
тывает его.После ее нажатия вас пригласят для ввода имени файла.Введите имя и
расширение - G filename.extentionH (например,GEPMPDATA.LPTH) или нажмите
G  [Return]H для использования имени файла по умолчанию -G FORMS.LISH.
Далее появится следующее приглашение:
  Select 0- Cancel,1- Current Page,2- Form,3- Function Keys,4 - Help,5 - Error
         Сделайте одно из следующих действий:
 Введите 0   для подавления процесса
 Введите 1   для записи текущей страницы текущей формы
 Введите 2   для записи всех страниц текущей формы
 Введите 3   для записи  текущих определений функциональных клавиш с карты
             клавиатуры
 Введите 4   для записи экрана подсказки для текущего поля
 Введите 5   для записи последнего сообщения об ошибке.
         После выбора опции вас спросят о вашем желании записать информацию в
файл и затем ее распечатать.

     G[Exit Cancel]H Эта клавиша подавляет обработку формы.Она подавляет та-
кже G[EnterH GQuery]H,G [List Field Values]H и приглашения.Если обраба-
тывается транзакция,SQL*Forms спросит,хотите ли вы сохранить ее.
     
                 GЭкраны и рабочее пространство SQL*FormsH
          Когда вы записываете записи,вводите данные или их модифицируете,вы
используете экран SQL*Forms как это показано на рис 2-1.Данные,которые вы вво-
дите,или записи,которые модифицируете,временно хранятся в части памяти вашего
компьютера,называемой рабочим пространством.
     
                               GФормат экранаH
          Типичный экран SQL*Forms разделяется на 3 части.На верху экрана рас-
полагается титул экрана.Под ним располагаются места,в которые помещаются дан-
ные.В нижней части экрана - строка статуса.Эта строка может не появиться если
разработчик формы решил опустить ее,или вы при установке задали ее появление в
каком-либо другом месте.
          Слева направо строка статуса может содержать:
           < - этот знак обозначает,что начало текущего поля прокручено влево
               за пределы экрана.Вы можете перевывести начало путем передвиже-
               ния курсора влево.
           > - этот знак означает,что конец текущего поля прокручен
               вправо  за  пределы  правого края экрана.Вы можете его
               перевывести путем перемещения курсора вправо.
               
     Рис 2-1     Формат экрана SQL*Forms
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID  [10001    ]        ORDERDATE [11-DEC-86]            |
     |   SALESID  [1001     ]         CLIENTID [9001     ]            |
     |  SHIPDATE  [15-DEC-86]         ORDERTOT [5345.00  ]            |
     |  MAXLINEITEM [5        ]                                       |
     |                                                                |
     |  < > ^ v  Char Mode: Replace  Page 1 ENTER QUERY  Count: * 6   |
     |________________________________________________________________|
       ^  означает,что имеются записи,предшествующие текущей в блоке.Вы можете
вывести на экран эти записи путем нажатия клавиши G[Previous Record]H.
       v означает,что имеются записи,следующие за текущей.Вы можете их вывести
на экран при помощи клавиши G[Next Record]H.
       Отметим,что <,>,^ и v могут появляться одновременно.
       GChar Mode Hозначает,что SQL*Forms находится в режиме замены или
       ввода,в данном случае замены - Replace.
       GPage - Hидентифицирует номер выводимой страницы.
       GEnter Query H- означает,что вы нажалиG [Enter Query] H и  еще  не
       нажали G[Execute Query] HилиG [Exit/Cancel]H.
       GCount H означает,какое количество записей извлечено по запросу.Каж-
дый раз как вы выводите на экран запись,представленную запросом,счетчик увели-
чивается.Когда вы извлекли последнюю запись,перед счетчиком выводится звездоч-
ка (*).Отметим,что строка статуса - это строка,в которой SQL*Forms выводит со-
общения и приглашения.
     
                         GРабочее пространствоH
          SQL*Forms не работает с таблицами БД непосредственно; она работает с
их копиями,сохраняемыми в рабочем пространстве.Это соглашение орбеспечивает
защиту от ошибок: вы можете делать изменения в рабочем пространстве и затем
удалять их,а таблица не будет повреждена.
          Выполняя запрос вы подаете информацию из БД и помещаете ее в рабочее
пространство.Вы можете просматривать,изменять или добавлять эту информацию.Для
сохранения вашей работы в БД вам нужно выполнить commit -сохранение.
     
                         GЗапуск SQL*FormsH
          До сих пор вам были представлены важные элементы SQL*Forms,которые
представляют интерес операторам.В данном разделе вы узнаете как входить,выхо-
дить из формы и ее запускать.
     
                           GВход или выходH
          Перед запуском формы вы должны узнать как входить в ОС компьютера,а
когда вы закончили сессию редактирования,нужно знать как выйти из нее.Все ком-
пьютерные системы имеют несколько отличающиеся способы входа и выхода.Таким
образом,рассмотрение этих вопросов лежит вне задач этого пособия.Обратитесь,
пожалуйста,к документации,которая приходит с вашей ОС компьютера или попросите
о помощи вашего АБД.
     
                               GЗапуск формыH
          Получение  формы,готовой  к использованию,состоит из 3
     шагов.Вы выполняете эти шаги из командной строки вашей системы.
     
                                Упражнение 2-1
     Запуск формы
 1.Войдите в ОС вашего компьютера.
 2.В ответ на приглашение системы введите GRUNFORMH и нажмите G[Space]H -
   пробел,затем введите имя запускаемой формы и нажмите G[Space]H снова.
 3.В той же самой командной строке введите ваше имя пользователя ORACLE,косую
   черту (/) и пароль,затем нажмите G[Return]H.
       Формат команды следующий:
           GRUNFORM formname username/passwordH
       Если вы хотите запустить форму ORDERENTRY,например,то должны ввести:
           GRUNFORM ORDERENTRY SCOTT/TIGERH
     Теперь нажмите G[Return]H.SQL*Forms выведет первый блок формы на экран.
     
                             GПолучение помощиH
          После запуска формы наступят моменты,когда вам нужно будет получить
некоторую информацию о конкретной фонкциональной клавише или о каком-либо по-
ле.Для получения помощи вы можете обратиться к АБД или использовать возможнос-
ть подсказки,путем нажатия
     G[Help],[Show Function Keys] HилиG [List Field Values].HG[Help]H
         Эта клавиша,как показано ранее,выводит информацию о текущем
         поле и может дать  вам помощь двумя способами:
 1.Она обеспечивает краткое сообщение о поле,которое выводится в строке сооб-
   щения.
 2.Она обеспечивает также экран информации о поле,заменив текущую страницу.
         Если разработчик формы обеспечил краткое описание текущего поля,то
это описание появится при нажатии данной клавиши.При желании вывести полный
экран информации,нажмите эту клавишу второй раз.Если краткое описание не зало-
жено разработчиком,то при первом нажатии появится полное описание.Для снятия
информации подсказки с экрана и возврата к текущей странице нужно нажать любую
клавишу.Вы можете вывести экран подсказки нажав G[Display Error]H.Эта клави-
ша выводит информацию о поле или операции,в которой обнаружена ошибка.

    G[Show Function Keys]H Вы можете вывести карту текущей клавиатуры путем
нажатия данной клавиши.Эта карта показывает,что делает каждая функциональная
клавиша.

     G[List Field Values]H Если текущее поле имеет список значений,то вы мо-
жете вывести первое нажав эту клавишу.
     
                          GДополнительная помощьH
          Некоторые формы могут обеспечить по требованию дополнительную помо-
щь.Там где эта помощь имеется,она может принять форму прямоугольника или пол-
ного  экрана,который можно вывести нажав функциональную клавишу или из меню.
Документация,соответствующая конкретной форме  сообщит о ее наличии.
     
+                  GЧасть II:         СамоучительH
                   GГлава 3   Об этом самоучителеH
          Глава 3 вводит вас в самоучитель SQL*Forms для операторов.После про-
чтения этой главы вы будете готовы к упражнениям в главах 4 - 9.Если вы неопы-
тный пользователь ORACLE RDBMS или SQL*Forms,то строго придерживайтесь струк-
туры этого самоучителя.
     
                            GЧто предположитьH
         Эта часть пособия дает вам практический опыт работы с SQL*Forms.После
выполнения упражнений вы будете знать как:
      *  запускать существующие формы
      *  перемещаться по форме
      *  извлекать записи из БД
      *  обновлять существующие данные
      *  сохранять изменения в БД
      *  удалять записи
      *  добавлять новые записи
          Перед работой с самоучителем вам нужно войти в модель БД ORACLE RD-
BMS,как это описано в главе 2.Дополнительно нужно,чтобы вы прочли информацию,
представленную в Части 1.
          Упражнения,включенные в это пособие,основаны на таблицах ORDERS,
LINEITEMS,CLIENT из модели БД ORACLE RDBMS.Если вы новичок,то лучший способ
изучить SQL*Forms,это выполнить все упражнения.Ниже приведено начальное содер-
жание перечисленных таблиц.
 Примечание: если вы или кто-либо еще в многопользовательской системе сделают
           изменения в модели БД,то эти изменения станут постоянными.Если из-
           менения сделаны,то данные,которые вы увидите на экране будут отли-
           чаться от данных,приведенных в пособии.
     
    ORDERS
              ORDERID ORDERDATE  SALESID C CLIENTID SHIPDATE ODERTOT
           ---------- ---------  ------- - -------- -------- -------
                  305 09-JUL-86       12 A      102 24-JUL-86
                  303 14-JUL-86       14 B      106 29-JUL-86
                  304 05-JUN-86       12 A      102 20-JUN-86
                  278 01-MAY-86       12 A      102 15-MAY-86
                    3 05-JUN-86       12 A      100
                    4 05-JUN-86       12 A      100
                    5 05-JUN-86       12 A      102
                    6 05-JUN-86       12 A      102
                  300 15-MAY-86       12 B      104 31-JUL-86
                  310 18-JUL-86       12 B      104
                    0 23-JUL-86       23        100
                    7 23-JUL-86      100 A      100
                    8 23-JUL-86       10 A      100
                    9 25-JUL-86       12 A      101             500
                   10 25-JUL-86       23 B      101             600
                   11 25-JUL-86       12 A      101             500
                   12 25-JUL-86       12 B      101            1000
                   13 25-JUL-86       23 C      104             500
                  121 16-APR-86       12 A      155 30-APR-86   563
     
  LINEITEMS
              ORDERID ITEMNO PRODID ACTUALPRICE   QTY   ITEMTOT
           ---------- ------ ------ ----------- ----- ---------
                  302      1 100870         2.8    20
                  303      1 100890          58     3       174
                    6      2 100860          56     4       224
                  303      2 100861          42     2       84
                  303      3 100860          44    10       440
                  125      1 100860
                   15      1 100860
     
  CLIENT
               ID NAME           ADDRESS       CITY          ST ZIP
            ----- ------------   ------------- --------      -- -----
              102 VOLLYRITE      9722 HAMILTON  BURLINGAME   CA 95133
              100 JOCKSPORTS     345 VIEWRIDGE  BELMONT      CA 96711
              101 TKB SPORT SHOP 490 BOLI RD. REDWOOD CITY CA 94601
              103 JUST TENNIS    HILVIEW MALL   BURLINGAME   CA 97544
              104 EVERY MOUNTAIN 574 SURRY RD.CUPERTINO    CA 93301
              105 K & T SPORTS   3476 EL PASEO  SANTA CLARA  CA 91003
              106 SHAPE UP       908 SEQUOIA    PALO ALTO    CA 94301
              107 WOMEN'S SPORTS VALLCO VILLAGE SUNNYVALE    CA 93334
              108 MUSCLE MAN     987 HARVEY DR  SAN MATEO    CA 96433
              111 SPORTSLINE     34 OAK ST      SF           CA 96011
     
  CREDIT
            AREA PHONE    LIMIT
            ---- -------- -----
             415 644-3341  7000
             415 598-6609  5000
             415 368-1223 10000
             415 677-9312  3000
             408 996-2323 10000
             408 376-9966  5000
             415 364-9777  6000
             408 767-4398 10000
             415 566-9123  8000
             415 656-7886  2000
     
                         GГлава 4    Запуск формыH
          В этой главе вы:
     *  научитесь как обращаться к модели формы
     *  познакомитесь с фиктивной компанией,использующей эту форму
     *  узнаете,что содержит эта модель формы.
     
                         GДоступ к модели формыH
          Вы уже знаете (прочитав главу 2) как стартовать SQL*Forms и обраща-
ться к БД ORACLE RDBMS.Для выборки формы,используемой в этой главе,выполните
следующее упражнение.
                          GУпражнение 4-1H
  Вывод на экран модели формы
     1.Войдите в ОС компьютера.
     2.По приглашению системы введите следующее и нажмите G[Return]H:
          GRUNFORM NEWORDER SCOTT/TIGER [Return]H
     3.SQL*Forms выведет на экран форму NEWORDERS.(Cм.рис 4-1)
     
     Рис 4-1    Форма NEWORDER
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID                     ORDERDATE  17-OCT-86             |
     |   CLIENTID                    NAME                             |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  xxxxxxxxxxx                                     |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: *0  |
     |________________________________________________________________|
     
                              GО модели формыH
          Компания Спортивных товаров SQL использует эту форму для сохранения
этапов выполнения заказов,которые она получает от своих торговых представите-
лей.Эти представители получают свои заказы,написанные от руки.В конце дня они
передают заказы операторам ввода информации,которые вводят их в БД при помощи
SQL*Forms.В качестве одного из операторов этой фирмы вы будете использовать
данную форму во всем самоучителе для вывода на экран информации о конкретных
заказах и об изменении существующих заказов и ввода новых.
          Форма  NEWORDER  состоит  из трех блоков: ORDERS,LINEITEMS,
     CLIENT_DATA.Блок ORDERS дает общую информацию о текущем  заказе,
     основанную на таблице ORDERS,расположенной в модели БД.
     LINEITEMS  основана  на  одноименной таблице в БД и дает
     конкретную информацию об объектах заказа.CLIENT_DATA основана на
     одноименной таблице в БД и содержит нужную информацию  о
     клиенте,выдавшем заказ.Этот блок содержит дополнительные поля,
     появляющиеся во второй странице; вы узнаете о их выводе на  экран
     из  раздела "Перемещения по форме".
          Если вы просматриваете поле ORDERDATE в блоке ORDERS,то за-
     метите,что здесь появились сегодняшние данные.Поскольку вы бу-
     дете вводить большинство заказов в тот же день,когда они  приня-
     ты,разработчик формы ввел текущую дату как основу.Подобные зна-
     чения  называют  значениями  по умолчанию.Значения по умолчанию,
     обеспеченные разработчиком,сокращают затраты вашего ценного вре-
     мени на ввод даты.Если вам не  нужно  использовать  значения  по
     умолчанию,их можно изменить.
          Нижняя строка экрана не является частью области формы.Вмес-
     то  этого  она  сообщает  вам информацию о состоянии при работе с
     формой.Для получения дополнительной информации обратитесь к гла-
     ве 2.
     
+                  GГлава  5  Извлечение всех записейH
          В данной главе вы узнаете:
     *  когда лучше запрашивать БД
     *  как извлекать все записи.
     
                         GКогда запрашивать БДH
          В качестве оператора фирмы вы не только вводите новые заказы
     по мере их поступления,но и  проверяете  состояние  существующих
     заказов.Однако,для их проверки вам нужно сперва извлечь эти за-
     казы из БД.Этот процесс извлечения информации называет-
     ся запрашиванием информации из БД.
          Вы захотите запросить БД когда нужно:
     *  просмотреть  или верифицировать существующие данные.Например,
        если нужно проверить данные договора  или  если  нужно  узнать
        сколько  конкретных клиентов имеют заказы,то вы можете выдать
        запрос для извлечения этих записей.
     *  модифицировать или обновлять существующие данные.Например,ес-
        ли клиент перемещен,вам нужно извлечь данные по нему и  изме-
        нить  адрес фирмы.В другом случае клиент отменяет заказ и вам
        нужно вывести на экран соответствующую запись и удалить ее  из БД.
          При помощи SQL*Forms вы можете выдавать запрос двумя способа-
     ми.Вы можете извлечь все записи,введенные в блок,независимо от
     содержащихся данных,или вы можете вывести только  данные,которые
     удовлетворяют  некоторому набору критериев.(Например,может пот-
     ребоваться просмотреть все заказы,составленные 05-JUN-86 или все
     заказы  клиента 102.) Этот раздел описывает извлечение всех запи-
     сей в блоке.Глава 7 показывает как  извлечь  конкретные  данные,
     удовлетворяющие некоторым критериям.
     
                         GИзвлечение всех записейH
          Для извлечения всех записей в блоке нажмите клавишу G[ExecuteH
     GQuery] Hпока курсор расположен в любом пустом поле.Форма NEWORDER
     пока  не имеет выведенных на экран записей.Вы можете извлечь все
     записи,хранимые в таблице ORDERS  путем выполнения упражнения 5-1.
      
                               Упражнение 5-1
     Извлечение всех записей
     
     1.Убедитесь,что курсор расположен в блоке ORDERS и в поле ORDERID.
     2.Нажмите  G[Execute Query].H
        После выполнения этих шагов на экране будет следующее:
         
     GРис 5-1H     Извлечение записей из блока ORDERS
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   305               ORDERDATE  09-JUL-86             |
     |   CLIENTID  102               NAME   VOLLYRITE                 |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  xxxxxxxxxxx                                     |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: 1   |
     |________________________________________________________________|
          Хотя и нажатие клавиши G[Execute Query] Hприводит к извлечению
     всех записей,хранимых в блоке,SQL*Forms выводит одну  запись  в
     единицу времени.Так происходит потому,что блок определен разра-
     ботчиком как блок единичной записи - только одна запись может вы-
     водиться в единицу времени.С другой стороны,блок LINEITEM опре-
     делен  как  блок  многих  записей - он может выводить на экран до
     трех записей в единицу времени.
          Отметим,что вы не д.б. позиционированы в первом поле
     записи при нажатии G[Execute Query].H
            
+                     GГлава  6:  Перемещение по формеH
          В данной главе вы узнаете как перемещать  курсор  по  форме.
     Это  значит,что вы больше узнаете как перемещать курсор по бло-
     кам,записям,полям и страницам.Знание этого необходимо для вво-
     да данных.
     
                  GФункциональные клавиши,перемещающие курсорH
          Во время работы с формой - сканирования существующих  данных
     или  ввода  новых - вам нужно будет перемещаться от области к об-
     ласти этой формы.SQL*Forms обеспечивает несколько функциональных
     клавиш,которые вы можете использовать при перемещении от  одного
     блока,записи или поля к  другому.Это клавиши следующие:
     G*  [Next Block],[Previous Block]H
     G*  [Next Record],[Previous Record]H
     G*  [Next Field],[Previous Field]H
          Вы  наверное  догадались,что G[Next Block]H продвинет вас на
     следующий блок,а G[Previous Block]H вернет к предыдущему.Клавиши
     по перемещению по записям и по полям работают также.Кроме  того,
     когда  вы  перемещаетесь  от блока к блоку или от поля к полю,то
     ваше движение является циклическим.Например,при  переходе  на
     последний  блок  формы  и  при  последующем нажатии клавиши G[NextH
     GBlock] HSQL*Forms возвратит вас обратно  в  первый  блок.Подобно
     этому  при  перемещении от первого блока назад вы попадете в пос-
     ледний блок.На рис 6-1 показаны такие перемещения.
     
     Рис 6-1     Перемещения между блоками и полями
          ---------            -------
         |          |         |       |
         |   Предыдущий блок  |       |
         |       _____________v__     |
         |      |                |    |
         |      |   БЛОК 1       |    |
         |      |________________|    |
         |        ^      след блок    |
         |        |          |        |
         |      предыд блок  v        |
         |       ________________     |
         |      |                |    |
         |      |   БЛОК 2       |    |
         |      |________________|    |
         |        ^          |        |
         |        |          v        |
          --------            --------
          Хотя движение от блока к блоку и от поля  к  полю  формирует
     замкнутый  цикл,движение от записи к записи линейно (см рис 6-2).
     Например,если вы находитесь в последней извлеченной записи и хо-
     тите возвратиться к первой,то должны нажимать клавишу G [PreviousH
     GRecord]H столько раз пока SQL*Forms не выведет первую запись и на-
     оборот.
     
     Рис 6-2     Перемещение от записи к записи
          Сообщение: AT FIRST RECORD (в первой записи)
                    ^
                    |     След Запись
                Предыд Запись |
                 _____________v___
                |  Запись  1      |
                |_________________|
                    ^     След Запись
                    |         |
                    .       .
                    .       .
                      Сообщение: LAST ROW OF QUERY RETRIEVED
                                 (поледняя строка запроса извлечена)
     
                            GПеремещение по блокуH
          Функциональные  клавиши  SQL*Forms работают только в текущем
     блоке.Например,если вы нажмете клавишу G[Clear Block]H,располо-
     жившись  в  блоке  ORDERS,то SQL*Forms очистит только этот блок.
     Для перемещения от одного блока к другому нужно использовать  со-
     ответствующие клавиши,иллюстрированные в Упражнении 6-1.
     
                                  Упражнение 6-1
     Перемещение от блока к блоку
     1.Расположившись в блоке ORDERS,нажмите G[Next Block]H один раз.
        Теперь текущим стал блок LINEITEMS.
     2.Нажмите один раз клавишу G[Previous Block]H для обратного пере-
        мещения в блок ORDERS.
     3.Нажмите клавишу G[Next Block] Hдва раза.При этом вы  перемести-
        тесь в блок CLIENT_DATA.
          Как показывает Упражнение 6-1,эти две функциональные клави-
     ши перемещают вас по блокам формы в прямом и обратном направлении.
     
                       GПеремещение от записи к записиH
          После  извлечения  записей из БД можно использовать
     клавиши G[Next Record] HиG [Previous Record] Hдля их просмотра.Если
     блок  состоит  из одной записи,то только она видима в данный мо-
     мент.Если блок из многих записей,то видимы несколько записей  и
     клавиша перемещения записей просто перемещает курсор от одной за-
     писи к другой.
          В главе 5 была нажата клавиша G[Execute Query] Hдля извлечения
     всех  записей,хранимых в блоке ORDERS.Для просмотра оставшихся
     записей этого блока нажмите G[Next Record] Hодин раз для каждой за-
     писи.
     
                               Упражнение 6-2
     Перемещение от записи к записи
     1.Нажмите дважды клавишу G[Next Record]H.SQL*Forms выведет на эк-
        ран ORDERID 304.
     2.Нажмите один раз клавишу G[Previous Record]H.SQL*Forms  выведет
        на экран информацию для ORDERID 303 (см Рис 6-3).
     
     Рис 6-3     Вывод на экран извлеченной записи
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   303               ORDERDATE  14-JUL-86             |
     |   CLIENTID  106               NAME  SHAPE UP                   |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  xxxxxxxxxxx                                     |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: 3   |
     |________________________________________________________________|
          Теперь,чтобы посмотреть как работают клавиши G[Next  Record]H
     и G[Previous Record]H в блоке с многими записями,обратитесь к сле-
     дующему упражнению.
     
                                 Упражнение 6-3
     Вывод на экран следующей записи в блоке с многими записями
     1.Нажмите клавишу G[Next Block]H для перемещения из блока ORDERS в
        блок  LINEITEMS.
        Отметим,что  значение 303 появится в поле ORDERID.Для  уве-
        ренности,что заказ введен правильно,значение ORDERID читает-
        ся из   блока ORDERS и автоматически выводится на экран в блоке
        LINEITEMS.
     2.Теперь давайте нажмем клавишу G[Execute Query].H
        Эта клавиша сообщает SQL*Forms,что нужно извлечь все записи в
        таблице  LINEITEMS,которая имеет значение 303 для поля ORDERID.
        SQL*Forms выводит на экран три записи,как это показано на рис
        6-4.

     Рис 6-4     Вывод на экран информации в блоке с несколькими записями
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   303               ORDERDATE  14-JUL-86             |
     |   CLIENTID  106               NAME  SHAPE UP                   |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 303      1       100890    58          3       174             |
     | 303      2       100861    42          2       84              |
     | 303      3       100860    44          10      440             |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  xxxxxxxxxxx                                     |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: 3   |
     |________________________________________________________________|
     3.Нажмите дважды G[Next Record]H для перемещения к последней запи-
        си в блоке LINEITEMS.
     4.Снова нажмите G[Next Record]H.
        SQL*Forms  выведет  на  экран  сообщение  Last  Row  of  query
        retrieved (последняя строка запроса выведена на экран).Помни-
        те,что в отличие от клавиш перемещения по блокам и полям,эти
        клавиши не циклические.
     5.Теперь  нажмите два раза клавишу G[Previous Record]H.Вы теперь
        очутитесь в первой записи в блоке LINEITEMS.
     6.Нажмите снова G[Previous Record]H.SQL*Forms выводит сообщение
        At first Record (в первой записи).
     
                       GПеремещение от поля к полюH
          Каждое поле,выводимое на экран,обычно соответствует колон-
     ке в БД.Например,ORDERID,ORDERDATE,CLIENTID  -  это
     колонки  в  таблице  ORDERS.Вы можете двигаться от одного поля к
     другому при помощи клавиш G[Next Field] HиG [Previous Field]H.
     
                               Упражнение 6-4
     Перемещение от поля к полю
     1.Нажмите клавишу G[Previous Field] Hдля перемещения в блок ORDERS.
     2.Нажмите клавишу G[Next Field] Hдва раза.Курсор должен быть  ус-
        тановлен в поле CLIENTID после входа в поле ORDERDATE.
     3.Снова нажмите G[Next Field]H.
        Вместо  перемещения  к  полю NAME,как вы предполагали,курсор
        переместится назад к  ORDERID.Это произойдет потому,что NAME
        было установлено разработчиком формы как невходимое.
        В отличие от ORDERID,ORDERDATE,CLIENTID поле NAME не является
        колонкой в таблице  ORDERS.Когда  вы  вводите  значение  для
        CLIENTID  в  блок  ORDERS,SQL*Forms извлекает имя из таблицы
        CLIENT.Это имя затем автоматически выводится в поле  NAME.В
        качестве  оператора вы узнаете,что вы ввели правильное значе-
        ние для CLIENTID и это поможет вам работать надежнее.
     4.Теперь нажмите клавишу G[Next Block].H Курсор  переместится  от
        поля ORDERID назад в поле CLIENTID (снова пропустив поле NAME).
     5.Нажмите  клавишу G [Previous  Field] H снова.Вы  вернетесь  в
        ORDERDATE.
          Порядок,в котором курсор перемещается от одного поля к дру-
     гому,определяется разработчиком формы.В форме NEWORDER вы пере-
     меститесь  от  поля  ORDERID  к  полю  ORDERDATE   или   к   полю
     CLIENTID.Другая  форма,использующая  те же поля,может иметь их
     расставленнными в другом порядке,например,для  перемещения  от
     ORDERID к CLIENTID.
     
                    GПеремещение от страницы к страницеH
          Хотя   вы   и   просматривали  только  одну  страницу  формы
     NEWORDEER,блок CLIENT_DATA продолжается в следующей странице.Вы
     можете увидеть содержимое второй страницы  при  помощи  следующего
     упражнения.
     
                                 Упражнение 6-5
     Перемещение от страницы к странице
     1.Дважды  нажмите G [Next  Block] H для  поещения  курсора в блок
        CLIENT_DATA.
        Как только вы перейдете в блок CLIENT_DATA,106 автоматически
        выводится на экран в поле CLIENTID.SQL*Forms прочтет это зна-
        чение из этого поля.
     2.Нажимайте G[Next Field] Hдо тех пор пока курсор не установится в
        поле АDRESS.
     3.Нажмите снова G[Next Field].H
        SQL*Forms выведет на экран вторую страницу формы как  показано
        на рис 6-5.
        
     Рис 6-5     Вывод на экран второй страницы формы
      ________________________________________________________________
     |           ========= CLIENT_DATA ===========                    |
     |   CITY xxxxxxxxxx                 ZIP xxxxxxxxxxxx             |
     |  STATE xxxxxxxxx                PHONE xxxxxxxxxxx              |
     |   AREA xxxxxxxxx                                               |
     |                                                                |
     |  char Mode: Replace          Page 2                 Count: *0  |
     |________________________________________________________________|
     Резюмируя  можно представить шаги перехода от страницы к странице
     следующим образом:
     1.Для перемещения от страницы к странице формы поместите  курсор
        в последнее поле текущей страницы и нажмите клавишу G[Next Field].H
     2.Для перемещения к предыдущей странице формы поместите курсор в
        первом поле текущей страницы и нажмите G[Previous Field]H.
     3.Для  перемещения  в  блок,приходящийся на следующую страницу
        расположите курсор в первом блоке текущей страницы и нажмите
        G[Previous Block]H.
     
+                GГлава  7   Извлечение заданных записейH
          В главе 5 вы узнали как извлекать  все  записи,хранимые  в
     таблице.Но если ваша БД содержит очень большое количес-
     тво  записей,то их извлечение займет много времени,а поиск нуж-
     ной еще больше при просмотре по одной.Вместо такого способа мож-
     но выполнить извлечение конкретных записей путем задания критери-
     ев,по которым нужно проводить поиск.SQL*Forms извлечет все  за-
     писи,удовлетворяющие вашему критерию.
          Для ввода запроса с критерием имеется два способа:
     *  Вы можете задать точные значения.Например,в предыдущем разде-
        ле,Передвижение от записи к записи,вы нажимали клавишу
        G[Execute Query]H при появлении значения 303 в поле ORDERID.При
        этом SQL*Forms извлекла только те записи,которые содержат 303
        в поле ORDERID.
     *  Вы можете ввести переменное условие для поиска записи.Например,
        вы можете извлечь все все строки,которые имеют значение для
        ITEMTOT больше $100.
     
                         GСравнение точных значенийH
          Предположим,что  заказчик хочет уточнить стоимость заказа.
     Вы знаете,что заказ был составлен 5 июня 1986г.и что ORDERID - 6.
     В приказе SQL*Forms вы должны точно ввести эти значения для  изв-
     лечения конкретной записи из формы.
      
                                Упражнение 7-1
      Извлечение записи используя блок ORDERS.
     1.Один раз нажмите G[Next Block].HБудет выбран блок ORDERS.
     2.Нажмите G[Enter Query]H.
        При этом очистится блок выведенной записи.На экране появится
        следующее:
     
     Рис 7-1     Ввод запроса
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   хххххххххх        ORDERDATE  ххххххххххх           |
     |   CLIENTID  ххххххххххххххх   NAME ххххххххххххххххххх         |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 303      1       100890    58          3       174             |
     | 303      2       100861    42          2       84              |
     | 303      3       100860    44          10      440             |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |Enter a query.Press PF1 to execute,PF4 to cancel.xxxxxxxxxxx  |
     |v char Mode: Replace          Page 1  ENTER QUERY    Count: 3   |
     |________________________________________________________________|
     3.Введите 6 в поле ORDERID.
     4.Нажмите G[Next Field] Hи введите 05-Jun-86 в поле ORDERDATE.
     5.Нажмите G[Execute Query].H
        SQL*Forms выведет сообщение Working....в нижней части экрана,
        а  затем  выведет на экран информацию для номера заказа 6 (Рис 7-2).
          Эти шаги извлекут запись для заказа номер 6 в блоке  ORDERS,
     но,чтобы найти общую сумму заказа,нужно извлечь записи для за-
     каза 6 и из блока LINEITEMS.
     
     Рис 7-2     Извлечение записи из блока ORDERS
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   6                 ORDERDATE  05-JUN-86             |
     |   CLIENTID  102               NAME  VOLLYRITE                  |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 303      1       100890    58          3       174             |
     | 303      2       100861    42          2       84              |
     | 303      3       100860    44          10      440             |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: 1   |
     |________________________________________________________________|
                                                                   
                               Упражнение 7-2
     Извлечение записи используя блок LINEITEMS
     1.Нажмите G[Next Block].H Отметим,что данные из предыдущей записи
        все еще выведены в блоке LINEITEMS.
     2.Нажмите G[Clear Block]H.
        SQL*Forms  удалит  предыдущую  запись  и заполнит поле ORDERID
        значением 6.(Разработчик формы сделал так,что SQL*Forms  чи-
        тает  значение блока ORDERID и затем выводит на экран это зна-
        чение в блоке LINEITEMS.) Теперь экран будет выглядеть следую-
        щим образом.
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   6                 ORDERDATE  05-JUN-86             |
     |   CLIENTID  102               NAME  VOLLYRITE                  |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 6        хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     | ххххххх  хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     | ххххххх  хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: 3   |
     |________________________________________________________________|
     3.Нажмите G[Execute Query].H
        SQL*Forms найдет запись в таблице LINEITEMS,имеющую  ORDERID
        равное  6.Просматривая  экран можно заметить общую стоимость
        заказа в $224 (см рис 7-4).
     
     Рис 7-4     Извлечение записи из блока LINEITEMS
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   6                 ORDERDATE  05-JUN-86             |
     |   CLIENTID  102               NAME  VOLLYRITE                  |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 6        2       100660    56          4       224             |
     | ххххххх  хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     | ххххххх  хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     | Last row of query retrieved                                    |
     |  char Mode: Replace          Page 1                 Count: *1  |
     |________________________________________________________________|
          Общие шаги для извлечения записей,точно соответствующих за-
     данным значениям,следующие:
     *  Нажимайте G[Next Block] Hдо тех пор пока курсор не установится
        в правильном блоке.
     *  Нажмите G[Enter Query].H
     *  Введите значение (значения),которое вы хотите,чтобы соответ-
        ствовало соответствующему полю.
     *  Нажмите G[Execute Query].H
     *  Нажмите G[Next Record] H илиG [Previous Record]H для просмотра из-
        влеченных записей.
     
                           GВвод переменных условийH
          Иногда  непрактично  вводить  точные значения для сравнения.
     (Например,вы захотите извлечь записи,произведенные в  июне,но
     не  знаете  точной даты.) Точно также может потребоваться извлечь
     записи,соответствующие некоторым переменным условиям.Например,
     можно извлечь:
     *  все записи в LINEITEMS,имеющие сумму более $100.
     *  заказы,для которых ORDERID лежит в пределах 5 - 10
     *  все заказы июня.
          Вместо  ввода точного значения эти примеры требуют,чтобы вы
     вводили в поле переменную.Это можно сделать введя клаузу  Where.
     При  ее помощи можно давать запросы,основанные на неточных усло-
     виях.
          Для применения клаузы Where нужно ввести вместо точных  зна-
     чений переменные.Для обозначения переменной нужно поставить знак
     амперсанд  (&).Он сообщит SQL*Forms,что вы хотите ввести клаузу
     Where.
     
                       GЗадание диапазона значенийH
          Следующее упражнение покажет вам как извлечь все заказы июня.
     
                               Упражнение 7-3
     Задание диапазона значений
     
     1.Нажмите G[Previous Block] H один  раз  для  перемещения  в  блок
        ORDERS.
     2.Нажмите G[Enter Query].H
        Как и в предыдущем разделе при этом очистится  блок  предвари-
        тельно выведенной записи.
     3.Нажмите G[Next Field]H для перемещения в полe ORDERDATE.
     4.Введите &DATE в поле ORDERDATE.
        Вместо  ввода  точного значения (например 05-JUN-86) вам нужно
        ввести переменную.Знак амперсанд индицирует ее.Имя переменной
        идентифицирует  поле и на него можно ссылаться в клаузе Where.
     5.Нажмите G[Execute Query].H
        SQL*Forms выведет сообщение Query Where ...? и поместит курсор
        после этого сообщения.Теперь вы можете ввести условия,по ко-
        торым  нужно  извлечь  записи.В этой точке экран будет как на
        рис 7-5.
        
     Рис 7-5     Ввод имени переменной
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID  хххххххххх         ORDERDATE  &DATE                 |
     |   CLIENTID xxxxxxxxxx         NAME  xxxxxxxxxxxxx              |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 6        2       100660    56          4       224             |
     | ххххххх  хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     | ххххххх  хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   |
     | Query Where ...?                                              |
     |________________________________________________________________|
     6.Введите &DATE BETWEEN '01-JUN-86' AND '30-JUN-86'
        Эта  запись  сообщает  SQL*Forms,что нужно выбрать все записи
        у которых ORDERDATE - июнь.(См рис 7-6.) Если вы ошиблись при
        вводе запроса,то можете его скорректировать при помощи клави-
        ши G[Delete Character]H,удаляющей символ под курсором.Для  пе-
        ремещения курсора можно применить соответствующие клавиши.
        
     Рис 7-6     Ввод переменных условий
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID  хххххххххх         ORDERDATE  &DATE                 |
     |   CLIENTID xxxxxxxxxx         NAME  xxxxxxxxxxxxx              |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 6        2       100660    56          4       224             |
     | ххххххх  хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     | ххххххх  хххххх  хххххх    хххххххххх  ххх     ххххххх         |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   |
     | Query Where ...?  &DATE BETWEEN '01-JUN-86' AND '30-JUN-86'   |
     |________________________________________________________________|
          Резюмируя,для ввода клаузы Where нужно выполнить следующие шаги:
     *  нажимать G[Next Block]H до тех пор,пока курсор не установится  в
        правильном блоке,
     *  нажать G[Enter Query]H,
     *  вместо ввода значения в поле введите имя переменной (например,
        &ORDERID или &DATE),
     *  нажмите G[Execute Query]H
     *  после появления сообщения Query Where ...? введите условие,ко-
        торое нужно соблюсти,
     *  нажмите G[Return]H,
     *  нажмите  клавиши G[Next Record]H илиG [Previous Record]H для прос-
        мотра извлеченных записей.
     
                    GДругие способы использования клаузы WhereH
          В предыдущем примере вы ввели клаузу Where,задающую  диапа-
     зон  извлекаемых  записей (Значение ORDERDATE должно лежать между
     01-JUN-86 и 30-JUN-86).Таблица ниже представляет  дополнительные
     способы  использования  этой  клаузы в запросах.Смотри Часть III
     данной книги для получения более подробной информации о конструи-
     ровании клауз Where.
     
     Таблица 7-1    Использование в запросах клауз Where
     Цель                                         Примеры
     
     Для извлечения записей,которые имеют         &CLIENTID = 106
     значение больше чем (>),больше или равно     &ITEMTOT >= 100
     (>=),меньше чем (<),меньше или равно        &NAME !='SHAPE UP'
     равно (=) или не равно (!=).                &ORDERID < 305
     
     Для выражения запроса,удовлетворяющего       &PRODID =100860 OR
     одному из двух условий                        &PRODID =100861
     
     Для выражения запроса с двумя условиями,   &ORDERDATE =
     которые должен удовлетворить запрос           '14-JUL-86' AND
                                                   &CLIENTID= 106
     
+                        GГлава 8   Модификация БДH
          После ввода записи в БД  ее  можно  модифицировать
     путем  изменения значений полей (это называется обновлением запи-
     си) или путем удаления всей записи.
          В данной главе показано как
     *  обновлять запись
     *  сохранять результаты работы
     *  удалять информацию из БД.
     
                             GОбновление записиH
          Иногда нужно извлечь запись для просмотра информации в  ней,
     но чаще это необходимо для изменения этой информации.Когда бы ни
     возникала  необходимость  изменения записи БД,сперва ее
     нужно извлечь и вывести на экран.
          Предположим,что клиент Shape Up захотел изменить заказ  но-
     мер 303.Он хочет отменить заказ на две ракетки Ace Tennis Racket
     II    (PRODUCTID=100861)    и   заказать   три   другие   ракетки
     (PRODUCTID=101863).
     
                               Упражнение 8-1
     Вывод на экран записи для обновления
     1.Убедитесь,что курсор находится в блоке ORDERS.
     2.Нажмите G[Enter Query]H
     3.Введите G303H в поле ORDERID.
     4.Нажмите G[Execute Query]H.
        SQL*Forms извлечет запись для заказа 303.
     5.Нажмите G[Next Block]H для пермещения в блок LINEITEMS.
     6.Нажмите G[Clear Block]H.
        Значение,выведенное в поле ORDERID,это текущий номер заказа -
        303.Это значение по умолчанию,помещаемое в данное место раз-
        работчиком формы.
     7.Нажмите G[Execute Query]H.
        SQL*Forms извлечет три объекта,составляющие заказ 303.
        На экране будет картинка,соответствующая рис 8-1.
     
     Рис 8-1     Вывод на экран записи для обновления
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   303               ORDERDATE  14-JUL-86             |
     |   CLIENTID  102               NAME  SHAPE-UP                   |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 303      1       100890    58          3       174             |
     | 303      2       100861    42          2       84              |
     | 303      3       100860    44          10      440             |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: 3   |
     |________________________________________________________________|
          Теперь,после  вывода на экран правильной записи,вы можете
     ее скорректировать по изменениям,заданным  клиентом.Вспомним,
     что он хотел отменить заказ 2 и заменить его на другой заказ.
     
                                 Упражнение 8-2
     Модификация выведенной на экран записи
     1.Нажмите клавишу G[Next Record]H для перемещения в запись со зна-
        чением 2 в поле ITEMNO.
     2.Нажмите клавишу G[Clear Record]H
        Блок  с двумя записями LINEITEMS выводится на экран.Следующий
        шаг - введение новой записи.
     3.Нажмите клавишу G[Next  Record]H  для  перемещения  в  следующую
        строку.
        SQL*Forms  выведет на экран 303 в качестве значения по умолча-
        нию для ORDERID.
     4.Нажмите клавишу G[Next Field]H для перемещения в ITEMNO.
     5.Введите 2 в поле ITEMNO и нажмите G[Next Field]H.
     6.Введите G10186H в поле PRODID и нажмите ту же клавишу.
        SQL*Forms выведет сообщение Field must be entered completely
        (см рис 8-2).PRODID - это пример  поля  фиксированной  длины.
        Поскольку  все номера идентификации продуктов содержат 6 цифр,
        разработчик формы определил,что курсор не  может  перейти  из
        этого поля пока не будет введено число из 6 цифр.
     
     Рис 8-2     Ввод поля фиксированной длины
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   303               ORDERDATE  14-JUL-86             |
     |   CLIENTID  102               NAME  SHAPE-UP                   |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 303      1       100890    58          3       174             |
     | 303      2       100861    42          2       84              |
     | 303      3       10186     ххххххх     ххх     хххх            |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     | Field must entered completly   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: *3  |
     |________________________________________________________________|
     7.Перевведите PRODID как 101863 и нажмите G[Next Field]H
     8.Введите 12.50 в следующем поле и нажмите G[Next Field].H
     9.Введите 3 и поле QTY и нажмите G[Next Field]H.
        Как только курсор перместится в поле ITEMTOT,SQL*Forms вычис-
        лит и выведет на экран общую стоимость рбъекта (рис 8-3).Раз-
        работчик формы сделал так,чтобы SQL*Forms умножила значение в
        поле ACTUALPRIC на значение в поле QTY (количество).Результи-
        рующее  число  появится  в поле ITEMTOT,когда курсор войдет в
        это поле.
     
     Рис 8-3     Ввод объекта в новую строку
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   303               ORDERDATE  14-JUL-86             |
     |   CLIENTID  102               NAME  SHAPE-UP                   |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 303      1       100890    58          3       174             |
     | 303      2       100861    42          2       84              |
     | 303      3       101863    12.50       3       37.5            |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count:*3   |
     |________________________________________________________________|
          Теперь все поля в форме обновлены.Разработчик  может  сде-
     лать  некоторые поля необновляемыми.Следующее упражнение показы-
     вает что произойдет,если вы попытаетесь обновить такое поле.

     Упражнение 8-3     Модифицирование необновляемых полей
     1.Нажмите клавишу G[Previous Block]H для перемещения в блок ORDERS.
     2.Попытайтесь ввести какое-либо число в блоке ORDERID.
        SQL*Forms выводит на экран сообщение Field is protected against
        update  (см  Рис 8-4).Разработчик сделал это поле необновляе-
        мым,чтобы предотвратить случайное изменение идентифицирующего
        номера заказа.ORDERID имеет уникальное значение и это единст-
        венный способ связывания информации в таблице ORDERS с  инфор-
        мацией  в  таблице  LINEITEMS.Сообщение об ошибке устраняется
        при нажатии на любую клавишу.
        
     Рис 8-4     Встреча необновляемого поля
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   303               ORDERDATE  14-JUL-86             |
     |   CLIENTID  106               NAME  SHAPE-UP                   |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 303      1       100890    58          3       174             |
     | 303      2       100861    42          2       84              |
     | 303      3       101863    12.50       3       37.5            |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  106                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     | Field is protected against updatexxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: 1   |
     |________________________________________________________________|

                       GСохранение результатов работыH
          Когда вы изменили запись в форме,то эти изменения не войдут
     в  БД до тех пор,пока вы не примете соответствующие ме-
     ры.Для сохранения записи,которую вы добавили в блок  LINEITEMS,
     нужно выполнить следующее упражнение.
     
                                 Упражнение 8-4
     Сохранение результатов работы
     1.Убедитесь,что   вы  используете  форму,содержащую  блок
        LINEITEMS,поскольку туда вы добавляете запись.(Отметим,что
        G[Commit] Hработает в текущей форме.)
     2.Нажмите G[Commit].H
        SQL*Forms выводит сообщение Transaction completed -- 1 record
        processed.Это значит,что в БД введена одна запись.
     
                         GУдаление информации из БДH
          Другой способ модифицировать содержимое БД  -  уда-
     лить всю запись.Например,может потребоваться:
     *  удалить строку их заказа
     *  отменить весь заказ
     *  удалить клииента из БД.
          Предположим,что Shape Up решил отменить заказ на ракетки SP
     (PRODID  101863).Упражнение  далее показывает как удалить вновь
     введенную запись.(При этом восстановится БД в  исходном виде.)
     
                                 Упражнение 8-5
     Удаление записи
     1.Убедитесь,что курсор расположен  в блоке LINEITEMS.
     2.Нажимайте клавишу G[Next Record]H до тех пор пока курсор не ус-
        тановится на записи,у которой ITEMNO - 2.
     3.Нажмите G[Delete Record].H
        Это маркирует запись для удаления,но SQL*Forms удалит ее пока
        вы не нажмете G[Commit].HВ этой точке ваш экран  будет  как  на
        рис 8-5.
     
     Рис 8-5     Удаление записи
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   303               ORDERDATE  14-JUL-86             |
     |   CLIENTID  106               NAME  SHAPE-UP                   |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 303      1       100890    58          3       174             |
     | 303      2       100861    42          2       84              |
     | 303      ххххх   хххххх    ххххххххх   ххх     хххххх          |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  хххххххххххххх                                  |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     | Last row of query retrieved xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: *4  |
     |________________________________________________________________|
     4.Нажмите G[Commit] Hдля удаления записи.
        SQL*Forms выведет следующее сообщение Transaction completed --
        1 record processed.
          Хотя  запись  с  PRODID равным 101863 была удалена,исходная
     запись (с PRODID 100861) все еще имеется в БД.Помните,
     что  вы  ее  не удалили,вы просто очистили ее в офрме при помощи
     нажатия клавиши G[Clear Record]H.Для того,чтобы  убедиться,что
     эта запись все еще в БД,выполните следующее упражнение.
     
                               Упражнение 8-6
     Проверка  существования записи в БД
     1.Убедитесь,что  курср  находится  в  поле  ORDERID  блока LINEITEMS.
     2.Нажмите G[Execute Query].H
        При этом  SQL*Forms  извлечет  все  записи  в  LINEITEMS,где
        ORDERID равен 303.Отметим,что запись,которую вы ввели и со-
        ответственно удалили,еще не находится в БД.А исход-
        ная запись в ней.
     
+                   GГлава  9   Добавление новых записейH
          В этой главе вы узнаете как добавлять новые записи в данные.
     Вы   можете   сделать   это  составив  блоки  ORDERS,ILNEITEMS,
     CLIENT_DATA.
     
                           GСоставление блока ORDERSH
          Когда бы ни был принят новый заказ,его нужно добавить в ка-
     честве новой записи в БД.Предположим,что  вы  приняли
     заказ на три позиции от магазина Just Tennis (см Рис 9-1).Упраж-
     нение 9-1 покажет вам как вводить новую запись в БД.
     
     Рис 9-1     Пример заказа
     -----------------------------------------------------------------
     SHIP TO:                                     ORDER NO.306
     JUST TENNIS        CLIENT I.D.103          DATE сегодняшняя дата
     HILLVIEW MALL      PHONE  415 677-9312
     BURLINGAME,CA 97544
     __________________________________________________________________
     | ITEM |  PRODUCT  |    DESCRIPTION      | PRICE | QTY  |  ITEM   |
     |  NO  |     NO    |                     |       |      |  TOTAL  |
     -------------------------------------------------------------------
     |  1   |   100860  | ACE TENNIS RACKET I |  $35  |   5  |  $175   |
     |      |           |                     |       |      |         |
     |  2   |   100870  | TENNIS BALLS,3 PACK |  $2.80|   10 |  $28    |
     |      |           |                     |       |      |         |
     |  3   |   100890  |      TENNIS NET     |  $58  |   1  |  $58    |
     -------------------------------------------------------------------

                                Упражнение 9-1
     Составление блока ORDERS
          Первая  часть  заказа  содержит общую информацию о клиенте и
     заказе.Для заполнения блока ORDERS выполните следующие шаги:
     1.Установите курсор в блок ORDERID и нажмите G[Clear Block].H
     2.Введите 306 в поле ORDERID и нажмите G[Next Field].H
        Отметим,что поле ORDERDATE было заполнено сегодняшней  датой.
        Эта возможность установлена разработчиком формы.Поскольку вы
        вводите заказ в тот же день,в котором его получили,то вам не
        нужно изменять дату.
     3.Нажмите G[Next Field]H для воспринятия значения поля ORDERDATE и
        перемещения курсора в поле CLIENTID.
     4.Введите 103 в этом поле и нажмите G[Next Field]H.
        После  нажатия G [Next Field]H SQL*Forms выведет на экран в поле
        NAME Just Tennis и перемести курсор назад в поле  ORDERID  (см
        рис 9-2).Помните,что NAME было спроектировано так,чтобы  вы
        водить  на  экран  только поле.Когда вы введете значение для
        CLIENTID,SQL*Forms прочтет это значение,просмотрит имя этого
        клиента в таблице CLIENT и выведет на экран как значение в поле
        NAME.
     
     Рис 9-2     Завершенный блок ORDERS
      ________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   306               ORDERDATE  17-OCT-86             |
     |   CLIENTID  103               NAME  JUST TENNIS                |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     | xxxxxxx  xxxxxx  xxxxxx    xxxxxxxxxx  xxx     xxxxxxx         |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  xxxxxxxxxxx                                     |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     |xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: *0  |
     |________________________________________________________________|
     
                      GСоставление  блока  LINEITEMSH
          Блок LINEITEMS - это блок в котором вы храните специфическую
     информацию о заказываемых предметах.Следующее упражнение говорит
     о его составлении.
     
                                 Упражнение 9-2
     Составление блока LINEITEMS
     1.Нажмите G[Next Block] Hдля перемещения в блок LINEITEMS.
        По умолчанию в поле ORDERID появится 306 - новый номер заказа.
     2.Подтвердите его номер заказа нажав G[Next Field]H.
     3.Введите заказываемые объекты как показано в следующей таблице.
        Первая  колонка  -  это вводимое значение,вторая - имя поля и
        последняя колонка - указывает,что делать дальше.
        
     Вводить     В поле                    Затем нажать
     -------     ---------------------     ------------
     1           ITEMNOG                    [Next Field]H
     100860      PRODID                    G[Next Field]H
     35          ACTUALPRIC                G[Next Field]H
     5           QTY                       G[Next Field] Hзатем
                                           G[Next RecordH
     2           ITEMNO                    G[Next Field]H
     100870      PRODID                    G[Next Field]H
     2.80        ACTUALPRIC                G[Next Field]H
     10          QTY                       G[Next Field]H
                                           G[Next Field]H затем
     3           ITEMNO                    G[Next Record]H
     100890      PRODID                    G[Next Field]H
     58          ACTUALPRIC                G[Next Field]H
     1           QTY                       G[Next Field]H
     
          Ваш  второй  экран должен выглядеть как Рис 9-3.Можно заме-
     тить,что при курсоре в поле QTY нажатие G[Next Field]H приведет  к
     вычислению  значения  ITEMTOT.Сравнивая  это число с заказом мы
     проверяем точность заказа.
     
     Рис 9-3     Завершенный блок LINEITEMS
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   306               ORDERDATE  17-OCT-86             |
     |   CLIENTID  103               NAME  JUST TENNIS                |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 306      1       100860    35          5       175             |
     | 306      2       100870    2.80        10      28              |
     | 306      3       100890    68          1       68              |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  хххххххххххххх                                  |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  |
     |  char Mode: Replace          Page 1                 Count: *0  |
     |________________________________________________________________|
     
                      GСоставление блока CLIENT_DATAH
          Блок CLIENT_DATA содержит информацию  о  клиенте,например,
     имя,адрес и так далее.Для составления этого блока выполним сле-
     дующее упражнение.
     
                                 Упражнение 9-3
     Составление блока CLIENT_DATA
     1.Нажмите G[Next Block]H для перемещения в блок CLIENT_DATA.
        Отметим,что идентификатор клиента 103 автоматически вводится
        в блок CLIENTID.
     2.Нажмите G[Next Field].H
        После перемещения в поле NAME SQL*Forms выводит на экран сооб-
        щение Press [List Field Values] key to view client names.(См
        рис  9-4).В  любом  поле формы разаработчик может обеспечить
        список значений полей,которые нужно разыскать.
     
     Рис 9-4     Вывод на экран списка значений полей
     _________________________________________________________________
     |           =========  ORDERS ============                       |
     |   ORDERID   306               ORDERDATE  17-OCT-86             |
     |   CLIENTID  103               NAME  JUST TENNIS                |
     |                                                                |
     |           =========  LINEITEMS ==========                      |
     | ORDERID  ITEMNO  PRODID    ACTUALPRIC  QTY     ITEMTOT         |
     | 306      1       100860    35          5       175             |
     | 306      2       100870    2.80        10      28              |
     | 306      3       100890    68          1       68              |
     |                                                                |
     |           =========  CLIENT_DATA ========                      |
     |      CLIENTID  103                                             |
     |          NAME  xxxxxxxxxxxxxx                                  |
     |       ADDRESS  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx              |
     | Press [List of Field values] key to view client names          |
     |  char Mode: Replace          Page 1                 Count: *0  |
     |________________________________________________________________|
     3.Нажмите G[List of Field Values].H
        SQL*Forms  выводит  на  экран  сообщение Press [Next Field] to
        retrieve next value,[Exit/Cancel]  to  stop.(Нажмите  [Next
        Field]  для  извлечения следующего значения,[Exit/Cancel] для
        останова.)
     4.Нажмите G[Return] Hтри раза до тех пор пока заказчик Just Tennis
        не появится на экране в поле Field.
     5.Нажмите G[Exit/Cancel] Hдля воспринятия этого значения и нажмите
        клавишу G[Next Field].H
     6.Введите GHillview MallH в поле ADDRESS и нажмите  клавишуG  [NextH
        GField]H.
        Вы будете находиться в странице 2 формы.
     7.Введите GBurlingame Hдля поля CITY и нажмите G [Next Field]H.
     8.Введите GcaH маленькими буквами в поле STATE.
        Отметим,что хотя вы ввели название штата маленькими буквами,
        SQL*Forms преобразует его в большие буквы.Это получается пос-
        кольку  разработчик объявил это поле как поле в больших буквах.
        Кроме того,как только вы ыввели аббревиатуру штата,курсор ав-
        томатически  перейдет к следующему полю даже если вы не нажали
        клавишу G[Next Field]H.В этом случае разработчик  объявил  это
        поле  как автоматически проходимое.Как только вы введете необ-
        ходимое количество символов в это поле,курсор автоматичес-
        ки перейдет в соседнее поле.Конечно,эта возможность  реализу-
        ется только в полях,в которые вводится одно и то же количест-
        во  символов.
        Теперь вы находитесь в поле ZIP и отметим,что SQL*Forms авто-
        матически  выведет  сообщение  подсказки Enter the 9-digit ZIP
        code,if available (введите код ZIP из 9 цифр.)  См  рис  9-5.
        Разработчик  формы  может  выбрать  возможность автоматической
        подсказки в некоторых полях.
     
     Рис 9-5     Вывод  подсказки на экран автоматически
     _________________________________________________________________
     |           =========  CLIENT_DATA ========                      |
     |       CITY   BURLINGAME                                        |
     |      STATE   CA                       ZIP                      |
     |       AREA                            PHONE                    |
     |                                                                |
     |  Enter the 9-digit ZIP code,if available                      |
     |  char Mode: Replace          Page 1                 Count: *0  |
     |________________________________________________________________|
     9.Введите G97544 Hи нажмите G [Next Field]H.
     10.Введите G415H в поле AREA.
        Это поле имеет возможность автопропуска,так что вы перешли  в
        поле PHONE.
     11.Введите G 677-9312H  в  поле PHONE.В этой точке экран будет как
        на рис 9-6.
     12.НажмитеG [Commit]H для сохранения сделанной вами ммодификации в
        При этом ваша запись будет сохранена.
     
     Рис 9-6     Страница 2 блока CLIENT_DATA
     _________________________________________________________________
     |           =========  CLIENT_DATA ========                      |
     |       CITY   BURLINGAME                                        |
     |      STATE   CA                       ZIP  97544               |
     |       AREA   415                      PHONE  677-9312          |
     |                                                                |
     |  char Mode: Replace          Page 1                 Count: *0  |
     |________________________________________________________________|
                                                           
Примечание:  Если это реальная система и данный клиент существует,то вам
     не нужно завершать информацию в  CLIENT_DATA.Вместо  этого  при
     курсоре  расположенном  в  поле  CLIENTID с выведенным правильным
     значением,нужно нажать G[Execute Query].HПри этом SQL*Forms выве-
     дет данные для данного CLIENTID.
          Как только вы завершите свою работу,и сохраните изменения в
     БД,нажмите G[Exit/Cancel].HНа этом сессия  завершится  и
     вы  возвратитесь в командную строку.Из нее можно ввести имя дру-
     гой формы.
          В данной главе вы узнали как добавлять записи в БД.
     Вы узнали как получить помощь системы.Часть III  содержит  спра-
     вочный материал для просмотра информации данного пособия.
     
+                          GЧасть  III    CправкиH
                       GГлава  10   Основы  SQL*FormsH
          Глава  10 содержит основы SQL*Forms.Обратитесь к этой главе
     если вам нужно узнать как:
     *  выбрать блок
     *  отредактировать запись
     *  выполнить горизонтальную прокрутку
     *  работать с несколькими блоками
     *  завершить сессию редактирования.

                                GВыбор блокаH
          Перед  добавлением или модификацией информации в БД
     вы должны выбрать блок,соответствующий таблице,которую вы хоти-
     те изменить.
     
                                Упражнение 10-1
     Выборка блока
     1.Войдите в ОС компьютера.
     2.Запустите форму,содержащую нужный вам  блок.(Для  получения
        дополнительной информации о запуске формы обратитесь  к  главе
        2,Запуск формы.)
     3.Теперь  нужно  выбрать  блок  при помощи клавиш G[Next Block],H
        G[Previous Block],[Menu].H
          Отметим,что если вы забыли имя формы,то  попросите  вашего
     администратора  БД (АБД) вывести на экран список доступ-
     ных форм.
          Когда вы запрашиваете БД  или  вводите,обновляете
     или  удаляете  записи,ваше требование адресует текущий блок.В
     начале первый блок - это текущий.Для создания текущим следующего
     блока нажмите клавишу G[Next Block]H,а  предыдущего  -G  [PreviousH
     GBlock]H.
          Для выборки блока из меню нужно нажать G[Menu]H и ввести номер
     блока.G [Menu]H  также  дает обзор многостраничных форм,поскольку
     оно перечисляет все блоки формы.
     
                           GРедактирование записиH
          Создание изменений в записи - это  основное  задание.Перед
     модификацией  данных в поле блока нужно знать как перемещать кур-
     сор в это поле.Как только вы позиционировали курсор,вы  можете
     модифицировать  данные путем замены,ввода или удаления символов.
     Кроме того,может понадобиться стереть все содержимое  поля.Этот
     раздел показывает как  выполнять эти задания.
     
                            GПеремещение курсораH
          Когда вы вводите или редактируете информацию,вы работаете с
     текущим полем.Для установки текущим следующего поля нажмите кла-
     вишу G [Next Field]H,предыдущего -G [Previous Field]H.Если значение
     поля недостоверно,однако,SQL*Forms не позволит курсору его  по-
     кинуть  прежде  чем  вы  не исправите ошибку.Например,если поле
     требует число между 100 и 999,то курсор  не  перейдет  в  другое
     при вводе 99 или 100А.
          Если поле имеет возможность автопропуска,то курсор перейдет
     в  следующее  поле как только вы ввели нужное число символов.Это
     свойство применяется для минимизации нажатий клавиш.
          Если блок занимает две или более страницы,SQL*Forms выводит
     правильную страницу для текущего  поля.Таким  образом,нажимая
     G[NextH GField] Hили G[Previous Field]H можно приказать SQL*Forms вывес-
     ти на экран следующую страницу.
          При  работе в поле применяйте клавиши G[Left]H для перемещения
     на одну позицию влево иG [Right]H - вправо.Если  ваш  тепминал  не
     имеет этих клавиш или они не выполняют таких функций,то попроси-
     те вашего АБД указать такие клавиши.
     
                     GЗамена,ввод или удаление символовH
          SQL*Forms позволяет вам вводить символы при  помощи  одного
     из двух методов: вводить или замещать.Вы можете переключаться на
     один из них при помощи клавиши G[Insert/Replace].HСтрока статуса
     (если  она  видима) выводит текущий режим в данное время.Однажды
     установленный он остается активным до тех пор пока вы его не пере-
     установите.
          Когда  SQL*Forms находится в режиме замены,то каждый вводи-
     мый символ заменяет символ над курсором.Когда SQL*Forms - в  ре-
     жиме  ввода,каждый  символ,вводимый вами,помещается на место
     курсора и символ,бывший на курсоре,и следующие за ним сдвигаются
     вправо.
          Когда SQL*Forms в режиме ввода и поле заполнено,то  вы  не
     можете ввести следующие символы.Они игнорируются.
          Для удаления символа поместите курсор в этот символ и нажми-
     те клавишу G[Delete character].HКогда курсор помещается после пос-
     леднего символа,то никакого действия не будет.Эти клавиши рабо-
     тают одинаково в обеих режимах.
     
                                GОчистка поляH
          Клавиша G [Erase  Field] H стирает  значение поля от положения
     курсора до конца поля.Еесли курсор находится в начале  или  конце
     поля,то стирается все поле.
     
                     GВыполнение горизонтальной прокруткиH
          Поле блока м.б. короче чем соответствующее поле табли-
     цы.Поле блока м.б. короче чем значение,которое оно содер-
     жит.При  этих  условиях  SQL*Forms выводит на экран значение по
     частям и вам нужно его двигать влево или вправо при необходимости
     увидеть все значение.Такая  операция  называется  горизонтальной
     прокруткой.
          При  редактировании поля SQL*Forms прокручивает его так,что
     курсор всегда остается видимым.Таким образом  вы  можете  видеть
     все  значение  просто перемещая курсор от одного края значения до
     другого при помощи соответствующих клавиш.
          Строка статуса выведет знак "<" при начале значения  скрытом
     с экрана и ">" - при конце.
     
                         GРабота с несколькими блокамиH
          При  помощи SQL*Forms вы можете работать только с одним бло-
     ком в данный момент.Этот блок называется текущим.Например,если
     нажали клавишу G[Next Record]H,SQL*Forms выведет на экран  следую-
     щую  запись  в текущем блоке; другие блоки не затрагиваются.Если
     вы ввели несколько новых записей,то они вводятся в таблицу,со-
     ответствующую текущему блоку.В большинстве форм текущий блок из-
     меняется  только  по  требованию,например,когда вы нажали G[NextH
     GBlock]H илиG [Previous Block]H.
          При работе с несколькими блоками выводите на  экран  нужный,
     делайте  изменения  и переходите к другим блокам при помощи соот-
     ветствующих клавиш.Некоторые формы могут  потребовать  данные  в
     нескольких блоках перед выполнением одной транзакции.Если в фор-
     ме  есть  несколько  блоков,то определите последовательно какие
     блоки вам обрабатывать.
     
                       GЗавершение сессии редактированияH
          По окончании работы с формой нажмите  клавишу G [Commit]H  для
     записи   ваших  изменений  в  БД.Затем  нужно  нажать
     G[Exit/Cancel]H и SQL*Forms возвратит вас в командную строку системы.
          
+                        GГлава 11   Извлечение записейH
          Для обновления информации БД нужно знать как ее из-
     влекать.Перед извлечением записей вам нужно знать как:
     *  выполнить запрос
     *  извлечь все записи в таблице
     *  извлечь избранные записи.
          Выполнение запроса и извлечение всех записей таблицы  доста-
     точно  просто,а извлечение избранных записей требует соображения,
     особенно если вы примените сложные критерии поиска.
     
                              GВыполнение запросаH
          При  выполнении  запроса SQL*Forms подает записи из таблицы,
     соответствующей текущему блоку,на экран,обычно по одной в  еди-
     ницу  времени.Простейший запрос подает все записи таблицы.Более
     изощренные запросы используют критерии поиска,по которым выбира-
     ют   только некоторые записи.
          Для выполнения запроса проходят пять шагов:
     1.инициализация запроса
     2.ввод критериев поиска (не обязательно)
     3.выполнение запроса
     4.подача соответствующих записей.
     
                            GИзвлечение всех записейH
         Упражнение 11-1 показывает как извлечь все записи из таблицы БД.
     
                                  Упражнение 11-1
     Извлечение всех записей
     1.Получите имя формы,из которой нужно извлечь записи.
     2.Запустите эту фориу.
     3.Выбирите блок,который будет извлекать записи таблицы при помощи
        клавиш G[Next Block] HилиG [Previous Block].H Можно выбрать блок и
        из меню при помощиG [Block Menu]H.
     4.Нажмите G[Execute Query]H для исполнения запроса.
     5.SQL*Forms выведет на экран первую выбранную запись,а если те-
        кущий блок обрабатывает несколько записей,то они будут  показаны.
          После просмотра первой записи выводите последующие при помо-
     щи  клавиши G[Next Record]H и возвращайтесь к предыдущим при помощи
     клавишиG [Previous Record]H.При работе с блоком со многими запися-
     ми применяйте клавишуG [Next Set of Records]H.
          Поле Count в строке статуса показывает сколько записей выда-
     но запросом.Прокручивая эти записи вы счетчик не меняете.После
     извлечения последней записи и при попытке обратиться за следующей
     перед  счетом  появится  звездочка (*),сообщающая о выборке всех
     записей.
          Если вы попытаетесь извлечь больше записей после  последней,
     то  SQL*Forms  выведет сообщение Last Record of query retrieved и
     поместит курсор на пустую запись,следующую за последней  выбран-
     ной.Теперь вы можете ввести новую запись путем ввода значений в
     пустые поля.
          Если данные были в вашем блоке  обновлены  после  последнего
     сохранения,то G[Execute Query] Hзаставит SQL*Forms вывести на эк-
     ран сообщение Commit change? (сохранение изменить?).Если вы вве-
     дете GYH и нажметеG [Next Field]H,то SQL*Forms  сохранит  изменения.
     Если же вы ответитеG N Hи нажметеG [Next Field]H,то она сотрет изме-
     нения.В любом случае SQL*Forms инициализирует новый запрос.
     
                         GИзвлечение избранных записейH
          Упражнение  11-2 показывает как извлекать избранные записи
     при помощи критериев поиска,требующих точного совпадения.
     
                                  Упражнение 11-2
     Извлечение избранных записей
     1.Переместите курсор в поле,которое вы хотите запросить.
     2.Нажмите G[Enter Query].H
     3.Определите поле и значение,которое вы хотите использовать как
        критерий поиска.
     4.Переместите курсор в это поле и введите соответствующее значение.
     5.Нажмите  G[Execute Query]H.
        SQL*Forms выведет первую встреченную запись,отвечающую критерию.
     6.Для вывода на экран следующей записи нажмите G[Next  Record]H  и
        так далее.
          Вы  можете извлечь записи при помощи значений в двух и более
     полях путем перемещения курсора  в  эти  поля  и  ввода  значений.
     SQL*Forms  выдаст  только записи,удовлетворяющие этим критериям.
     Например,если вы ввели SALESMAN в поле по имени "Job" и 0 в поле
     под названием "Commission",то запрос выберет записи с соответст-
     вующими значениями в этих полях.Можно выбрать записи,значения
     в  которых  удовлетворяют  некоторым  образцам.Для этого введите
     значение в поле,где
      _  представляет любой символ
      %  представляет любую комбинацию нескольких символов (а также  их
         отсутствие)
Например:
     Образец              Возможные совпадения
     
     JON_S                JONES,JONAS,JONOS,JONQS,JON-S
     S_AR_                SMART,SNARE,SHARE
     ENTER%               ENTER,ENTERS,ENTERED,ENTERTAU
     _IN%S                BINS,FINES,WINNERS,WINEMAKERS
     
                         GИзвлечение диапазона записейH
          Предыдущий  раздел  показал  как определять критерии поиска,
     что показывает как выбирать записи в которых некоторые поля равны
     заданным значениям.Существуют другие способы определения  крите-
     риев поиска.Например,вы можете сообщить SQL*Forms искать записи
     в  которых некоторые поля больше или не равны заданным значениям.
     Для этого нужно ввести оператор отношения  с  значением,которое
     нужно  проверять.(Обратитесь к таблице 11-1,где задан список та-
     ких операторов.)
     
Таблица 11-1     Операторы отношения
     Оператор     Значение                 Примеры
                                    Символ             Число
     
     =            равно             # ='SMITH'         = 2000
     !=           не равно          # != '12-JUN-86'   != 19.5
     >            больше чем        # > 'SMITH'        > 100.00
     >=           больше или равно  # >= '01-JAN-86'   >= 2000
     <            меньше            # < 'SMITH'        < 19.5
     <=           меньше или равно  # <= 'SMITH'       <= 100.00
     BETWEEN      между a и b       # BETWEEN 'A' AND  BETWEEN 1000
                                    'AXXXX'            AND 2000
          Например,для  выборки  записи,в которой плата больше чем
     $2,000,нужно ввести в  поле  salary  значениеG  >2000 H и  нажмите
     G[Enter Query].H Символ > - это оператор отношения,означающий боль-
     ше чем заданное значение - 2000.
          Если  поле  содержит значение символа то вы должны поставить
     перед оператором отношения знак #.Например,если вы просматрива-
     ете работников с фамилиями,не начинающимися на С,то нужно ввес-
     ти #!='C%'.
          Отметим,что поля,содержащие  символ  или  значения  данных
     нужно заключать в кавычки.
          Если вы не знаете значение поля,то сделайте следующее:
     1.Нажмите G[Help] Hдля подсказки о полях.
     2.Поищите поле Type.Если тип поля - CHAR или ALPH,то нужно пе-
        ред оператором поставить знак #.
     3.Если  тип  поля  - CHAR,ALPHA,DATE,JDATE,EDA,то значение
        нужно заключить в одиночные кавычки.
     4.Нажмите любую функциональную клавишу для перевывода  на  экран
        страницы формы.
          Для значений символов (типа CHAR,ALPHA) операторы отношения
     типа больше чем подразумевают последовательность символов в алфа-
     витном  порядке.Подробнее  эта последовательность обсуждается в
     приложении В.
     
                    GИспользование сложных критериев поискаH
          Вы можете ввести запрос с более сложным критерием сравнения,
     чем описано выше.Например,можно выбрать записи:
     *  в которых "Job" имеет одно из следующих значений.
     *  в которых "Job" - MANAGER или поле Salary  больше  2000.(Ввод
        значений в поля Job и Salary приведет к выборке записей,в ко-
        торых "Job" - MANAGER и Salary больше 2000.)
     *  в  которых имеются более сложные выборы типа "Job" - SALESMAN,
        Salary >2000 или "Commission" - 0.
     
                                Упражнение 11-3
     Использование сложных критериев поиска
     1.Нажмите G[Enter Query].H
     2.Для каждого вводимого поля введите амперсанд (&) и  букву  или
        короткое слово.Например,введите G&SALH в поле Salary  иG  &JH  в
        поле названия работы.
     3.Нажмите G[Execute Query]H.
     4.В  строке  статуса SQL*Forms выводит Query Where ...? Введите
        логическое выражение,описывающее критерии поиска,при помощи
        заполнителей,подобных примененным в пункте 2.
        Например,
        Критерий поиска                    Вводимые значения
        Плата больше чем 2000 или          :SAL>2000 OR
        работа - "MANAGER"                 :JOB='MANAGER'
        Плата меньше или равна 1000        :SAL<=1000 OR
        или название работы заканчи-       :JOB like '%TRAINEE'
        вается на "TRAINEE"
        Отметим,что оператор GORH не работает так как  вы  могли  пола-
        гать,если вы не заключили все выражение в кавычки.
     5.Нажмите G[Next Field]H.SQL*Forms анализирует введенное логичес-
        кое выражение и исполняет запрос.
          Если  в  последнем  запросе к одному и тому же блоку вы ввели
     некоторое выражение в любое поле,SQL*Forms перевыведет ваш  пос-
     ледний  ответ на приглашение Query Where.Вы можете снова исполь-
     зовать этот ответ нажав G[Return]H или отредактировать его.
          Логические  выражения  более  полно  объясняются   в   книге
     SQL*Plus  User's Guide.В частности смотри главу 7,Выборка строк
     из таблицы,главу 9,Вывод на экран и работа с числовыми значени-
     ями,главу 10,Вывод на экран и работа с символьными  значениями,
     главу 11,Вывод на экран и работа со значениями данные.
     
                     GПереиспользование критериев поискаH
          Для нового использования критерия поиска от предыдущего зап-
     роса  в  текущем блоке нажмите дважды G[Enter Query]H,один раз для
     инициализации нового запроса и второй раз для перевывода предыду-
     щего критерия поиска.Вы можете эти критерии отредактировать и по-
     том нажать G [Execute Query]H.
          Если вы оставили (для ввода) заполнители в любых  полях,то
     SQL*Forms выведет на экран последние ответы на них.Вы можете ис-
     пользовать эти ответы нажав G[Return]H или отредактировав их предва-
     рительно.
     
                           GПодсчет записей запросаH
          Упражнение  11-4  показыавает  как  подсчитать число записей,
     удовлетворяющих критериям поиска.
     
                                 Упражнение 11-4
     Подсчет записей запроса
     1.Нажмите G[Enter Query]H
     2.Введите критерии запроса.
     3.Нажмите G[Count Query Hits]H.
        SQL*Forms подсчитает число встреченных записей и  выведет  это
        число в  строке сообщений.
        Отметим,что  вы нажимаете G[Count Query Hits]H вместо G[ExecuteH
        GQuery]H.Можно использовать обе клавиши одна за другой для под-
        счета и подачи записей.Все способы,используемые для задания
        критериев поиска можно использовать  с G[Count Query Hits]H.
     4.Имеются следующие опции:
        а.Нажмите G[Execute Query]H для выполнения запроса,
        б.Введите другие критерии поиска.
        в.Нажмите G[Exit/Cancel]H для вызова нормального режима без вы-
        полнения запроса.
          
                        GИспользование SQL*PlusH
          Если  вы  знакомы с языком SQL,то можете обратить внимание,
     что логические выражения,используемые здесь,подобны  следующим
     за клаузой Where в команде SELECT.Фактически SQL*Forms выполняет
     запрос  путем конструирования и исполнения команды SELECT для на-
     хождения записей,удовлетворяющих запросу.После  ввода  критерия
     поиска  команда  SELECT обрабатывает клаузу Where; после этого вы
     вводите логическое выражение и оно подается в эту клаузу.
          После или вместо логического выражения вы можете ввести  лю-
     бую  клаузу,следующую за Where,такую как ORDER BY.Таким обра-
     зом,вы можете управлять порядком передачи записей в заказе,на-
     чиная с наивысшей оплаты и кончая наинизшей:
     Query Where ...? :SAL>=1000 ORDER BY :SAL
     Query Where ...? ORDER BY :SAL
          Эти  ответы заставят SQL*Forms сконструировать следующую ко-
     манду SELECT (прерывания строк введены для ясности и не влияют на
     результат).
          SELECT ...
          WHERE:SAL>=1000
          ORDER BY:SAL
          SELECT ...
          ORDER BY :SAL;
          Можно использовать SQL для выполнения:
     *  подзапросов (включая подзапрос в логическом выражении)
     *  сортировки (при помощи клаузы ORDER BY).
     *  ссылок нв колонки,не представленные  полями  в  текущем  блоке
        (используйте имя колонки с начальным двоеточием (:) так же как
        в команде SQL)
     *  ссылок  на колонки таблицы,не представленные полями в текущем
        блоке (используйте table.column так же как в команде SQL).
          Вы можете использовать операторы UNION,INTERSECT,MINUS,но
     они могут привести к неожиданным результатам.Клаузы GROUP  BY  и
     HAVING нельзя использовать.
     
                            GПрекращение запросаH
          Вы можете прекратить выполнение запроса при помощи функци-
     ональной клавиши,очищающей блок типа G[Cleary Block].H
     
+              GГлава 12   Ввод и модификация информацииH
          Вы можете модифицировать содержимое таблицы путем:
     *  создания новых записей (добавляя или вводя записи).
     *  изменяя содержимое существующих записей (обновляя записи).
     *  удаления существующих записей.
          В  каждом случае модификация осуществляется в рабочем прост-
     ранстве,а не в БД.После сохранения изменения в рабочем
     пространстве станут частью БД.
     
                         GСоздание новых записейH
          Упражнение 12-1 показывает как создавать новые записи.
     
                               Упражнение 12-1
     Создание новой записи
     1.Запустите форму,в которой вы хотите создать новую запись.
     2.После вывода формы на экран нужно выбрать требуемый блок.
     3.Нажмите G[Create Record].H
        Если текущий блок со многими записями,SQL*Forms выведет новую
        запись путем открытия пространства для этого.Для блоков с од-
        ной или многими записями SQL*Forms вводит значения по  умолча-
        нию или фиксированными значениями в любое поле для которого это
        значение предназначено,она оставляет другие поля пустыми.
     4.Введите новые данные.
     5.После  завершения  ввода  данных  нажмите любую клавишу кроме
        G[Exit/Cancel]H для ввода записи в рабочее пространство.Если вы
        добавили несколько записей,то нажмите  G[Create Record]H.
          Вы можете также создать запись перемещая курсор в пустую за-
     пись следующую за последней выведенной записью и  введя  значения
     полей  туда.Для добавления нескольких записей этим способом наж-
     митеG  [Create  Record] H илиG  [Next Record]H после завершения ввода
     данных для каждой записи.
         Если вы начали добавлять запись и хотите начать все  сначала,
     то нажмите G[Clear Record].H
          Примените клавиши G[Duplicate Record] Hи G[Duplicate Field]H для
     добавления одинаковых записей.G[Duplicate Record] Hкопирует каждое
     поле  предыдущей  записи  в  текущую; G [Duplicate Field]H копирует
     только текущее поле.После нажатия одной из этих клавиш вы можете
     модифицировать значение или значения полей,которые вы скопировали.
     
                            GОбновление записейH
          Для обновления записи предварительно сохраненной сделайте ее
     текущей и модифицируйте значения  одного  или  нескольких  полей.
     Когда  содержимое рабочего пространства сохранено,обновленные за-
     писи будут сохранены в БД.Вы можете обновить  запись  в
     рабочем   пространстве   независимо   от  обновления  ее  другими
     пользователями.Записи,обновленные другим пользователем,не  дос-
     тупны вам пока он их не сохранит.
     
                             GУдаление записейH
          Для  удаления  записи  сделайте ее текущей и нажмите клавишу
     G[Delete Record].HЭта запись удаляется из  рабочего  пространства.
     Когда же работа сохраняется,то эта запись будет удалена и из БД.
          G[Clear  Record] Hтакже удаляет запись из рабочего пространст-
     ва,но из БД при сохранении она не удаляется.
          Отметим,что  после  нажатия G [Delete  Record]H  илиG  [ClearH
     GRecord]H  вы можете извлечь эту запись в рабочее пространство зап-
     росив эту запись.
     
                            GПроверка правильностиH
          SQL*Forms может проверять правильность ваших данных  разными
     способами.Например,она проверяет значения поля после того как
     курсор покинет это поле.SQL*Forms проверяет  значение  поля  для
     определения следующего:
     *  совпадает ли тип и характеристики значения с полем (типы поля и
        его характеристики описаны в приложении В).
     *  совпадает ли значение поля с значением в списке.
     *  лежит ли значение в правильном диапазоне; например,больше чем
        или меньше 999.
          Если поле содержит неправильное значение,SQL*Forms  выводит
     на  экран  сообщение  об ошибке.Вам нужно скорректировать ошибку
     перед тем как переместить курсор из этого поля.
          Другие  проверки  правильности  выполняются  при  выполнении
     транзакций в БД.Эти проверки описаны в главе 15.
     
                            GБлокировка записейH
          SQL*Forms  обеспечивает  автоматическую  блокировку  записи,
     предохраняющую ее от одновременного обновления двумя или несколь-
     кими  пользователями.Когда  вы  попытаетесь  обновить   запись,
     SQL*Forms  определит,обновлена ли или удалена эта запись другими
     пользователями после того как вы сделаете запрос,извлекающий эту
     запись.Вы не можете модифицировать или удалять эту запись.
          Если другой пользователь обновил или удалил запись и не сох-
     ранил это в БД,SQL*Forms сообщит вам об этом и подождет
     пока он не закончит работу,позволив вам прекратить работу.Если
     вы  прекратите,то ваши изменения не будут сохранены.Позднее вы
     сможете извлечь эту запись и попытаться снова ее модифицировать.
     
+                  GГлава 13   Ввод ваших результатов в БДH
          В этой главе вы узнаете как
     *  сохранить транзакцию в БД
     *  откатить транзакцию
     *  понимать проверку правильности при сохранении данных.
     
                           GСохранение транзакцийH
          При использовании формы выполняемые вами модификации  таблиц
     БД не записываются непосредственно в БД,вместо
     этого  они  записываются  в рабочее пространство.Для постоянного
     сохранения изменения нужно записать содержимое рабочего простран-
     ства в БД при помощи клавиши G[Commit]H.После того как вы
     нажали эту клавишу,данные из рабочего пространства внедряются  в
     таблицу и рабочее пространство очищается.
          Отметим,что G[Commit]H влияет на ваши изменения в каждом бло-
     ке текущей формы,а не только в текущем.
          При  добавлении или обновлении записи вам нужно осуществлять
     сохранение почаще,чтобы проще корректировать ошибки.Более того,
     любой сбой компьютера или терминала могут стереть содержимое  ра-
     бочего  пространства.Частое сохранение результатов работы позво-
     ляет избежать подобных неприятностей.
          Отметим,что во время  модификации,выполняемой  в  рабочем
     пространстве,другие пользователи ORACLE не могут их видеть.Та-
     ким образом,если другой пользователь извлечет строку после  того
     как  вы ее модифицировали,но не сохранили,то он получит немоди-
     фицированную версию строки.
     
                              GОткат транзакцииH
          Для восстановления содержимого рабочего пространства вы  мо-
     дете  выполнить  откат  при помощи нажатия G[Clear Form/Rollback].H
     После сохранения транзакции в БД эта клавиша не  восста-
     новит рабочее пространство.
          Отметим,что  можно  использовать G[Clear Block] Hдля очистки
     части рабочего пространства,содержащего записи текущего блока.
     
                          GПриглашение сохраненияH
          Большинство операций SQL*Forms требуют,чтобы  вы  сохраняли
     или  выполняли  откат  для  вашей модификации перед продолжением.
     Например,если  ваша  модификация произошла в текущем блоке и вы
     нажали G[Enter Query],H SQL*Forms выведет сообщение:
       Do you want to commit the changes you have made
          Если вы ответите Y,то SQL*Forms сохранит  модификацию,при
     ответе  N SQL*Forms устранит изменения из текущего блока.В любом
     случае SQL*Forms затем продолжит выполнение требуемой операции.
          Следующие операции требуют предварительного  сохранения  или
     отката перед их выполнением:
      G*  [Enter Query]H
      G*  [Execute Query]H
      G*  [Exit/Cancel]H
      G*  [Clear Block]H
      G*  [Clear Form/Rollback]H
      G*  [Count Query Hits]H
          Орметим,что форма м.б. спроектирована для исполнения
     сохранения в любое время и произойдет это без предупреждения.
     
                 GПроверка правильности во время сохраненияH
          В течение сохранения форма может проверять правильность дан-
     ных несколькими способами.Однако,эти  проверки  концентрируются
     на соотношении полей и записей.
          Проверка правильности,выполняемая во время сохранения включает:
     *  проверку  на  уникальность,которая  исключает наличие в двух
        строках одинаковых значений в заданных  полях.Например,эта
        проверка  исключает возможность появления записей с одинаковым
        номером заказа.
     *  проверку  на  соответствие.Например,проверка показывает,что
        сумма  конкретных значений заказа равна общей сумме.
          Что произойдет,если ошибка  обнаружена?  SQL*Forms  выведет
     сообщение  об  ошибке.Это будет стандартное сообщение SQL*Forms
     или  сообщение,сгенерированное   разработчиком   формы. Далее
     SQL*Forms переместит курсор в запись и поле,где обнаружена ошиб-
     ка.Однако,это  может  быть  не то место,в котором ошибка нахо-
     дится.
          Например,предположим,что имеется проверка,которая предох-
     раняет  от ввода двух записей с одним значением в поле номера ра-
     ботника.Если проверка обнаружит ошибку в созданной  вами  записи,
     то SQL*Forms сделает ее текущей и введет курсор в поле номера ра-
     ботника.Но предположим,что ошибка в другой записи,которую нуж-
     но удалить,тогда нужно сперва извлечь эту запись и удалить ее,а
     не текущую запись,перед новым сохранением рабочего пространства.
          Отметим,что  если любая запись из рабочего пространства не
     пройдет проверки,то вся операция сохранения  отменяется;  ничего
     из  рабочего  пространства  не  будет  сохранено.Нужно исправить
     ошибку и снова выполнить сохранение.
     
+                   GПриложение А   Сообщения об ошибкахH
          Далее приведен список сообщений об ошибках,перечисленных  в
     алфавитном порядке.
     Acceptable characters are a-z,A-Z,and space
     (Воспринимаемые символы - a-z,A-Z и пробел)
          Значение: вы ввели неприемлемый символ в текущее поле.
          Действие: скорректируйте поле.Можно при необходимости оста-
                    вить пустую запись.
     All rows of query have already been retrieved
     (Все строки запроса уже извлечены)
          Значение: вы  нажали G [Next Record]H,а последняя запись уже
                    извлечена.GH
          Действие: не нужно.
     At first record
     (В первой записи)
          Значение: вы нажали клавишу G[Previous Record]H в то время как
                    курсор  находится в  первой записи.
          Действие: не нужно.
     Can't change or delete record - another user deleted it
     (Нельзя удалить или изменить запись - другой пользователь  сделал
      это)
          Значение: была попытка обновить или удалить удаленную запись.
          Действие: не  нужно.Если  вы считаете,что запись удалять
                    нельзя,то свяжитесь с удалившим ее пользователем.
     Can't change or delete record - row can't be read for update
     (Нельзя удалить или изменить запись - строка не м.б. прочи-
     тана для обновления)
          Значение: вы попытались обновить или удалить запись,которая
                    была обновлена или удалена,но не сохранена в базе
                    данных.
          Действие: подождите до сохранения записи.Затем SQL*Forms вы-
                    ведет на экран обновленную версию и позволит вам
                    продолжить работу.Если запись была удалена,то
                    SQL*Forms выведет сообщение:
                    Can't change or delete record -- another user
                    deleted it.
     Can't find IAP command
     (Нельзя найти команду IAP)
          Значение: вы нажали функциональную клавишу,которая не опре-
                    делена для вашей клавиатуры.
          Действие: не нужно.Можно нажать G[Show  Function  Keys]H  для
                    вывода на экран карты клавиатуры.
     Can't insert into or update data in a view
     (Нельзя ввести или обновить данные в данном окне)
          Значение: выполняется модификация содержимого окна недопус-
                    тимым способом.
                    Окно - набор строк из одной или нескольких таблиц.
                    Оно работает как таблица и форма может обращаться
                    и к окнам и к таблицам.Во время запроса разницы
                    между ними нет.Имеются,однако,некоторые ограни-
                    чения на ввод,обновление и удаление окон.
          Действие: не нужно; вы не сможете выполнить данную операцию.
     Can't read form by that name
     (Нельзя прочесть форму по данному имени)
          Значение: вы задали имя несуществующей формы.Возможна ошиб-
                    ка при наборе имени формы,или  файл  определения
                    формы находится в месте,которое SQL*Forms не может
                    найти.
          Действие: скорректируйте имя формы или получите к ней доступ.
                    При необходимости обратитесь к АБД.
     Cannot enter a query; no fields are queryable
     (Нельзя ввести запрос; нет таких полей)
          Значение: вы  попытались ввести запрос G[Enter Query]H,но ни
                    одно из полей блока не позволяет вводить данные.
                    Таким образом,вам нельзя ввести критерии поиска.
          Действие: не нужно.Вы можете выполнить простой запрос нажав
                    G[Execute Query].HНельзя позиционировать поле клави-
                    ши; ни одно непосредственно не вводимо.
Cannot position to a key field;none are queryable
     (Нельзя позиционировать поле клавиши; ни одно не иожет запрашивать)
          Значение: вы попытались использовать G[Next Primery Key Field]H,
                    но ни одно из полей первичных клавиш не позволяет
                    вводить данные.
          Действие: не нужно.
     Could not create output file     (Нельзя создать выходной файл)
          Значение: вы нажали G[Print Screen]H,но  SQL*Forms  не  может
                    записать  содержимое экрана в файл.Возможные при-
                    чины: введено  неверное  имя  файла,операционная
                    система не дает вам разрешения создавать файлы,не-
                    доступен диск или пространство каталога.
          Действие: проверьте имя файла,которое вы ввели и скорректи-
                    руйте при необходимости.При необходимости обрати-
                    тесь к АБД.
     Couldn't create workfile filename   (Не могу создать имя рабочего файла)
          Значение: в течение операции SQL*Forms не может создать дис-
                    ковый  файл,необходимый  для хранения внутренних
                    данных.Каталог файлов или  диск  могли  исчерпать
                    свободное  пространство  или  возникла ошибка вво-
                    да/вывода при его создании.
          Действие: выполнить операцию снова.Если она прошла успешно,
                    то наверное диск был временно заполнен или ошибка
                    ввода/вывода устранилась.Если же операция  безус-
                    пешна,то диск полон или ошибка стабильна.В любом
                    случае  обратитесь к АБД.
     Date format is DD-MON-YY
     Date format is DD/MM/YY
     Date formst is MM/DD/YY
          Значение: вы ввели неверную дату.
          Действие: заново  введите  дату в требуемом формате.В этих
                    трех  форматах  20  июля  1986г  будет  20-JUL-86,
                    20/07/86,07/20/86.
     Day may be between 1 and last of month
     (День должен быть между 1 и последним днем месяца)
          Значение: вы ввели неверный день.
          Действие: введите правильный день,например,для апреля вве-
                    дите число от 1 до 30.
     Do you wont to commit the changes you have made?
     (Хотите ли вы сохранить свои изменения?)
          Значение: вы нажали G[Exit],H в то время как в рабочем прост-
                    ранстве данные изменены.
          Действие: введите Y для сохранения или N для стирания  изме-
                    нений.
     Duplicate Record function allowed on new records only
     (Функция дублирования записи выполняется только с новыми записями)
          Значение: вы нажали клавишу G[Copy Record],Hно текущая запись
                    извлечена из БД.
          Действие: не нужно.Можно использовать эту клавишу только при
                    создании новых записей.
     Field is full,can't insert character
     (Поле заполнено,символ ввести нельзя)
          Значение: SQL*Forms находится в режиме ввода и текущее поле
                    заполнено.
          Действие: удалите символ для освобождения места для нового или
                    нажмите G[Character Insert/Delete] Hдля активизации
                    режима замены.
     Field is not a column of table being queried
     (Поле - не колонка запрашиваемой таблицы)
          Значение: при вводе запроса вы ввели данные в управляющее поле
                    (поле,не соответствующее ни одной колонке)
          Действие: заново выполните запрос и оставьте управляющее поле
                    пустым.Оно защищено от обновления.
          Значение: вы попытались обновить поле,защищенное от обнов-
                    ления.
          Действие: не нужно.вы не можете обновить это поле формы.
     Field must be entered
     (Поле нужно ввести)
           Значение: вы не ввели значение (или удалили значение) в поле,
                     требующем ввода значения.
           Действие: в данное поле нужно ввести значение.
     Field must be entered completely
     (Поле нужно вводить полностью)
          Значение: вы не ввели полное  значение  (или  удалили  часть
                    значения)  в поле,имеющее требование ввода фикси-
                    рованной длины.
          Действие: в это поле нужно ввести значение полностью.
     Fields changed when record was read for update
     (Поля изменились,когда запись была прочитана для обновления)
          Значение: вы обновили запись,она соответственно была  обнов-
                    лена  другим  пользователем  и  при  подаче ее вам
                    SQL*Forms в эти поля вывела обновленнные значения.
          Действие: не нужно.Если обновление другого пользователя на-
                    ложилось на ваше,то нужно ввести свое  обновление
                    заново,если вы его сохранили.
     Form was created by a new version of IAG,relink IAP and try again
     (Форма была создана новой версией IAG,пересвяжите IAP и попытай-
     тесь снова)
          Значение: версия SQL*Forms,создавшая вашу форму,новее,чем
                    версия  применяемая для ее запуска.Это значит,что
                    вы можете запустить неверную версию IAP или  новая
                    версия IAP неправильно установлена.
          Действие: запустите форму при помощи версии,использованной
                    для ее создания.При необходимости обратитесь к АБД.
  Form  was  created  by  an old version of IAG,regenerate form or relink IAG
     (Форма была создана старой версией IAG,регенерируйте  форму  или
     заново свяжите IAG)
          Значение: использованная для создания файла определения фор-
                    мы версия SQL*Forms старше версии,примененной для
                    ее  запуска.То  есть новая версия SQL*Forms была
                    установлена,а форма не регенерирована.
          Действие: регенерируйте  форму INP и FRM из БД при
                    помощи текущей версии SQL*Forms.Если вы не знаете
                    как это сделать,то обратитесь к разработчику фор-
                    мы.
     Format is: [+-]9999999.99
     (Формат следующий: [+-]999999.99)
          Значение: в поля MONEY или RMONEY введено неверное значение.
          Действие: введите правильное значение.Это  значение  должно
                    иметь  "долларовые"  цифры (м.б. равно нулю)
                    и две цифры центов после точки.Все число должно
                    иметь знак плюс или минус.
     Format is: IAP formname [userid/password][crtname][-m]
     (Формат  следующий:  IAP  имяформы[идентпольз/пароль][имятерминала][-m])
          Значение: вы попытались запустить IAP,но ввели эту команду
                    некорректно.
          Действие: скорректируйте ошибку и заново введите команду.
     Function key recognized but not implemented
     (функциональная клавиша опознана,но не введена)
          Значение: вы нажали недоступную функциональную клавишу.
          Действие: не нужно.Вам нельзя использовать эту функциональ-
                    ную клавишу в данном контексте.
     Function not available in this mode
     (В этом режиме функция недоступна)
          Значение: во время ввода запроса вы нажали G[Enter  Query]H  и
                    другую  функциональную клавишу,которые нельзя на-
                    жимать.
          Действие: если вы хотите выполнить запрос,то нажмите G[ExecuteH
                    GQuery] Hи не нажимайте другие клавиши если не хотите
                    отменить запрос.
     Hour must be between 0 and 23
     (Час должен быть от 0 до 23)
          Значение: введено неверное время.
          Действие: введите  правильное  время.SQL*Forms показывает
                    время на базе 24 часов.
     IAP no longer supports Version 2 SQL syntax; modify form accordingly
     (IAP больше не поддерживает синтаксис версии 2 SQL; модифицируйте
     соответственно форму)
          Значение: определение формы включает команду  SQL  в  форме,
                    которая отсутствует в версии 3 ORACLE.
          Действие: при возникновении ошибки отметьте имя поля,в ко-
                    тором вы находитесь или какую функцию исполняете;
                    известите разработчика формы,который должен обна-
                    ружить и ввести отсутствующую команду SQL.
     Index table IAP$$INDEX not available ; contact DBA
     (индексная таблица IAP$$INDEX недоступна; обратитесь к АБД)
          Значение: для работы SQL*Forms не может найти индекс (объект
                    БД ORACLE RDBMS).
          Действие: обратитесь к АБД.
     Integer value between m and n required
     (Требуется целое значение между m и n)
          Значение: вы ввели неверное значение в поле чисел.
          Действие: введите правильное значение.Вы должны ввести целое
                    (недесятичное число) в заданном диапазоне или (если
                    сообщение позволит) нуль.
     Invalid user identifier or password; re-enter
     (Неверный идентификатор пользователя или пароль; введите заново)
          Значение: вы ввели неверное имя пользователя или пароль.
          Действие: введите правильные имя и пароль.
     Last value retrieved     (Выведено последнее значение)
          Значение: вы нажали G[List Field Values],[Next Field] ...Hи
                    снова G[Next Field]H,когда последнее значение в спи-
                    ске выведено на экран.
          Действие: введите значение поля или нажмите снова G[List FieldH
                    GValues]H для нового вывода на экран списка возможных
                    значений.
     Legal characters are 0-9 + and -     (Правильные символы  0-9 + и -)
     Legal characters are 0-9 + - Е       (Правильные символы  0-9 + - Е)
          Значение: введен неверный символ.
          Действие: введите правильное число.
     List of values not available for this field
     (Список значений для этого поля недоступен)
          Значение: вы  нажали G [List  Field  Values]H,но в форме нет
                    списка значений для этого поля.
          Действие: не нужно.
     Minutes must be between 00 and 59
     (Минуты д.б. в интервале 00 - 59)
          Значение: ввели неверное значение минут.
          Действие: введите правильное значение.
     Month must be between 1 and 12
     (Месяц должен быть от 1 до 12)
          Значение: введен неверный месяц.
          Действие: введите правильный номер месяца (январь -  1,де-
                    кабрь - 12).
     Name/Password combination too large; re-enter
     (Комбинация  имя/пароль слишком длинна; введите заново)
          Значение: вы ввели слишком длинное имя пользователя или па-
                    роль.
          Действие: сперва введите имя пользователя.Подождите пригла-
                    шение для пароля и потом его введите.
     No changes have been made since last COMMIT failed
     (После последнего неверного выполнения COMMIT изменений не было)
          Значение: предыдущее сохранение выполнено с ошибкой и вы по-
                    пытались выполнить новое сохранение без коррекции
                    ошибок.
          Действие: скорректируйте ошибки и выполните сохранение снова.
     No changes to commit     (Нет изменений для сохранения)
          Значение: вы  попытались выполнить сохранение,но в рабочем
                    пространстве нет измененных или введенных записей
                    после последнего сохранения.
          Действие: не нужно.
     No digits or decimals specified!     (Не заданы цифры!)
          Значение: вы ввели не численное значение  в цифровое поле.
          Действие: введите значение с как минимум одной цифрой.
     No errors encountered recently
          Значение: вы нажали клавишу G[Display Error]H,но ошибок нет.
          Действие: не нужно.
No previous record to copy value from  (Нет предыдущей записи для копирования)
          Значение: вы нажали G[Copy Field]H,но текущая запись  первая
                    в блоке.
          Действие: не нужно.Нажатие этой клавиши в данном контексте
                    бессмысленно.
     No such user exit     (Нет такой записи пользователя)
          Значение: форма пытается вызвать несуществующую запись поль-
                    зователя.У вас может  быть  неверная  версия  IAP
                    (программы запуска формы) или в форме ошибка.
          Действие: если вы использовали неверную версию IAP,то най-
                    дите правильную и запустите ее.Если ошибка в форме,
                    то обратитесь к разработчику формы.
     Not a valid month name     (Неправильное название месяца)
          Значение: вы ввели неверное название месяца.
          Действие: введите правильное название.SQL*Forms  распознает
                    первые  три буквы названия месяца.Например,JAN -
                    январь,JUN - июнь.
Not enough memory to load the form   (Недостаточно памяти для загрузки формы)
          Значение: в компьютере недостаточно памяти для запуска вашей
                    формы.Это сообщение относится к  основной  памяти
                    компьютера,а не к дисковому пространству.Оно мо-
                    жет означать,что была ошибка при конфигурировании
                    операционной  системы,что  не  дает  возможности
                    SQL*Forms использовать необходимый объем памяти.
          Действие: обратитесь к разработчику формы.Он может  модифи-
                    цировать  форму  так,что запуск произойдет.Если
                    это не приемлемо,то нужно увеличить объем доступ-
                    ной памяти при установке операционной системы  пу-
                    тем  изменения  ее параметров или увеличения физи-
                    ческого объема памяти.
     ORACLE error occured while trying to check for record uniqueness
     (Возникла ошибка ORACLE при попытке проверки уникальности  записи)
          Значение: SQL*Forms встретила ошибку вычислений при проверке
                    поля записи на уникальность.Это значит,что  таб-
                    лица,соответствующая текущему блоку формы,не су-
                    ществует или вы не авторизованы на ее использование.
          Действие: обратитесь к разработчику формы.
     ORACLE  error occurred while trying to DELETE a record
     (Возникла ошибка ORACLE  при попытке удалить запись)
     ORACLE  error occurred while trying to execute a trigger
     (Возникла ошибка ORACLE  при попытке выполнить задание)
     ORACLE  error occurred while trying to fetch next query  record
     (Возникла  ошибка ORACLE при попытке подать следующую запись запроса)
     ORACLE  error occurred while trying toINSERT record
     (Возникла ошибка ORACLE  при попытке ввести запись)
     ORACLE  error occurred while trying to perform field select
     (Возникла ошибка ORACLE  при попытке выполнить выборку записи)
     ORACLE  error occurred while trying to perform query
     (Возникла ошибка ORACLE  при попытке выполнить запрос)
     ORACLE  error occurred while trying to read list of values
     (Возникла ошибка ORACLE  при попытке прочитать список значений)
     ORACLE  error occurred while trying to UPDATE record
     (Возникла ошибка ORACLE  при попытке обновить запись)
          Значение: SQL*Forms встретила ошибку обработки  при  попытке
                    удалить запись.Это м.б. при отсутствии таб-
                    лицы,соответствующей текущему блоку или ваше имя
                    пользователя не авторизовано на такие действия и т.д.
          Действие: обратитесь к разработчику формы.
     ORACLE error: parse1: no FROM clause
          Значение: SQL*Forms пытается интерпретировать команду SELECT,
                    для которой отсутствует клауза FROM.Это ошибка раз-
                    работчика.
          Действие: оттметьте блок,поле или операцию,при которых прои-
                    зошла ошибка.Проинформируйте разработчика.
                    Сообщение описывает синтаксическую ошибку в команде
                    SELECT в ее предложении или в команде EXET SQL SELECT
                    в  записи пользователя.Разработчик должен найти и
                    устранить эту ошибку.
     Out of record buffers,commit changes and clear form to continue
     (Переполнены буфера записей,сохраните изменения и очистите форму
     для продолжения)
          Значение: SQL*Forms заполнила все доступные буфера в рабочем
                    пространстве.
          Действие: нажмитеG [Commit] Hдля сохранения изменений в базу
                    данных; затем нажмите G[Clear Block]H  или G [ClearH
                    GForm/Rollback]H для удаления некоторых или всех за-
                    писей из рабочего пространства.
Program error: Bad page number     (Ошибка программы: неверный номер страницы)
Program error: Couldn't set cursor options
     (Ошибка программы: не может установить опции курсора)
Program error: Don't know operation to be performed on record
     (Ошибка программы: не знает операции,выполняемой над записью)
Program error: Error occurred  while reading form
     (Ошибка программы: ошибка возникла во время чтения формы)
          Значение: возникла  внутренняя  ошибка SQL*Forms или ORACLE
          Действие: обратитесь к АБД.Если вы отвечаете за проблему,
                    то  сообщите  корпорации  ORACLE  перед  рестартом
                    SQL*Forms.
     Query caused no records to be retrieved,reenter
     (Запрос не произвел записей для извлечения,введите заново)
          Значение: текущий запрос не выдал записей из таблицы.Табли-
                    ца  пуста или не содержит записей,удовлетворяющих
                    критерию поиска.SQL*Forms остается в режиме "Enter
                    Query".
          Действие: не нужно.Вы можете модифицировать  или  исключить
                    критерии поиска и снова выполнить запрос.
Record is now reserved for update     (Запись зарезервирована для обновления)
          Значение: вы  обновляете  запись,выбранную  из  таблицы.
                    SQL*Forms информирует вас,что она блокирована на
                    запись.Другие пользователи могут изменить запись
                    пока вы не сделали сохранение или откат текущей
                    транзаакции.
          Действие: не нужно.Для  минимизации  наложений  от  других
                    пользователей вы должны побыстрее сохранить транзакцию.
     Record must be entered or deleted first
     (Сперва запись д.б. введена или удалена)
          Значение: вы нажали G[Next Record]H в неподходящем контексте:
                    последняя запись в блоке - текущая.
          Действие: не нужно.
     Replacement variable legal characters are A-Z and 0-9
     (В переменной замещения можно иметь только символы A-Z и 0-9)
          Значение: вы использовали некорректные символы в переменной
                    замещения (местодержатель) запроса.
          Действие: используйте только указанные символы.
     Row could be read for update
     (Строку нем.б. прочитана для обновления)
          Значение: вы попытались обновить запись,но другой пользова-
                    тель  уже ее обновил.ORACLE заблокировал строку и
                    не дал вам возможности обновления.
          Действие: подождите,пока пользователь не сохранит свое  об-
                    новление в БД.
Row has already been inserted             (Строка уже введена)
          Значение: вы попытались ввести или обновить запись,но
                    SQL*Forms проверила на уникальность ее,она оказа-
                    лась по некоторому полю не уникальна.
          Действие: измените одно или несколько полей текущей записи,
                    чтобы сделать ее уникальной.Если такое требование
                    не исполнимо для вас,то попросите разработчика его
                    убрать.
Seconds must be between 0 and 59     (Секунды от 0 до 59)
          Значение: вы ввели неверное значение секунд.
          Действие: введите правильное значение.
     SQL error forced rollback: Clear form and reenter transaction
     (Ошибка  SQL  вызвала  откат:  очистите  форму и заново выполните
     транзакцию)
          Значение: автоблокировка или некоторые другие ошибки привели
                    к отказу в работе транзакции.SQL*Forms выполнила
                    откат к предыдущему состоянию.
          Действие: очистите форму  (или  выполните выход и  повторный
                    вход в SQL*Forms) и заново выполните транзакцию.
                    Обратитесь к разработчику.Может быть необходимо
                    модифицировать проект формы для исключения ошибки.
     SQL statement too large     (Оператор SQL слишком большой)
          Значение: проект формы содержит команду SQL с длиной не более
                    2048 символов.
          Действие: обратитесь к разработчику.Он должен укоротить команду SQL.
     This block does not correspond to table,function ignored
     (Этот блок не соответствует таблице,функция проигнорирована)
          Значение: вы попытались выполнить функцию,вводящую ссылки в
                    таблицу.Текущий блок - управляющий (не соответст-
                    вующий ни одной таблице),так что функция бессмысленна.
        Действие: не нужно.Вы не можете выполнить этой функции в данном блоке.
Time format is HH:MM:SS     (Формат времени HH:MM:SS)
          Значение: вы ввели неверный формат времени.
          Действие: введите заново время в правильном формате.Напри-
                    мер,9:30 утра - b/9:30:00 (где /b - означает пробел).
Too many decimal points!        (Слишком много 10-х точек)
          Значение: вы ввели число,содержащее 2 или более 10-х точек или ввели
                    10-ю точку в число недесятичное.
          Действие: введите  число с одной 10-й точкой.Если вы
                    ввели недесятичное число,то уберите 10-ю точку.
Unexpected end of file reading form    (Неожиданный конец формы чтения файла)
          Значение: определение формы неверно или неполно.Может быть
                    неисправен диск,на котором она хранится,или форма
                    не работает.
          Действие: обратитесь к разработчику.Он должен регенерировать
                    файл,содержащий форму.Для этого он должен исполь-
                    зовать IAC,чтобы сгенерировать файл INP из опреде-
                    ления  формы  в БД.Затем нужно применить
                    IAG для генерации нового файла FRM.
Use NEXTFIELD key to enter answer
     (Примените клавишу NEXTFIELD для ввода ответа)
          Значение: SQL*Forms ждет ответ на приглашение.
          Действие: введите соответствующий ответ и нажмите G[Next Field]H
     Variable was not entered: xxxx     (Переменная не введена: хххх)
          Значение: вы ввели ответ на Query where ..?,содержащий  не-
                    верный местодержатель (неприменяемый в полях зап-
                    роса).
          Действие: скорректируйте местодержатель или определите его в
                    одном из полей запроса.Затем перезапустите запрос.
     SELECT operation failed,please contact form designer
     (Операция SELECT не работает,сявжитесь,пожалуйста с разработчи-
     ком формы)
          Значение: проект формы содержит команду SQL,выполняющуюся с
                    ошибкой при выполнении формы.
          Действие: отметьте  поле или операцию,где получена ошибка.
                    Проинформируйте разработчика.Он  должен  найти  и
                    скорректировать неверную команду.
     Year must be 00-99 or 1000-2100     (Год должен быть 00-99 или 1000-2000)
          Значение: вы ввели неверный год.
          Действие: введите  правильный  год.Это  должно быть число
                    00-99 (для 1900 - 1999 годов) или 1000 -2100.
     Yes or No responce required     (Требуется ответ Да или Нет)
          Значение: вы ввели неправильный ответ в поле,требующее Yes
                    или No.
          Действие: введите правильный ответ.
     
+              GПриложение В      Типы полей и характеристикиH
                                GТипы полейH
          Каждое поле в форме имеет один из следующих типов:
     GCHARH        Это поле может содержать любые выводимые на экран
                 символы из стандартного набора символов компьютера.
                 На большинстве компьютеорв  это большие и маленькие
                 буквы,цифры,пробел и все знаки пунктуации.
     GALPHAH       Это поле может содержать любую комбинацию символов
                 алфавита.В большинстве компьютеров каждая буква мо-
                 жет быть большой или маленькой.
     GNUMBERH      Это поле содержит числа с десятичной точкой или без
                 нее.Примеры следующие:
                 9
                 10963
                 -15
                 0.01
                 1018.897
                 0
                 Отметим,что запятые вводить в это поле нельзя,хотя
                 другие продукты ORACLE  могут помещать запятые в бо-
                 льшие числа при их выводе на экран или печать.
     GINTH         Это поле содержит целые числа (без десятичной точки)
                 Примеры:
                 9
                 10897
                 -15
                 0
     GMONEYH       Это поле содержит число,представляющее денежную
                 сумму.В США это:
                 10.95
                 0.99
                 10000.00
                 15.00
                 -15.47
     GRNUMBER,RINT,и RMONEYH
                 Эти типы такие же как NUMBER,INT и MONEY,за исклю-
                 чением того,что они выводят на экран правовыравнен-
                 ные значения,а не левовыравненные.Например,для типа
                 MONEY:
                    10.95
                     0.99
                 10000.00
                    15.00
                   -15.47
     GDATEH        Это поле содержит дату в следующем формате:
                 22-MAY-86
                 9-DEC-86
     GJDATE и EDATEH
                 Эти типы обеспечивают средства хранения даты в колонке
                 таблицы,определенной как NUMBER,а не DATA.
                 Это поле содержит дату в следующем формате:
                 05/22/86
                 12/09/86
                 Первые две цифры - месяц,вторые - число и третьи -
                 год.
                 Поле EDATE содержит дату в европейском формате:
                 22/05/86
                 09/12/86
                 Первые две цифры представляют число,вторые - месяц и
                 третьи - год.
     
       GСравнения значений символов и их весовая последовательностьH
          Сравнения типа больше чем/меньше чем значений символов (поля
     типа  CHAR и ALPHA) выполняются в соответствии со следующими пра-
     вилами:
     1.Сравнение начинается с первой позиции символа каждого значения.
     2.Если два значения различны в этих позициях,то большее то,ко-
        торое имеет старший символ,а сравнение завершается.
     3.Если оба значения исчерпали символы,то они равны и сравнение
        закончено.
     4.Если только одно  значение  исчерпалось,то  другое  значение
        больше и сравнение закончено.
     5.SQL*Forms  возвратится  к шагу 2 для сравнения следующих двух
        символов.
          Отметим,что если два значения идентичны до точки в  которой
     одно  закончилось,то более длинное "больше".Иногда это приводит
     к парадоксу,рассмотрим выражение "BETWEEN 'A' AND 'L'" Его можно
     интерпретировать как "каждое значение,начинающееся с букв А - L".
     Фактически же любое значение,начинающееся с  буквы  L,"больше"
     чем  эта  буква за исключением значения,состоящего из одной этой
     буквы.Для выборки всех значений,начинающихся с данных букв нуж-
     но ввести заканчивающее значение как L~~~~~~,где ~ расширяет зна-
     чение.(Этот символ больше любого другого  символа  в  последова-
     тельности ASCII).
     
                         GВесовая последовательностьH
          В шаге 2 процедуры сравнения символы сравниваются в соответ-
     ствии  с  их  весами  в компьютере.Символ больше другого если он
     стоит в этой последовательночти правее.
          Виртуально все современные компьютеры используют две весовые
     последовательности,это ASCII и  EBCDIC.Эти  последовательности
     представлены в таблицах В-1 и В-2.
          Большие ЭВМ фирмы IBM обычно используют EBCDIC,а большинст-
     во других компьютеров,включая персональные ЭВМ фирмы IBM исполь-
     зуют ASCII.Проконсультируйтесь по книге ORACLE Installation and
     User's Guide для определения типа кодов вашего компьютера.
          Отметим,что  любой  символ в последовательности имеет свой
     вес,а поэтому большие и маленькие буквы не равны.В  ASCII  все
     маленькие  буквы  больше чем большие.В EBCDIC наоборот.
          Величина буквы важна в запросах.Например,если вы  запраши-
     ваете записи,содержащие "Jackson" в некотором поле,то SQL*Forms
     не  выдаст запись с "JACKSON",поскольку это разные значения.Та-
     ким образом,когда вы вводите данные или запрос,то вводите соот-
     ветствующие поля аккуратно.Всегда  вводите  данное  поле  одними
     буквами,большими или маленькими,иначе SQL*Forms не найдет неко-
     торые из них.
          Можно  спроектировать  форму  так,что значения полей будут
     одинаковы независимо от типа букв.Например,"NEW YORK" или  "New
     York"  всегда выводятся по запросу.Помните,что это качество за-
     дается разработчиком формы,так что при работе с одной  можно  не
     обращать внимания на размер букв,а с другой это делать необходимо.
     
     Таблица В-1     Весовая последовательность ASCII
     
     1.   пробел                   27.;  (точка с запятой)
     2.   !                        28.<  (левая угловая скобка)
     3.   "                        29.=
     4.   #                        30.>  (правая угловая скобка)
     5.   $                        31.?
     6.   %                        32.@
     7.   &                     33-58.большие буквы A-Z
     8.   ' (апостроф)             59.[
     9.   (                        60.\
     10.  )                        61.]
     11.  *                        62   ^
     12.  +                        63._ (подчеркивание)
     13.  ,(запятая)              64.` (знак ударения)
     14.  - (тире)              65-88.маленькие буквы a-z
     15.  .(точка/десятичная точка)
     16.  /                        89.{
     17-26.цифры 0-9                90.| (вертикальная черта)
     26     : (двоеточие)            91.}
                                     92.~  (тильда)
                                      
                           GХарактеристики полейH
          Каждое поле в форме имеет совокупность следующих характерис-
     тик.Эти характеристики определяются разработчиком поля.
     
                                GБаза данныхH
          Если  поле имеет эту характеристику,то оно представляет ко-
     лонку в таблице,соответствующую этому блоку формы.Таким  обра-
     зом,значение,выведенное на экран в этом поле для данной записи,
     подано  из  (и/или может храниться в) соответствующего поля строк
     таблицы.
          Если поле не имеет этой характеристики,оно не  представляет
     никакой колонки в таблице.В зависимости от разработки формы,од-
     нако,оно м.б. вычислено из (и/или м.б. использовано
     для вычислений) значений в одной или  нескольких  колонках  одной
     или нескольких таблиц.
     
     Таблица В-2     Весовая последовательность EBCDIC
     
     1.пробел                            16.  /
     2.c/                                17.  ,(запятая)
     3..(точка/десятичная точка)        18.  %
     4.<                                 19.  _ (подчеркивание)
     5.(                                 20.  >
     6.+                                 21.  ?
     7.|                                 22.  :
     8.&                                 23.  #
     9.!                                 24.  @
     10.$                                 25.  ' (апостроф)
     11.*                                 26.  =
     12.)                                 27.  "
     13.;                              28-53.  маленькие буквы a-z
     14.` (знак "нет")                 54-78.  большие буквы A-Z
     15.- (тире)                       80-89.  цмфры 0-9
     
                             GПервичный ключH
          Если  поле имеет эту характеристику,то это часть первичного
     ключа данного блока.
          Разработчик формы  может  использовать  первичный  ключ  для
     обеспечения уникальности записи в форме.Например,для увереннос-
     ти,что не будет двух записей с одним идентификатором работника,
     разработчик может задать эту характеристику  полю  идентификатора
     работника.
          Отметим,что уникальность не нарушится до тех пор,пока Gкаж-H
     GдоеH  поле  первичного ключа не будет равно кадждому полю в другой
     записи.
          В некоторых формах разработчик  может  выбрать  не  задавать
     уникальность первичного ключа поскольку форма этого не требует.В
     этом случае эти поля существуют,но они специально не помечены.
          Если  поле  имеет  эту характеристику,то оно должно иметь и
     характеристику Database - База данных.
     
                             GРазрешен вводH
          Если поле имеет эту характеристику,то вы можете в него вво-
     дить значения.Если эта характеристика отсутствует,то  SQL*Forms
     может вывести на экран данное поле и присвоить фиксированное зна-
     чение при создании записи,но вводить значение в него нельзя.
     
               GОбновление разрешено и обновление -H GNullH
          Эти характеристики приведены вместе,поскольку они подобны и
     поля могут быть с ними любыми,но не с обеими сразу.
          Если  поле имеет характеристику Обновление разрешено,то вам
     можно его изменять в записи,поданной по запросу или  сохраненной
     в  БД.Если поле имеет характеристику Обновление - Null,
     то вы можете его изменить только при начальном  пустом  значении.
     Если поле не имеет ни одной из этих характеристик,то вы не може-
     те  его  изменять.Если оно имеет одну из этих характеристик,то
     должно и иметь характеристику Ввод разрешен.
     
                             GФиксированная длинаH
          Если поле имеет эту характеристику,то его  значение  должно
     иметь  такую же длину,что и поле.Если поле не имеет этой харак-
     теристики,то значение м.б. короче длины поля.
          Если поле имеет эту характеристику,то оно должно иметь  ха-
     рактеристику Ввод разрешен.
     
                                  GЗаполнениеH
          Если  поле  имеет  эту  характеристику,то оно не м.б.
     пустым.Если поле имеет эту характеристику,то оно должно иметь и
     характеристику Ввод разрешен.
     
                               GБольшие буквыH
          Если поле имеет эту характеристику,то при  вводе  маленькие
     буквы  преобразуются  в большие.Если эта характеристика поля от-
     сутствует,то вводятся любые буквы.Эта характеристика имеет  зна-
     чение только если тип поля CHAR или ALPHA и имеется характеристи-
     ка Ввод разрешен.
     
                               GАвтопропускH
          Если  поле  имеет  эту  характеристику,то курсор перейдет к
     следующему полю при вводе символа в последнее место данного поля.
     Если поле не имеет этой характеристики,то курсор  не  перйдет  к
     следующему полю,пока вы не нажмете клавишу G[Next Field]H.
          Если  поле имеет эту характеристику,то оно должно иметь ха-
     рактеристику Ввод разрешен.
     
+                              GГлоссарийH
GASCII:H      сокращение для "American Standart Code for Information
     Interchange",стандартного кода информационного  обмена,весовой
     последовательности,использованной   большинством   современных
     компьютеров,кроме больших ЭВМ фирмы IBM.
Gautoskip:H   характеристика поля.Когда символ введен в  последнюю
     позицию  поля с этой характеристикой,SQL*Forms перемещает курсор
     в следующее поле текущего блока.Эти поля обычно  имеют  короткую
     фиксированную  длину,напирмер,один символ для ответа или аббре-
     виация штата из двух букв.
Gblock:H      часть информации,содержащая группу взаимосвязанных
     полей.Обычный блок выводит на экран одну или несколько  записей,
     поля которых ассоциируются с колонками таблицы или окна.Управля-
     ющий блок не соответствует никакой таблице или окну.
Gcharacteristic:H       свойство поля в форме,влияющее на возмож-
     ности  работы с ним.Примеры характеристик: Ввод разрешен,Фикси-
     рованная длина.
Gcollation sequence:H  последовательность символов в которой каждый
     имеет  вес,больше или меньше другого,Эта весовая последователь-
     ность используется  для  задания  и  выборки  значений  в  полях.
     SQL*Forms использует весовые последовательности ASCII или EBCDIC.
Gcolumn:H     поле,представляющее один вид данных в таблице.Нап-
     ример,в  таблице рабоотников все сведения по выплате составляют
     одну колонку.Смотри "row".
Gcommit:H     процесс сохранения новых или измененных записей из
     рабочего пространства в таблицу БД.
Gcontrol block:H       блок,не фссоциирующм=ийся ни с одной таб-
     лицей БД.Управляющие блоки используются для  выполнения
     автоматизированных вычислений данных,передаваемых из БД
     или  вводимых  пользователем.Они приглашают пользователя сделать
     выбор (как меню) и используются для вывода  на  экран  инструкций
     (т.е.экраны подсказки).
Gcontrol key:H         специальная клавиша,имеющаяся на многих тер-
     миналах.При нажатии этой клавиши и ее удерживании некоторые дру-
     гие клавиши выполняют спциальные действия.Эти клавиши обозначают
     значком  ^,например,^D  значит нажать и удерживая управляющую
     клавишу нажать клавишу [D].Обычно  эта  клавиша  означается  как
     Ctrl или Control.
Gcount:H      число строк,выбранное текущим запросом в рабочее про-
     странство.Это  одна из частей информации,выводимой SQL*Forms в
     строку статуса.
GCRT file:H   файл,содержащий  информацию о свойствах  конкретного
     терминала  и  о способах использования этого терминала SQL*Forms.
     SQL*Forms читает этот файл  для  определения  способа  управления
     терминалом.
Gcurrent block:H     блок,в котором находится курсор.В любое время
     текущим м.б. только один блок.
Gcurrent field:H      поле в текущем блоке,в которое данные можно
     вводить  или  их  редактировать.В любое время при запуске формы
     только одно поле текущее.
Gcursor:H     мерцающий прямоугольник на экране,означающий,где
     появится следующий символ.
Gdatabase:H   1.дисковое пространство ORACLE,предназначенное для
     хранения информации в таблицах.2.характеристика поля.Если поле
     имеет эту характеристику,то оно представляет колонку в  таблице,
     соответствующей блоку.
GDBA:H        администратор БД (АБД): сотрудник,уполно-
     моченный использовать SQL*Forms и выполнять административные фун-
     кции,связанные  с применением операций ORACLE RDBMS.
Gdefault device type:H тип терминала,который используется SQL*Forms
     по  умолчанию,когда не задан явно другой тип.Тип устройства по
     умолчанию задан в файле DEFAULT.CRT.
Gdelete:H     удалить запись из рабочего пространства или строку из
     таблицы.
Gdesigner:H   разработчик,применяющий SQL*Forms для создания форм.
Gdisplay device:H      устройство,которое программа может исполь-
     зовать для связи с человеком.Оно сосотоит обычно из экрана дисп-
     лея и клавиатуры.
GEBCDIC:H    сокращение для "Extended Binary Coded Decimal Interc-
     ange Code" - весовая последовательность символов для больших  ЭВМ
     фирмы IBM.
Gfetch:H      скопировать избранные строки из таблицы в рабочее про-
     странство во время запроса.
Gfield:H      1.в таблице информация,хранимая на пересечении строки
     и колонки.2.в блоке SQL*Forms пространство для ввода или вывода
     на экран части информации.
Gfixed length:H        характеристика поля.Если поле имеет эту ха-
     рактеристику,то  его  значение  должно иметь ту же длину,что и
     длина поля.
Gform:H       набор определений полей,постоянного текста и так да-
     лее,которые SQL*Forms может запускать,позволяя вам  манипулиро-
     вать информацией в таблице БД.
Gform  area:H  эта порция экрана в которую выводится форма.Область
     формы содержит весь экран кроме строк сообщений и статуса.
Gfunction key:H        клавиша на терминале,выполняющая определен-
     ную функцию типа создания новой записи.
Ghelp:H       функция SQL*Forms,выводящая на экран подсказку о те-
     кущем поле.Кроме того это любая информация,введенная  в  форму
     или в другую программу для представления подсказки.
Ghorizontal scrolling:H       свойство SQL*Forms,позволяющее   выво-
     дить на экран значение длиннее поля.Эта горизонтальная прокрутка
     позволяет  SQL*Forms выводить на экран информацию по частям прок-
     ручивая ее влево или вправо внутри поля.
GIAPH         интерактивный прикладной процессор; программа запуска
     формы.
Ginput allowed:H   характеристика поля.Если поле имеет это свойство,
     разрешение ввода,то вы можете в него вводить информацию.
Ginsert mode:H         режим ввода,в котором каждый вводимый символ
     помещается на месте курсора сдвигая все последующие символы вправо.
     Он противоположет режиму замещения.
Gkeyboard map:H        карта вашей клавиатуры,показывающая располо-
     жение  функциональных  клавиш  и  их  стандартные  операции   для
     SQL*Forms.
Glogical expression:H  логическое выражение,запись о взаимоотноше-
     нии  значений нескольких полей и/или констант,которые могут быть
     истиной или ложью.Логические выражения можно применять для  кри-
     териев  поиска для приглашения Query Where.Пример такого выраже-
     ния: :SAL > 1000 AND :COMM=0,которое значит: значение  поля  SAL
     больше 1000 и зачение поля COMM равно нулю.
Gmacro:H      свойство формы,которое изменяет работу функциональной
     клавиши.
Gmandatory:H  характеристика  поля.Если поле имеет ее,то значение
     поля не д.б. пустым.
Gmessage line:H        строка нв экране,в которой SQL*Forms выводит
     приглашения,сообщения  об ошибках и подобную информацию.Строка
     сообщений обычно бывает предпоследней  на  экране  перед  строкой
     статуса.
Gmulti-record block:H  блок со многими записями может вывести на эк-
     ран несколько записей в единицу времени.
Gnull:H       пустой; описыавет поле,не имеющее значения.Отметим,
     что  пустое  поле это не то что поле с пробелами или поле нулевой
     длины,точно также как пустое числовое поле  не  поле  с  нулевым
     значением.
Gpage:H       это часть формы,страница,выведенная на экран.Если
     форма имеет несколько страниц,то они нумеруются по порядку номе-
     ров.
Gpattern:H    образец - описание значения поля,которое можно испо-
     льзовать  в критерии поиска для сравнения более чем одного значе-
     ния.В образце символ _ отображает любой один символ в  значении;
     символ % - любую комбинацию символов в значении.
Gplaceholder:H         1.слово в команде или в ответе на приглаше-
     ние,представляющее место,в которое вы должны подставить нужную
     информацию.Например:
     Enter  username/password:
       username/passwordG[Return]H
     Здесь  username и password - местодержатели.
     2.слово с начальным амперсандом,вводимое в поле как часть  кри-
     терия  поиска.Когда местодержатель используется в каком-либо по-
     ле,SQL*Forms приглашает ввести логическое выражение  при  помощи
     Query Where...? Это слово можно использовать в логическом выраже-
     нии для представления значения поля,в которое оно вводится.
Gprimary key:H         1.группа из одного или нескольких полей в
     блоке,первичный ключ.Если форма придерживается уникальности по
     первичному ключу,то не м.б. операции сохранения,при кото-
     рой две строки будут иметь одни и те же значения  в  каждом  поле
     первичного ключа.2.Характеристика поля,если поле имеет эту ха-
     рактеристику,то оно является частью первичного ключа блока.
Gprimary  key field:H   поле,которое является частью первичного ключа.
Gquery:H       операция выборки набора строк из таблицы,соответству-
     ющей текущему блоку,позволяющая передать записи в рабочее прост-
     ранство.
Grecord:H     единица информации в рабочем пространстве SQL*Forms,
     соответствующая строке в таблице БД.Запись можно  выда-
     вать и/или сохранять в строке.
Grecord locking:H      возможность предохранения от обновления одних
     данных двумя пользователями одновременно.
Grelational operator:H символ,используемый в критерии поиска для
     обозначения  соотношения типа больше чем,меньше чем и так далее.
     Этот оператор отношения м.б.,например,> значит больше чем.
Greplace mode:H       режим замещения,в котором символ,который вы
     вводите,змещает символ под курсором.Противоположно режиму ввода.
Grollback:H    откат,процесс очистки всех частей рабочего простран-
     ства без сохранения его в БД.Откат  стирает  часть  или
     всю работу,которую вы сделали в данный момент.
Grow:H        строка,один набор полей в таблице.Например,в таблице
     информации  о работниках информация о каждом из них может состав-
     лять одну строку.Смотри Column.
Gsearch criteria:H       критерий поиска,предназначенный для выбора
     строк при запросе.Такие критерии выражаются в терминах значений,
     находимых в некоторых полях.
Gshift key:H  клавиша на терминале,которая модифицирует действие
     других клавиш при ее нажатии.
Gsingle-record block:H блок с одной записью,выводящий одну запись
     в единицу времени.
Gstatus line:H     строка статуса на экране,где SQL*Forms выводит
     информацию о текущем состоянии.
Gtable:H      поименованное собрание родственной информации,табли-
     ца,хранимое в БД ORACLE RDBMS.
Gtransaction:H       транзакция,сумма модификаций,выполненная в
     рабочем пространстве между двумя сохранениями или откатами.
Guniqueness:H 1.уникальность,свойство индекса таблицы,определя-
     ющее  отсутствие  двух  записей с одинаковыми значениями в данном
     поле.2.Свойство блока,которое  определяет,что  нет  операции
     сохранения  в этот блок,в результате которой две записи с одина-
     ковыми полями первичного ключа.
Gupdate:H     обновить,изменить значение чего-то,в частности,
     изменить значение записи в рабочем пространстве или строке.
Gupdate allowed:H      разрешено обновление - характеристика поля.
     Если поле имеет эту характеристику,то  вы  можете  изменить  его
     значение.
Gupdate if null:H      обновить если пусто,характеристика поля.При
     этой характеристике поле можно изменять если оно пусто.
Guppercase:H  большими буквами,характеристика поля.При ней малень-
     кие буквы будут преобразованы при вводе в большие.
Gview:H       окно,объект БД,который можно использовать
     как таблицу в большинстве отношений,позволяя пользователю извле-
     кать  или обновлять избранные строки и колонки одной или несколь-
     ких таблиц.
Gworkspace:H  рабочее пространство,в котором SQL*Forms хранит записи перед
     сохранением в БД.Записи вводят в рабочее пространство при их создании или
     извлечении из таблицы.Записи удаляются из этого пространства при помощи
     удаления или сохранения в БД.

KOAP Open Portal 2000