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

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

صورة
- - - - -

اظهار رساله عند عدم تحقق check


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

#1 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 12 September 2006 - 08:00 AM

بسم الله الرحمن الرحيم

فية عندي سؤال لم يتم إدراجه في هذا المنتدي من قبل وهو


تعاملت مع قاعدة بيانات ACCESS كثيراً ، فعند إنشاء حقل جديد لراتب الموظف
تحت إسم Sal كنت أقوم بوضع قد له تحت إسم ( قاعدة التحقق من الصحة ) وهي
نفس طريقة ( Check ) الموجودة بأوراكل ، ولكن حتي الآن لم أجد داخل أوراكل
القيد الثاني ( نص التحقق من الصحة ) ، وهو النص الذي سيظهر عند عدم إتباع
المستخدم القيد المنشأ في ( Check )


مثال :
-------
نفترض أن لدينا جدول ( EMP ) والذي يمثل الموظف ، وبه حقل ( Sal ) والذي
يمثل اراتب ، طلبت مني الشركة أن لا يزيد الراتب عن 5000 جنية مصر ، و لا
يقل عن 500 ج مصري ، ففي داخل أوراكل أستخدمت أمر Check ، وعند إدخال قمة
أبر من 5000 أو أقل من 500 تظهر رسالة ( تم إنتهاك قيد Check ) ، ولكن
كيف يتم عرض رسالة ( رجاء إدخال راتب بين 500 و 5000 جنية مصري ) مثل نظام
أكسيس

ملحوظة :
---------
رجاء عدم إستخدام طرق Procedue أو Function لمعالجة هذا الجزء ، فإذا كان
هناك قيد مثل القيد المذكور أعلاة في نظام أكسيس رجاء إخباري به وطريقة إنشاءة
، أما إذا كان هذا القيد غير مدعوم بأوراكل فرجاء إخباري بذلك للإستفادة منها
أنا وكافة الأعضاء.

أنظر الصورة المرفقة معرفة المطلوب بالضبط


آسف علي طول الرسالة





مع الشكر

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#2 developer

developer

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 315 مشاركة
  • الاسم الأول:M
  • اسم العائلة:Almuflehi
  • البـلـد: Country Flag

تاريخ المشاركة 12 September 2006 - 08:48 AM

اخي الكريم

عندما تظهر رسالة الخطأ ( تم إنتهاك قيد Check )
هناك رقم لهذه الرسالة يمكن استخدام هذا الرقم في التريجر ON-ERROR لعرض الرسالة التي تريدها عن طريق الامر message
...... بالتوفيق ...

#3 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 13 September 2006 - 08:46 AM

أخي Develobar الكريم ، متشكر جداً علي الرد السريع !

في الحقيقة هذه الطريقة هي المتبعة معي في برمجة قواعد بيانات أوراكل مع لغة برمجة الفيجوال بيزيك
وذلك كما تعلمتة من هذا المنتدي العريق ومنتدي الفريق العربي للبرمجيات ، ولكنني أسأل عن خاصية معينة ،
وهي ( نص التحقق من الصحة ) هل هي مدعومة داخل أوراكل أم لا؟


وأشكرك علي الرد مرة أخري

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#4 m_ahmed

m_ahmed

    مشترك

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

تاريخ المشاركة 13 September 2006 - 09:38 AM

السلام عليكم
اخى MMA

يوجد خاصيتين بtext item تسمى:
lowest allwed value
highest allowed value

ويمكن من خلالهما تحديد قيمة دنيا وقيمة عليا للبيانات التى سوف يتم ادخالها فى هذا الحقل وفى حالة ادخالة قيمة غير المطلوبة يظهر الخطأ ورقمة frm-40207 ومع رسالة تفيد ان البيانات يجب ان تكون فى نطاق القيم التى قمت بتحديدها

ارجو ان يكون هذا هو المطلوب

تم التعديل بواسطة m_ahmed, 13 September 2006 - 02:11 PM.


#5 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 13 September 2006 - 09:51 AM

متشكر جداً أخ M_Ahmed :

ولكن كيف يتم ذلك من خلال الكود:

Create Table Emp
(
Enumber VarChar2(10),
Ename VarChar2(50),
Sex VarChar2(1),
Sal Number(10,3),
Constraint PK_EMP Primary Key(Enumber),
Constraint CHK_EMP_SAL Check(Sal >= 500 And Sal <=6000)
);

كيف يتم تصميم ما قلتة علي هذا الكود

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#6 m_ahmed

m_ahmed

    مشترك

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

تاريخ المشاركة 13 September 2006 - 11:07 AM

اخى MMA
انا مش فاهم المشكلة بالنسبة لك فين انا شايف انك معقد الموضوع شوية

#7 عبدالله ندا

عبدالله ندا

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,017 مشاركة
  • الاسم الأول:عبدالله
  • اسم العائلة:ندا
  • البـلـد: Country Flag
  • المنصب الحالي:Technical Applications Manager

تاريخ المشاركة 13 September 2006 - 11:42 AM

يمكن تحقيق ما تريد عن طريق داتا بيز تريجر مع استخدام raise_application_error ووضع نص الرساله هذا علي مستوي الداتا بيز
اما علي مستوي الفورم فيمكنك كتابه ماتريد عن طريق تريجر when vaildate item واكتب الي عاوزه

مع تمنياتي بالتوفيق

في زمننا هذا .........................
ليس هناك قلب ناصع البياض ...
ولا قلب قاتم السواد ...
ولكن دائما
BLACK&WHITE

 

مع تحياتي
عبدالله ندا

http://anada.4shared.com

abdallahnada@hotmail.com 


#8 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 13 September 2006 - 12:21 PM

بسم الله الرحمن الرحيم


أعزائي مبرمجين هذا الموقع العريق ،
تحية طيبة وبعد ،


في الحقيقة أنا مبرمج مبتديء ، وأفهم كثيراً للغة برمجة Visual Basic خاص الربط مع قاعدة البيانات ( أكسيس- أوراكل- اس كيو ال سيرفار ) ، كما أنني أفهم بعض الشيء عن برمجة صفحات الويب ( HTML-ASP-VBScript ).

أما بالنسبة لقواعد البيانات فقد أهتميت للغتي ( DDL ) لتصميم قاعدة البيانات و ( DML ) لمعالجة قواعد البيانات ، وكان هذا محور إهتماماتي لتصميم تطبيقات VB مع قواعد البيانات ، وحينما قررت أن أتعلم برمجة ( PL/SQL ) وجدت نفســي فــي متاهــة لمـــدة 3 شهور حتي تمكنت من القدرة علــي تصميــم كلاً مــن ( Function- Procedure- Package ) داخل Oracle ، وذلك بحدود متطلباتي مع الفيجوال بيزيك.

أما بالنسبة لمشكلتي داخل Oracle هي تصميم التريجر ، الحقيقة أنا قرأت كتب كثيرة عن ال ( Trigger ) وفهمت منها بعض الشيء ، ولكن عند التصميم داخل SQL/Plus يعطي الناتج غير صحيح.

أما بالنسبة لي مع قواعد بيانات أوراكل لن أتعامل معها الا في الحدود الموضحة أعلاة وهي تصميم قاعدة البيانات بالكود والربط مع VB.

فنعود مرة أخري الي المشكلة التي توجهت إليها بالمثال التالي :

نفرض أن هناك شركة تعطي مرتبات للموظفين ما بين ( 500ج ) للموظف المبتديء و ( 5500 ) للوظف النهائي ، فأنا أرغب في جعل حقل المرتب تحت إسم ( Sal ) يتم تخزين قيم الراتب ما بين هذين الرقمين ( 500-5500) ، ولكي يتم ذلك من الطبيعي إستخدام أمر Check ، ولكن سؤالي هنا كيف يتم وضع القيد ( نص التحقق من الصحة ) مثل الموجود داخل ( Access ) ولكن بإستخدام الكود مثل ما يلي :

Create Table Emp
(
Enumber VarChar2(10),
Ename VarChar2(40),
Sex VarChar2(1),
Sal Number(10,3),
Constraint PK_EMP Primary Key(Enumber),
Constraint CHK_SAL Check(Sal >= 500 And Sal <=5500)
);
/
كيف يتم وضع قيد بدون التريجر علي الحقل Sal بحيث أن يعرض رسالة مثلا ( يجب إدخال راتب ما بين 500 و 5500 جنية مصري )

لأن في الحقيقة هذا القيد يفيدني كثيراً داخل VB من خلال Access ، أما Oracle فحتي الآن أستخدم طريقة إقتباس رقم الخطأ المنتج من Oracle ومعالجتها داخل Function ، وإذا كان ليس هناك حل سوي التريجر فياريت تساعدوني في كيفية تصميم ال Triger .

أما بالنسبة للأخ m_ahmed فمتشكر جداً علي الرد ، ولكن أنا ليس معقداً ولكني أتحقق فقط لا غير ، فإن كان الموضوع بالنسبة لك أو لأي عضو غير مفهوم فأعتبرو أن الموضوع كأنة لم يكن وصدقوني لم أزعل نهائياً ، لأن كل نظام يختلف تماماً عن غيرة من حيث الإمكانيات مثل أمر ( On Update Cascade ) الغير مدعومة داخل Oracle .

أرجو أن لا أكون مذعج بالنسبة لكم ، فالحقيقة أنا مسجل في هذا المنتدي منذ فترة ولكن يعتبر هذه أول مشاركة لي كعضو لأنني كنت أتعلم في البداية وحان الوقت لمشاركتي مع سيادتكم ، وأتمي أن تتقبلو مني هذه الرسالة لفتح مناقشة في المستقبل.

وآسف مرة أخري علي الإزعاج

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#9 m_ahmed

m_ahmed

    مشترك

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

تاريخ المشاركة 13 September 2006 - 02:09 PM

اخى
MMA

اعتذر لك ان كنت قد اسأت لك من غير قصد

واعتقد انه يمكن ان تكتب هذا الكود تحت التريجير when vaildate item

 if :salary not between 500 and 5500 then

 message('يجب ان لا يقل الراتب عن 500 ولا يزيد عن 5500');
 message('يجب ان لا يقل الراتب عن 500 ولا يزيد عن 5500');
rasie form_trigger_faliuer
end if 
ارجو ان يكون هذا المطلوب

واعتذر مرة ثانية

#10 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 13 September 2006 - 03:42 PM

لا تعتزر أخي m_ahmed ، فأنا قد تعلمت منك ومن أعضاء هذا المنتدي الكثير والكثير عن Oracle ،
فأنا لن أزعل أبداً من أحبائي وأساتزتي ومعلميني :


ولكن أخي العزيز معزرتاً ، أعتقد أنك لم تقرأ الرسالة جيداً !!!

فقد قلت أنني لن أعرف كيف يتم إنشاء ال Trigger أما عن ال ( Function-Procedure-Package)
فأنا أتعامل معها جداً ، فهل بإمكانك مساعدتي..

إذا كان ذلك ، فأنا أطلب منك طلب آخر داخل Oracle دون إحراج وهو :
1- هل يمكن إنشاء جداول أو عارض أو فهرس أو غرض أو ......... الي آخرة من خلال Procedure
مثل القدرة علي التعامل مع DML.
2- هل يمكن إنشاء Parameter لإحدي الإجراءات من نوع Object مثل الكود التالي داخل VB.

Dim obj As Object
Set obj = From1
Label1.Caption = obj.Name
Set obj = Nothing

مع العلم أنني أستخدم قاعدة If للإنتقال ما بن الكائنات ، ولكن كيف يتم التعامل مع 100
كائن ، فالحل هو إستخدام متغير من نوع Object.



وشكراً

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#11 ابن الجزيره

ابن الجزيره

    عضو

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

تاريخ المشاركة 13 September 2006 - 04:44 PM

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

CREATE TABLE SAL_VAL
(
  SAL  NUMBER,
  CONSTRAINT CHK_SAL
 CHECK (sal>=500 and sal <=500)
);

يمكن أن تنشيء الجدول من داخل PL/SQL بإتسخدام

Forms_ddl

وهذا مثال على ذلك

Forms_DDL('create table temp(n NUMBER)');

والمثال كاملا من الهيلب حق الديفلوبر 200 وستجد الكثير من الأمثله هناك

BEGIN 
Forms_DDL('create table temp(n NUMBER)');
 IF NOT Form_Success THEN
 Message ('Table Creation Failed'); 
ELSE Message ('Table Created'); 
END IF; 
END;


أتمنى أن يكون هذا هو ماتبحث عنه

شكرا

#12 MMA

MMA

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,019 مشاركة
  • الاسم الأول:Mostapha
  • اسم العائلة:Abd El-Salam
  • البـلـد: Country Flag
  • المنصب الحالي:المؤسسة المصرية لتبسيط العلوم - عضو مؤسس - مستشار تقني

تاريخ المشاركة 13 September 2006 - 05:25 PM

خلاص يا جماعة أنسو الأمر كأنة لم يكن ، وسأعود أنا الي الطريقة المتبعة معي ، وأنا خجلان جداً لأني معرفتش أوصلكم المعلومة صحيحة.

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

فأنا مهما كنت أسمي مبتديء

===========

أما بالنسبة للأخ (ابن الجزيره ) جربت الكود بتاعك ولكن لية لما أستخدم الكود الي بعتهولي لن يعمل ويعطي خطأ ، كأن أوراكل لا يعلم الأمرين Message و Forms_DDL.

مع العلم أستخدم Oracle9

مهندس/ مصطفي محمود عبد السلام   
العضو المؤسس بالمؤسسة المصرية لتبسيط العلوم
والمستشار التقني

(برمجيات - نظم معلومات - شبكات)

.

 

( 01098570165 )

.

.

.

( MMA_Programmer@Yahoo.com )

 


#13 عبدالله ندا

عبدالله ندا

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,017 مشاركة
  • الاسم الأول:عبدالله
  • اسم العائلة:ندا
  • البـلـد: Country Flag
  • المنصب الحالي:Technical Applications Manager

تاريخ المشاركة 13 September 2006 - 10:29 PM

انا مصمم بقي انك تفهم الموضوع :)
بص مفيش طريقة مباشره انك تطلع رساله من اوراكل غير لو كانت رسال exception وتعمل هاند للاكسبشن ده
وعلشان تطلع رساله مفهومه في الاكسبشن مش ينفع تعمل تشيك كونسترينت
لازم تعمله عن طريق داتا بيز تريجر
واسهل كود للموضوع اهه
CREATE OR REPLACE TRIGGER XXYY
 BEFORE 
 INSERT
 ON EMP
 REFERENCING OLD AS OLD NEW AS NEW
 FOR EACH ROW 
BEGIN
IF :NEW.SAl = 10 THEN
RAISE_APPLICATION_ERROR(-2550,'XX');
END IF;
END;
/
XXYY اسم التريجر و
وxx هي المسج التي تريد ارجاعها
والكود ده معناه لو المرتب ب 10 مش تعمل انسرت و رجع ايرور رقمه 2550 و اسمه الي مكتوب جنبه
ومرحب بيك في المنتدي دائما
مع تمنياتي بالتوفيق

في زمننا هذا .........................
ليس هناك قلب ناصع البياض ...
ولا قلب قاتم السواد ...
ولكن دائما
BLACK&WHITE

 

مع تحياتي
عبدالله ندا

http://anada.4shared.com

abdallahnada@hotmail.com 


#14 ابن الجزيره

ابن الجزيره

    عضو

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

تاريخ المشاركة 14 September 2006 - 10:43 AM

يمكن تكون نسخت الكود نسخ وهذا أحيانا حتى من الهيلب حق الديفلوبر 200 يسبب مشكله لأنه يحط بعض الspace لكن حاول تكتبه كتابه وأبد بالسطر الأول بس علشان يظبط معاك يعني


Forms_DDL('create table temp(n NUMBER)');


وشوف الجدول تم إنشاؤه أو لا

شكر

#15 jamal_rrkk

jamal_rrkk

    عضو نشط

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

تاريخ المشاركة 14 September 2006 - 02:12 PM

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


create  or  replace  trigger  t_emp  before  insert  on   emp  for  each  row
begin
if   inserting  then
if :new.sal  not  between  500  and  6000   then
raise_application_error(-20001,' يجب أن يكون الراتب أكبر من أو يساوي 500 جنيه أو أصغر من أو يساوي 6000 جنيه ' );
end if;
end if;
end;

قال تعالى :

{ وَمَا خَلَقْتُ الْجِنَّ وَالْإِنسَ إِلَّا لِيَعْبُدُونِ مَا أُرِيدُ مِنْهُم مِّن رِّزْقٍ

وَمَا أُرِيدُ أَن يُطْعِمُونِ إِنَّ اللَّهَ هُوَ الرَّزَّاقُ ذُو الْقُوَّةِ الْمتينُ }

[ الذاريات : 56 : 58 ]


{ وَأْمُرْ أَهْلَكَ بِالصَّلَاةِ وَاصْطَبِرْ عَلَيْهَا لَا نَسْأَلُكَ رِزْقًا

نَحْنُ نَرْزُقُكَ وَالْعَاقِبَةُ لِلتَّقْوَى }

[ طه : 131 ]




سبحان الله والحمد لله والله أكبر


http://tech.groups.y...and_Accounting/