الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما المشكلة في هذا الكود؟

مغلق
بدأه sumaa في 11 مايو 2006 · 5 رد · 540 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

declare

cursor c is select * from users where username = :b.username and passwd = :b.pass;

m c%rowtype;

n number;

begin

if :b.username is null then

n:= show_alert('nullname');

elsif :b.pass is null then

n:= show_alert('nullpass');

RAISE form_trigger_failure;

end if;

--

for s in c loop

:b.username := s.username;

:b.pass := s.passwd;

if form_success then

run_product(forms,'d:\sumaa1\wil',asynchronous,runtime,filesystem,'','');

exit_form;

elsif :b.username <> s.username and :b.pass <> s.passwd then

n:= show_alert('error');

end if;

end loop;

end;

حيث أني وضعت الكود على زر دخول للبرنامج بحيث يفحص اسم المستخدم وكلمة المرور إذا كان الإسم وكلمة المرور صحيحة ينتقل إلى شاشة أخرى.......

المشكلة في الرسالة الثالثة لم تظهر لي إذا كان الإسم وكلمة المرور خاطئة لم تظهر ولا شئ .........

وأرجو إن كان هناك طريقة أخى أفضل من الطريقة التي استخدمتها وافينا يا شباب المنتدى .........

وآسف على التطويل .............. وشكراً

أانا كلي تحت أمرك........ خذ فرحي وهات همك ....... خذ ضحكي وهات دمعك ......خذ عمري بس اعطيني حبك

jakwar_al_it@hotmail.com

#2

ببساطة :

طريقتك في الفحص خاطئة و السبب : لو أن كلمة السر أو اسم المستخدم خاطىء فلن يحضر الcursor أي بيانات بالتاي قيمة المتحول s.pass أو s.username ستكون Null و هذا سيخالف الشرط ....

يمكن اعتماد الطريقة التالية :

declare 
 pass varchar2(13); 
uname varchar2(13); 
begin 
if :b.username is null then
n:= show_alert('nullname');
RAISE form_trigger_failure; 
end if;
 if :b.pass is null then
     n:= show_alert('nullpass'); 
     RAISE form_trigger_failure; 
end if; 
select password , username into pass , uname where :b.username and password = :b.pass ; 
run_product(forms,'d:\sumaa1\wil',asynchronous,runtime,filesystem,'','');
exit_form; 

Exception 
  when no_data_found then 
     n:= show_alert('error , your password or username is invalid , try again '); 
end;

تعليمة select هنا ستحضر سجل واحد فقط إذا تحقق الشرط الخاص بها أي كانت كلمة المرور و اسم المستخدم صحيح و إلا فإنها لن تحضر أي بيانات و بالتالي سيحدث Exception ..

بالتوفيق

#3

اعتقد انه يوجد تعديل بسيط فى الكود السابق

declare 
  pass varchar2(13); 
  uname varchar2(13); 
begin 
  if :b.username is null then
    n:= show_alert('nullname');
    RAISE form_trigger_failure; 
  end if;
  if :b.pass is null then
    n:= show_alert('nullpass'); 
    RAISE form_trigger_failure; 
  end if; 
  select password , username into pass , uname where username= :b.username  and
 password = :b.pass; 
if id_null( pass ) and id_null(uname) then
  run_product(forms,'d:\sumaa1\main',asynchronous,runtime,filesystem,'','');
else
  run_product(forms,'d:\sumaa1\wil',asynchronous,runtime,filesystem,'','');
end if;
exit_form; 
Exception 
 when no_data_found then 
    n:= show_alert('error , your password or username is invalid , try again '); 
end;

ارجو المعزره اذا كان كلامى خاطئ

ايهاب وجدى

#4

مشكووووووووووووووووووووور يا أخوان على المساعدة وحلت المشكلة 0000000000000

أانا كلي تحت أمرك........ خذ فرحي وهات همك ....... خذ ضحكي وهات دمعك ......خذ عمري بس اعطيني حبك

jakwar_al_it@hotmail.com

#5

أفهم أخي لماذا عدلت الكود لأنك تظن أنه يمكن أن لا يحضر بيانات و بالتالية قيمة المتحولين uname و pass قد تكون فارغة null ، أليس كذلك ؟

لن يحصل ذلك بالتأكيد و السبب لو أن التعليمة لم تحضر أي بيانات بالتالي لن يتابع التنفيذ و إنما سينتقل مباشرة إلى Exception فلذلك لا داعي لإضافة الشرط الذي كتبته ...

على كل حال أتمنى أن تكون المشكلة قد حلت .... و بالتوفيق للجميع

#6

معك حق ......................

ايهاب وجدى

هذا الموضوع مغلق.

مواضيع مشابهة