nan740 بتاريخ: 18 مارس 2012 تقديم بلاغ مشاركة بتاريخ: 18 مارس 2012 (معدل) انا عندي فورم يقوم المستخدم اختيار الاصناف منه وانا مسوي حقل نصي يضع فيه ارقام الاصناف اللي اختارها بالطريقة هذي 1,2,3,65,7, اسم هذا الحقل النصي dis_noوبعدين امرر القيمه للتقرير ويطلع لي بيانات بناء على اللي اختارها المستخدم في الاستعلام حق التقرير مسوي انه قيمة الصنف تكون بين القيم اللي اختارها المستخدم وقمت باستخدامactiv_no n(act_no);كود استعداء التقرير في الفورم DECLARE P_LIST PARAMLIST; act_c char; act_r char; -- act_c2 char; BEGIN act_c:=:dis_no; --act_nu:=:dis_no; --act_c2:=:t2; --act_nu:=to_number(act_c); --act_r:=replace('act_c', ','); P_LIST := CREATE_PARAMETER_LIST('MY_PLIST'); add_parameter(P_LIST,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(P_LIST,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(P_LIST,'act_1',TEXT_PARAMETER,act_c); -- ADD_PARAMETER(P_LIST,'act_2',TEXT_PARAMETER,act_c2); RUN_PRODUCT(REPORTS,'form_pass_activ_to',SYNCHRONOUS,RUNTIME,FILESYSTEM,P_LIST,NULL); DESTROY_PARAMETER_LIST(P_LIST); END; والكود في التقرير هو SELECT ALL DEMARCATION.DEMR_NAME, ACTIVITIES.ACTV_NAME, NEW_BUILDING.FILE_NO, NEW_BUILDING.RENTAL_NAME, NEW_BUILDING.CONTRACT_START, NEW_BUILDING.CONTRACT_END, NEW_BUILDING.YEARLY_RENT, NEW_BUILDING.LAST_PAY_DATE FROM NEW_BUILDING, ACTIVITIES, DEMARCATION WHERE ((NEW_BUILDING.DEMR_CODE = DEMARCATION.DEMR_CODE AND NEW_BUILDING.ACTV_NO = ACTIVITIES.ACTV_NO)) --AND new_building.MAIN_MUNC_CODE not in (1,9,10) and [b]new_building.actv_no in (:act_1[/b]); تم تعديل 18 مارس 2012 بواسطة Ahmad.Hasan تنسيق الأكواد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
nan740 بتاريخ: 18 مارس 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 18 مارس 2012 طلبتكم يا اخوان احتاج حل ضروري اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
a_disi بتاريخ: 18 مارس 2012 تقديم بلاغ مشاركة بتاريخ: 18 مارس 2012 السلام عليكم و رحمة الله و بركاتهيمكن عمل ذلك باستخدام الـ Lexical Parameterفي الفورم قم بكتابة التالي DECLARE P_LIST PARAMLIST; act_c char; act_r char; BEGIN act_c := ' AND NEW_BUILDING.ACTV_NO IN (' || :dis_no || ')'; P_LIST := CREATE_PARAMETER_LIST('MY_PLIST'); add_parameter(P_LIST,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(P_LIST,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(P_LIST,'act_1',TEXT_PARAMETER,act_c); RUN_PRODUCT(REPORTS,'form_pass_activ_to',SYNCHRONOUS,RUNTIME,FILESYSTEM,P_LIST,NULL); DESTROY_PARAMETER_LIST(P_LIST); END; و في التقرير قم بكتابة التالي SELECT ALL DEMARCATION.DEMR_NAME, ACTIVITIES.ACTV_NAME, NEW_BUILDING.FILE_NO, NEW_BUILDING.RENTAL_NAME, NEW_BUILDING.CONTRACT_START, NEW_BUILDING.CONTRACT_END, NEW_BUILDING.YEARLY_RENT, NEW_BUILDING.LAST_PAY_DATE FROM NEW_BUILDING, ACTIVITIES, DEMARCATION WHERE ((NEW_BUILDING.DEMR_CODE = DEMARCATION.DEMR_CODE AND NEW_BUILDING.ACTV_NO = ACTIVITIES.ACTV_NO)) &act_l اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
nan740 بتاريخ: 19 مارس 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 مارس 2012 اخي جزااك الله خير بس جربت الطريقة وما نفع ما ادري ايش المشكله اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
nan740 بتاريخ: 19 مارس 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 مارس 2012 يطلع خطا ora ولا يستدعي الريبورتاما في الريبورت يقول لي انه جملة sql لم تنتهي بشكل صحيح اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
nan740 بتاريخ: 19 مارس 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 مارس 2012 جربت حطيت في الريبورت نفس الكود اللي قلت لي عليه بس سويت في النهايةACTIVITIES.ACTV_NO IN('&act_1'وبرضوا ما اشتغل اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
a_disi بتاريخ: 19 مارس 2012 تقديم بلاغ مشاركة بتاريخ: 19 مارس 2012 السلام عليكم و رحمة الله و بركاتهالمثال المرفق يحتوي على تطبيق عملي للفكرةالمستخدم هو SCOTT TEST_REP.rar اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
nan740 بتاريخ: 20 مارس 2012 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 20 مارس 2012 (معدل) اخوي اسف على ازعاجك هذي اكواد الفورم والريبوت تبعي تفذت فيه اللي قلت لي عليه بس ما نفع ممكن تشوف وين الخطامع العلم اني حاولت ارسل لك الملف بالمرفقات بس ما عرفتكود الفورم DECLARE PL_ID PARAMLIST; BEGIN PL_ID := GET_PARAMETER_LIST('MY_LIST'); IF NOT ID_NULL(PL_ID) THEN DESTROY_PARAMETER_LIST(PL_ID); END IF; PL_ID := CREATE_PARAMETER_LIST('MY_LIST'); :ACTIVITIES.DIS_NO := SUBSTR(:ACTIVITIES.DIS_NO, 1, LENGTH(:ACTIVITIES.DIS_NO) - 1); -- To remove the last comma from the text. :ACTIVITIES.DIS_NO := 'AND WHERE ACTIVITIES.ACTV_NO IN (' || :ACTIVITIES.DIS_NO || ')'; add_parameter(PL_ID,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(PL_ID,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(PL_ID, 'ACT_1', TEXT_PARAMETER, :ACTIVITIES.DIS_NO); RUN_PRODUCT(REPORTS, 'form_pass_activ_to', SYNCHRONOUS, RUNTIME, FILESYSTEM, PL_ID, NULL); END -----------------------------------------------------------------------------------------------كود الريبورت SELECT ALL DEMARCATION.DEMR_NAME, ACTIVITIES.ACTV_NAME, NEW_BUILDING.FILE_NO, NEW_BUILDING.RENTAL_NAME, NEW_BUILDING.CONTRACT_START, NEW_BUILDING.CONTRACT_END, NEW_BUILDING.YEARLY_RENT, NEW_BUILDING.LAST_PAY_DATE FROM NEW_BUILDING, ACTIVITIES, DEMARCATION WHERE ((NEW_BUILDING.DEMR_CODE = DEMARCATION.DEMR_CODE AND NEW_BUILDING.ACTV_NO = ACTIVITIES.ACTV_NO)) &act_1; --------------------------------------------------------------------------هذا كود زر الاضافه اللي مسويه begin if :dis_no is null then :dis_no:=:actv_no; :dis_name:=:actv_name; else :dis_no:=:dis_no ||','||:actv_no; :dis_name:=:dis_name ||',' ||:actv_name; end if; تم تعديل 20 مارس 2012 بواسطة nan740 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
yazan_othman بتاريخ: 20 مارس 2012 تقديم بلاغ مشاركة بتاريخ: 20 مارس 2012 اخوي اسف على ازعاجك هذي اكواد الفورم والريبوت تبعي تفذت فيه اللي قلت لي عليه بس ما نفع ممكن تشوف وين الخطامع العلم اني حاولت ارسل لك الملف بالمرفقات بس ما عرفتكود الفورم DECLARE PL_ID PARAMLIST; BEGIN PL_ID := GET_PARAMETER_LIST('MY_LIST'); IF NOT ID_NULL(PL_ID) THEN DESTROY_PARAMETER_LIST(PL_ID); END IF; PL_ID := CREATE_PARAMETER_LIST('MY_LIST'); :ACTIVITIES.DIS_NO := SUBSTR(:ACTIVITIES.DIS_NO, 1, LENGTH(:ACTIVITIES.DIS_NO) - 1); -- To remove the last comma from the text. :ACTIVITIES.DIS_NO := 'AND WHERE ACTIVITIES.ACTV_NO IN (' || :ACTIVITIES.DIS_NO || ')'; add_parameter(PL_ID,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(PL_ID,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(PL_ID, 'ACT_1', TEXT_PARAMETER, :ACTIVITIES.DIS_NO); RUN_PRODUCT(REPORTS, 'form_pass_activ_to', SYNCHRONOUS, RUNTIME, FILESYSTEM, PL_ID, NULL); END -----------------------------------------------------------------------------------------------كود الريبورت SELECT ALL DEMARCATION.DEMR_NAME, ACTIVITIES.ACTV_NAME, NEW_BUILDING.FILE_NO, NEW_BUILDING.RENTAL_NAME, NEW_BUILDING.CONTRACT_START, NEW_BUILDING.CONTRACT_END, NEW_BUILDING.YEARLY_RENT, NEW_BUILDING.LAST_PAY_DATE FROM NEW_BUILDING, ACTIVITIES, DEMARCATION WHERE ((NEW_BUILDING.DEMR_CODE = DEMARCATION.DEMR_CODE AND NEW_BUILDING.ACTV_NO = ACTIVITIES.ACTV_NO)) &act_1; --------------------------------------------------------------------------هذا كود زر الاضافه اللي مسويه begin if :dis_no is null then :dis_no:=:actv_no; :dis_name:=:actv_name; else :dis_no:=:dis_no ||','||:actv_no; :dis_name:=:dis_name ||',' ||:actv_name; end if; سلام عليكم اخي اعلزيز اتوقع الخطاء هنا:ACTIVITIES.DIS_NO := 'AND WHERE ACTIVITIES.ACTV_NO IN (' || :ACTIVITIES.DIS_NO || ')';لانو بالتقرير يوجد كلمة where وشكر لااخ a_disi اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
a_disi بتاريخ: 20 مارس 2012 تقديم بلاغ مشاركة بتاريخ: 20 مارس 2012 (معدل) السلام عليكم و رحمة الله و بركاتهلا يوجد أي إزعاج أخي الكريمأولا إجعل الكود في زر الإضافة كالتالي: :dis_no := :dis_no || :actv_no || ','; :dis_name := :dis_name || :actv_name || ','; ثم الكود في زر استدعاء التقرير كالتالي: DECLARE PL_ID PARAMLIST; X_DIS_NO VARCHAR2(4000) := :ACTIVITIES.DIS_NO; BEGIN PL_ID := GET_PARAMETER_LIST('MY_LIST'); IF NOT ID_NULL(PL_ID) THEN DESTROY_PARAMETER_LIST(PL_ID); END IF; PL_ID := CREATE_PARAMETER_LIST('MY_LIST'); :ACTIVITIES.DIS_NO := SUBSTR(:ACTIVITIES.DIS_NO, 1, LENGTH(:ACTIVITIES.DIS_NO) - 1); -- To remove the last comma from the text. :ACTIVITIES.DIS_NO := ' AND ACTIVITIES.ACTV_NO IN (' || :ACTIVITIES.DIS_NO || ')'; -- This sentence will be appended to the where clause in the report. add_parameter(PL_ID,'PARAMFORM',TEXT_PARAMETER,'NO'); add_parameter(PL_ID,'MAXIMIZE',TEXT_PARAMETER,'YES'); ADD_PARAMETER(PL_ID, 'ACT_1', TEXT_PARAMETER, :ACTIVITIES.DIS_NO); RUN_PRODUCT(REPORTS, 'form_pass_activ_to', SYNCHRONOUS, RUNTIME, FILESYSTEM, PL_ID, NULL); :ACTIVITIES.DIS_NO := X_DIS_NO; END و الكود المكتوب في التقرير صحيح ليس فيه خطأ.إذا لم يعمل معك الحل، قم بضغط الفورم و التقرير و إرساله مع الجداول المستخدمة.و شكراً أيضاً للأخ يزن تم تعديل 20 مارس 2012 بواسطة a_disi اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.