PL/SQL и Oracle Forms Builder

Поэтому мне нужно собрать этот проект для школы, но мне разрешено ТОЛЬКО использовать конструктор форм оракула.

Я пытаюсь выполнить простой запрос и присвоить значения объектам формы на основе того, что я получаю из запроса, но мои элементы формы появляются как необъявленные. Кто-нибудь знает, как я могу изменить атрибуты формы, подобные этому? Этот пользовательский интерфейс в этой программе ужасен, поэтому делать это с помощью мастеров - это то, чего я действительно хотел бы избежать, если я могу просто заставить все происходить на PL/SQL.

Вот что у меня есть: введите здесь описание изображенияВсе еще пытаюсь найти работающее решение.

Я немного изменил свой код:

DECLARE
    pmrn patient.p_mrn%TYPE;
    var_ptuple patient%ROWTYPE;
BEGIN
    pmrn := NAME_IN('MRN_FIELD');
    SELECT * INTO var_ptuple from patient WHERE patient.p_mrn = pmrn;
    :PATIENT_BLOCK.FNAME := var_ptuple.p_fname;
    :PATIENT_BLOCK.LNAME := var_ptuple.p_lname;
END;

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


person Scuba Steve    schedule 26.07.2013    source источник


Ответы (1)


Элементы формы могут называться переменными связывания в Forms PL/SQL, например.

pmrn := :PATIENT_BLOCK.MRN_FIELD;
:PATIENT_BLOCK.FNAME := var_ptuple.p_fname;

и т.п.

Однако имейте в виду, что вам, скорее всего, не нужно писать весь этот код. Просто установите в качестве источника блока таблицу и выполните запрос к ней — Forms позаботится о загрузке записей за вас.

person Jeffrey Kemp    schedule 26.07.2013
comment
Могу ли я написать такой запрос? выберите p_fname, plname от пациента, где пациент.p_mrn = :PATIENT_BLOCK.MRN_FIELD Я пытаюсь запретить доступ к записям, где у пользователя нет необходимой информации (например, идентификационный номер и пароль или что-то еще). Похоже, что установка на основе графического интерфейса не предлагает таких функций. - person Scuba Steve; 26.07.2013
comment
Графический интерфейс — это то, что вы используете для создания макета. Функциональность Forms мощная и раскрывается свойствами объекта. Иногда вам нужно написать какой-нибудь PL/SQL, но для такого рода вещей это не обязательно. Например, если вы хотите убедиться, что пользователь видит только определенные записи, вы можете поместить предикат в свойство DEFAULT_WHERE блока (вы даже можете установить это программно, если предложение должно быть динамическим). - person Jeffrey Kemp; 26.07.2013
comment
Я немного изменил свой код, но мне все еще неясно, как получить доступ к объектам формы и поместить в них данные и/или получить данные из них. Если я могу это сделать, я должен быть в порядке для этого проекта. Синтаксис правильный для того, что вы предложили, но запуск формы не делает того, что я ожидаю. Он ничего не делает, если быть точным. Я хотел бы, чтобы пользователь мог вводить свой идентификатор в «MRN_FIELD», принимать значение в форме, использовать его для запроса БД, брать информацию из записей и помещать ее в форму для вывода. - person Scuba Steve; 26.07.2013
comment
Неважно, это сработало! Что бы это ни было, мне не понравилось, что я использовал триггер ENTER KEY PRESSED. Я просто привязал его к кнопке, и он работал как шарм. Мучо спасибо! - person Scuba Steve; 27.07.2013
comment
Да, избегайте триггеров клавиш — они полезны только тогда, когда вам нужно, чтобы что-то происходило с определенными клавишами клавиатуры. Лучше повесить триггеры на общие события, такие как WHEN-NEW-FORM-INSTANCE (для запуска чего-то при первом открытии формы) или WHEN-BUTTON-PRESSED (для запуска чего-то при нажатии кнопки - независимо от как было нажато, например мышь или клавиатура) - person Jeffrey Kemp; 27.07.2013
comment
Еще одна вещь, которую вы можете сделать, это поместить триггер POST-CHANGE в элемент MRN_FIELD, который что-то делает всякий раз, когда пользователь вводит в него идентификатор (а затем табуляция вне поля). - person Jeffrey Kemp; 27.07.2013
comment
Спасибо, Джеффри! Вы оказали огромную помощь. Я не знаю, насколько кошерно для меня рекламировать другой вопрос, но я думаю, что вы могли бы помочь мне с этим: stackoverflow.com /вопросы/17891873/ - person Scuba Steve; 27.07.2013