MMA بتاريخ: 12 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 12 سبتمبر 2006 بسم الله الرحمن الرحيمفية عندي سؤال لم يتم إدراجه في هذا المنتدي من قبل وهوتعاملت مع قاعدة بيانات ACCESS كثيراً ، فعند إنشاء حقل جديد لراتب الموظفتحت إسم Sal كنت أقوم بوضع قد له تحت إسم ( قاعدة التحقق من الصحة ) وهينفس طريقة ( Check ) الموجودة بأوراكل ، ولكن حتي الآن لم أجد داخل أوراكلالقيد الثاني ( نص التحقق من الصحة ) ، وهو النص الذي سيظهر عند عدم إتباعالمستخدم القيد المنشأ في ( Check )مثال :-------نفترض أن لدينا جدول ( EMP ) والذي يمثل الموظف ، وبه حقل ( Sal ) والذييمثل اراتب ، طلبت مني الشركة أن لا يزيد الراتب عن 5000 جنية مصر ، و لايقل عن 500 ج مصري ، ففي داخل أوراكل أستخدمت أمر Check ، وعند إدخال قمةأبر من 5000 أو أقل من 500 تظهر رسالة ( تم إنتهاك قيد Check ) ، ولكنكيف يتم عرض رسالة ( رجاء إدخال راتب بين 500 و 5000 جنية مصري ) مثل نظامأكسيسملحوظة :---------رجاء عدم إستخدام طرق Procedue أو Function لمعالجة هذا الجزء ، فإذا كانهناك قيد مثل القيد المذكور أعلاة في نظام أكسيس رجاء إخباري به وطريقة إنشاءة، أما إذا كان هذا القيد غير مدعوم بأوراكل فرجاء إخباري بذلك للإستفادة منهاأنا وكافة الأعضاء.أنظر الصورة المرفقة معرفة المطلوب بالضبط آسف علي طول الرسالة مع الشكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
developer بتاريخ: 12 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 12 سبتمبر 2006 اخي الكريمعندما تظهر رسالة الخطأ ( تم إنتهاك قيد Check ) هناك رقم لهذه الرسالة يمكن استخدام هذا الرقم في التريجر ON-ERROR لعرض الرسالة التي تريدها عن طريق الامر message اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 13 سبتمبر 2006 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 أخي Develobar الكريم ، متشكر جداً علي الرد السريع ! في الحقيقة هذه الطريقة هي المتبعة معي في برمجة قواعد بيانات أوراكل مع لغة برمجة الفيجوال بيزيكوذلك كما تعلمتة من هذا المنتدي العريق ومنتدي الفريق العربي للبرمجيات ، ولكنني أسأل عن خاصية معينة ،وهي ( نص التحقق من الصحة ) هل هي مدعومة داخل أوراكل أم لا؟ وأشكرك علي الرد مرة أخري اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_ahmed بتاريخ: 13 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 (معدل) السلام عليكماخى MMAيوجد خاصيتين بtext item تسمى:lowest allwed valuehighest allowed valueويمكن من خلالهما تحديد قيمة دنيا وقيمة عليا للبيانات التى سوف يتم ادخالها فى هذا الحقل وفى حالة ادخالة قيمة غير المطلوبة يظهر الخطأ ورقمة frm-40207 ومع رسالة تفيد ان البيانات يجب ان تكون فى نطاق القيم التى قمت بتحديدهاارجو ان يكون هذا هو المطلوب تم تعديل 13 سبتمبر 2006 بواسطة m_ahmed اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 13 سبتمبر 2006 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 متشكر جداً أخ 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));كيف يتم تصميم ما قلتة علي هذا الكود اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_ahmed بتاريخ: 13 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 اخى MMAانا مش فاهم المشكلة بالنسبة لك فين انا شايف انك معقد الموضوع شوية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
عبدالله ندا بتاريخ: 13 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 يمكن تحقيق ما تريد عن طريق داتا بيز تريجر مع استخدام raise_application_error ووضع نص الرساله هذا علي مستوي الداتا بيز اما علي مستوي الفورم فيمكنك كتابه ماتريد عن طريق تريجر when vaildate item واكتب الي عاوزه مع تمنياتي بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 13 سبتمبر 2006 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 بسم الله الرحمن الرحيم أعزائي مبرمجين هذا الموقع العريق ، تحية طيبة وبعد ، في الحقيقة أنا مبرمج مبتديء ، وأفهم كثيراً للغة برمجة 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 . أرجو أن لا أكون مذعج بالنسبة لكم ، فالحقيقة أنا مسجل في هذا المنتدي منذ فترة ولكن يعتبر هذه أول مشاركة لي كعضو لأنني كنت أتعلم في البداية وحان الوقت لمشاركتي مع سيادتكم ، وأتمي أن تتقبلو مني هذه الرسالة لفتح مناقشة في المستقبل. وآسف مرة أخري علي الإزعاج اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
m_ahmed بتاريخ: 13 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 اخىMMAاعتذر لك ان كنت قد اسأت لك من غير قصدواعتقد انه يمكن ان تكتب هذا الكود تحت التريجير when vaildate item if :salary not between 500 and 5500 then message('يجب ان لا يقل الراتب عن 500 ولا يزيد عن 5500'); message('يجب ان لا يقل الراتب عن 500 ولا يزيد عن 5500'); rasie form_trigger_faliuer end if ارجو ان يكون هذا المطلوب واعتذر مرة ثانية اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 13 سبتمبر 2006 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 لا تعتزر أخي m_ahmed ، فأنا قد تعلمت منك ومن أعضاء هذا المنتدي الكثير والكثير عن Oracle ،فأنا لن أزعل أبداً من أحبائي وأساتزتي ومعلميني :ولكن أخي العزيز معزرتاً ، أعتقد أنك لم تقرأ الرسالة جيداً !!!فقد قلت أنني لن أعرف كيف يتم إنشاء ال Trigger أما عن ال ( Function-Procedure-Package)فأنا أتعامل معها جداً ، فهل بإمكانك مساعدتي..إذا كان ذلك ، فأنا أطلب منك طلب آخر داخل Oracle دون إحراج وهو :1- هل يمكن إنشاء جداول أو عارض أو فهرس أو غرض أو ......... الي آخرة من خلال Procedure مثل القدرة علي التعامل مع DML.2- هل يمكن إنشاء Parameter لإحدي الإجراءات من نوع Object مثل الكود التالي داخل VB.Dim obj As ObjectSet obj = From1Label1.Caption = obj.NameSet obj = Nothingمع العلم أنني أستخدم قاعدة If للإنتقال ما بن الكائنات ، ولكن كيف يتم التعامل مع 100كائن ، فالحل هو إستخدام متغير من نوع Object. وشكراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ابن الجزيره بتاريخ: 13 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 أخي اللي فهمته من كلامك أنك تريد وقت إنشاء الجدول أن تضع هذا القيد هذي طريقه ممكن تستخدمها في إنشاء الجدول ووضع القيد في الأوراكل داتا بيس 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; أتمنى أن يكون هذا هو ماتبحث عنه شكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 13 سبتمبر 2006 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 خلاص يا جماعة أنسو الأمر كأنة لم يكن ، وسأعود أنا الي الطريقة المتبعة معي ، وأنا خجلان جداً لأني معرفتش أوصلكم المعلومة صحيحة.علي العموم أنا سأعتبر أن هذه المشاركة تكون مشاركة تعارف ، هل ترغبونني كعضو في هذا المنتديفأنا مهما كنت أسمي مبتديء===========أما بالنسبة للأخ (ابن الجزيره ) جربت الكود بتاعك ولكن لية لما أستخدم الكود الي بعتهولي لن يعمل ويعطي خطأ ، كأن أوراكل لا يعلم الأمرين Message و Forms_DDL.مع العلم أستخدم Oracle9 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
عبدالله ندا بتاريخ: 13 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 13 سبتمبر 2006 انا مصمم بقي انك تفهم الموضوع بص مفيش طريقة مباشره انك تطلع رساله من اوراكل غير لو كانت رسال 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 و اسمه الي مكتوب جنبه ومرحب بيك في المنتدي دائمامع تمنياتي بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
ابن الجزيره بتاريخ: 14 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 14 سبتمبر 2006 يمكن تكون نسخت الكود نسخ وهذا أحيانا حتى من الهيلب حق الديفلوبر 200 يسبب مشكله لأنه يحط بعض الspace لكن حاول تكتبه كتابه وأبد بالسطر الأول بس علشان يظبط معاك يعني Forms_DDL('create table temp(n NUMBER)');وشوف الجدول تم إنشاؤه أو لا شكر اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
jamal_rrkk بتاريخ: 14 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 14 سبتمبر 2006 السلام عليكم ورحمة الله وبركاته 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; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
MMA بتاريخ: 14 سبتمبر 2006 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 14 سبتمبر 2006 بسم الله الرحمن الرحيمتحية طيبة وبعد،أخي العزيز ، عبدالله ندا /الحقيقة أنا فرحان جداً علي إصرارك كي أفهم تركيبة الـ ( Trigger ) ، والحقيقة التركيبة المعطاة لي قد فهمتها جيداً ، وعند البدء في التطبيق علي الحاسب أعطي لي ناتج صحيح ، فبصراحة متشكر جداً جداً علي تعاونك معي ، لأن بهذا الكود قد فتح لي أبواب برمجة الأزندة ، ومنه قد فهمت العديد من الأكواد الموجودة معي علي الحاسب الخاص بي ، منها تركيبة الترقيم التلقائي ، والمكتوبة بزناد ذات الصف الواحد ، وهذا ما جعلني تأخرت في الرد هذا اليوم.أخي العزيز ، بعد الإنتهاء من كتابة الكود ظهر لي رسالة ( تم إنشاء زناد ) ، وعند إدراج سجل جديد قمت بوضع الرقم ( 10 ) بحقل ( Sal ) ، فلم يدرج السجل ، وهذا هو المطلوب مثل أمر ( Check ) ، ولكن للأسف الرسالة التي كتبتها – XX- لم تظهر نهائياً ، وعند تغيير رقم الخطأ من ( -2550 ) الي ( -20504 ) كما قرأتة من قبل علي الويب ، وجدت الرسالة يتم عرضها طبيعي ، كما يلي :ORA-20504: XXORA-06512: عند "Man.XXYYY",Line 3ORA-04088: ظهر خطأ أثناء تنفيذ الزناد MAN.XXYYYولكن بعد هذه المساعدة العظيمة بالنسبة لي كان لي سؤالين أرغب في الإجابة عنهم ، فرجاء مساعدتي حتي تكمل مسح الغمامة الموجودة في بصري :1- ما هذا الرقم - هل يمكن تغييره - وما هي باقية الأرقام وكيف يتم الحصول عليها ؟2- هل يمكن عرض الرسالة ( XX ) فقط لا غير بدون باقية الرسالة ؟ كيف يتم ذلك ؟3- هل لديك كتاب مختصر يمكن من خلالة مساعدتي علي إنشاء أي ( Trigger ) ؟أخي العزيز ، أنت لست مٌجبر للإجابة علي هذه الأسئلة ، ولكنها بالنسبة لي تعتبر ثروة ، من خلالها توفر لي العديد من الأكواد التي كنت أكتبها داخل لغة ( الفيجوال بيزيك ) .ومتشكر جدا علي وقوفك معي لمسح تلك الغمامةأخوك ( مصطفي محمود عبدالسلام )=============================================================أما الأخ الغالي jamal_rrkk :شكراً جزيراً علي الرد ، فإن الأخ عبدالله ندا ساعدني بنفس مساعدتك تقريباً ، فهذا هو ما فعلتة بعد إرشادات الأخ عبداالله.فشكراً جزيرا=============================================================أخي العزيز ( إبن الجزيرة ) ، شكراً جزيراً علي الرد .أما بالنسبة لي فقد كتبت الكود بنفسي دون إجراء عملة النسخ من الكود المرفق في هذه الصفحة أو حتي من أي منطقة أخري ، بل كتبتة داخل محرر النص ( Notepad ) ، ورغم ذلك كأن أوراكل لن يعرف أي شيء عن الأوامر التالي :Forms_DLLMessageوشكراً جزيراً أخي ( إبن الجزيرة ) اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.