أسامه هزاع بتاريخ: 9 أكتوبر 2016 تقديم بلاغ مشاركة بتاريخ: 9 أكتوبر 2016 السلام عليكم ورحمة الله وبركاتهأستاذ امجد والاساتذه الاعزاء لو اردنا ان نسوي نفس هذا الكود وهي الطباعة بواسطة تشيكبوكس ولكن بواسطة جلب البيانات من اكثر من جدوال مثال بأن نجلب البيانات من جدول الموظفين من جدول الادارات ومن جدول المدراء (أكثر من جدول) ولدينا أربعة بارامترات او اكثر.انا واجهتني هذه المشكله .لدي هذا الكود للتقرير والدوال التي استخدمتها لاستدعاء للادخال للتقرير ارجوا منكم التعديل علي الاكواد وافادتني .لاني اشتغل على مشروع مدرسي ولكي ارفعه للموقع وأفيد اخواني به ولكم مني جزيل الشكر. هذه الاكواد المستخدمه في الفورم الذي يستدعي التقرير و الاستعلام الذي في التقرير كود الزر المستخدم لعرض التقرير Declare PL paramlist; Begin PL1:=create_parameter_List('stud_n'); add_parameter(PL,'stud_n',text_parameter,Get_Stud); add_parameter(PL,'PARAMFORM',text_parameter,'NO'); PL2:=create_parameter_List('class_n'); add_parameter(PL,'class_n',text_parameter,Get_Class); add_parameter(PL,'PARAMFORM',text_parameter,'NO'); PL3:=create_parameter_List('year_n'); add_parameter(PL,'year_n',text_parameter,Get_Year); add_parameter(PL,'PARAMFORM',text_parameter,'NO'); PL4:=create_parameter_List('mon_n'); add_parameter(PL,'mon_n',text_parameter,Get_Mon); add_parameter(PL,'PARAMFORM',text_parameter,'NO'); if :global.found = 'N' then message('No data selected'); message(' '); else Run_product(Reports,'D:\Osamapro\a\PickEmpNew\emprepnew.rdf',asynchronous,RunTime,FileSystem,PL); end if; Destroy_Parameter_List(PL); End; --------------------------------------------------------------------- report query to show the report from more table: SELECT MM .WRITTING, MM.ORAL,MM.ACTIVE, MM.HOMEWORKE,MM.TOTAL, MM.SUM_M,S.STUD_NAME, Y.YEAR_NAME,C.CLASS_NAME,M.MON_NAME, SH.SHOBA_NAME, SUB.SUB_NAME FROM MONTH_MARK MM, STUDENT S,YEARS Y,CLASSES C,MONTH M,SHOBA SH,SUBJECT SUB WHERE ( MM.STUD_NO = S.STUD_NO AND MM.YEAR_NO = Y.YEAR_NO AND MM.SUB_NO = SUB.SUB_NO AND MM.MON_NO = M.MON_NO AND S.SHOBA_NO = SH.SHOBA_NO AND SH.CLASS_NO = C.CLASS_NO AND SUB.CLASS_NO = C.CLASS_NO AND MM.CLASS_NO = C.CLASS_NO AND MM.CLASS_NO = :CLASS_N AND MM.MON_NO = :MON_N AND MM.STUD_NO = :STUD_N AND MM.YEAR_NO = :YEAR_N) ORDER BY MM.SUB_NO; ---------------------------------------- functions to invoke the parameters: FUNCTION Get_Class RETURN VARCHAR2 IS Cond varchar2(2000) := '(1=2)'; BEGIN :global.found := 'N'; go_block('year_stud'); first_record; Loop If :selected= 1 Then :global.found := 'Y'; Cond:=Cond || ' OR class_no=' || :class_no; End if; next_record; Exit when :system.last_record = 'TRUE'; End loop; first_record; Return ('Where ' || Cond) ; END Get_Class; ---------------------------------- FUNCTION Get_Stud RETURN VARCHAR2 IS Cond varchar2(2000) := '(1=2)'; BEGIN :global.found := 'N'; go_block('year_stud'); first_record; Loop If :selected= 1 Then :global.found := 'Y'; Cond:=Cond || ' OR stud_no=' || :stud_no; End if; next_record; Exit when :system.last_record = 'TRUE'; End loop; first_record; Return ('Where ' || Cond) ; END Get_Stud; -------------------------------------------- FUNCTION Get_Year RETURN VARCHAR2 IS Cond varchar2(2000) := '(1=2)'; BEGIN :global.found := 'N'; go_block('year_stud'); first_record; Loop If :selected= 1 Then :global.found := 'Y'; Cond:=Cond || ' OR year_no=' || :year_n; End if; next_record; Exit when :system.last_record = 'TRUE'; End loop; first_record; Return ('Where ' || Cond) ; END; -------------------------------------------- FUNCTION Get_Mon RETURN VARCHAR2 IS Cond varchar2(2000) := '(1=2)'; BEGIN :global.found := 'N'; go_block('year_stud'); first_record; Loop If :selected= 1 Then :global.found := 'Y'; Cond:=Cond || ' OR mon_no=' || :mont; End if; next_record; Exit when :system.last_record = 'TRUE'; End loop; first_record; Return ('Where ' || Cond) ; END Get_Mon; وهذه الجداول CREATE TABLE CLASSES ( CLASS_NO NUMBER(2), CLASS_NAME VARCHAR2(20 BYTE) NOT NULL, STATUS NUMBER(1), LEVEL_NO NUMBER(2), PRIMARY KEY (CLASS_NO), FOREIGN KEY ( LEVEL_NO) REFERENCES LEVELS (LEVEL_NO) ON DELETE CASCADE); ------------------------------------------------------------------------------------------------------------------------------------- CREATE TABLE SHOBA ( SHOBA_NO NUMBER(2), SHOBA_NAME VARCHAR(20) NOT NULL, CLASS_NO NUMBER(2) , STATUS NUMBER(1), PRIMARY KEY (SHOBA_NO,CLASS_NO), FOREIGN KEY (CLASS_NO) REFERENCES CLASSES (CLASS_NO) ON DELETE CASCADE); ------------------------------------------------------------------------------------------------------------------------------ CREATE TABLE STUDENT ( STUD_NO NUMBER(5), STUD_NAME VARCHAR2(50 BYTE) NOT NULL, AGE NUMBER(3), ADRESS VARCHAR2(30 BYTE), SEX NUMBER(1), BRITH_DATE DATE, BRITH_PLACE VARCHAR2(20 BYTE), PARENT_NAME VARCHAR2(50 BYTE), PARENT_PHONE VARCHAR2(20 BYTE), PARENT_WORKPHONE VARCHAR2(20 BYTE), JOB_ADRESS VARCHAR2(30 BYTE), STATUS NUMBER(1), S_PHOTO LONG RAW, LEVEL_NO NUMBER(2), CLASS_NO NUMBER(2), SHOBA_NO NUMBER(2), NAT_NO NUMBER(3), JOB_NO NUMBER(3), RELATION_NO NUMBER(2), PRIMARY KEY (STUD_NO), FOREIGN KEY (LEVEL_NO) REFERENCES LEVELS (LEVEL_NO) ON DELETE CASCADE, FOREIGN KEY (CLASS_NO) REFERENCES CLASSES (CLASS_NO) ON DELETE CASCADE, FOREIGN KEY(SHOBA_NO,CLASS_NO) REFERENCES SHOBA(SHOBA_NO,CLASS_NO) ON DELETE CASCADE, FOREIGN KEY (NAT_NO) REFERENCES NATIONALITY (NAT_NO) ON DELETE CASCADE, FOREIGN KEY (JOB_NO) REFERENCES JOB (JOB_NO) ON DELETE CASCADE, FOREIGN KEY (RELATION_NO) REFERENCES RELATION (RELATION_NO) ON DELETE CASCADE); ------------------------------------------------------------------------------------------------------------------------------------------------------------ CREATE TABLE SUBJECT ( SUB_NO NUMBER(2), SUB_NAME VARCHAR2(20 BYTE) NOT NULL, CLASS_NO NUMBER(2), STATUS NUMBER(1), PRIMARY KEY (SUB_NO,CLASS_NO ), FOREIGN KEY (CLASS_NO) REFERENCES CLASSES (CLASS_NO) ON DELETE CASCADE); ----------------------------------------------------------------------- CREATE TABLE MONTH ( MON_NO NUMBER(2), MON_NAME VARCHAR2(20), PRIMARY KEY (MON_NO)); ------------------------------------------------------------------------------- CREATE TABLE MONTH_MARK ( WRITTING NUMBER(4) , ORAL NUMBER(4) , ACTIVE NUMBER(4) , HOMEWORKE NUMBER(4) , TOTAL NUMBER(4) , SUM_M NUMBER(4) , STUD_NO NUMBER(5), SUB_NO NUMBER(2), MON_NO NUMBER(2), CLASS_NO NUMBER(2), YEAR_NO NUMBER(3), FOREIGN KEY (MON_NO) REFERENCES MONTH (MON_NO) ON DELETE CASCADE, FOREIGN KEY (STUD_NO) REFERENCES STUDENT (STUD_NO) ON DELETE CASCADE, FOREIGN KEY (SUB_NO,CLASS_NO) REFERENCES SUBJECT (SUB_NO,CLASS_NO) ON DELETE CASCADE , FOREIGN KEY (YEAR_NO) REFERENCES YEARS(YEAR_NO) ON DELETE CASCADE, FOREIGN KEY (CLASS_NO) REFERENCES CLASSES (CLASS_NO) ON DELETE CASCADE ); ------------------------------------------------------------------------ CREATE TABLE YEAR_STUD ( REGISTER NUMBER(5), STUD_NO NUMBER(5), CLASS_NO NUMBER(2), SHOBA_NO NUMBER(2), LEVEL_NO NUMBER(5), YEAR_N NUMBER(3), PRIMARY KEY (REGISTER), FOREIGN KEY (STUD_NO) REFERENCES STUDENT (STUD_NO) ON DELETE CASCADE, FOREIGN KEY (CLASS_NO) REFERENCES CLASSES (CLASS_NO) ON DELETE CASCADE, FOREIGN KEY(SHOBA_NO,CLASS_NO) REFERENCES SHOBA(SHOBA_NO,CLASS_NO) ON DELETE CASCADE, FOREIGN KEY (LEVEL_NO) REFERENCES LEVELS (LEVEL_NO) ON DELETE CASCADE, FOREIGN KEY (YEAR_N) REFERENCES YEARS (YEAR_NO) ON DELETE CASCADE ); اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Amgad بتاريخ: 12 أكتوبر 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 12 أكتوبر 2016 السلام عليكم ورحمة الله الأخ / أسامة هزاع اعتقد ان استخدامك لأمر واحد لإسترجاع البيانات من جميع الجداول ليس هو الحل الأفضل FROM MONTH_MARK , STUDENT, YEARS, CLASSES , MONTH , SHOBA , SUBJECT فتوجد لديك امكانيات ضمن ادوات اعداد التقرير يمكن استخدامها مثل تعريف متغيرات لاسترجاع وصف البيانات مثل أسم الشهر من جدول اسماء الشهور وايضا اسم الشعبة واسم التصنيف ( اسماء الشهور اساسا لا تحتاج الى جدول لأن الشهور عددها معروف واسمائها ثابته ) اعتقد ان تصميم الجداول والعلاقات يحتاج مراجعه واليك رسمة ال erd من خلال اوامر الsql المرسلة منك ----------------- إن أمكن ارسل صورة من شاشة تجهيز البيانات لإستدعاء التقرير لأنك استخدمت four loops لتجهيز المتغيرات واعتقد انها ممكن ان تكون one loop لأنك تتعامل مع one block = go_block('year_stud'); اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Hothaifah 714 بتاريخ: 2 أكتوبر 2017 تقديم بلاغ مشاركة بتاريخ: 2 أكتوبر 2017 ترقيم تلقائي ما الخطاء declare n number; begin select max(1) into n from student; show.no:=n+1; end; اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
أسامه هزاع بتاريخ: 12 مايو 2018 تقديم بلاغ مشاركة بتاريخ: 12 مايو 2018 شكرا لك اخي امجد على مساعدتك ..ولكني قد حللت المشكلة وان شاء الله سوف ارفع الحل قريباً؟ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.