يمكنك ذلك باستعمال استعلام SQL على هذا الرابط هنــا
أو :
كود :
procedure TForm1.Button1Click(Sender: TObject);
var Majmou3: Currency;
RecordPlace: TBookmark ;
begin
(* Majmoo3 *)
RecordPlace := table1.GetBookmark;
Majmou3:=0;
table1.Active:=true;
table1.First;
while not table1.Eof Do
begin
Majmou3:= Majmou3+table1.FieldByName('Qut').AsCurrency;
table1.Next;
end;
edit1.text:=CurrToStr(Majmou3);
end;
شكرا جزيلا nabilked فعلا تعمل كما كنت **** لكن هناك مشكله حاولت حلها لكن لم استطع وهي جمع قيم شهر معين مثلا مارس فقط من سنه 2009 يعني **** ادخال اختبار اذا كان اليوم في شهر مارس فقم بجمع قيمته وان لم يكن في شهر مارس فلا وفي النهاية تاتي القيمه النهائيه لمجموع قيم الشهر.
السلام عليكم
هناك عدة طرق لحساب مجموع قيم حقل معين
لكل طريقة ما يميزها وما يعيبها
1- استعمال مكون TQuery واستغلال الاستعلام SUM
2- استعمال TClientDataSet مع TDataSetProvider (وهذا يوفر العديد الخصائص)
أعددت مثال لعرض استعمال المكون TClientDataSet في المرفقات، بحيث يظهر مجموع الحقل CustNo من أحد الجداول المرفقة مع الدلفي Customers.
إضافة المكونات عادة ما يتطلب تعريف وحدات، وبالتالي زيادة في حجم الملف التنفيذي للبرنامج
إضافة مكون بأكمله فقط من أجل حساب مجموع حقل، أمر غير مرغوب فيه
وبالتالي أُفضّل طريقة الأخ nabilkeb بارك الله فيه وجزاه خيرا، مع ملاحظة وإضافة.
الملاحظة:
من جيد تحديد الموضع الحالي في الجدول قبل عملية الحساب كما في الكود
كود :
RecordPlace := table1.GetBookmark;
لكن لا ننسى أن نعيد المؤشر إلى تلك القيمة عند نهاية العملية باستعمال GotoBookmark.
إضافة:
من الأحسن وضع الجدول في حالة تعطيل العرض عند القيام بالعملية باستعمال الإجراء DisableControls ثم إعادة تفعيل العرض بـ EnableControls.
وبالتالي يصبح الكود النهائي كما يلي:
PHP كود :
procedure TForm1.Button1Click(Sender: TObject); var Majmou3: Currency; RecordPlace: TBookmark ; begin (* Majmoo3 *) RecordPlace := Table1.GetBookmark; Majmou3:=0; Table1.Active:=true; Table1.DisableControls; Table1.First; while not Table1.Eof Do begin Majmou3:= Majmou3+table1.FieldByName('Qut').AsCurrency; Table1.Next; end; Table1.EnableControls; Table1.GotoBookmark(RecordPlace); Edit1.text:=CurrToStr(Majmou3); end;
يمكن اختصار الكود بإدارج with Table1 do ...
فتح الجدول بـ Table1.Active:=true غير ضروري هنا، يمكن العمل على جدول مفتوح مسبقا.
في الأخير أعتقد أن هناك طريقة أسهل وأفضل بإنشاء حقل تجميعي وكتابة الاستعلام SUM في الخاصية DefaultExpression لهذا الحقل، لم أتوصل إليها بعد.
لن أخوض معكم في نقاش طويل حول ماهي الطرق ومميزات كل طريقة
فالحرية للأخ السائل في اختيار الطريقة التي تناسب عمله وذلك باختيار أي حل من الحلول التي يقدمها الاخوة الاعضاء له لمساعدته.
وحتى لا يتشوش السائل بكثرة الطرق :confused:
ولكن لدي تعقيب واحد على طريقة الأخ
kachwahed
ماذا لوكان لديك مليون سجل وتريد تجميع بياناته
هل ستقوم باحضار السجلات كلها وتنقلها الى الذاكرة وتقوم بعمل تكرار للقراءة وتجميع البيانات لمليون سجل
هل تتخيل حجم اللود على الجهاز والبرنامج
عموما أفضل الحلول في رأيي هو تجميع البيانات من خلال قاعدة البيانات والقاء العبيء على محرك قواعد البيانات لأنه بالتأكيد أسرع وافضل في استرجاع البيانات والبحث عنها وتجميعها بطرقه وآلياته الخاصة وهو بالتأكيد أسرع من البرمجة.
وإذا كنت لا تريد استخدام مكون Query في كل مرة فاستخدم واحد بشكل عام بحيث تكتب فيه كل استعلام تريده وتنفذه من خلاله.