اريد كود تغيير كلمة السر للمستخدم الحالي الصورة التالية توضح المطلوب
تغيير كلمة السر للمتسخدم الحالي
هناك إمكانية إستخدام الأمر Password
or
Alter User Scott Identified by Tiger ;
وتغير الـ Scott بإسم المستخدم الحالي
وَ Tiger بكلمة المرور الجديدة ،،
طبعاً وعشان تتأكد من صحية كملة المرور القديمة هذه سهله تعمل في الكود LogIn وإذا كان Success فممتاز وإلى أعد عمل تسجيل دخول عن طريق الكود من غير مايشوف المستخدم .
Oracle 10g >>> ماذا تعرف عنه ؟ ؟؟
عمل Compile لجميع الكائنات الـ inviled لديك بقاعدة البيانات
OCP: Oracle Certified Professional 10gR2 Database Administration
شكرا على ردك ولكن الموضوع انو انا عامل جدول داخل هذا اليوزر فيه اسماء المستخدمين وارقامهم السرية هل فهمت علي؟
الاخ العزيز ماهر
على اعتبار انك الان فى المستخدم scott/tiger
وقمت بعمل جدول للمستخدمين الجدد ونفترض اسمه users
ويحتوى على عمودين وهما user_name وpassword
وانت طبعا عامل فورمة للدخول الى الفورمة الرئيسية بتاعتك عن طريق الuser_name وpassword من جدول users بتاعك
وتريد منح كل مستخدم امكانية تغيير كلمة السر الخاصة به
يمكنك عمل الاتى
فى تريجر
when_button_pressed
على الزر change password
اكتب الكود التالى
مع استبدال اسماءال items بالاسماء الموجودة على الفورمة تبعك
begin
if :confirm_new_password=:new_password then
update (users) set password=:new_password where
password=:old_password;
commit;
elsif :confirm_new_password !=:new_password then
message('please reconfirm your new password correctly');
message('please reconfirm your new password correctly');
raise form_trigger_failure;
end if;
end;
--where users is your users's table and password is the column of passwords
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
اخي الكريم اشكرك شكرا كبيرا لكن في مشكلة صغيرة احاول حلها في هذا الكود وهي انه يتكم فعلا تخزين كلمة السر ولكن لما يظهر لي رسالة بعد التغيير :
no change to save
مع انه يتم تغيير كلمة السر وشكرا
وما معنى raise form_trigger_failure;
Thank you very much
اخى العزيز
عن المشكلة الاولى وهى رسالة NO CHANGES TO SAVE
فهذه بسبب انك عملت COMMIT على جدول تانى فى الداتابيز وليس الجدول الذى بنيت عليه النموذج او الفورمة
وبصراحة انا مازلت اعانى من هذه المشكلة البسيطة حتى الان
ولا اعرف لها حلا
لكن ملحوظة لا تحذف COMMIT مع انها السبب فى ظهور الرسالة لكن لابد منها
اما عن RAISE FORM_TRIGGER_FAILURE;
فهو EXCEPTION جاهز فى الاوراكل يوقف الخطوات عند هذا الخطأ
لانه فى بعض الحالات او النماذج يمكن تخطى الخطأ من قبل البرنامج واكمال الخطوات بطريقة عادية
مما قد بل وبالتأكيد سوف يتسبب فى مشاكل أخرى مستقبلا
ولهذا يفضل استخدامه لمنع مثل هذه الاخطاء وعدم تخطى اى عملية او خطوة من البرنامج الا بعد التأكد من صحتها 100%والا فسوف يقوم بتعطيل البرنامج عند هذا الخطأ وهذا احسن من التغاضى عن اخطاء سوف ترهقنا مستقبلا
ارجو الا اكون مخطأ وان اكون قد افدتك
ولك منى خالص التحية واطيب التمنيات
﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾
الأنفال ۳۳
مرحباً مرة أخرى ،،
حسناً الآن بالبداية لازم تكون آخذ أنت userid معاك وانت داخل في شاشة تسجيل الدخول كـ global ماشي ؛
والآن تروح على حقل الـ Old_Password وتعمل when-validate-item trigger وتكتب فيه التالي :
لكي يتأكد من ان كلمة المرور القديمة المدخلة هي الصحيحة .
declare
v_pass users.password%type;
begin
select password
into v_pass
from users
where (user_id = :global.userid);
if :old_password <> v_pass then
message(' the password you entered is incorrect , please retry to enter the correct password');
message(' the password you entered is incorrect , please retry to enter the correct password');
raise form_trigger_failure;
end if;
end;وانا عدلت في كود الأخ الكريم السابق لكي يكون أدق وحتى في حالة تشابه كلمة المرور بين أكثر من مستخدم :
وطبعاً حليتلك مشكلة الرسالة اللي تطلع معاك أيضاً .
begin
if :confirm_new_password=:new_password then
update users set password=:new_password where
user_id = :global.userid;
forms_ddl(' commit ');
else
message('please reconfirm your new password correctly');
message('please reconfirm your new password correctly');
raise form_trigger_failure;
end if;
end;Oracle 10g >>> ماذا تعرف عنه ؟ ؟؟
عمل Compile لجميع الكائنات الـ inviled لديك بقاعدة البيانات
OCP: Oracle Certified Professional 10gR2 Database Administration
اخي الكريم انا مبتدئ في pl/sql وهذا هوي كود الدخول في شاشة اليوزرنيوم والباسوورد
declare x number;
v_status number(1);
v_type number(1);
v_flag number(1);
v_from date;
v_to date;
begin
BEGIN
select count(1)
into x
from USERS_ACCOUNTS
where upper(user_id ) = upper(:usertxt)
and upper(user_password) = (:passwordtxt);
exception
when no_data_found then
x:=0;
END;
begin
if x=0 then
:parameter.y := nvl((:parameter.y)+1,1);
if :parameter.y=3 then
exit_form(no_commit,no_validate);
else
go_block('block3');
clear_block(no_commit);
end if;
else
begin
select USER_STATUS , USER_USER_TYPE , USER_EXP_FLAG , USER_EXP_FROM ,USER_EXP_TO
into v_status , v_type , v_flag , v_from , v_to
from USERS_ACCOUNTS
where upper(user_id) = upper(:block3.usertxt)
and upper(user_password) = upper(:block3.passwordtxt);
exception
when no_data_found then
null;
end;
-----------------------------------------------------------------------
---------------- Checking User Setting --------------------------------
-----------------------------------------------------------------------
IF V_STATUS <> 1 THEN
MESSAGE('NOT ACTIVE');
MESSAGE(' ');
EXIT_FORM(NO_VALIDATE);
END IF;
IF v_flag = 0
AND (SYSDATE NOT BETWEEN v_from AND V_TO) THEN
MESSAGE ('USER EXPIRED');
MESSAGE (' ');
EXIT_FORM(NO_VALIDATE);
end if;
:GLOBAL.PUSER := :userTXT;
NEW_FORM('D:\Center System\forms\mainmenu');
end if;
end;
end;
السلام عليكم
المشكلة الاولى وهى رسالة NO CHANGES TO SAVE
لعلاج هذه الرسالة ومنع ظهورها أو ظهور رسائل الخطا التلقائية يمكن كتابة لامر التالي في:
نضيف تريجر للفورم نوعه:
when_new_form_inestans>
ثم نكتب الامر التالي داخل هذا التريجر:
;system.message_level:=25:
واتمنى ان يكون هذا حلا.