إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

كيف وضع كود يقوم بحساب الزيادة والنقصان


30 رد (ردود) على هذا الموضوع

#1 sonic

sonic

    مشترك

  • الأعضــاء
  • 69 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 10 March 2009 - 08:53 PM

السلام عليكم ورحمة الله وبركاته

للتوضيح مثلاً عندي Table يوجد به A و B

Table
A
B

مثلاً عند وضع قمية وعددها 1000 للجهة A سوف تكون الجهة A= 1000

وعند وضع 1500 للجهة B سوف تكون الجهة B=1500

،،
لنفرض سوف نقوم باضافة كمية اخرى ل A، والقيمة تساوي 2000
تصبح قيمة A=3000 لان تم جمع قيمة A القديمة +قيمة A الحديثة = المجموع الكلي

لنفرض اني سوف اخذ من قيمة A=500

اذاً سوف تساوي قيمة A=2500
وB لم نضف عليها اي شي جديد وهي B=1500

والمطلوب الذي اريد معرفته هل يمكن استخدام Trigger لكي اضيف قيمه لهم ويتم جمعها بصورة الية ؟اي ممكن الكود الذي يقوم بعمل هذه الطريقة وكيف استخدمه؟ جزاكم الله كل خير

وشكراً لكم

تم التعديل بواسطة sonic, 10 March 2009 - 08:55 PM.

سبحان الله والحمد لله ولا اله الا الله والله أكبر
استغفر الله الذي لا إله إلا هو الحي القيوم وأتوب اليه
اللهم اغفر لي ولوالدي ولجميع المسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات
اللهم صل وسلم على النبي محمد
اللهم أعطي الناس ضعف ما يتمنوه لي من خير

#2 TROYMAN

TROYMAN

    مشترك

  • الأعضــاء
  • 107 مشاركة

تاريخ المشاركة 11 March 2009 - 12:28 PM

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


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#3 mohamed_shoair

mohamed_shoair

    مشترك

  • الأعضــاء
  • 53 مشاركة
  • الاسم الأول:Mohamed
  • اسم العائلة:Shoair
  • البـلـد: Country Flag
  • الاهتمامات:volley ball

تاريخ المشاركة 11 March 2009 - 01:36 PM

الزيادة والنقصان أو أي عملية حسابية تتم علي الجداول
أنصحك بأن لا تقوم بعمل التريجر علي الداتا بعمل حتي لاتقوم بزيادة الترافيك علي الداتا بيز
وكله يبقي علي الفورمز
لكن لو عايز تريجر علي الداتا بيز
تحدد وقت عمل التريجر بمعني after & before
وتحديد العملية التي ستتم علي الداتا بيز insert / update / delete
ثم الكود الذي تريده

مثال توضيحي :
سوف أقوم بعمل تريجر يقوم بنسخ القيمة القديمة في الجدول والتي سيتم حذفها أو التعديل فيها إلي جدول آخر ( وذلك لمعرفة من يقوم بالتعديل في الداتا بيز )

وده مثال عليه :


create or replace trigger fr before delete on emp
for each row
begin insert into ks(empno,ename,sal) values(:old.empno,:old.ename,:old.sal);
end;
/
sho err;




هذا الكود سيقوم بعمل insert للقيمة القديمة في الجدول الذي نعمل عليه في حالة حذفها أو التعديل فيها إلي الجدول ( ks )
والسطر المكتوب فيه ( sho err; ) لإظار الأخطاء لو كانت هناك أخطاء في كود التريجر


لكن أنصحك مرة أخري بعمل التريجر علي الفورم وليس علي الداتا بيز


=============================================================

كان الله في عون العبد مادام العبد في عون أخيه


Email : asdnova@yahoo.com

BBM : 2AB34745

 

 


#4 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 March 2009 - 02:37 PM

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

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#5 sonic

sonic

    مشترك

  • الأعضــاء
  • 69 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 11 March 2009 - 03:33 PM

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

وعليكم السلام ورحمة الله وبركاته

اخي الكريم ستتم عملية الزيادة عند اضافة قيمة، والنقصان تحدث عند اخذ قيمة اي حذف قيمة (مثل طريقة بنك الدم)

وجزاك الله كل خير على الرد اخي الكريم

اخي mohamed_shoair واخي mustafagamiel جزاكم الله كل خير
المشلكة انني لم استخدم الاوراكل فورمز سوف استخدم Asp.net

اشكركم جميعاً

وهذا هو ما اقصده الصورة فقط للتوضيح والفهم، والطريقة مثل طريقة بنك الدم تحتوي على عدة فصائل AB+and AB-and O-,and O+and so on

وانا اريد عند التبرع مثلاً لفصيلة AB+ الحجم 1000 بالليتر ويتم اضافة هذه القيمة الى AB+ ويمكن ان تزيد او تنقص عند ادخال او اخذ كميه بالليتر وكذلك بالنسبة للفصائل الاخرى

وهذه هي الصورة واتمنى اني استطعت التوضيح

ملف مرفق  tableab.PNG   12.53كيلو   43 عدد مرات التحميل

وفقكم الله
سبحان الله والحمد لله ولا اله الا الله والله أكبر
استغفر الله الذي لا إله إلا هو الحي القيوم وأتوب اليه
اللهم اغفر لي ولوالدي ولجميع المسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات
اللهم صل وسلم على النبي محمد
اللهم أعطي الناس ضعف ما يتمنوه لي من خير

#6 mohamed_shoair

mohamed_shoair

    مشترك

  • الأعضــاء
  • 53 مشاركة
  • الاسم الأول:Mohamed
  • اسم العائلة:Shoair
  • البـلـد: Country Flag
  • الاهتمامات:volley ball

تاريخ المشاركة 12 March 2009 - 02:26 AM

الأخ الفاضل مصطفي جميل
أنا لست ضد التريجر علي الداتا بيز لكن في حالة أن تكون الداتا بيز كبيرة وعليها شغل كتير ويوزرز كتير ينصح بتقليل التريجرز عليها لتقليل الترافيك عليها
لكن هناك تريجرز لازم تكون علي الداتا بيز . ولكن الأرجح أن تحاول تقليل التريجرز علي الـــ D B

ولك جزيل الشكر في تقبل كلامي ورأيي


=============================================================

كان الله في عون العبد مادام العبد في عون أخيه


Email : asdnova@yahoo.com

BBM : 2AB34745

 

 


#7 mohamed_shoair

mohamed_shoair

    مشترك

  • الأعضــاء
  • 53 مشاركة
  • الاسم الأول:Mohamed
  • اسم العائلة:Shoair
  • البـلـد: Country Flag
  • الاهتمامات:volley ball

تاريخ المشاركة 12 March 2009 - 02:30 AM

أما بخصوص الفورمز اللي هتكون asp.net

لست لي خبرة بهذا الموضوع لأن شغلي كله أوراكل فورمز

وممكن تسأل أحد المشرفين وهويدلك هتعمل إيه

واقبل تحياتي ( ياريت كان بإيدي مساعدتك ، لكن ما باليد حيلة )


=============================================================

كان الله في عون العبد مادام العبد في عون أخيه


Email : asdnova@yahoo.com

BBM : 2AB34745

 

 


#8 sonic

sonic

    مشترك

  • الأعضــاء
  • 69 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 12 March 2009 - 07:09 AM

مقدر جهدك اخي الكريم بارك الله فيك :rolleyes:

ولكن لاتوجد طريقة استخدم فيها ال Trigger مثلما وضحها لي الاخ جزاه الله خير في حساب العمر بالموضوع السابق؟

اي اقصد استخدم ال trigger لحساب الزيادة والنقصان؟

تم التعديل بواسطة sonic, 12 March 2009 - 07:13 AM.

سبحان الله والحمد لله ولا اله الا الله والله أكبر
استغفر الله الذي لا إله إلا هو الحي القيوم وأتوب اليه
اللهم اغفر لي ولوالدي ولجميع المسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات
اللهم صل وسلم على النبي محمد
اللهم أعطي الناس ضعف ما يتمنوه لي من خير

#9 TROYMAN

TROYMAN

    مشترك

  • الأعضــاء
  • 107 مشاركة

تاريخ المشاركة 12 March 2009 - 03:05 PM

السلام عليكم...
تفضل الحل حسب ما استطعت فهمه من السؤال...

صورة

صورة

create or replace trigger tri_BloodType
before insert on Operations
for each row
declare
Obalance number:=0;
Nbalance number:=0;
begin select Balance into Obalance from BloodType
where ID=:new.BloodTypeID;
if :new.OperationType='grant' then
Nbalance := Obalance +:new.QuantityPerLiter;
elsif :new.OperationType='revoke' then
Nbalance := Obalance - :new.QuantityPerLiter;
if Nbalance<0 then
raise_application_error(-20210,'You try to revoke quantity greater than available');
end if;
end if;
update BloodType set Balance = Nbalance where ID=:new.BloodTypeID;
end;
/



SQL> insert into operations values(1,'hassan',1,'grant',1,sysdate)

1 row created.

SQL> insert into operations values(2,'ammar',1,'grant',1.5,sysdate);

1 row created.

SQL> insert into operations values(3,'fouad',2,'grant',0.5,sysdate);

1 row created.

SQL> insert into operations values(4,'abed',1,'revoke',2,sysdate);

1 row created.

SQL> select * from bloodtype;


ID BLOODTYPE               BALANCE
---------- -------------------- ----------
1 AB+ .5
2 AB- .5


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#10 TROYMAN

TROYMAN

    مشترك

  • الأعضــاء
  • 107 مشاركة

تاريخ المشاركة 12 March 2009 - 07:49 PM

ملحقات الحل:

صورة

صورة


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#11 sonic

sonic

    مشترك

  • الأعضــاء
  • 69 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 12 March 2009 - 10:30 PM

جزاك الله كل خير اخي الكريم ووفقك بما يحبه ويرضاه وجزاك من فضله والجنه اللهم امين ولكل من ساعدني بالمثل ان شاء الله

ان شاء الله الآن ساجربه واخبرك بالنتائج
سبحان الله والحمد لله ولا اله الا الله والله أكبر
استغفر الله الذي لا إله إلا هو الحي القيوم وأتوب اليه
اللهم اغفر لي ولوالدي ولجميع المسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات
اللهم صل وسلم على النبي محمد
اللهم أعطي الناس ضعف ما يتمنوه لي من خير

#12 sonic

sonic

    مشترك

  • الأعضــاء
  • 69 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 13 March 2009 - 04:28 AM

لا اعرف ما السبب كتبت الكود لدي وقارنت النتائج مع نتائجك اقصد اي جدولي مثل جدولك باختلاف الاسماء، ولكن بعد ما حفظ ال Trigger اخبرني ان هناك خطأ بال Trigger

وهذا هو الكود واسفله الاخطاء التي ظهرت لي
ارسلته صورة لان لم يظهر بالصفحة

ملف مرفق  trigger3.PNG   26.58كيلو   52 عدد مرات التحميل

تم التعديل بواسطة sonic, 13 March 2009 - 04:37 AM.

سبحان الله والحمد لله ولا اله الا الله والله أكبر
استغفر الله الذي لا إله إلا هو الحي القيوم وأتوب اليه
اللهم اغفر لي ولوالدي ولجميع المسلمين والمسلمات والمؤمنين والمؤمنات الاحياء منهم والاموات
اللهم صل وسلم على النبي محمد
اللهم أعطي الناس ضعف ما يتمنوه لي من خير

#13 TROYMAN

TROYMAN

    مشترك

  • الأعضــاء
  • 107 مشاركة

تاريخ المشاركة 13 March 2009 - 11:55 AM

الخطأ واضح بتعليمة السيليكت...بجملة Where ... عندك خطأ باسم العامود (ID)


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer


#14 sonic

sonic

    مشترك

  • الأعضــاء
  • 69 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 13 March 2009 - 01:03 PM

ولكن الاسم نقلته مثل ما هو في جدولي وحاولت التاكد من ذلك ولا يوجد اختلاف، هل من الممكن وجود مشكلة اخرى بجدول اخر ممكن ان تؤثر على هذا التريجر؟

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

#15 TROYMAN

TROYMAN

    مشترك

  • الأعضــاء
  • 107 مشاركة

تاريخ المشاركة 13 March 2009 - 01:14 PM

ما بعرف بس الكومبايلر عم يقلك ما عم يلاقي عامود اسمو ID بجدول BloodType
جرب نفذ هي التعليمة:
desc BloodType;


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer