الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

مشكله في ارسال الparameter

Featured Replies

بتاريخ:

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

elsif :dept is not null then
 v_whr :='department_id in (select department_id from departments where upper(department_name)=upper(:DEPT))';
:wh_it:='where '||v_whr;
 set_block_property('employees',onetime_where,v_whr); 
 go_block('employees');
 execute_query;


وعامله تقرير على الموظفين على الفورمه دى المشكله ان لما بعمل pass للparameter الهو wh_it وهو بيمثل جمله الwhere للتقرير بيحصل مشكله
ومش بيمل Run
انا جربت فيه كتير ومتهيألى ان المشكله في قيمه :dept متهيألأى انه مش شايفها معرفش هل كلامى ده صح ولا غلط وهل في حل اقدر اتغلب منه على الجزء ده
مع العلم ان جمله الwhere ألخاصه بالتقرير ده متغيره على حسب هعمل بحث بأيه

بتاريخ:
  • كاتب الموضوع

ده كود البحث

declare
v_whr varchar2(200);

begin if :name is not null then
 v_whr:='f_name||'' ''||l_name like''%'||:name||'%''' ;
:wh_it:='where '||v_whr;
 set_block_property('employees',onetime_where,v_whr); 
 go_block('employees');
execute_query;

elsif :dept is not null then
 v_whr :='department_id in (select department_id from departments where upper(department_name)=upper(:DEPT))';
:wh_it:='where '||v_whr;
 set_block_property('employees',onetime_where,v_whr); 
 go_block('employees');
 execute_query;

elsif :salary is not null then
 v_whr:='employee_id in(select emp_id from net_salaries where basic_sal=:salary)';
:wh_it:='where '||v_whr;
 set_block_property('employees',onetime_where,v_whr); 
 go_block('employees');
 execute_query;

  elsif :hdate is not null then	
  v_whr:='hire_date='||':hdate';
	:wh_it:='where '||v_whr;
 set_block_property('employees',onetime_where,v_whr); 
 go_block('employees');
 execute_query;
elsif :rwd  is not null then
v_whr:='employee_id in(select emp_id from emp_rewards where month_id=:rwd)';
:wh_it:='where '||v_whr;
   set_block_property('employees',onetime_where,v_whr); 
   go_block('employees');
   execute_query;
else
:msg_screen:='ÚÝæÇ áÇíæÌÏ ÈíÇäÇÊ';
end if;
end;



وده الكود الخاص بال print

declare 
pl             paramlist;
rep_id         report_object;
r_rep 		     varchar2(100);
rep_status 		 varchar2(20);

begin pl:=get_parameter_list('p_list');	
if not id_null(pl) then
destroy_parameter_list(pl);
end if;
pl:=create_parameter_list('p_list');
add_parameter(pl,'WH',text_parameter,:wh_it);
rep_id:=find_report_object('sch');	
set_report_object_property(rep_id,report_execution_mode,batch);
set_report_object_property(rep_id,report_destype,cache);
SET_REPORT_OBJECT_PROPERTY (rep_id,report_comm_mode,synchronous);
 set_report_object_property(rep_id,report_desformat,'htmlcss');
set_report_object_property(rep_id,report_server,'repserver90');
		r_rep:=run_report_object(rep_id,pl);
			rep_status := REPORT_OBJECT_STATUS(r_rep);
WHILE rep_status in ('RUNNING','OPENING_REPORT','ENQUEUED') LOOP
	rep_status := report_object_status(r_rep);
END LOOP;
IF rep_status = 'FINISHED' THEN
	web.show_document('http://127.0.0.1:8889/reports/rwservlet/getjobid'|| substr(r_rep,instr(r_rep,'_',-1)+1)||'?'||'server=repserver90', '_blank'); 
ELSE
	message(' Error when running report ');
	message(' Error when running report ');
END IF;
end;

بتاريخ:
  • كاتب الموضوع

السلام عليكم
لوسمحتم اذا حد عنده فكره عن المشكله دى يلريت يوضحها

بتاريخ:

هل ممكن اعرف عن طريق ماذا تبحثين ؟؟
يعني مثلا البحث بالاسم ام الرقم ام ماذا ؟؟

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

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

بتاريخ:

هل الباراميتر الذي موجود بكود الطباعة نفسه هو الذي في التقرير؟
لماذا تضعين كلمة where مع تمرير الباراميتر
انتي كاتبة التالي
:wh_it:='where '||v_whr;
وهو نفس الذي تقومي بتمريره بالتقرير
لماذا كلمة where مدمجة مع القيمة الناتجة؟؟؟

بتاريخ:
  • كاتب الموضوع

ايوه البارميتر الموجود في كود استدعاء الريبورت هو هو الموجود في الريبورت الاساسى

انا هشرحلك الفكره انا عايزه اعرض بيانات موظفين بس جدول الموظفين مفهوش اسم القسم ولا في مرتب الموظف ولا مكافأت الموظف فعشان كده في كود البحث بغير جمله ال
where
ونفس الفكره في التقرير وعامله ال query من غير جمله ال where وكاتبه في اخر ال query lexical parameter
ومن الفورم ببعت جمله ال where العلى اساسها بينفذ ال query

بتاريخ:

اذا هل هذه الاسماء مرتبطة بجداول اخرى مثل جدول الااقسام وجدول الرواتب ؟
انا عامل تقرير بيانات للموظفين بس مش هيك .. في كتير طرق اسهل بكتير من طريقتك بالتعامل مع البيانات
يعني انتي بكل بساطة بتعملي تقرير للموظفين وبجملة الاستعلام تكتبي
where
emp_name =:Parameter1 or salary=:paramerter or deptno=:paramaeter
ومن الفورم بتمرري جميع الباراميترات واللي بيطابق الشرط بيستعلم فيه التقرير
هذه الفكرة اسهل بكثير من اسلوبك
اذا بدك ابعتيلي الفورم وجميع الجداول المتعلقة بالموضوع وانا رح اعملك التقرير بطريقة افضل واحسن من هذه وحسب الباراميترز التي تريدينها

بتاريخ:
  • كاتب الموضوع

حاول توضحلى فكرتك اكتر لان برده بحاول ادور على فكره اسهل
انا عندى التقرير هيظهر بيانات موظفين فقط بس المشكله انى بجيب البيانات عن طريق 3 جداول غير الموظفين
departments ,net_salaries,emp_rewards
فلازم ال query الخاص بالريبورت تتحدد في علاقه جدول الموظفين بالجدول الهيتحدد من عمليه البحث
فمش عارفه انت عايز تكتب في ال query الخاص بالريورت كل العلاقات مع الجدول وبعد كده تمرر البراميتر ولا ايه هجرب الفكره دى ولو اشتغلت هقولك

بتاريخ:

في التقرير بتعملي ثلاثة query
لكل جدول query
ومن ثم تربطيهم مع بعض عن طريق data link
وبتجيبي الاسماء اللي في الجداول متل اسم الادارة عن طريق function and cursor
ومن ثم تستعلمي عن طريق الاسم او رقم الموظف او ايا شيء من خلالهم
هذه هي فكرتي

بتاريخ:
  • كاتب الموضوع

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

SELECT ALL EMPLOYEES.EMPLOYEE_ID, EMPLOYEES.F_NAME||' '||EMPLOYEES.L_NAME as name, 
EMPLOYEES.HIRE_DATE, EMPLOYEES.ADDRESS, EMPLOYEES.BIRTH_DATE, 
EMPLOYEES.MILITRY_STATE, EMPLOYEES.RELIGION, EMPLOYEES.MARITAL_STATE
FROM EMPLOYEES 
&wh


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

v_whr :='department_id in (select department_id from departments where upper(department_name)=upper(:DEPT))';


المشكله ان لما ببعت متغير بالشكل ده قيمه :dept مش بيتعوض عنها
لانى جربت مره ان اكتب قيمه حقيقه ثابته من الفورم وعند استدعاء التقرير اتنفذ صح فبكده المشكله هى في قيمه :dept
هل في اي حل يتناسب مع الفكره دى هو query واحد عندى وبغير جمله الwhere بس مش اكتر

بتاريخ:

ماشي اختي الكريمة
بس هذي الطريقة غير صحيحة مئة بالمئة
ولما بدنا نعمل تقرير ما بنعملو بهذي الطريقة اللي حضرتك بتتبعيها
يوجد اسس وستاندرد متبعة لعمل التقارير ارجو منك اعادة التفكير بالموضوع وبناء التقرير من اول وجديد بطريقة افضل من هذه
انا اعرف تماما انك تريدين عمل تقرير dynamic ولكن اذا كنت تريدين dynamic فاوراكل وفرت الكثير من الادوات يمكنك اذا استخدام oracle discoverer
ارجو ان تكون وصلت فكرتي لك اختي الكريمة

بتاريخ:

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

بداية : قبل استدعاء امر مناداة التقرير يمنكك التأكد بمحتوى الجملة الشرطيه وهى v_whr
من خلال امر اظهار بسيط وليكن

message(v_whr); pause;



اعتقد انه تم التعامل مع مكونات الشرط ككتلة واحدة ويجب فصل الجزء الاساسى من الشرط عن الجزء المحتوى للبيانات باستخدام العلامات ||
ويبقى كالتالي

v_whr :='department_id in (select department_id from departments where upper(department_name)=upper('||:DEPT||'))';

بتاريخ:
  • كاتب الموضوع

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

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

ماشى انا والله معاك بس انا لسه ملاقتش شغل عشان اعرف كل الحاجات دى اعتبرنا بنتعلم :( وانا معنديش اي اعتراض انى اعرف حاجات جديده بالعكس ياريت

اخى امجد
انا جربت الجمله الاخيره بدل الجمله العندى بس ظهر خطأ في عمليه البحث
ORA-00904: "IT": invalid identifier
وده لانه لما بينفذ الاستعلام بيكون ده شكل الجمله
where department_id in (select department_id from departments where upper(department_name)=upper(it))

تم تعديل بواسطة sara gamal

بتاريخ:

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

هل اسم الإدارة هى it

فى هذه الحالة التنفيذ والإعداد سليم للأمر السابق ... طالما ظهر اسم الإدارة وهى it

ولكن يتبقى تحريك علامة التنصيص حول الاسم .... لتظهر مثل 'it'

------------

سؤال لماذا يستخدم أسم الإدارة (حرفي) فى امر ال where
هل يمكن البحث برقم الإدارة (رقمي)
فى هذه الحالة لن تظهر رسالة الخطأ الأخيره

بتاريخ:
  • كاتب الموضوع

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

where department_id in (select department_id from departments where upper(department_name)=upper(:DEPT))

بتاريخ:

حاولي تجربي كده ان شاء الله حيشتغل معاكي البحث على حسب فهمي لطلبك

v_whr :='Department_Id In (Select Department_Id From Departments Where Upper (Department_Name) Like ''%'' || Upper ('''||:DEPT||''')|| ''%'')';




وبالتوفيق

بتاريخ:
  • كاتب الموضوع

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

بتاريخ:

ألف مبروك .. لقد سعدت بهذا الخبر

بتاريخ:
  • كاتب الموضوع

 

:( :rolleyes: :blink: :o الله يبارك فيك

بتاريخ:

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

مبروك عليكم جميعا ... وشكرا للأخ أحمد


يمكنك استخدام طريقة مفيدة فى عملية البحث المتقدم .... مشاركة سابقة بالمنتدى

إضغط هنا : درس البحث المتقدم بـ Forms, البحث باكثر من متغير

بتاريخ:

الحمدلله انها اشتغلت

ودعواتي بالتوفيق لي وللجميع،،،، :)

بتاريخ:
  • كاتب الموضوع

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

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.