首页 > 解决方案 > 如何为登录表单使用动态警报?

问题描述

我是使用 oracle 10g Forms 进行 Oracle 开发的新手。

我正在尝试为登录目的编写此代码。当用户输入错误的密码时,它会在弹出窗口中发出警告。此外,当用户输入错误的用户名时,它会发出警报。

我写了这段代码,但我无法更正它。

DECLARE
    un    VARCHAR (15);
    pwd   VARCHAR (15);
BEGIN
    --- Dynamic altert properties code start--
    SET_ALERT_PROPERTY ('LOGIN_ALERTS', TITLE, 'Security Altert');
    SET_ALERT_PROPERTY ('LOGIN_ALERTS',
                        ALERT_MESSAGE_TEXT,
                        'Wrong Username?');
    SET_ALERT_PROPERTY ('LOGIN_ALERTS',
                        ALERT_MESSAGE_TEXT,
                        'Wrong Password?');

    SELECT username, users_password
      INTO un, pwd
      FROM MENU_USERS
     WHERE username = :TXT_USERNAME;
        IF un = :TXT_USERNAME
        THEN
            IF pwd = :TXT_PWD
            THEN
                CALL_FORM ('F:\ISMS\INV\inv_stock.fmx');
            ELSE
                SHOW_ALERT ('LOGIN_ALERTS');
            END IF;
        ELSE
            SHOW_ALERT ('LOGIN_ALERTS');
        END IF;
END;

标签: oracleoracle10goracleforms

解决方案


警报是可以的,但是 - 连续message呼叫也可以。这个例子展示了如何使用这种方法。

您编写的代码有点“错误”,因为它无法处理“用户名错误”的情况。发生这种情况时,select不会返回任何内容,并且会引发no_data_found应处理的异常。

干得好:

declare
  pwd varchar2(15);
begin
  select users_password
    into pwd
    from menu_users
    where username = :txt_username;

  -- if TXT_USERNAME value exists, SELECT will return its password
  if pwd = :txt_pwd then
     call_form('whichever form you want');
  else
     message('Wrong password');
     message('Wrong password');
     raise form_trigger_failure;
  end if;

exception
  when no_data_found then
    -- SELECT didn't return anything, but raised an exception
    message('Wrong username');
    message('Wrong username');
end;    

推荐阅读