delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف اقوم بجمع قيم حقل واحد
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
بسم الله الرحمن الرحيم

السلام عليكم ورحمه الله تعالي وبركاته

كيف اقوم بجمع قيم حقل واحد اذا كانت هذه القيم عدديه في النهايه القيمة النهائيه وهي مجموع القيم الموجوده في الحقل علما باني استخدم اكسس وادو كيوري.
يمكنك ذلك باستعمال استعلام 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 يعني **** ادخال اختبار اذا كان اليوم في شهر مارس فقم بجمع قيمته وان لم يكن في شهر مارس فلا وفي النهاية تاتي القيمه النهائيه لمجموع قيم الشهر.
استخدم دالة تفكيك التاريخ بالشكل التالي ‏ decodedate‎‎(‎‎date,year,month,day)‎
ممكن توضيح بمثال لتعميق الفهم اذا امكن
nabilkeb كتب :يمكنك ذلك باستعمال استعلام SQL على هذا الرابط هنــا
الحمد لله اتضحت الفكرة لم اكن اري :eek: هذا الرابط
شكرا وبارك الله فيكم
الحل الذي قدمه العضو NabilKeb جيد ولكن به بعض العـيـوب
أولا إذا صدف وجود حقل NULL فإن البرنامج سيعطي رسالة خطأ

أفضل وأسرع الحلول هو
أفرض لديك الجدول التالي وبالانجليزي

كود :
Table A => (ID, Quantity, A_Date .....) Best Query is Select Sum(Quantity) As Tot From A Where (Quantity IS Not Null) And A_Date = DateValue
السلام عليكم
هناك عدة طرق لحساب مجموع قيم حقل معين
لكل طريقة ما يميزها وما يعيبها
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 لهذا الحقل، لم أتوصل إليها بعد.
الاعضاء الكرام Big Grin

لن أخوض معكم في نقاش طويل حول ماهي الطرق ومميزات كل طريقة

فالحرية للأخ السائل في اختيار الطريقة التي تناسب عمله وذلك باختيار أي حل من الحلول التي يقدمها الاخوة الاعضاء له لمساعدته.

وحتى لا يتشوش السائل بكثرة الطرق :confused:

ولكن لدي تعقيب واحد على طريقة الأخ

kachwahed

ماذا لوكان لديك مليون سجل وتريد تجميع بياناته

هل ستقوم باحضار السجلات كلها وتنقلها الى الذاكرة وتقوم بعمل تكرار للقراءة وتجميع البيانات لمليون سجل
هل تتخيل حجم اللود على الجهاز والبرنامج

عموما أفضل الحلول في رأيي هو تجميع البيانات من خلال قاعدة البيانات والقاء العبيء على محرك قواعد البيانات لأنه بالتأكيد أسرع وافضل في استرجاع البيانات والبحث عنها وتجميعها بطرقه وآلياته الخاصة وهو بالتأكيد أسرع من البرمجة.

وإذا كنت لا تريد استخدام مكون Query في كل مرة فاستخدم واحد بشكل عام بحيث تكتب فيه كل استعلام تريده وتنفذه من خلاله.

وتحياتي للجميع Smile

مؤمن فتحى

الف شكر
أفادكم الله موضوع جميل ومفيد
الصفحات : 1 2