إشترك

حساب إجمالي حقل معين (كود دلفي)


السلام عليكم و مرحبا بكم في درس جديد  . هذا الدرس و هو عبارة عن مقال كتابي سنقوم فيه بشرح دالة تقوم بحساب مجموع حقل ما من جدول و في البداية دعوني أشير إلى بعض النقاط المتعلقة بهذا الدرس أو هذا الكود  عموما :
  • هذه الطريقة لا تعتبر الأفضل في الحساب
  • هذه الطريقة تكون بطئية في حالة عدد كبير من السجلات
  • توجد عدة طرق أخرى للحساب مثل استعمال إستعلامات SQL
سأضع لكطم الكود في قالب مناسب على شكل دالة بسيطة لكي تستخدموها في أي برامج لديكم أو تضيفوها لمكتباتكم 
function ColSum(Table: TDataSet; ColName: String): Double;
begin
  try
    Table.DisableControls;
    Table.First;
    Result := 0;
    While not(Table.EOF) do
    begin
      Result := Result + Table.FieldByName(ColName).AsFloat;
      Table.Next;
    end;
  finally
    Table.EnableControls;
  end;
end;
الأن هذه الدالة جاهزة مباشرة للإستخدام فقط قم بنسخها و لصقها في أي وحدة تريد و إبدأ الإستخدام . طريقة الإستخدام بسيطة جدا
مثال : لديك جدول إسمه Sells و فيه حقل إسمه Total , تريد مجموع قيم الحقل Total :
ColSum(Sells,'Total'); 
 و تريد وضع النتيجة في label مثلا :
Label.caption := ColSum(Sells,'Total').Tostring;
الآن لنأتي و نتعرف على أجزائ الدالة :
أولا لدينا 2 برامتر الأول هو الجدول و يمكنك وضع الجدول الذي أردت مثلا : Fdtable,ADOTable,ADOQuery...


  • ثم تكتب إسم الحقل بشكل صحيح و هذه الدالة تنتج لنا متغير من نوع Double و يمكنك تغيير نوعه لما يناسب حالتك إذا لم تكن double توفر المطلوب
  • نأتي لعبارة الدالة أولا توجد Try ... finally  و هو في حال حدث أي مشكل في عملية الحساب يقوم بعمل تفعيل لمكونات من جديد
  • ثم بعدها نجد الأجراء DisableControls و EnableControls في الأخير ولهما دور مهم في زيادة سرعة عملية الحساب و هذا بتوقيف المكونات و تفعيلها من جديد 
  •  بعدها أستخدمت عبارة الشرط While و كان معنى الشرط هو إذا كان الجدول ليس في نهايته دعوني أصيغها بطريقة أخرى في البداية أستخدمت الكود First ‘لى الجدول لنقله للسجل الأول و بعدها قلت له بينما الجدول ليس في نهايته قم بالتالي ... و بعدها يقوم بعملية الحساب حيث ان قيمة النتيجة هي قيمتها الحالية + قيمة الحقل ثم نقول له انتقل للسجل الاخر و يكرر نفس العملية إلى أن يصل إلى نهاية الجدول EOF و هذا ببساطة كل ما في الأمر دالة بسيطة جدا و مع نتائج رائعة
في الأخير أتمنى أن يكون درس اليوم قد أعجبكم و السلام عليكم

هناك 12 تعليقًا

  1. اشكرك اخي الكريم على هذه المعلومات القيمة وانا تقريبا لديا نفس المشكلة لكن مع اختلاف بسيط

    ردحذف
  2. هل يمكنك مساعدتي؟

    ردحذف
  3. this is really nice, thanks for the information.

    ردحذف
  4. السلام عليكم
    كود جميل ، يمكن تحسينه باظافة GotoBookmark; GetBookmark للحفاظ على مؤشر السجل في مكانه بعد الانتهاء من عملية الحساب
    شكرا

    ردحذف
  5. ألسلام عليكم أخي ... لدي مشكلة في إضافة IniFiles داخل البرنامج فعند إضافته تظهر هذه اللافتة : [Pascal Erreur] login.pas(1): Impossible d'invoquer l'achèvement de code, du fait d'erreurs dans le code source أرجوا المساعدة

    ردحذف
  6. الحل باستعمال استعلام
    SELECT SUM(colName) FROM tablename

    ردحذف
    الردود
    1. الحلول كثيرة و كل مرة تحتاج حل مختلف

      حذف
  7. شكرا لك اخي على كل ما تقدمه كيف لي ان اجمع عمودين في الجدول مثلا الكية مضروبة في السعر داخل الجدول جزاك الله كل خير

    ردحذف

جميع الحقوق محفوظة لــ تعلم دلفي بالعربية 2015 ©