بتاريخ: 23 أغسطس 200817 سنة comment_136871 السلام عليكم لدي قاعدة بيانات كبيرة بالاوراكل واحتاج لعمل تقارير يومية وشهرية وسنوية ويتم في التقارير اليومية عرض عدد سطور Rows قد يصل إلى 50 الف سطر واستخدم معادلات مختلفة للحصول على البيانات الختلفة .ولاحظت وجود العديد من البرامج التي تقوم باصدار التقارير مثل Oracle Developer Report, Excel,Cristal Report,QLR Manager, DBxtraوانا حالياً استخدم الاكسل لصناعة التقارير بربطة مع الاوراكل ولا اجده مناسب لذلك .وسؤالي اي البرامج الافضل والاقوى والموثوق لعمل تقارير كبيره ؟؟ارجو من كل من جرب هذه التقارير اوغيرها بادلاء رأية كي نستفيد !! تقديم بلاغ
بتاريخ: 23 أغسطس 200817 سنة comment_136903 تقارير الديفيلوبار قوية جداً ، بس مش معني كدة أن الباقي مش قوي !!!كل شيء له إستخداماتة ... وطالما أنت تعامل مع قاعدة ونماذج الأوراكل ، فشيء طبيعي أنك لازم تتعامل مع تقارير الديفيلوبار !!!دة غير أن معظم الشركات بتطالب بيةبص يا أخي ،الإكسيل والأكسيس أدوات قوية جداً بس في حدود الـ 2 جيجا الي بيشيلهم من البيانات ..... أما الكريستال آداة قوية جداً ،ونستخدمها منز فترات طويلة ، وتعرضت الي تحديثات كثيرة ، بس هي ممتازة مع لغات البرمجة ، اما لو كنت بتستخدم الديفيلوبار فهتكون مقرفة بعض الشيء .... الديفيلوبار كذلك آداة ممتازة ، بس هتكون أفضل لك من الكريستال ، لأن برمجتها متوافقة مع الأوراكل .... لذلك أفضل شيء هو إستخدام تقارير الديفيلوبار ، ما دامت متوافقة مع الأوراكل .هناك شيء آخر أحب أن أذكرة لك :السرعة الحقيقية لتقريرك هو زكائك الشخصي !!!منها مثلاً أنك متحاولش تعرض البيانات مرة واحد كما كنا نفعل مسبقاً في الكريستال والفيجوال 6.0 ... حاول تستخدم إمكانيات التقارير وليس البرمجة الخارجية ... منها مثلاً هلك قوة التقرير بزيادة الـ Functions التي تستخدم العديد من الدوارة Loop بالتوفيقبالتوفيق تقديم بلاغ
بتاريخ: 24 أغسطس 200817 سنة comment_136936 السلام عليكمهل يمكن عمل تقارير مبني على cursorمثلا ممكن اقوم بعمل عرض بيانات بطريقة ما على sql plus و لكن اريد بناء تقارير مبني على cursorارجو التوضيح تقديم بلاغ
بتاريخ: 24 أغسطس 200817 سنة comment_136980 هو أفضل شيء أنك تحاول علي قدر المستطاع أنك متستخدمش جملة الـ Loop في بناء التقارير ، ولو إستخدمتها تبقي علي الأقل ضامن ضمان مؤكد أن جملة الـ Loop لا تؤثر علي سرعة عرض التقرير !!!لو إستخدمت Cursor شيء طبيعي أنك هتستخدم جملة Loop علشان تمر علي جميع السجلات المرتجعة ومن ثم ترتجع البيانات للمستخدم ( في الآخر ) . لكن لو مثلاً قمت بالربط مع Tables أو Views دة هيكون أسرع . لأن الجدول أو العارض في حد ذاتة لا يقوم بإجراء Loop إلا علي أساس المرور علي صفحة صفحة ، وطبعاً لو كان المستخدم عايز يذهب الي آخر صفحة شيء طبيعي أنه سيتم عرض نافذة توضح عدد الصفحات وعدد السجلات التي تم المرور عليها حتي الآن ... لكن لو Loop هيؤدي الي حودث توقف للتقرير مؤقت لحين الإنتهاء من جملة الـ Loop ، وبعد كدة يرجع تاني يعرض صفحة صفحة .لكن أسمح لي أن نتحدث عن شيء آخر ... مينفعش تستخدم الـ Cursor مهما كان نوعها ( Cursor, RefCursor ) مباشرتاً ، لكن يجب عليك إرتجاعة في صورة Table علشان تقدر تستخدمة كجدول أو عارض صالح الربط ... ولكي يتم هكذا يجب عليك إستخدمام Object Type ... أنظر : CREATE OR REPLACE TYPE O_EMP IS OBJECT (EMPNO NUMBER(4), ENAME VARCHAR(10), SAL NUMBER(7,2); / CREATE OR REPLACE TYPE T_EMP IS TABLE OF O_EMP; / CREATE OR REPLACE FUNCTION GET_EMP RETURN T_EMP AS TYPE CUR_EMP IS REF CURSOR; ID_NO NUMBER(5); ID_NAME VARCHAR2(15); ID_SAL NUMBER(10,3); P_RETURN T_EMP := T_EMP(); BEGIN OPEN CUR_EMP FOR SELECT EMPNO, ENAME, SAL FROM EMP ORDER BY EMPNO; FETCH CUR_EMP INTO ID_NO, ID_NAME, ID_SAL; WHILE CUR_EMP%FOUND LOOP P_RETURN(P_RETURN.COUNT) := O_EMP(ID_NO,ID_NAME,ID_SAL); FETCH CUR_EMP INTO ID_NO, ID_NAME, ID_SAL; END LOOP; CLOSE CUR_EMP; RETURN P_RETURN; END; / لاحظ في الكود السابق ، أنا إستخدمت Function لكي يرتجع كل سجلات الموظفين ... وبالطبع أستخدمت جملة Loop ... فلو أستدعيت هذا الغرض سيقوم بإنهاء جملة الـ Loop أولاً وبعد ذلك يقوم بعرضه بالتقرير ، رغم أنني جعلته يرتجع 5 موظفين فقط كما يلي : Select * From Table(Get_Emp) Where EmpNo Between 10 And 15; أممممممممممممستقل أن أفضل شيء أنك تعمل باراميتر يحدد السجلات المطلوبة ... هقل لك أن هذا صحيح بس أنا بتحدث عن شيء آخر ... لو كان مثلاً شركة لديها جدول يمثل فاتورة المبيعات ... ويومياً بيسجل حوالي 50000 فاتورة ، عارف في آخر السنة سيكون عدد السجلات كام !!!بلاش كدة ، عارف أن مثلاً لو حبيت أرتجع فواتير اليوم ماذا سيحدث ، سيؤدي الي توقف البرنامج فترة ( حتي ولو لثواني معدودة ) ، فكلما زادت البيانات كلما حدث بطأ لبرنامجك . دة غير طبعاً كمية الحسابات التي تحتوي عليها ( جمع - طرح - قسمة - مجاميع - بيانات تفاصيل الفاتورة - ............... الي آخرة ).عموماً الـ Cursor مينفعش إلا بشروط خاصة ... وأفضل شيء هو جمل الإستعلام بالجداول المباشرة أو إنشاء عوارض Views داخل القاعدة .بالتوفيق تقديم بلاغ
بتاريخ: 24 أغسطس 200817 سنة comment_136988 الســـلام عليكم اخي الكريم مصطفىشكرا على سرعة الردسبب سؤوالي على موضوع الcursor احيانات pl-sql اكثر قوم في حساب عملية داخل تقريراما بالنسبة للعوارض views قرأت في هذا المنتدى ان له عيوب فماذا الحل اذناحد الاحوة قال ان التقارير المبنية على Views بطيئةفكيف في هذه الحالة احل مشكلة التقارير المبنية على عوارضكذلك هل ممكن في شاشة النموذج اقوم بعمل cursor يقوم بعمل delete ثم insert في جدول مؤقت temp table و بعد ذلك اقوم بعرض البيانات الموضوع في هذا الجدول المؤقت داخل التقرير ؟ام هناك بطئ من استخدام هذه الطريقة؟ تقديم بلاغ
بتاريخ: 24 أغسطس 200817 سنة comment_137001 سبب سؤوالي على موضوع الcursor احيانات pl-sql اكثر قوم في حساب عملية داخل تقرير أنا لم أتحدث عن PL لكنني أتحدث علي الـ Loop خصوصاً لو كانت البيانات كبيرة اما بالنسبة للعوارض views قرأت في هذا المنتدى ان له عيوب فماذا الحل اذناحد الاحوة قال ان التقارير المبنية على Views بطيئةفكيف في هذه الحالة احل مشكلة التقارير المبنية على عوارض هو صحيح الـ View ضعيف في بعض الشيء ، بس قوي في التقارير ، وأهم شيء فية أنه مبيعملش Loop علي كل السجلات قبل عملية العرض ، ولكنة يعرض أول مجموعة سجلات تمثل صفحة أول صفحة للتقرير ... وبعدين التقرير قادر علي العرض الفوري وعرض رسالة تحميلية !!!لكن اخي ، أسوأ شيء هو أنك متحولش حقول الجدول الي صفحات بإستخدام الـ Indexs ... الفهرسة في حد ذاتها بتساعدك علي زيادة سرعة القراءة .لكن عيب الـ View الحقيقي أنك مبتأدرش تعدل في بياناته إلا في حالات واحدة لو كان عرض السجلات مباشر ولا يحتوي علي حقول محسوبة أو مجاميع Group By .كذلك هل ممكن في شاشة النموذج اقوم بعمل cursor يقوم بعمل delete ثم insert في جدول مؤقت temp table و بعد ذلك اقوم بعرض البيانات الموضوع في هذا الجدول المؤقت داخل التقرير ؟ام هناك بطئ من استخدام هذه الطريقة؟ يا خبر !!!يعني مثلاً تعمل جدول إسمة tmp_emp وتدرج له الحقول المناسبة ، ومن ثم تصنع Cursor ثم Loop علية ومن ثم تدرج كل السجلات المرتجعة فقط لا غير ... بكدة متحلتش المشكلة !!!جرب الكود التالي :Create Table Employee ( Employee_ID Number(10), Employee_Name VarChar(30), Constraint PK_EmployeeID Primary Key(Employee_ID), Constraint UQ_Employee_Name Unique(Employee_Name) ) / Set ServerOutput On; declare x number; begin dbms_output.put_line(to_char(sysdate,'hh24:mi:ss')); for x in 1 .. 500000 loop insert into employee values(x,x); end loop commit; dbms_output.put_line(to_char(sysdate,'hh24:mi:ss')); end; / هتلاقي أن فترة الـ Loop طويلة ، هي أخذت لدي حوالي 5 دقائق !!!بس أنا عايزك تجربها عندك وتخبرني بالنتيجة أوك !!!وحاول كمان تنفذ الكود التالي وتخبرني بالنتيجة : Set ServerOutput On; Begin dbms_output.put_line(to_char(sysdate,'hh24:mi:ss')); Delete From Employee; dbms_output.put_line(to_char(sysdate,'hh24:mi:ss')); End; / عموماً لازم تعرف ان أفضل شيء لعملية الحذف والإدراج هو إما إستخدام الشرط بحيث أن يتم حذف مجموعة قليلة من السجلات ( علشان لا يأخذ وقت طويل أكثر من اللازم ) ... أو تحذف سجل سجل من خلال Timer ... صحيح سيأخذ وقت طويل جداً ، بس هيكون أفضل من متوقف برنامجك ... في هذا الوقت تعمل شاشة بها Bar يوضح بداية ونهاية البرنامج من عملية الحذف ( كلافتة ينظر فيها المستخدم Please Wait ) .بس السؤال ، ما حل هذه المشكلة المقرفة !!!أفضل شيء أنك تحول بياناتك من جدول الي جدول آخر أفضل شيء أنك تحول البيانات من الجدول أثناء إجراء Create Table ، أما لو كنت عايز تحذف السجلات فدي هتأخذ وقت طويل عند إستخدام Delete ، بس أمر Drop أسرع بكثير ، كما يلي : Set ServerOutput On; Declare ID_Count Number; Begin dbms_output.put_line(to_char(sysdate,'hh24:mi:ss')); Select Count(*) Into ID_Count From Tab Where TName = 'TMP_EMPLOYEE'; If(ID_Count > 0)Then Execute Immediate 'Drop Table tmp_employee'; End If; Execute Immediate 'Create Table tmp_Employee As Select * From Employee'; dbms_output.put_line(to_char(sysdate,'hh24:mi:ss')); End; / ودي أحلي ما فيها أنها لا تقوم بإجراء Loop ولا شيء ، لأن دة مجرد ملف هيتم نقلة بشرط معين ... زي تقريباً جملة الـ Select ، مجرد بيحدد الشرط وبس ... أما في حسالة Drop Table فهذا أيضاً لا يقم بإجراء Loop ، لأنه مجرد حذف ملف ... وعلي فكرة أخذت هذه الجملتين Drop Table و Create Table علي جدول يحتوي علي 500.000 سجل ، فإنتهي من عملية التنفيذ بعد حوالي 2.5 ثانيةبس ركز دي فيها أهم مشكلة ....................... السيرفر !!!!!!!!!!!!!!!!!!!!!!!!!!!!يعني مثلاً مش هتقدر تحزف جدول مفتوح من قبل مستخدم آخر ( ركز ) !!!!!!جرب وأخبرني ...... متنساش أخبرنيبالتوفيق تقديم بلاغ
بتاريخ: 24 أغسطس 200817 سنة كاتب الموضوع comment_137003 شكراً اخي MMA على ردك السريع وهل يمكن باستخدام الديفلوبر ان اعرض التقارير على صفحة الانتر نت لان التقارير الي اصدرها لازم يطلع عليها عدد كتير من الاشخاص المعنيين وغير ممكن تنزيل الديفلوبر على الجميع تقديم بلاغ
بتاريخ: 24 أغسطس 200817 سنة comment_137005 السلام عليكم اخي الكريمشكرا على سرعة الردالعملية اخذت اقل من دقيقة 14:44:57 14:45:50 PL/SQL procedure successfully completed. اما كود الحذف فاكانت التيجة كالاتي: 14:49:14 14:50:45 PL/SQL procedure successfully completed. اخي الكريم كان الغرض من السوؤال الاتيانا هناك برنامج خاص بالمخازن و كنت عند حركة اضافة او صرف لصنف (كنت عامل جدول اخر سميته sanf_card اي كارت الصنف) و هو سجل كل حركة مع الرصيد التراكمي لنفس الحركة بحيث عند عمل تقرير يتم عمل حركة الاضافة و الصرف و الرصيد التراكميهذا الحل ممتاز لاني لن استخدم العوارض و لكن سوف استخدم تقرير مبني على جدول بدون اي اكواد و النتيجة مبهرةو لكن المشكلة ماذا اذا قام بتعديل حركة صنف قديمة منذ شهر مثلا هنا البرنامج لن يسجل الرصيد التراكمي السليم حيث الرصيد الحالي سوف يسجل مرة اخرة في فاتورة المبيعات مثل المراد تعديلها بتاريخ شهر سابقلذا كان سوؤالي عن cursor حيث كنت استطيع عمل الرصيد التراكمي عن طريق loopارجو ان تكون وصلتلك المشكلة ارجو ان تنظر الي مشروع المخازن و تقول رأيك و تنقض مع التوصيه و المساعدة تقديم بلاغ
بتاريخ: 24 أغسطس 200817 سنة comment_137006 أنا بتعامل مع ديفيلوبار 6 وللأسف لا أعلم كيف يتم عرضها علي صفحة ويب !!!أعتقد أن هذه الميزة موجودة ضمن Oracle 10g وليس Oracle 6i, 9i !!!أنا آسف ، بجد معرفش !!!!أم أنك ترغب في رفعها علي الويب ؟؟؟ تقديم بلاغ
بتاريخ: 25 أغسطس 200817 سنة كاتب الموضوع comment_137101 بظبط اخي MMA عايز طريقة على الويب او اي طريقة ممكنه بحيث يمكن استعراض التقارير على الشبكة الداخلية وما اضطر لتنزيل اي برامج اضافية لعرض التقارير تقديم بلاغ
بتاريخ: 26 أغسطس 200817 سنة comment_137163 بظبط اخي MMA عايز طريقة على الويب او اي طريقة ممكنه بحيث يمكن استعراض التقارير على الشبكة الداخلية وما اضطر لتنزيل اي برامج اضافية لعرض التقارير أولاً ، أنا آسف جداً علي التأخير ،ثانياً ، لو كنت عايز تصنع صفحات ويب وترفعها علي موقع معين ... فهنا أقل لك يجب عليك دراسة بعض المناهج الخاصة بالويب سايت مثل HTML لتصميم الصفحات و ASP أو ASP.Net و VB Or J Script !!!الموضوع يحتاج منك الذهاب الي المنتديات المتخصصة في تصميم صفحات الويب مثل ( الفريق العربي للبرمجيات ) !!!عموماً عناك في قسم الـ Application و المشروعات مجموعة من الأمثلة والتمارين والمشروعات المصنوعة بالويب سايت خصوصاً الـ ASP.Net بالتوفيق تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.