بتاريخ: 18 يوليو 200916 سنة comment_163589 بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته,,,اخواني الاعزاء في هذا المنتدى الرائع والمتميز دائما بطرح المواضيع والمشاركات المهمة جدا لكل مبرمج اوراكل...وأشكر الله على المحبة بين جميع الاخوه....وأسأل الله التوفيق للجميع...موضوعنا اليوم مهم جدا لكل برنامج يجب برمجته على أي لغة برمجة... ألا وهو شاشة الدخول والمستخدمين ونظام الصلاحيات على الفورم:بسم الله نبدأ:أولاً يجب إنشاء جدول خاص بالمستخدمين: CREATE TABLE "USER_PRV" ( "USR_ID" VARCHAR2(100), "USR_ANAME" VARCHAR2(100), "USR_ENAME" VARCHAR2(100), "USR_PASSWORD" VARCHAR2(50), "USR_TYPE" NUMBER, "USR_STATUS" NUMBER, CONSTRAINT "USER_PRV_PK" PRIMARY KEY ("USR_ID") ENABLE ) / حيث:USR_ID : (User name) هو اسم المتسخدمUSR_ANAME: اسم المستخدم باللغة العربيةUSR_ENAME: اسم المستخدم لاللغة الانجليزيةUSR_PASSWORD: الرقم السريUSR_TYPE: نوع المستخدمUSR_STATUS: حالة المستخدموسنتطرق لاحقا ما الهدف من استخدام نوع المستخدم و حالة المستخدم ان شاءالله.ثانياً: سنقوم بإنشاء فورم خاص بالجدول السابق لادخال مستخدمين على هذا الجدول...وليكن من نوع TABULAR.ملاحظة:User_Typeضع هذا الحقل من نوع LIST ITEM وقم بادخال انواع المستخدمين مثلا ( مستخدم، مدير، مدير قاعدةبيانات...الخ )USR_STATUSضع هذا الحقل مثلا من نوع CHECK BOX.عند عمل الفورم سيظهر لنا كما بالصورة التالية: http://img441.images...28/39498679.gifبعد ذلك اعمل RUN للفورم وقم بإدخال عدد من المستخدمين على الجدول... وسيكون كما بالصورة:http://img103.images...42/22010510.gifثالثاً:سنقوم الآن بعمل شاشة الدخول وهي كالآتي:اولا نقوم بإنشاء فورم عليه حقلين من نوع TEST ITEM ومن خصائص هذين الحقلين نضعهماDATA BASE = NOكما هو مبين في الصورة:http://img189.images...32/92018006.gifوبعد ذلك نذهب إلى الــ PROGRAM UNITS كما في الصورة:http://img43.imagesh...13/60775976.gifونقوم بإنشاء PROCEDURE وليكن إسمه USERS_ACC ونكتب بداخله هذا الكود: PROCEDURE USERS_ACC IS VN_COUNT NUMBER(10) := 0; VV_USRSTS NUMBER(1) := ''; VV_USRTYPE NUMBER(1) := ''; VV_TYPE NUMBER; BEGIN BEGIN SELECT COUNT(1) INTO VN_COUNT FROM USER_PRV WHERE UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD); EXCEPTION WHEN NO_DATA_FOUND THEN VN_COUNT := 0; END; IF VN_COUNT = 0 THEN :PARAMETER.P_TRIALS := NVL(:PARAMETER.P_TRIALS,0) + 1; IF :PARAMETER.P_TRIALS = 3 THEN EXIT_FORM(NO_COMMIT,NO_VALIDATE); ELSE MESSAGE('PLEASE ENTER USER NAME OT PASSWORD'); MESSAGE('PLEASE ENTER USER NAME OT PASSWORD'); GO_BLOCK('USER_PRV'); CLEAR_BLOCK(NO_COMMIT); GO_BLOCK('USER_PRV'); END IF; ELSE BEGIN SELECT USR_STATUS , USR_TYPE INTO VV_USRSTS , VV_USRTYPE FROM USER_PRV WHERE UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; -- CHECKING USER SETING IF VV_USRSTS <> '0' THEN MESSAGE('USER ACCOUNT IS LOCKED'); EXIT_FORM(NO_COMMIT,NO_VALIDATE); END IF; ---------------------------------------------------------------------------------------------------------- :GLOBAL.P_USER_TYPE:=VV_USRTYPE; :GLOBAL.P_USER_ID:=:USER_PRV.USR_ID; NEW_form('C:\GBT_SYS\FRM\MAIN_PAGE.fmx'); CLEAR_BLOCK(NO_COMMIT); END IF; END; وسنبدأ الآن بشرح الكود بالتفصيل:* يستخدم هذا الكود للتأكد من وجود USER NAME و PASSWORD مثل اليوزر والباس اللي رح تدخلهم على الفورم بشاشة الدخول. BEGIN SELECT COUNT(1) INTO VN_COUNT FROM USER_PRV WHERE UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD); EXCEPTION WHEN NO_DATA_FOUND THEN VN_COUNT := 0; END; * يستخدم هذا الكود عشان يعمل CHECK ... إذا المستخدم قام بإدخال اليوزر او الباس غلط 3 مرات يطلع من البرنامج ... طبعا بالمرة الاولى والثانية رح يعطيه ERROR MESSAGE.بالاضافة انه يجب عمل PARAMETER على الفورم وليكن اسمه P_TRIALS كما هو موضح بالصورة التالية:http://img39.imagesh...44/73939583.gif IF VN_COUNT = 0 THEN :PARAMETER.P_TRIALS := NVL(:PARAMETER.P_TRIALS,0) + 1; IF :PARAMETER.P_TRIALS = 3 THEN EXIT_FORM(NO_COMMIT,NO_VALIDATE); ELSE MESSAGE('PLEASE ENTER USER NAME OT PASSWORD'); MESSAGE('PLEASE ENTER USER NAME OT PASSWORD'); GO_BLOCK('USER_PRV'); CLEAR_BLOCK(NO_COMMIT); GO_BLOCK('USER_PRV'); END IF; * الكود التالي يستخدم لجلب الـــ USER_TYPE و الــ USER_STATUS لليوزر الذي دخل على النظام. SELECT USR_STATUS , USR_TYPE INTO VV_USRSTS , VV_USRTYPE FROM USER_PRV WHERE UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END; * الكود التالي يستخدم في حالة كانت قيمة الـــ USER_STATUS لا تساوي صفر ... سيعطي البرنامج ان حساب هذا المستخدم مغلق ... حيث أن الــ CHECK BOX بفورم المستخدمين سيكون كالتالي: اذهب الى خصائص هذا الـــ CHECK BOX وضع:WHEN VALUE CHECKED = 1WHEN VALUE UNCHECKED = 0 IF VV_USRSTS <> '0' THEN MESSAGE('USER ACCOUNT IS LOCKED'); EXIT_FORM(NO_COMMIT,NO_VALIDATE); END IF; * يستخدم هذا الكود لوضع الــ USER_ID و USER_TYPE داخل GLOBAL VARIABLES التي ستساعدك على عمل صلاحيات على جميع الفورم ... بالاضافة إلى الانتقال الى الفورم الرئيسية ( MAIN_PAGE )التي يكون مربوط عليها الـــ MENU :GLOBAL.P_USER_TYPE:=VV_USRTYPE; :GLOBAL.P_USER_ID:=:USER_PRV.USR_ID; NEW_form('C:\GBT_SYS\FRM\MAIN_PAGE.fmx'); CLEAR_BLOCK(NO_COMMIT); END IF; END; بعد النهاية من كتابة الكود السابق والتأكد من عدم وجود ERRORS نقوم بإضافة زر على الفورم ونستدعي إسم البروسيجر داخل هذا الزر.بمعنى اخر ضع زر على الفورم واختر ترجر WHEN-BUTTON-PRESSED واكتب بداخله : USERS_ACC; رابعاً :قم بعمل RUN لفورم الدخول وقم بكتابة يوزر نيم وباسوورد صحيحين كما ادخلتهم بفورم المستخدمين وعند الضغط على الزر يجب أن ينقلك إلى الشاشة الرئيسية الموجود عليها المنيو.خامساً:إذا اردت إظهار اسم المستخدم الذي دخل على النظام على شاشة معينه فقم بالتالي:1- ضع DISPLAY ITEM على الفورم.2- من خصائص هذا الــ DISPLAY اذهب الى خاصية الــ INITAIL VALUE واكتب بداخلها الكود التالي: :GLOBAL.P_USER_ID حيث اننا وضعنا اسم المستخدم داخل GLOBAL VARIABLE في البروسيجر السابق.سادساً:إذا اردت منع مستخدم معين من فتح شاشة معينه ... فاذهب الى المنيو التي تريد المستخدم منعه من فتحها واكتب بداخلها الكود التالي: IF :GLOBAL.P_USER_TYPE=1 THEN SET_MENU_ITEM_PROPERTY('ACC_MNU.MENU1.MAIN',VISIBLE,PROPERTY_FALSE); ELSE CALL_form('C:\GBT_SYS\FRM\COURSES.fmx'); END IF; حيث أننا منعنا المستخدم الذي نوعه = 1 من فتح هذه الشاشة.بينما إذا أردت ان تسمح للمستخدم أن يفتح هذا الفورم ولكن تريد ان تمنعه من عمل خصائص أخرى ... ستستخدم كود معين وساطرح عليكم بعض الاكواد: IF :GLOBAL.P_USER_TYPE =1 THEN SET_ITEM_PROPERTY('GBT_LOGIN.USR_TYPE',UR_PROPERTY,PROPERTY_FALSE); END IF; حيث الخصائص ممكن ان تكون كالتالي:INSERT_ALLOWEDDELETE_ALLOWEDUPDATE_ALLOWEDENABLEDVISIBLE.....الخ.واخيرا وليس آخراً...أتمنى ان اكون قد وفقت في طرح الموضوع بطريقة سلسة ومفيدة.ولا تنسونا من صالح دعائكم.وتحياتي للجميع...وانتظروا المزيد باذن الله.ملاحظة: جميع الصور الموجودة بالموضوع داخل المرفقات.أخوكم في الله: أحمد pixz.rar تم تعديل 19 مايو 201213 سنة بواسطة Ahmad.Hasan تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة comment_163591 اخي العزيز مشكور على الكود لكن عن كتابة البروسيجر يظهر ايرور bind variableحاولت الغي bind مما يسبب exceptionياريت تساعدني ومشكور مقدما تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة كاتب الموضوع comment_163592 السلام عليكمأخي اشرف..قم بعمل اسم البلوك كمان هو موضح بالكود..وان امكن كتابة اين الخطأ بالتحديد ؟؟؟وهل قمت بإنشاء parameter ؟؟ تم تعديل 18 يوليو 200916 سنة بواسطة PALI.ORACLE تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة comment_163593 UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD);في هذه الجملة bad bind varible 'user_prv.usrid'بالاضافة لما اضيف :GLOBAL.P_USER_ID:=:USER_PRV.USR_ID;بيعطي ايرور انه مابنفع استخدم جدول هنا واسم البلوك USER_PRV تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة comment_163594 انشات باراميتر من نوع نمبر علشان يعد 3 مرات لليوزرمع العلم اني استخدم اوراكل 10 g تم تعديل 18 يوليو 200916 سنة بواسطة أشــــرف تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة كاتب الموضوع comment_163595 السلام عليكمbad bind varible 'user_prv.usrid'بهذه الجملة لاحظ انك كاتب usrid والعمود بالجدول usr_id ....تاكد من هذه النقطة.ولاحظ ان هذه الجملة الصحيحة.. WHERE UPPER(USR_ID) = UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD); وليست هذه: UPPER(:USER_PRV.USR_ID) AND UPPER(USR_PASSWORD) = UPPER(:USER_PRV.USR_PASSWORD); تم تعديل 18 يوليو 200916 سنة بواسطة PALI.ORACLE تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة comment_163597 تاكدت والله يااخي كانت خطا في كتابة الرد لاني ناسخ الكود ولاصقهالفورم مرفق وشكرا لسرعه الرد logon.rar تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة كاتب الموضوع comment_163598 السلام عليكماوك اخي...لمنع حدوث أخطاء معك ومع غيرك من الاخوان انا سأقوم بعمل هذه العملية على الفورم ورفعها ان شاءالله...بالتوفيق تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة كاتب الموضوع comment_163599 السلام عليكمفورم المستخدمين وفورم الدخول بالمرفقات...بالتوفيق sys_login.rar تقديم بلاغ
بتاريخ: 18 يوليو 200916 سنة كاتب الموضوع comment_163602 بالتوفيق اشرف..لاتنسانا من الدعاء... تقديم بلاغ
بتاريخ: 19 يوليو 200916 سنة كاتب الموضوع comment_163671 بسم الله الرحمن الرحيم إخواني الاعزاء...دعونا نكمل هذا الموضوع حتى النهاية ان شاءالله...الموضوع كالتالي:كيفية منع المستخدم من الدخول إلى النظام مرتين في نفس الوقت ؟؟؟الجدول موجود والفورم موجود ... ونريد تطبيق عملي على الفورم .... ونريد افكاركم...أتمنى الاستفادة للجميع...بالتوفيق تم تعديل 19 يوليو 200916 سنة بواسطة PALI.ORACLE تقديم بلاغ
بتاريخ: 19 يوليو 200916 سنة comment_163681 Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU.STAFF_DETAILS',ENABLED,PROPERTY_FALSE); اخي الحبيب اولا مشكور على الموضوع الرائعاريد ان اقول لك ان هذه الجملة لم تعمل معي وحاولت فيها لمدة ساعة ولكن بلا جدوى ما الحل لانها تلزمني كثيرا في النظام تقديم بلاغ
بتاريخ: 19 يوليو 200916 سنة كاتب الموضوع comment_163718 السلام عليكمما المشكله بالتحديد ؟؟؟ تقديم بلاغ
بتاريخ: 19 يوليو 200916 سنة كاتب الموضوع comment_163725 السلام عليكمتاكد من من المنيو وكتابة الــ SUB MENU بشكل صحيح...وجرب استخدام VISIBLEبالاضافه اخي ماهر لما تعمل COMILATION للمنيو اغلق الفورمز... تم تعديل 19 يوليو 200916 سنة بواسطة PALI.ORACLE تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة comment_163789 السلام عليكم Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU.STAFF_DETAILS',ENABLED,PROPERTY_FALSE); أخي ماهر لاحظ انك كاتب اسم المنيو وبعد كده اسم المنيو الفرعي اه الاي مكتوب بعد كدهيعني خليها كده او اضبطها زي ماعندك يعني الاسم الرئيس ثم الفرعي Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU',ENABLED,PROPERTY_FALSE); تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة comment_163810 السلام عليكمSet_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU.STAFF_DETAILS',ENABLED,PROPERTY_FALSE); أخي ماهر لاحظ انك كاتب اسم المنيو وبعد كده اسم المنيو الفرعي اه الاي مكتوب بعد كدهيعني خليها كده او اضبطها زي ماعندك يعني الاسم الرئيس ثم الفرعي Set_Menu_Item_Property('HRMS_MNU.STAFF_DETAILS_MENU',ENABLED,PROPERTY_FALSE); lمشكور اخي مصطفى اشتغلت تمام تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة comment_163884 السلام عليكمالله يعطيك العافية ياستاذ احمد وربنا مايحرمنا منك ابدا ابد. المعذرة انا حاولت في نظام الصلاحيات ولكن مانفع معي الصراحة.ممكن ياخي تشوف الفورمز اللي انا عملتها مع اني نزلت الفورمز تبعك اللي في هذا الموضوع ولكن ماضبطت معي. على كل حال انا منزل هنا الفورمز تبعي وياريت تعطيني رايك يالغالي.اول شي انا لما ادخل على نافذة الانترفيس طبعا اجد الازرار اللي توديني على كل الفورم طيب انا حاطط فورمة مثلا اسمها يوسرزومابدي الكل يدخل عليها فقط الادمن هو اللي يدخل عليها. بعد الدخول على اللوجن اسكرين تاتيني الانترفيس وبعد الضغط على نافذة اليوسرز ماتفتح معايا ابدا سواء من يوسر عادي او ادمن. طبعا اذا ضغطت على زر الخروج يدخل على نافذة اليوسر مع اني وضعت الكود اللي انتي حاطة. يعني في غلط مابعرف وين بالضبط.بالنسبة لاظهار رقم المستخدم انه مايظهر اول ماشغل النافذة لابد ان اعمل اكسكيوت كويري ومن ثم يظهر رقم المستخدم.ممكن تشرح لي هذا السطرSET_MENU_ITEM_PROPERTY('ACC_MNU.MENU1.MAIN',VISIBLE,PROPERTY_FALSE);طبعا انا اريد الذي بين الاقواس يعني اين اضع اسم البلوك وماذا تقصد بالمنيوشكرا لك ياخي العزيز واسال الله التوفيق لك. new.zip تم تعديل 20 يوليو 200916 سنة بواسطة Only-Oracle تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة كاتب الموضوع comment_163902 السلام عليكماخي العزيز...تم التعديل على الفورم فقط قم بالدخول على الكود الموجود بصفحة اللوجن واكتب المسار الصحيح الذي لديك...واذا اشتغل معاك تمام ؟؟ نبدأ بالخطوة التالية !!!ولكن لتكون على علم:اول شي انا لما ادخل على نافذة الانترفيس طبعا اجد الازرار اللي توديني على كل الفورم طيب انا حاطط فورمة مثلا اسمها يوسرزومابدي الكل يدخل عليها فقط الادمن هو اللي يدخل عليها. بعد الدخول على اللوجن اسكرين تاتيني الانترفيس وبعد الضغط على نافذة اليوسرز ماتفتح معايا ابدا سواء من يوسر عادي او ادمن.لوقف زر معين عن العمل استخدم : SET_BLOCK_PROPERTY('BLK.BUTTON_NAME',ENABLED,PROPERTY_FALSE); بالنسبه انك بدك تعمل 2 USER اضف على الجدول الــ USR_TYPE كما ذكرت سابقا وراجع الصورة... SET_MENU_ITEM_PROPERTY ('ACC_MNU.MENU1.MAIN',VISIBLE,PROPERTY_FALSE); هذا الكود يستخدم لوقف عمل منيو معينه .. فقط يستخدم في حال استخدامك للمنيو ....بالنسبة لاظهار رقم المستخدم انه مايظهر اول ماشغل النافذة لابد ان اعمل اكسكيوت كويري ومن ثم يظهر رقم المستخدم.قم بتشغيل شاشة اللوجن بالاول والايتم اللي انت حاطه اعمله DISPLAY ... اذا لاحظت بالكود الموجود داخل فورم اللوجن انا بحط قيمة رقم المستخدم داخل جلوبال فيريابل...فعشان يظهر معاك اسم المستخدم قم بالدخول عن طريق شاشة اللوجن...بالتوفيق new.rar تم تعديل 20 يوليو 200916 سنة بواسطة PALI.ORACLE تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة comment_163910 هلا فيك ياخيلم يشتغل الكود الذي وضعته اتوقع انك ربط بالفورمة اللي اعطيتك اياها بالاول. وايضا اجد انه بعض الحقول لم يتناسب مع الفورمة الاولى وهو يوسر لوجن والفورمة الثانية يسور برف.ياريت اذا امكن تعديل الفورم وياريت اذا ممكن تضع لي الكود تبع منع المتسخدم العادي من المسح والتعديل يعني فقط يعمل دسبلاي للمعلومات. تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة كاتب الموضوع comment_163912 السلام عليكماخي قم بكتابة الجدول الخاص بك وساقوم بالتعديل عليه حسب جدولك...بالتوفيق تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة comment_163917 وعليكم السلام والرحمةانا احتمال الغي الفورمة الاولى اللي انت عارفها واضع نفس شكل الفورمة تبعك لانه تحتوي على حقول كثيرة فانت ممكن تكمل معايا على نفس اللي انا وضعته هنا.على كل حال انا الجدول تبعي هو كالاتيcreate table user_login(USR VARCHAR2(30) PRIMARY KEY,PASS VARCHAR2(30));شكرا لك وربنا يجزيك كل خير تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة كاتب الموضوع comment_163918 السلام عليكمافضل اضافة عمود جديد وهو الــ USER_TYPE ... create table user_login( USR VARCHAR2(30) PRIMARY KEY, PASS VARCHAR2(30), USR_TYPE NUMBER(2)); ان اعتمدت هذا الجدول خبرني...!!بالتوفيق تم تعديل 12 سبتمبر 201312 سنة بواسطة Ahmad.Hasan تقديم بلاغ
بتاريخ: 20 يوليو 200916 سنة comment_163925 مابعرف بخصوص شاشة الدخول الرئيسية ولكن في شاشة البيرفلج احتاج ايضا الى USR_STATUS حتى استطيع ان اقفل على بعض اليسر. بعدم الدخول بالمرة على النظام فتظهر لهم رسالة تفيد بانه الاكونت تبعهم مقفل.على كل حال انت شوف الشي المفيد. تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.