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






                                г л а в а  5


   И З В Л Е Ч Е Н И Е    В Ы Б Р А Н Н Ы Х   З А П И С Е Й

   В этой главе описываются несколько способов выборки записей, удовлетворяю-
щих определенному  критерию.  После выполнения упражнений этой главы  вы  
будете  не  только  знать,  как выполнить  простые  запросы, удовлетворяющие 
определенному критерию,  но и  сложные   запросы,  отвечающие нескольким 
условиям. В этой главе обсуждаются следующие темы:
     - сравнение точных значений
     - введение множества условий
     - использование SQL фразы WHERE для успешных запросов

Сравнение точных  величин

   Предположим, что заказчик хочет, чтобы вы проверили цену в ордере. Вы 
знаете, что ордер был помещен 7 января 1987 г. и Order ID - 610.  SQL*Forms  
могут  выбрать  запись, которая содержит только эти величины.

   Ниже приведены основные шаги,  необходимые   для   выборки записей, которые 
дают требуемые величины:

 1. Нажимайте [Next Block] или [Previous Block], пока курсор не установится в 
    блоке коррекций.
 2. Нажмите [Enter Query].
 3. Напечатайте величины, которые вы хотите сравнивать,  в соответствующих 
    полях.
 4. Нажмите [Enter Query].
 5. Нажмите [Next Record] или [Previous Record] для просмотра выбранных 
    записей.


Упражнение  1. Установите курсор в блок ORDERS.
            2. Нажмите [Enter Query].

            Это сбрасывает отображенную запись. Ваш экран сейчас
            должен выглядеть, как следующий рисунок.
              Ъ----------------------------------------------------------ї
Рис.5-1       і                                                          і
Сравнение     і    ------------------------------------------------      і
точных        і    O R D E R S                                           і
значений      і                                                          і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і                                                          і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count:                                        і
              А----------------------------------------------------------Щ

                                    -- 21 --



               3. Наберите 610 в поле Order ID.
               4. Нажмите [Enter Query].
                  SQL*Forms отображают сообщение

                  Working...

                  в нижней части экрана, потом отображают информацию для
                  ордера номер 610 в блоке ORDERS. (Рис.5-2)

              Ъ----------------------------------------------------------ї
Рис.5-2       і                                                          і
Ордер 610     і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і                                                          і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і                                                          і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count: 1                                      і
              А----------------------------------------------------------Щ

   Сейчас у вас есть Order ID, Client ID, Order Date и Client Name для ордера 
610. Чтобы найти итог элементов данных для каждой  линии  элементов  данных,  
вам  необходимо выбрать записи для ордера 610 в блоке ITEMS.

 Упражнение    1. Нажмите [Next Block].
                  Заметим,  что  данные  из  предварительного запроса еще 
                  содержатся в блоке ITEMS.

               2. Нажмите [Clear Block].
                  Предыдущие записи сброшены,  и  сейчас из блока  ORDERS 
                  копируется текущий Order ID. (Рис.5-3.)


















                                    -- 22 --



              Ъ----------------------------------------------------------ї
Рис.5-3       і                                                          і
Сброс данных  і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і                                                          і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і                                                          і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count:                                  і
              А----------------------------------------------------------Щ

               3. Нажмите [Execute Query].
                  SQL*Forms находят записи, которые имеют 610 в Order ID
                  и отображают их в блок ITEMS.

              Ъ----------------------------------------------------------ї
Рис.5-4       і                                                          і
Общая сумма   і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і                                                          і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і                                                          і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count: 3                                і
              А----------------------------------------------------------Щ

    Cравнение с образцом
    --------------------
   Вы можете выбрать записи, используя величины  в  двух  или более полях, 
переместив курсор в эти поля и введя значения.  SQL*Forms  будут  считывать   
только  те  записи,  которые удовлетворяют критерию поиска, определенному во 
всех полях.  Например, если вы введете SALESMAN в поле, называемом "Job", и 0 
в поле, называемом "Commission", запрос выберет записи, в которых "Job" - это 
SALESMAN и "Commission" - 0. Вы также можете  выбрать  записи,  значение  
которых  подходит   под определенный образец. Чтобы сделать это, введите 
значение в поле, где "_" представляет любой символ, и "%" представляет любую 
комбинацию символов (включая и отсутствие символов).


                                    -- 23 --



Следующий   список   представляет   примеры   сопоставления образцу:

Образец       Возможное сопоставление
------------------------------------------------------------
JON_S         JONES,JONAS,JONOS,JONQS,JON-S,

S_AR_         SMART,SNARE,SHARE,SHARD,SHARP,SHARK

ENTER%        ENTER,ENTERS,ENTERED,ENTERTAIN

_IN%S         BINS,FINES,WINNERS,WINEMAKERS


Введение множества условий
--------------------------
   Иногда непрактично вводить  точные  значения,  с  помощью которых вы хотите
сделать  выборку записей. Например, вы можете пожелать выбрать следующее:
     - все записи с общей суммой более $100
     - все записи с Order ID, равным 10 и более
     - все записи, помещенные в июне

   Вместо введения точного значения  данных  вы  можете ввести перед значением 
данных, в одном или более полях, реляционный оператор.  Табл.5-1  показывает,   
как   можно  использовать некоторые  реляционные  операторы.  (Для полной 
дискуссии о реляционных  операторах  смотрите  SQL  Language  Reference 
Manual.)

Табл.5-1      Оператор   Значение              Примеры
Значение и    ------------------------------------------------------------
примеры       =          равно                 ='SMITH'
реляционных   !=         не равно              !=19.5
операторов    >          больше чем            >100.00
              >=         больше или равно      >=2000
              <          меньше чем            <'DAVIS'
              <=         меньше или равно      <=100.00
              BETWEEN    между двумя знач.     BETWEEN 100 AND 110

              Примечание: Операторы из таблицы 5-1 не работают для полей
              времени.

   Например, чтобы выбрать записи, имеющие общую сумму более, чем $100, вы 
должны нажать [Enter Query] и ввести > 100 в поле  ITEM TOTAL.  (Символ ">"  -  
реляционный  оператор, обозначающий больше чем, а 100 - значение, с которым 
идет сравнение.)   Если SQL*Forms проверяют значение,  которое является 
символьной строкой (такой как 'SMITH'), то символ ">" будет выбирать записи,  
которые идут после символьной строки в порядке алфавита (например, THOMAS или 
WILLIAMS).

Примечание: Поля, содержащие символьное значение или дату, должны быть 
заключены в одни кавычки. А когда вы используете реляционный оператор, который 
является словом (как BETWEEN), вы должны поставить перед ним "#".

Примечание: Не используйте метку-заполнитель  в  полях,  не связанных с базой 
данных.





                                    -- 24 --



Использование SQL фразы WHERE для успешных запросов
---------------------------------------------------
   Хотя вы можете выполнить довольно  сложные запросы,  вводя в  полях 
значения  данных  или  реляционные операторы,  вы можете пожелать выполнить  
еще  более  сложные запросы. Вы можете выполнить успешные запросы с помощью 
SQL фразы WHERE.  Фраза WHERE позволяет  вам  выразить запросы, основанные на 
условиях, отличающихся от точного сопоставления.

   Для использования  WHERE  вы  должны поместить переменную в одно  поле  или 
более. Переменной, которая служит в качестве метки, должно предшествовать 
двоеточие (:). Поместив переменную в  поле,  вы  сигнализируете,  что хотите 
ввести фразу WHERE, использующую  значение  в  этом  поле.  Первым символом 
имени переменной должна быть буква, последующими символами могут быть буквы, 
цифры и специальные символы "_", "$" или "#".


Определение   Следующее  упражнение  показывает,  как  использовать   фразу
области       WHERE,  чтобы  выбрать   все   записи,  помещенные  с 5 по 25
значений      января.


 Упражнение
    1. Нажмите [Previous Block] один раз, чтобы перейти  в блок ORDERS.
    2. Нажмите [Enter Query].
       Как вы видели ранее, это очищает блок  от  отображенных ранее записей.

    3. Нажмите [Next Field], чтобы перейти  в поле Order Date.
    4. Введите :DATE в поле Order Date.
       Вместо ввода точного значения (как 05-JAN-87) вы вводите переменную.  
       Двоеточие (:) указывает, что это имя переменной,  а не  конкретное 
       значение. Имя переменной идентифицирует поле и может  быть указано в 
       фразе WHERE.

    5. Нажмите [Enter Query].
       SQL*Forms отображают готовность Query Where с курсором, установленном 
       во вводимом поле. Сейчас вы можете ввести условия, которым должны 
       удовлетворять выбираемые записи.  И ваш экран должен выглядеть, как 
       рис.5-5.





















                                    -- 25 --



Рис.5-5       Ъ----------------------------------------------------------ї
Диалоговый    і                                                          і
блок          і    ------------------------------------------------      і
Query Where   і    O R D E R S                                           і
              і                                                          і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і   Ъ------------------------------------------------ї     і
              і   і                  Query Where                   і     і
              і   і                                                і     і
              і   іCriteria ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± і     і
              і   і         ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± і     і
              і   і                                                і     і
              і   А------------------------------------------------Щ     і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count:             ENTER QUERY                і
              А----------------------------------------------------------Щ

               6. Наберите :DATE BETWEEN '05-JAN-87' AND '25-JAN-87'

                  Это укажет SQL*Forms, что вы хотите увидеть все записи, 
                  которые  имеют  Order Date  от 5-го  по 25-е  января.  
                  (Рис.5-6.) Если вы делаете ошибку, когда  вводите ваш 
                  запрос, вы можете использовать [Delete Character] для 
                  уничтожения   символа   под   курсором.   Или   можете 
                  использовать [Right] или [Left] для перемещения курсора в  
                  горизонтальном  направлении без изменения символов.  А потом 
                  наберите желаемый символ сверху неправильного.

Рис.5-6       Ъ----------------------------------------------------------ї
Введение      і                                                          і
условия       і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і                                                          і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і   Ъ------------------------------------------------ї     і
              і   і                  Query Where                   і     і
              і   і                                                і     і
              і   іCriteriaЪ--------------------------------------їі     і
              і   і        DATE BETWEEN '05-JAN-87' AND '25-JAN-87'і     і      
              і   і        і                                      іі     і
              і   і        А--------------------------------------Щі     і
              і   А------------------------------------------------Щ     і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count:             ENTER QUERY                і
              А----------------------------------------------------------Щ

               7. Нажмите [Accept].




                                    -- 26 --



                  SQL*Forms выбирают три ордера, помещенных с 5-го по 25-е
                  января.  Чтобы  просмотреть  эти  записи друг за другом,
                  нажмите [Next Record] или [Previous Record].

Резюме по  введению множества условий  

  Для введения запроса с использованием фразы WHERE необходимы следующие шаги:

1. Нажмите [Next Block], когда ваш курсор  установлен в блоке корректировок.
2. Нажмите [Enter Query].
3. Вместо значения введите в поле имя переменной (такой как :ID или :DATE).
4. Нажмите [Execute Query].
5. В диалоговом блоке Query Where введите условие, которому должны 
   удовлетворять выбранные записи.
6. Нажмите [Accept].
7. Нажмите  [Next Record]  или  [Previous Record],  чтобы просмотреть 
   выбранные записи.


Использование В предыдущем  примере   вы   вводили   фразу   WHERE, чтобы
фразы WHERE   определить  область  значений,  в  которую  должны  попасть
другими       выбранные  записи.  (Значение  для  Order Date  должно было
способами     лежать   между   05-JAN-87   и   25-JAN-87.)    Таблица 5-2
              представляет дополнительные способы использования в запросах
              фразы WHERE.

Таблица 5-2   Цель                               Примеры
Использование ------------------------------------------------------------
в запросах    Выбрать записи, имеющие значение:
фразы WHERE
                 больше чем (>)                  :CLIENTID > 106
                 больше или равно (>=)           :ITEMTOT >= 100
                 меньше чем (<)                  :ORDERID < 305
                 меньше или равно (<=)           :ITEMTOT <= 100
                 равно (=)                       :CLIENTID = 106
                 не равно (!=)                   :NAME != 'SHAPE UP'


              Составить запрос, которому         (:CODE = 100860 OR
              удовлетворяет одно из двух условий  :CODE = 100861)


              Составить запрос с двумя условиями (:ORDERDATE =
                                                  '14-JUL-86') AND
                                                 (:CLIENTID = 106)

Использование Вы можете  ввести  запросы  с  более  сложными  критериями
сложного      поиска,  чем  описанные  выше. Например, вы можете выбрать
критерия      записи, в которых Client ID имеет следующие значения:
поиска
                   - одно из нескольких значений

                   - 107 или Order ID больше, чем 615 (Введение значений
                     в поля Client и ID Order ID позволит выбрать записи,
                     в  которых  Client ID  равен 107  и Order ID больше,
                     чем 615.)



                                    -- 27 --



                   - 107 и Order ID больше, чем 615, или Order Date - 7-е
                     января


Ниже приведена основная процедура,  использующая  сложный критерий поиска:

   1. Нажмите [Enter Query].
   2. Для  каждого  включаемого  поля  введите  переменную (хорошо работают 
      буква или короткое слово). Например, введите :ID в поле Order ID и :N в  
      поле Client Name.

   3. Нажмите [Execute Query], чтобы отобразить диалоговый блок Query Where.

   4. Введите выражение, которое описывает критерий поиска, используя метки, 
      описанные в п.2.

  Например:
      Критерий поиска                    Вводимые значения
      ------------------------------------------------------
      Order ID больше, чем 615 или       :ID > 615 OR
      Client Name - JUST TENNIS          :N = 'JUST TENNIS'

      Order ID меньше или равен 615 или  :ID <= 615 OR
      Client Name заканчивается на       :N like '%TENNIS'
      'TENNIS'

   5. Нажмите [Accept].  SQL*Forms  анализируют   введенные логические 
      выражения и выполняют запрос.


Многократное  Чтобы в текущем блоке повторно использовать критерий поиска
использование предыдущего запроса, нажмите [Enter Query] дважды: нажатие
критерия      один  раз  инициирует  новый  запрос,  а повторное нажатие
поиска        отображает  предыдущий  критерий   поиска.   Вы    можете
              использовать отображенный критерий или модифицировать его,
              прежде чем нажмете [Execute Query].

              Если вы оставили метки в каком-либо поле  и   потом дважды
              нажали [Enter Query], SQL*Forms вновь отобразят эти метки в
              том поле, в котором вы их вводили. Потом  нажмите [Execute
              Query], чтобы отобразить последний ответ в диалоговом блоке
              Query Where.   Вы   можете   использовать   ответ,   нажав
              [Next Field], или можете отредактировать его, заменить или
              переместить.


Подсчет       Если  вы  хотите  узнать, сколько записей вернет вам поиск,
записей       прежде,  чем действительно выполните запрос, вам необходимо
запроса       использовать [Count Query Hits]. Вот основная процедура для
              подсчета  количества   записей,   удовлетворяющих критериям
              поиска:

 1. Нажмите [Enter Query].
 2. Введите критерий поиска.
 3. Нажмите [Count Query Hits].

    SQL*Forms подсчитывают записи,  которые  удовлетворяют критерию поиска,  и
    отображают их количество в строке сообщений.

                                    -- 28 --



    Заметим,   что   вы   нажали  [Count Query Hits] вместо [Execute Query]. 
    Вы можете использовать оба ключа, один за другим, чтобы подсчитать и 
    выбрать записи.

После нажатия [Count Query Hits] вы можете выбрать следующие опции:

     - Нажать [Execute Query], чтобы выполнить запрос.
     - Ввести другой критерий поиска.
     - Нажать [Exit/Cancel],  чтобы  выйти  из  режима Enter Query без 
       выполнения запроса.

Использование В тех ситуациях,  когда  вы  хотите ввести более изощренные
фразы WHERE   запросы, вы можете использовать  язык  SQL . (Обратитесь к
с множеством  SQL  Language  Reference  Manual.)  SQL*Forms поддерживают
условий       большую часть фраз SELECT,  за исключением фраз GROUP BY и
              CONNECT BY.

Используя SQL, вы можете ввести фразу WHERE с  несколькими условиями:

 1. Нажмите [Enter Query], затем поместите переменную :ORDER в поле Order ID  
    и  переменную :CLIENT  в  поле Client ID.

 2. Нажмите [Execute Query] и введите, по готовности Query Where, следующее 
    условие:

    :ORDER > 500 AND :CLIENT < 110 ORDER BY :CLIENT

  Это SQL утверждение будет выбирать все записи, у которых Order ID  больше 
500 и при  этом Client ID меньше 110.  Записи будут упорядочены по Client ID.
        г л а в а 6


М О Д И Ф И К А Ц И Я   Д А Н Н Ы Х

В   Б А З Е   Д А Н Н Ы Х


  Эта глава объясняет вам, как  использовать  SQL*Forms для модификации  
данных в базе  данных.  Это очень  важная для понимания   глава,  т.к.  вы   
часто  будете  использовать SQL*Forms  для  добавления   новых  записей  в  
базу данных или для  изменения   существующих  записей. В  этой  главе 
рассматриваются  следующие  темы:
   - замена, вставка и удаление символов
   - изменение записи
   - удаление информации из базы данных
   - создание записей

        Вставка , замена и удаление символов

SQL*Forms позволяет вам вводить символы , используя один из двух режимов:

 1. Режим вставки
    Когда  установлен  режим  вставки, то  каждый  символ, который  вы  
    вводите, появляется  на  месте  курсора.  Текущий  символ над  курсором  и  
    последующие  символы сдвигаются вправо.




                                    -- 29 --



 2. Режим замены
    Когда  установлен режим замены, то любой символ, который вы вводите , 
    заменяет символ над  курсором. Символы  за курсором не сдвигаются.

Вы можете переключать режимы вставки и замены нажатием [Insert/Replase]. Уста-
новленный режим остается активным  до тех пор, пока вы не измените его новым 
нажатием этой клавмши (Линия состояния отображает текущую моду). Чтобы удалить 
символ, установите  курсор в позицию символа и нажмите [Delete Character]. 
[Delete Character] действует сходным образом как в режиме вставки, так и в 
режиме замены.  (Когда  курсор  находится  за  последним  символом  в поле, 
[Delete Character]  не  имеет  действия). Если  вам  нужно удалить символ 
перед  курсором, нажмите  [Delete Backward].


        Вставка и удаление записи

Иногда вы  хотите  выбрать  записи  просто  для  просмотра информации, которую  
они  содержат; в  других  случаях  вы хотите изменить информацию.

Предположим, что клиент Shape Up хочет  изменить  ордер 615.  Он хочет 
добавить в ордер три SP Junior Rackets (Код 101863).

   Упражнение
1. Убедитесь в  том, что  ваш  курсор  установлен  в  блоке Orders.
2. Нажмите  [Enter Qwery].
3. Наберите 615 в поле Order ID.
4. Нажмите [Execute Qwery].
   SQL*Forms выбирает запись ордера 615.

5. Нажмите [Next Block] для перемещения в блок ITEMS.
6. Нажмите  [Clear Block], чтобы  стереть  данные, которые остались от 
   последнего запроса.
   Новое  значение, отображающееся  в поле Order ID - это номер  текущего  
   ордера 615. Это значение, по умолчанию, помещается  сюда  дизайнером  формы 
   автоматически.

7. Нажмите [Execute Query].
   SQL*Forms  выбирает  три   элемента   данных,  которые составляют ордер 
   615. Ваш экран должен выглядеть сейчас как  рис.6-1.

Рис.6-1       Ъ----------------------------------------------------------ї
Ордер 615     і                                                          і
              і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      і

                                    -- 30 --



              і   Count: 3                                і
              і                                                          і
              А----------------------------------------------------------Щ

Сейчас, если  вы  имеете на экране  правильно  отображенный ордер,   вы   
можете  производить  изменения,  запрошенные клиентом. Напоминаем, что  Shape  
Up  хочет добавить другие элементы  в  его  ордер.

  Упражнение
1. Нажмите [Next Record], чтобы перейти к записи со значением 2 в поле Item No.
2. Нажмите [Clear Record].
   Это очистит  элемент  номер 2 на  экране ( но не в  базе данных )  и  
   освободит  место  для  добавления  в  ордер нового элемента 4.

3. Нажмите [Next Record] для перехода  на  следующую линию.
   SQL*Forms отображает 615 как значение  по умолчанию для Order ID.
4. Нажмите [Next Field] для  перемещения в  поле  Item No.
5. Наберите  4  в  поле  Item No и нажмите [Next Field].
6. Наберите  10186  в  поле Code  и нажмите  [Next Field].
   SQL*Forms  отображают  сообщение:

   FRM-40203: Field must be entered completely.
   Поле  Code - это  пример  поля с  фиксированной  длиной.  Т.к. все  
   индентификационные  номера  продукта  содержат шесть  знаков, дизайнер  
   формы  определил,  что  курсор не  может  покинуть   поле  Code, если  был  
   введен  не шестизначный номер. (См. рис. 6-2).

Рис.6-2       Ъ----------------------------------------------------------ї
Вспомогатель- і                                                          і
ное сообщение і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      і
              і   Count: 3                                      і
              і                                                          і
              А----------------------------------------------------------Щ

8. Наберите 12.50 как Act.Price и нажмите [Next Field].
9. Наберите  5  как  Quantity и нажмите [Next Field].

   Как  только  ваш  курсор  перейдет  в  поле  Item Total, SQL*Forms  
   вычисляет  и  отображает  общую  сумму  для элемента  данных. Дизайнер  
   формы  заставляет  SQL*Forms умножать  значение  в  поле  Act.Price  на  
   значение  в в  поле  Quantity. Результат  отображается в Item Total, когда 
   ваш курсор входит в это поле ( Cм. рис. 6-3 ).


                                    -- 31 --



Рис. 6-3      Ъ----------------------------------------------------------ї
Общая сумма   і                                                          і
              і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      і
              і   Count: 3                                      і
              і                                                          і
              А----------------------------------------------------------Щ

 Не  все  поля  формы  могут  быть  изменены. Дизайнер  может пометить   
 некоторые   поля  как   неизменяемые.  Следующее упражнение  показывает, что 
 происходит, когда  вы  пытаетесь изменить неизменяемое поле.

  Упражнение
1. Нажмите [Previous Block] для перехода в блок ORDERS.

2. Попытайтесь набрать какой-нибудь номер в поле ORDER ID.
   SQL*Forms отображает сообщение:

   FRM-40200 :Field is protekted against updata.

   Дизайнер сделал это поле неизменяемым, чтобы вы были защищены от случайного  
изменения индентификационного номера  ордера. Order ID - это особая величина, 
только через нее информация в таблице  ORD связывается  с информацией в   
таблице ITEM.  Сообщение об ошибке исчезает, когда вы нажмете другую клавишу.


        Удаление информации из базы данных.

Другой  способ   модифицирования  содержания  базы  данных - - это  удаление 
целых  записей. Например, вы можете пожелать сделать что-либо из следующего:
   - удалить элемент данных из ордера
   - отменить ордер полностью
   - удалить клиента из базы данных

Предположим, что  Shape Up решил отменить свой ордер для Sp  Juniour Rackets  
(Code  101863). Следующее  упражнение показывает  вам, как  удалить вновь  
добавленную запись. (Это также восстанавливает начальную форму базы данных.)

  Упражнение 
1. Убедитесь, что курсор находится в блоке ITEMS.
2. Убедитесь, что курсор увстановлен на запись с Item 4.
3. Нажмите [Delete Record] для удаления записи номер 4.



                                    -- 32 --



                  Ваш экран должен выглядеть как рис. 6-4 .
Рис. 6-4      Ъ----------------------------------------------------------ї
Удаление      і                                                          і
записи        і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      і
              і   Count: 3                                і
              і                                                          і
              А----------------------------------------------------------Щ

 4. Нажмите [Commit], чтобы выполнить удаление.
    SQL*Forms отбражает сообщение:

    Transaction completed -- 1 records processed.

Хотя  запись  с Code 101863 уничтожена, оригинальная  запись (с Сode 100863 - 
the Ace Tennis Racket IIs) - еще в базе данных. Вспомните, что вы не уничтожили
ее, а просто очистили от формы с помощью [Clear Reckord]. Чтобы проверить, что 
эта оригинальная  запись  все  еще  в  базе данных, и что запись, которую  вы 
только что удалили, исчезлаа, прделайте следующее упражнение.

  Упражнение
 1. Убедитесь,  что  курсор  установлен  в  поле  Order ID блока  ITEMS.
 2. Нажмите [Execute Qwery].
    Это  указывает  SQL*Forms  выбрать  в  ITEMS  записи, у которых  Order ID  
    равен  615.

    SQL*Forms  выбирают  три  записи  из  базы  данных.  Оригинальная  запись,  
    которую  вы   очистили, но не уничтожили, еще  в  базе  данных.

 3. Нажмите [Clear Form/Rollback], чтобы очистить форму для следующего 
    упражнения.

В заключение напоминаем, что [Clear Record] убирает запись из рабочей  
области, оставляя  ее в базе данных. [Delete Record] удаляет запись  из базы 
данных сразу после  нажатия  [Commit].










                                    -- 33 --




        Создание новых записей

   Каждый  раз, когда  Summit Sporting Goods  получает  другой ордер, вам  
необходимо добавить  в базу данных  новую запись Предположим, вами получен  
трехэлементный ордер из магазина Just Tennis в Norhside Mall. (См. рис. 6-5). 
Вам необходимо добавить  этот  ордер  в  базу  данных.  Как ввести  новые 
записи  в  базу данных, показывает  следующее  упражнение.

Рис. 6-5        Ъ--------------------------------------------------------Дї
Ордер из        і   SUMMIT SPORTING GOODS - ORDER FORM      Order No.____ і
Just Tennis     і                                                         і
                і   Client Name ______________________      Client ID ___ і
                і   Address __________________________      Date ________ і
                і           __________________________      Phone _______ і
                і                                                         і
                Г--------------------------------------------------------Дґ
                і   Item                Product ID   Price    QTY   Total і
                Г--------------------ДВ------------В--------В----ДВ------Дґ
                Г--------------------ДЕ------------Е--------Е----ДЕ------Дґ
                Г--------------------ДЕ------------Е--------Е----ДЕ------Дґ
                Г--------------------ДЕ------------Е--------Е----ДЕ------Дґ
                Г--------------------ДЕ------------Е--------Е----ДЕ------Дґ
                Г--------------------ДЕ------------Е--------Е----ДЕ------Дґ
                Г--------------------ДБ------------Б--------Б----ДБ------Дґ
                і                                      Order Total ______ і
                А--------------------------------------------------------ДЩ

Заполнение    Первая часть ордера содержит основную  информацию о  клиенте
блока ORDERS  и ордере. Для  заполнения  блока ORDERS необходимы следующие
              шаги.

  Упражнение
1. Установите курсор в блок ORDERS и нажмите [Clear Block].

2. Наберите 622 в поле Order ID и нажмите [Next Field].

   Заметим, что поле Order Date заполняется сегодняшней датой. Это условность, 
   которая обеспечивается дизайнером формы. Т.к.  вы  вводите ордер  в  тот  
   же  самый  день, в который его получили, вам не нужно изменять дату.

3. Нажмите [Next Field], чтобы принять значение  Order Date и переместить 
   курсор в поле Сlient ID.  Когда вы перешли в поле Client ID, то в линии  
   cостояния появляется  индикатор  List  непосредственно   слева от 
   Insert/Replace. Дизайнер может обеспечить список значений поля в  любом  
   поле  формы, чтобы  потом  найти  по  ним подходящее   значение.

4. Нажмите  [List].  Список значений  появляется   как всплывающее  окно 
   (см. рис.6-6). Чтобы  пройти  по списку IDs  клиента  вверх  и вниз, 
   используйте клавиши [Up] и [Down].

Рис. 6-6      Ъ----------------------------------------------------------ї
Список        і                                                          і
значений в    і    ------------------------------------------------      і
всплывающем   і    O R D E R S                                           і
окне          і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і

                                    -- 34 --



              і              Ъ----------------------------------ї        і
              і    ----------ґ            ORDID                 Г--      і
              і    I T E M S і                                  і        і
              і              і Find: ±±±±±±±±±±±±±±±±±±±±±±±±±± і        і
              і      OrderID ГВ--------------------------------Дґ        і
              і        ЙННН» ііQUERY MOUNTAIN                104і        і
              і        є   є ііJOCKS PORTS                   100і        і
              і        ИНННј ііJUST TENNIS                   103і        і
              і              ііK + T SPORTS                  105і        і
              і              ііNORTH WOODS HEALTH            108і        і
              і              ііSCOTT'S SPORTING GOODS        110і        і
              і              ііSHAPK UP                      106і        і
              і              АБ--------------------------------ДЩ        і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      і
              і   Count: 6                                і
              і                                                          і
              А----------------------------------------------------------Щ

 5. Наберите just на входе в поле списка значений и нажмите  [List] или  
    [Next Field].

    Заметим, что  "Just Tennis" - единственное  имя, которое появляется.

 6. Нажмите [Select].
    "Just Tennis"  появлятся в  поле  Client  Name, а  номер "103" появляется 
    в поле Client ID. См. рис. 6-7.

Примечание: Вы можете  сделать  поиск  по  всем  колонкам, отобранным в  
            список значений.






























                                    -- 35 --




Рис. 6-7      Ъ----------------------------------------------------------ї
Заполнение    і                                                          і
блока ORDERS  і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      і
              і   Count: 6                                      і
              і                                                          і
              А----------------------------------------------------------Щ

Другие        Вы  также  можете  создать  запись,  переместив  курсор  к
методы        пустой  "записи",  следующей  за  последней   отображенной
добавления    записью,  и  введя   там  значения  поля.  Чтобы  подобным
записей       образом добавить несколько записей, нажмите [Insert Record]
              или [Next Record] после того как  вы завершили  ввод данных
              для каждой записи.

Если вы начали добавление  записи  и  хотите  начать  вновь, нажмите [Clear 
Record].

Для добавлдения  подобных  записей  используйте  [Duplicate Record]  и  
[Duplicate Field]. [Duplicate Record]  копирует каждое   поле   предшествующей  
записи  в  новую  запись; [Duplicate  Field ]  копирует  только  текущее  
поле. После нажатия той или другой клавиши можно модифицировать значение поля, 
которое вы скопировали.


Заполнение    Блок  ITEMS - это  блок, в  который  вы  вводите  конкретную
блока ITEMS   информацию   об   элементах  данных.  Следующее  упражнение
              подскажет  вам как  это  выполнить.

  Упражнение
 1. Нажмите [Next Block], чтобы  перейти в ITEMS блок.
    Новый номер ордера, 622, появвляется по умолчанию в поле ORDER ID.

 2. Принимая номер ордера, нажмите [Next Field].

 3. Введите элементы  данных, как  показано в таблицах ниже.  После каждого  
    ввода нажмите [Next Field]. чтобы начать ввод данных, нажмите [Next Record]
    Запись 1
    Поле           Значение
    ------------------------Д
    Item No        1



                                    -- 36 --



    Code           100860
    Act. Price     35
    Quantity       7

    Запись 2
    Поле           Значение
    ------------------------
    Item No.       2
    Code           100870
    Act.Price      2.80
    Quantity       12

    Запись 3
    Поле           Значение
    ------------------------Д
    Item No.       3
    Code           100890
    Act. Price     58
    Quantity       3

Ваш экран должен  выглядеть  сейчас как рис.6-8. Вы  можете заметить, что 
когда вы были в поле Quantity и нажали [Next Field],  то для вас было  
вычислено  значение  Item  Total.  Сравнение этой величины с записью в ордере 
продавца позволит контролировать точность ордера.

Рис. 6-8      Ъ----------------------------------------------------------ї
Заполнение    і                                                          і
блока ITEMS   і    ------------------------------------------------      і
              і    O R D E R S                                           і
              і    Order ID ±±±          Order Date ±±±±±±±              і
              і                                                          і
              і    ClientID ±±±±±±±     Client Name ±±±±±±±±±±           і
              і                                                          і
              і                                                          і
              і    ------------------------------------------------      і
              і    I T E M S                                             і
              і      OrderID It.No.  Code  Act.Pr. Quant. It.Total       і
              і        ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»  ЙННН»          і
              і        є   є  є   є  є   є  є   є  є   є  є   є          і
              і        ИНННј  ИНННј  ИНННј  ИНННј  ИНННј  ИНННј          і
              і                                                          і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±      і
              і   Count: 6                                      і
              і                                                          і
              А----------------------------------------------------------Щ

Заполнение    Блок CLIENT DATA  cодержит информацию,относящуюся к клиенту,
блока         помещающему  ордер,  такую как имя, адрес и  т.д. Выполните
CLIENT DATA   следующее упражнение по заполнению блока CLIENT DATA.

 Упражнение
1. Нажмите [Next Block]  для перехода в блок CLIENT DATA и затем нажмите 
   [Clear Block].

 Заметим, что ID -номер клиента, 103, автоматически вводится в поле Client ID.



                                    -- 37 --



2. Нажмите [Next Field].
3. Наберите JUST TENNIS в поле Сlient Name и нажмите [Next Field].
4. Наберите NORTHSIDE MALL для Address, затем нажмите [Next Field].
5. Наберите BURLINGAME для City и нажмите [Next Field].
6. Наберите са - строчными буквами в поле State.

   Заметим, что хотя вы  набрали штат маленькими  буквами, SQL*Forms обращают 
   их в заглавные буквы. Это происходит потому, что дизайнер формы 
   сконструировал это поле как поле заглавных букв.

   В заключение, как только вы  набрали аббревиатуру  штата, ваш  курсор  
   автоматически  переходит к следующему полю, хотя вы и не нажали [Next 
   Field]. Дизайнер сконструировал State как автоматически пропускающееся 
   поле. Как  только вы введете правильное количество  символов в поле, курсор 
   автоматически  перейдет  к  следующему  полю.  Свойство автоматического 
   пропускания  работает только тогда, когда когда в поле вводится величина 
   одной и той же длины.

   Сейчас,  когда вы в  поле  Zip,  заметим, что  SQL*Forms автоматически 
   отобразили справочное сообщение:

   Enter the 9-digit ZIP code, if available.

   Дизайнер формы  может  вибирать - иметь  или  не  иметь автоматически  
   отображаемое справочное сообщение каждый раз, когда вы вводите определенные 
   поля. (См. рис. 6-9.)

Рис. 6-9      Ъ----------------------------------------------------------ї
Автоматичес-  і    ------------------------------------------------      і
кая справка   і    C L I E N T  D A T A                                  і
для поля ZIP  і                                                          і
              і   Client ID ±±±±±±                                       і
              і                                                          і
              і        Name ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і     Address ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і        City ±±±±±±±±±±±±±±±±±±                           і
              і                                                          і
              і       State ±±  Zip ±±±±±±                               і
              і                                                          і
              і       Phone ±±±   ±±±±±±                                 і
              і                                                          і
              і      Credit ±±±±±±                                       і
              і                                                          і
              і     Comment ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count: 6                                      і
              А----------------------------------------------------------Щ

 7. Наберите 97544 в поле Zip и нажмите [Next Field].
 8. Наберите 415 в секции кода области поля Phone.

    Заметим, что  секция  кода  области  -  действительно отдельное  поле.  
    Это  поле  также  имеет   свойство автоматического   пропускания, поэтому 
    вы  сейчас - в секции номера телефона поля Phone.


                                    -- 38 --



 9. Наберите 677-9312 в поле  номера  телефона  и  нажмите [Next Field].

10. Наберите 3000 в поле  Credit Limit. В этот  момент  ваш экран должен 
    выглядеть как рис. 6-10.

Рис. 6-10     Ъ----------------------------------------------------------ї
Завершение    і    ------------------------------------------------      і
ввода в блок  і    C L I E N T  D A T A                                  і
CLIENT DATA   і                                                          і
              і   Client ID ±±±±±±                                       і
              і                                                          і
              і        Name ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і     Address ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і        City ±±±±±±±±±±±±±±±±±±                           і
              і                                                          і
              і       State ±±  Zip ±±±±±±                               і
              і                                                          і
              і       Phone ±±±   ±±±±±±                                 і
              і                                                          і
              і      Credit ±±±±±±                                       і
              і                                                          і
              і     Comment ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count: 6                                      і
              А----------------------------------------------------------Щ

              В  следующем  упражнении  вы  добавляете  к  новому  ордеру
              комментарии.

Добавление    Для  добавления комментариев к блоку  СLIENT DATA  выполните
комментариев  следующие шаги:
к блоку
CLIENT DATA    1. Убедитесь, что курсор в поле Comments.
               2. Нажмите [Edit] для  вызова  редактора  поля. На  экране
                  появляется всплывающее окно Edit (см. рис. 6-11).

Рис.6-11      Ъ----------------------------------------------------------ї
Всплывающее   і    ------------------------------------------------      і
окно Edit     і    C L I E N T  D A T A                                  і
              і                                                          і
              і   Client ID ±±±±±±                                       і
              і                                                          і
              і        Name ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і     Address ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і        City ±±±±±±±±±±±±±±±±±±                           і
              і                                                          і
              і       State ±±  Zip ±±±±±±                               і
              і        Ъ--------------------------------------Дї         і
              і       Pі ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± і         і
              і      Crі ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± і         і
              і     Comі ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± і         і
              і        А--------------------------------------ДЩ         і
              і                                                          і

                                    -- 39 --



              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count: 6                                      і
              А----------------------------------------------------------Щ

 3. Наберите следующее предложение:
    Т.к. этот комментарий будет  появляться в поле  Comment каждый раз, когда 
    вызывается эта запись, вы должны дать более конкретную  информацию о 
    счете. Для  исправления и расширения только что набранного предложения 
    используйте клавиши, доступные только в редакторе  для  всплывающих окон. 
    (См. описание клавиш в приложении А.)

 4. Нажмите  [Beginning of line]  для  перемещения  курсора в начало линии.
 5. Нажмите [Delete Line], чтобы очистить всплывающее окно.
 6. Введите в окно следующий текст:
    The JUST TENNIS account.....

    Дата, наиболее рекомендуемая компонента каждого комментария, в действитель
    ности относится к началу комментария. Поэтому вам необходимо освободить 
    для нее места вверху текста, а потом  удалить и  вставить туда дату.

 7. Нажмите [First Line], чтобы переместить курсор к началу текста.
 8. Вставьте линию в начале текста нажатием клавиши Return.  Таким  образом,  
    будет  создана  чистая  линия в  начале текста.
 9. Нажмите  [Last Line]  для  перехода  к  концу  текста в всплывающем окне.

10. Подведите курсор к 3 в дате. Нажмите [Select].
11. Поместите курсор на последнюю 8 в дате; нажмите [Cut].
12. Вновь нажмите  [First Line], а потом  [Paste]. Сейчас дата находится в 
    первой  линии всплывающего  окна, как показано на рис. 6-12.

Рис. 6-12     Ъ----------------------------------------------------------ї
Выполнение    і    ------------------------------------------------      і
редактирова-  і    C L I E N T  D A T A                                  і
ния всплыва-  і                                                          і
ющего окна    і   Client ID ±±±±±±                                       і
              і                                                          і
              і        Name ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і     Address ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і                                                          і
              і        City ±±±±±±±±±±±±±±±±±±                           і
              і                                                          і
              і       State ±±  Zip ±±±±±±                               і
              і        Ъ--------------------------------------Дї         і
              і       Pі ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± і         і
              і      Crі ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± і         і
              і     Comі ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± і         і
              і        А--------------------------------------ДЩ         і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count: 6                                      і
              А----------------------------------------------------------Щ

13. Вновь нажмите [Edit] или [Accept], чтобы удалить окно редактора.

14. Нажмите [Exit/Cancel] и ответ "No"  для  подтверждения готовности. Вам не  
    обязательно  делать  эти изменения, потому  что вы  только что  завершили  
    выполнение всех упражнений этого руководства.

                                    -- 40 --



    SQL*Forms возвращают вас к линии системной команды.


























































                                    -- 41 --




        г л а в а 7              Р А Б О Т А   S Q L * F o r m s

Эта глава содержит  информацию  о  способах  выполнения SQL*Forms, особенно во 
время совершения  транзакций в  базу данных. В этой главе вы найдете описание 
следующих процессов:
    - совершение транзакции
    - свертывание транзакции назад
    - исполнение автоматического запирания записи

Cовершение транзакции

Когда вы работаете с формой, модификации, которые вы делаете для  таблиц базы 
данных,  не  записываются непосредственно в базу данных; скорее, они  
записываются  в  рабочую  область.  Чтобы  действительно  сделать  ваши  
модификации, вы  должны передать содержимое  рабочей  области в базу  данных,  
нажав [Commit]. После нажатия этой функциональной клавиши данные из рабочей 
области записываются в таблицу. Заметим, что [Commit] воздействует на вашу 
область не только для текущего блока, но и для всех блоков текущей формы.

Заметим, что во время  хранения  информации  в  вашей рабочей области  другие  
пользователи ORACLE  не могут их увидеть.  Поэтому, если другой пользователь 
вызывает строку после того, как вы модифицировали ее, но до того, как вы ее 
передали, он увидит немодифицированную версию строки.

Готовность    Многие операции  в  SQL*Forms  помогают  вам  защитить  ваши
к передаче    модификации   прежде,  чем  вы  сможете  продолжить  работу.
данных        Например, если вы модифицировали текущий блок, но не передали
              модификации в базу, SQL*Forms при нажатии вами  [Enter Query]
              отобразят ситуацию готовности (см.рис. 7-1).

Рис. 7-1      Ъ----------------------------------------------------------ї
Готовность    і    ------------------------------------------------      і
к передаче    і    C L I E N T  D A T A                                  і
данных        і                                                          і
              і   Client ID ±±±±±±                                       і
              і                                                          і
              і        Name ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±               і
              і         Ъ--------------------------------------Дї        і
              і    Addreі                                       і        і
              і         і  CAUTION                              і        і
              і    City і                                       і        і
              і         і   Do you want to commit the changes   і        і
              і    Stateі           you have made?              і        і
              і         і                                       і        і
              і    Phoneі                                       і        і
              і         і                      і        і
              і         і                                       і        і
              і    CrediА--------------------------------------ДЩ        і
              і                                                          і
              і    Comment ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±                і
              і                                                          і
              і   ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±    і
              і   Count: 6                                      і
              А----------------------------------------------------------




                                    -- 42 --



Нажмите [Next Field] пока  не  попадете  на  желаемый  ответ, затем нажмите 
[Select], чтобы его выбрать. Если вы ответите "Yes", SQL*Forms совершают ожи-
даемые модификации для текущего блока.  Потом, для  обоих  случаев, SQL*Forms  
переходят  к требуемым вами действиям. Однако,если вы ответите "Cancel", 
SQL*Forms возвращают вас в то место формы, где вы были, без совершения каких 
либо изменений.

Следующие операции подскажут вам действия  в  описанной  выше ситуации, если 
необходимо совершить какие-либо изменения:
   - [Enter Query]
   - [Execute Query]
   - [Exit/Cancel]
   - [Clear block]
   - [Clear Form/Rollback]
   - [Count Query Hits]

Заметим, что форма может быть сконструирована так, чтобы выполнить передачу 
данных в любое время, и может  это  делать без уведомления вас об этом.

Контроль      Во  время передачи данных форма  может  различными  способами
правильности  контролировать  правильность  данных. Однако,  этот  контроль
данных во     касается  только  взаимосвязей внутри поелей и записей, но не
время их      блоков.
передачи

Контроль правильности, выполняемый во время передачи данных, может включать:
   - контроль  уникальности.  Этот  контроль  предотвращает появление  любых  
     двух  строк  таблицы  с  одинаковыми значениями в данном поле. Например, 
     это  предупреждает появление двух записей с одинаковыми номереми ордера.

   - контроль последовательности. Контроль последовательности, например,   
     может  гарантировать,  что  сумма  отдельных элементов в ордере будет 
     соответствовать общему значению ордера.

Если ошибка обнаружена,  SQL*Forms  отображают  сообщение, информирующее  вас  
об  ошибке.  Это  сообщение  может  быть стандартным сообщением  SQL*Forms, 
или сообщением, сделанным дизайнером формы. Далее, SQL*Forms перемещают курсор 
к записи или полю, где была обнаркжена ошибка.

Примечание: Если  какая-либо  запись  из  рабочей  области не прошла контоль  
правильности, то  проваливается  вся  операция передачи данных; ничего не 
передается из рабочей области. Вы должны исправить ошибку и сделать передачу 
вновь.

        Свертывание транзакции назад

Чтобы отбросить содержимое рабочей области, вы  можете выполнить свертывание  
назад, путем нажатия  [Clear Form/Rollback]. Однако,  если вы совершили  
транзакцию в базу данных, [Clear Form/Rollback] ее не отменит.

        Использование автоматического запирания записи

   SQL*Forms обеспечивает  автоматическое запирание записи для того, чтобы  
предотвратить обновление одной и той же записи в один  момент  времени  двумя  
пользователями.  Когда  вы пытаетесь  обновить  запись, SQL*Forms  определяет, 
была ли запись обновлена или уничтожена другим  пользователем  после того, как  
вы сделали выборку  записи  запросом. Если запись была обновлена или уничтоже-
на, вы должны вновь выполнить запрос для того, чтобы увидеть и поработать с  
исправленной записью. Однако, если запись  не  была  изменена, SQL*Forms 
блокируют запись так, что другой  пользователь  не сможет ее модифицировать в 
то время, как вы ее обновляете.

При определенных обстоятельствах вы можете пожелать запереть запись раньше, 
чем это сделается автоматически. (Напрмер, вы можете  запереть ордер на время  
модификации его элементов.) Если вам это необходимо, нажмите [Lock Record].

KOAP Open Portal 2000