12/19/2011

How to Create a login screen in oracle forms builder 10g

السلام عليكم 
كيف يمكنك انشاء شاشه للدخول فى اوركال فورم بيلدر 10جى
فى البدايه انت بحاجه لأنشاء جدول ووضع فيه قيمتين الاولى  رقم المستخدم والثانيه كلمه المرور
أولا
Code


CREATE TABLE PASSWORD
(USER_ID    NUMBER(3)  CONSTRAINT  PASSWORD_USER_ID_PK PRIMARY KEY,
 PASSWORD VARCHAR2(20) NOT NULL);
INSERT INTO PASSWORD (USER_ID,PASSWORD)
VALUES (1,100);
INSERT INTO PASSWORD (USER_ID,PASSWORD)
VALUES (2,200);

ثانيا
تقوم بأنشاء فورمه كما بلشكل التالى وسوف ارفق فى نهايه الشرح فورمه جاهزه
  TEXT ITEM يجب ان يكون
DATABASE (PROPERTY NO)
صوره رقم 1

بعد ان تقوم ببناء فورمتك بشكل ناجح يوجد لديك خيارين للتحقق من ان بيانات المستخدم الذى يود الدخول صحيحه او غير صحيحه فى حالة لو كانت صحيحه لا تظهر له شىء واسمح له بلدخول الى فورمه العمل الخاصه به اذا لم يكن اى من رقم المستخدم او كلمه السر غير صحيحتين اظهر له رساله بأن  رقم المستخدم غير صحيح او كلمه المرور غير صحيحه حسب الخطأ
الخيار الاول
LOGIN تضع تريجر على زر

Trigger
WHEN-BUTTON-PRESSED
Code

BEGIN
SELECT USER_ID
INTO   :GLOBAL.USER_ID
FROM   PASSWORD
WHERE  USER_ID = :LOGIN.TI_USER_ID
AND    PASSWORD= :LOGIN.TI_PASSWORD;
GO_BLOCK('PASSWORD');
EXCEPTION
WHEN NO_DATA_FOUND THEN
:GLOBAL.COUNT := :GLOBAL.COUNT + 1;
IF :GLOBAL.COUNT = 1 THEN
MESSAGE('رقم المستخدم او كلمه السر خطأ');
MESSAGE('رقم المستخدم او كلمه السر خطأ');
ELSIF
:GLOBAL.COUNT = 2 THEN
MESSAGE('رقم المستخدم او كلمه السر خطأ');
MESSAGE('رقم المستخدم او كلمه السر خطأ');
ELSIF
:GLOBAL.COUNT = 3 THEN
EXIT_FORM;
END IF;
END;

الخيار الثانى 
 PROGRAM UNIT داخل ال  PROCEDURE انشاء 
 VALIDATION_PASS ثم قم بتسميته
LOGIN ثم اكتب فيه الكود التالى وهذا الكود هو نفس الكود السابق الذى قمنا بوضعه على الزر
COMPILE بعد ان تكتب الكود بنجاح وعمل
 بلشكل التالى LOGIN اكتب اسم PROCEDURE داخل زر ال  
VALIDATION_PASS;

Code

PROCEDURE VALIDATION_PASS IS
BEGIN
SELECT USER_ID
INTO   :GLOBAL.USER_ID
FROM   PASSWORD
WHERE  USER_ID = :LOGIN.TI_USER_ID
AND    PASSWORD= :LOGIN.TI_PASSWORD;
GO_BLOCK('PASSWORD');
EXCEPTION
WHEN NO_DATA_FOUND THEN
:GLOBAL.COUNT := :GLOBAL.COUNT + 1;
IF :GLOBAL.COUNT = 1 THEN
MESSAGE('رقم المستخدم او كلمه السر خطأ');
MESSAGE('رقم المستخدم او كلمه السر خطأ');
ELSIF
:GLOBAL.COUNT = 2 THEN
MESSAGE('رقم المستخدم او كلمه السر خطأ');
MESSAGE('رقم المستخدم او كلمه السر خطأ');
ELSIF
:GLOBAL.COUNT = 3 THEN
EXIT_FORM;
END IF;
END;
 :GLOBAL.COUNT نلاحظ ان الكود يحتوى على جلوبال بأسم 
وقد استخدمته لتحديد عدد المرات التى يسمح فيها للمستخدم بادخال كلمه السر خطأ
وقد قمت بعمل تريجر على مستوى الفورم وكتبت فيه الاتى
TRIGGER (FORM-LEVEL)
WHEN-NEW-FROM-INSTANCE
CODE
:GLOBAL.COUNT :=0;
يمكنك تحميل الفورمه من هنا
وبهذا نكون انتهينا من الشرح واى استفسارات حاضر ان شاء الله


Oracle Developer
Ahmed Arafa
-->

7 comments:

  1. الشرح وافي جدااا ...بس اذا سمحت اخي الكريم ,كيف اقدر اضع اسم المستخدم في متغير من نوع جلوبال حتى اتمكن من اظهاره كعنوان للنافذة التالية

    ReplyDelete
    Replies
    1. SELECT USER_ID , USER_NAME
      INTO :GLOBAL.USER_ID , :GLOBAL.USER_NAME
      ......................

      =====================
      وبهد ذلك تأتى على الفورمه وتضع
      BLOCK LEVEL TRIGGER

      WHEN-NEW-BLOCK-INSTANCE
      وتضع بداخله قيمه الجلوبال فى
      TXT_ITEM

      :BLOCK.TXT_ITM := :GLOBAL.USER_NAME


      :BLOCK.TXT_ITM
      هذا هو عنوان النافذه التاليه

      :)

      Delete
  2. thank you so much , but what i tried to open form Instead of 'block' . it will gave me error can't read form ... how i can open it with out error :) ?


    ReplyDelete
    Replies
    1. the form builded by oracle forms 10g
      and give me error message

      Delete
  3. :GLOBAL.COUNT must declared ?????
    مع العلم اني اعلنت عنه

    ReplyDelete
  4. هل هذه الشاشة تلغي شاشة الدخول الرئيسية عند عمل RUN للفورم

    ReplyDelete