Для форм l oop in Oracle - PullRequest
       33

Для форм l oop in Oracle

0 голосов
/ 14 марта 2020

У меня есть проект Oracle Forms. Проект go такой.

У меня есть база данных, в которой есть таблица с именем students_payment. В форме всего два блока.

Первый блок с именем date_1 содержит from_date и to_date
Когда вы ставите дату, например 14-3-2019, в 14-3-2020
и нажимаете ввод
второй блок называется details_1. Он табличный и будет иметь три отображаемых элемента:

  1. национальность студента
  2. оплачено
  3. non_paid

Это заполнит таблицу следующим образом

Nationality       USA  

paid        65  

Non_paid    36  

Это означает, что американским студентам, которые заплатили за обучение в университете, 65 лет, а не заплатили 36,

Я сделал все это, но проблема в том, что я поставил свой код без ГДЕ условие для национальности, так что приведут все национальности. Но это приносит только первую запись, которая является США.

Как я могу поместить оператор выбора в FOR L OOP, чтобы поместить первую страну в первую запись, а вторую страну во вторую запись, и так далее для всех национальностей ??

1 Ответ

0 голосов
/ 14 марта 2020

Вы говорите одно, а отображаете другое, и эти два не совпадают.

Если второй блок табличный , его макет должен выглядеть как

Nationality    Paid    Non-paid
-----------    ----    --------
USA              65          35
France           70          30

т.е. не так, как у вас; ваш макет форма , а не табличный . Я предлагаю вам удалить этот блок и создать его с нуля, но на этот раз обращая внимание на то, что просит Мастер.

Это также решит проблему, которая у вас есть в настоящее время; форма макет отображает одну запись за раз. В табличном формате отображается несколько записей.

Насколько я понял, между этими двумя блоками нет никакой связи. Значения, используемые в первом, используются для ограничения строк, возвращаемых во втором блоке. Следовательно, второй блок должен быть блоком базы данных на основе таблицы (не делайте это управляющим блоком , если это то, что у вас есть сейчас). При этом, даже если в первом блоке ничего нет, когда вы находитесь во втором блоке и выполните запрос , вы получите все строки, хранящиеся в этой таблице. Формы делают это автоматически, вам не нужно писать ни одной строки кода.

FOR l oop вы упомянули? На мой взгляд, вам следует избегать этого. Это почти всегда неправильный выбор в блоке базы данных, но может использоваться в блоке управления. Но зачем? Позвольте Forms делать грязную работу.

Теперь вернемся к ограничению результата: вы можете использовать триггер PRE-BLOCK во втором блоке и использовать встроенное свойство SET_BLOCK_PROPERTY и его ONETIME_WHERE, используя элементы даты. из первого блока, например,

set_block_property('second_block', 
                    onetime_where, 
                   'date_column between :first_block.date_from and :second_block.date_to');

Или используйте палитру свойств второго блока и установите для предложения WHERE значение

where date_column between :first_block.date_from and :second_block.date_to
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...