25-03-2009, 07:58 AM
السلام عليكم
هناك عدة طرق لحساب مجموع قيم حقل معين
لكل طريقة ما يميزها وما يعيبها
1- استعمال مكون TQuery واستغلال الاستعلام SUM
2- استعمال TClientDataSet مع TDataSetProvider (وهذا يوفر العديد الخصائص)
أعددت مثال لعرض استعمال المكون TClientDataSet في المرفقات، بحيث يظهر مجموع الحقل CustNo من أحد الجداول المرفقة مع الدلفي Customers.
إضافة المكونات عادة ما يتطلب تعريف وحدات، وبالتالي زيادة في حجم الملف التنفيذي للبرنامج
إضافة مكون بأكمله فقط من أجل حساب مجموع حقل، أمر غير مرغوب فيه
وبالتالي أُفضّل طريقة الأخ nabilkeb بارك الله فيه وجزاه خيرا، مع ملاحظة وإضافة.
الملاحظة:
من جيد تحديد الموضع الحالي في الجدول قبل عملية الحساب كما في الكود
لكن لا ننسى أن نعيد المؤشر إلى تلك القيمة عند نهاية العملية باستعمال GotoBookmark.
إضافة:
من الأحسن وضع الجدول في حالة تعطيل العرض عند القيام بالعملية باستعمال الإجراء DisableControls ثم إعادة تفعيل العرض بـ EnableControls.
وبالتالي يصبح الكود النهائي كما يلي:
يمكن اختصار الكود بإدارج with Table1 do ...
فتح الجدول بـ Table1.Active:=true غير ضروري هنا، يمكن العمل على جدول مفتوح مسبقا.
في الأخير أعتقد أن هناك طريقة أسهل وأفضل بإنشاء حقل تجميعي وكتابة الاستعلام SUM في الخاصية DefaultExpression لهذا الحقل، لم أتوصل إليها بعد.
هناك عدة طرق لحساب مجموع قيم حقل معين
لكل طريقة ما يميزها وما يعيبها
1- استعمال مكون TQuery واستغلال الاستعلام SUM
2- استعمال TClientDataSet مع TDataSetProvider (وهذا يوفر العديد الخصائص)
أعددت مثال لعرض استعمال المكون TClientDataSet في المرفقات، بحيث يظهر مجموع الحقل CustNo من أحد الجداول المرفقة مع الدلفي Customers.
إضافة المكونات عادة ما يتطلب تعريف وحدات، وبالتالي زيادة في حجم الملف التنفيذي للبرنامج
إضافة مكون بأكمله فقط من أجل حساب مجموع حقل، أمر غير مرغوب فيه
وبالتالي أُفضّل طريقة الأخ nabilkeb بارك الله فيه وجزاه خيرا، مع ملاحظة وإضافة.
الملاحظة:
من جيد تحديد الموضع الحالي في الجدول قبل عملية الحساب كما في الكود
كود :
RecordPlace := table1.GetBookmark;إضافة:
من الأحسن وضع الجدول في حالة تعطيل العرض عند القيام بالعملية باستعمال الإجراء 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 لهذا الحقل، لم أتوصل إليها بعد.

