حساب مجموع قيم في dbgrid
#1
بسم الله الرحمان الرحيم :

أبحث عن طريقة لحساب مجموع قيم موجودة بين خانتين في عمود في dbgrid .. نوع البيانات أعداد صحيحة
جربت between في sql لكن لم تنفع لأن معطياتها كمعطيات الحصر و القيم التي في جدول ليست مرتبة ترتيبا تصاعديا إنما قيم عشوائية .
عندما أضغط على خانة ثم أضغط على خانة أخرى تظهر نتيجة مجموع القيم الموجودة في الخانات التي بين الخانتين في edit .
مثلا لدي عمود في dbgrid يحتوي على قيم مرتبة هكذا 5,2,1,6,7,4,2,3 و عندما أضغط على الخانة التي بها رقم 2 ثم الخانة التي بها رقم 7 تظهر النتيجة 13 في edit .

و شكرا
الرد
#2
[INDENT]
استعمل الحقل الحسابي calculated field.
وانظر غلى هذا الموضوع مع تشعباته :
كيف يتم حساب عمود حقل حسابي بدون استخدام while
[/INDENT]
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#3
لا يا أخي ليس هذا ما أبحث عنه إنما أبحث عن حساب مجموع حقول معينة و لا يهمني بال while أو غير ذلك و لقد شرحت كل شيء في سؤالي .
شكرا جزيلا على الرد .
الرد
#4
live05 على الاقل حاول واطرح محاولتك .
هذه محاولة اكتبها فى الحدث CellClick ل DBGrid

PHP كود :
const
 {
$J+}
  
FirstPos : Integer = -1;
  
LastPos  : Integer = -1;
 {
$J-}
var
  
I: Integer;
  
SumValue: Integer;
  
X, Y: Integer;
begin
  
if Column.Field.DataType <> ftInteger then
  
Exit;

  
SumValue := 0;
  if 
FirstPos = -1 then
    FirstPos 
:= Column.Field.DataSet.RecNo
  
else
  
LastPos := Column.Field.DataSet.RecNo;
  if (
FirstPos <> -1)and(LastPos <> -1) then
  begin
    X 
:= Math.Min(FirstPos, LastPos);
    
Y := Math.Max(FirstPos, LastPos);

    
Column.Field.DataSet.RecNo := X;
    for 
I := 0 to (Y - X) do
    
begin
      SumValue 
:= SumValue + Column.Field.AsInteger;
      
Column.Field.DataSet.Next;
    
end;
    
Column.Field.DataSet.RecNo := Y;
    
ShowMessage('Sum For '+IntToStr(Y - X + 1) + ' Record = ' +IntToStr(SumValue));
    
FirstPos := -1;
    
LastPos := -1;
  
end;
end; 
الرد
#5
شكرا جزيلا على مساعدتك أخي hanipino هذا بالضبط ما أبحث عنه ..
و قد ذكرت بأنني حاولت بال between في sql أضن بأن طريقة محاولتي كانت واضحة و لم يكن داعي لذكرها .

و أحب أن أنوه أيضا إن سمحت لي بأنه في الكود الذي كتبته ينقص شيء صغير فقط و هو
يجب كتابة math في uses حتى لا تظهر أي رسالة خطأ ويكون الكود كاملا و الكمال لله .

عدا هذا لك جزيل الشكر و أدعوا الله أن يجعله في ميزان حسناتك .

و لدي محاولة أيضا ليست جيدة بقدر طريقتك لكن سأذكرها لربما احتاج لها شخص آخر :
و هي استعمال JvDBGrid بدلا من dbgrid و ذلك لتفعيل خاصية multiselect = true
وهذه الخاصية تسمح بتحديد العديد من الأسطر بإستعمال shift أو ctrl مع زر الماوس الأيسر
ثم كتابة الكود التالي في button أو لمن يريد وضعه في CellClick عليه القيام ببعض التعديلات
تم تظهر النتيجة في edit و الكود كالتالي :
كود :
var i: Integer; sum : Single; begin if jvDBGrid1.SelectedRows.Count > 0 then begin sum := 0; with jvDBGrid1.DataSource.DataSet do begin for i := 0 to jvDBGrid1.SelectedRows.Count-1 do begin GotoBookmark(Pointer(jvDBGrid1.SelectedRows.Items[i])); sum:=sum+table1.FieldByName('total').AsFloat; end; end; edit1.Text := FloatToStr(sum); end end;
الرد
#6
أبحث عن طرقة لإستخراج مجموع عمود في Dbgrid لقد أستعملت الحساب عن طريق sql لكن لايعطيني القيمة المطلوبة على أساس أنني أعمل بقاعدتين للبيانات Maitre و detail و قد أستعملت عدة طرق لكن لم أتوصل للنتيجة الحقيقية مثال على ذلك حين أنتهي من حجز بيانات ممون رقم 11 يعطيني نتيجة الممون رقم 1 هذ ا هو الكود Sql
select F1."Numfact", sum(F1."Montant") as "sumMontant"
from "Facture" F1
where (F1."Numfact")=Numfact
group by F1."Numfact"
وبرك الله فيكم
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم