بتاريخ: 31 مارس 200818 سنة comment_125683 الإخوة الكرام ، تحية طيبة وبعد ،من المعروف أن العنصر Text Item أو Desplay Item يحتويان علي مجموعة خصائص Calcolation !!!ويمكننا إجراء Summary علي مستوي بلوك البيانات سواء Count, Sumation, Avirage, Maximum .... الي آخرةلكن إخواني مشكلتي متعلقة بإجراء مجاميع علي أساس شرط معين !!!بمعني ، أنا لدي جدول Emp ، هذا الجدول يحتوي علي حقل Emp_CPublic ، وهذا الحق يخزن فية 4 قيم من 1 الي 4 ، بحيث أن الحقل يمثل الحالة الإجتماعية للموظفي علي التوالي ( أعـزب - متزوج - أرمـل - مطلـق ) !!!أنا الحمد لله قمت بعرض كافة السجلات وقمت بإنشاء مجاميع مثل عدد الموظفين وإجمالي المرتبات ومتوسط المرتبات و .... الي آخرةلكن مشكلتي كيف يمكنني عرض عدد الموظفين حسب الحالة الإجتماعية كما يلي :الموظفين العزاب = 10الموظفين المتزوجون = 15الموظفين الأرامل = 3الموظفين المطلقون = 5كيف يتم ذلكأنظروا الي المرفقياريت أجد مساعدتكم وحل جزري بسيط لهذه المشكلة !!!كان بوسعي أن أستخدم جمل الـ SQL بحيث أن أجلب الإجماليات كما يلي : Select Count(*) Into :Item1 From Emp Where Emp_CPublic = 1; ولكن المشكلة أن بلوك البيانات وظيفته قراءة وكتابة وتعديل ، فإذا قام المستخدم بإجراء تعديل علي بلوك البيانات سيظل عرض الإجماليات القديمة ، وأنا أرغب في التحديث المستمرشكراً ، وجزاكم الله كل خير ، Simble.zip تقديم بلاغ
بتاريخ: 1 أبريل 200818 سنة comment_125823 السلام عليكم ورحمة الله وبركاته.أخي الكريم كل إللي هاتعمله إنك هاتعمل زرار للحفظ سواء عند عمل تعديل أو إدخال أو حذف سجل جديد، ثم تنشيء (trigger) من نوع (when_button_pressed) ثم تكتب فيه الآتي: commit; ----------- begin select count(emp_id) into :emp.count_1 from emp where emp_cpublic=1; select count(emp_id) into :emp.count_2 from emp where emp_cpublic=2; select count(emp_id) into :emp.count_3 from emp where emp_cpublic=3; select count(emp_id) into :emp.count_4 from emp where emp_cpublic=4; end; وتقريباً نفس الكود على تريجر (when_new_block_instance) والكود كالتالي: Execute_Query; begin select count(emp_id) into :emp.count_1 from emp where emp_cpublic=1; select count(emp_id) into :emp.count_2 from emp where emp_cpublic=2; select count(emp_id) into :emp.count_3 from emp where emp_cpublic=3; select count(emp_id) into :emp.count_4 from emp where emp_cpublic=4; end; ومعلش لي ملاحظه بسيطه جداً أنا واثق إنه مجرد سهو منك، وهي على تريجر الداتا بيز هو إنك تضيف (+1) بعد جملة ال (select) حتي يحدث (increment) عند الإدخال. تقديم بلاغ
بتاريخ: 2 أبريل 200818 سنة كاتب الموضوع comment_125844 الأخ الكريم ، شكراً علي ردك ،ولكن أخي ليس هذا ما أقصدة ( ومعزرتاً ) .المشكلة أخي أنني أرغب في إجراء هذه العملية علي مستوي بلوك البيانات ، وكما تعلم يمكن أن يكون بلوك البيانات يحتوي علي 20 سجل ، اما قاعدة البيانات تحتوي علي 5 سجلات فقط لا غير !!!الهدف هو بلوك البيانات نفسة !!!أرغب في إجراء مجاميع علي بلوك البيانات بشرط القيمة المدخلة بالـ List_Item ؟؟أما قاعدة البيانات فستظل ثابتة 5 سجلات !!!لكن أخي أنا لم أنكر عليك ، يمكنني إجراء هذه العملية أثناء تحميل النموذج كما ذكرت ، وبعد ذلك عند إدراج سجل جديد يتم التغيير في قيم الـ Items ، أو يتم إجراء Loop علي كافة السجلات وإجراء العملية الحسابية لكن هذه الأمور كلياً غير جيدة بالمرة !!!لذلك أرغب في إجراء حسابات مجاميع علي مثلاً عدد الموظفين حسب الحالة الإجتماعية سواء أثناء عمليات التعديل أو الحذف أو الإدراج ببلوك البيانات !!!!شكراً تقديم بلاغ
بتاريخ: 2 أبريل 200818 سنة comment_125896 السلام عليكم ورحمة الله وبركاته.أخي الكريم أشكرك على أسلوبك المهذب. أنا لم أفهم مقصدك في البدايه أعزرني. وإللي فهمته الآن إنك تريد أن تحسب هذه القيم على مستوي البلوك وليس ما هو موجود بالفعل في قاعدة البيانات أي قبل حفظها في قاعدة البيانات لتري الوضع الذي ستكون عليه البيانات بعد حفظها (الوضع المتوقع وليس الوضع الحالي). أتمنى أن يكون هذا هو مقصدك. ولعمل ذلك كل ما عليك هو أن تقوم بعمل زرار وعليه تريجر(when_button_pressed) وتكتب فيه الإتي: DECLARE Nth_of_MARRIED NUMBER(5):=0; Nth_of_SINGLE NUMBER(5):=0; Nth_of_DIVORCED NUMBER(5):=0; Nth_of_WIDOWER NUMBER(5):=0; Nth_OF_LAST_RECORD VARCHAR2(10); BEGIN go_block('emp'); last_record; Nth_OF_LAST_RECORD:=:SYSTEM.CURSOR_RECORD; go_record(1); FOR I IN 1..Nth_OF_LAST_RECORD LOOP IF :EMP_CPUBLIC=1 THEN Nth_of_SINGLE:=Nth_of_SINGLE+1; ELSIF :EMP_CPUBLIC=4 THEN Nth_of_DIVORCED:=Nth_of_DIVORCED+1; ELSIF :EMP_CPUBLIC=3 THEN Nth_of_WIDOWER:=Nth_of_WIDOWER+1; ELSIF :EMP_CPUBLIC=2 then Nth_of_MARRIED:= Nth_of_MARRIED+1; end if; next_record; end loop; -------------------------------- :count_1:=Nth_of_SINGLE; :count_2:=Nth_of_MARRIED; :count_3:=Nth_of_WIDOWER; :count_4:=Nth_of_DIVORCED; :count_5:=Nth_of_SINGLE+Nth_of_MARRIED+Nth_of_WIDOWER+Nth_of_DIVORCED; go_record(Nth_OF_LAST_RECORD); END; أخي الكريم بعد عمل أي تعديل أو حذف أو إضافة سجل والضغط على هذا الزرار سوف تظهر لك ما سوف تكون عليه قاعدة البيانات إذا قمت بالحفظ. بلغني بالنتيجه إذا تكرمت. تقديم بلاغ
بتاريخ: 3 أبريل 200818 سنة كاتب الموضوع comment_125961 شكراً أخي علي حسن تعاونك معي !!بس بصراحة ( وآسف آسف جداً ) أنا كنت منتظر كود أو خاصية مباشرة ، أما موضوع الـ Loop علي الـ Records فأشكرك علية فأنا بصراحة كن أعرفها .علي العموم أخي إظاهر أن ليس هنام مفر من الأكواد !!!بس بصراحة الأكواد هنا أبسط بكثير من الفيجوال 6.0 ، حيث أنني إذا كنت أحببت أن أصنع مثل الـ LOV لا بد أن أنشأ مكتبة DLL كاملة للـ Browser ، او يمكن يكون لأنني في بدايتي مع الديفيلوبار فالموضوع شاددني شوية ( الله أعلم ) !!!شكراً مرة أخري ، وآسف علي الإزعاجوجزاك الله كل خير ويارب دايماً بالتوفيقلا اله الا الله محمد رسول الله تم تعديل 3 أبريل 200818 سنة بواسطة MMA تقديم بلاغ
بتاريخ: 5 أبريل 200818 سنة comment_126045 السلام عليكم ورحمة الله وبركاته.أخي الكريم لا يوجد إزعاج مطلقاً من كلامك. أنا فاهم قصدك من موضوع أن نقلل الكود على قد ما نقدر بس أحياناً لا يكون هناك مفر منه. عموماً أنا سوف أبحث إذا كانت هناك طريقه أخرى من خلال خصائص الفورم الجاهزه التي تصنع هذا بدون كود. بالنسبه لموضوع ال lov وإنشاء مكتبة DLL هل تقوم بذلك في الفورم أم أنك قصدت الفيجوال؟ ذلك لأن هناك طريقه سهله وبدون كود كبير لإنشاء ال lov داخل الفورم . أخي الكريم واضح أن تفكيرك عملي ناحية كتابة الأكواد وأنك تراعي ال resources حتى لا تعمل تحميل أثناء تشغيل الفورم . أتمنى وإياي أن نحترف كتابة الكود من خلال هذا المنطلق. وفقك الله وإيانا. تقديم بلاغ
بتاريخ: 5 أبريل 200818 سنة كاتب الموضوع comment_126050 بالنسبه لموضوع ال lov وإنشاء مكتبة DLL هل تقوم بذلك في الفورم أم أنك قصدت الفيجوال؟ لا يا أخي ، أنا أوضح ماذا كنت أفعل بالفيجوال ، فالأوراكل يمكننا إستخدام الـ LOV لعرض نافذة سريعة للبحث ، اما الفيجوال فكنت أصنع هذه الشاشة بنفسي وليست جاهزة ، ولكن إذا أحسست أن هناك شاشات متكررة أو عناصر متكررة كنت أصنع بيدي مكتبات DLL و عناصر OCX لهدف عدم التكرار وإجراء خدمات معينة حتي لا أكرر أكواد ( اتمني أن تكون فهمت ما أقصدة ) !!!علي العموم أنا آسف لذكر الفيجوال ، لكن كان هدفي التوضيح فقط لا غيرعلي كلٍ ياريت تبحث معي عن هذه الميزة ، أو يجوز ان هناك أفضل منهاشكراًوجزاك الله كل خير تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.