delphi4arab منتديات دلفي للعرب
ماهي افضل طريقة للعمليات الحسابية - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : ماهي افضل طريقة للعمليات الحسابية (/showthread.php?tid=2272)



ماهي افضل طريقة للعمليات الحسابية - medreg - 07-08-2010

السلام عليكم ورحمة الله تعالى وبركاته
ماهي احسن طريقة تستعمل في العمليات الحسابية
انا معتاد على هذه الطريقة لكني اجدها تقيلة نوعا ما
هل من طريقة اخرى احسن واسرع
الطريقة التي استعملها الآن هي كالتالي
كود :
table1.first; while not table1.eof do begin table1.edit; table1MT_TOT.Value:=table1MT_01.value * table2Tx.value/100; table1.post; table1.next; end;
ارحو ان اكون قد وفقت في العنوان المناسب للموضوع


ماهي افضل طريقة للعمليات الحسابية - Lam.Abdeldjalil - 07-08-2010

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


شخصيا أفضل طريقة الحقل المحسوب (Calculated )
'الحقل المحسوب لا يوضع في القاعدة'
للعمل بها إتبع :
قم بإضافة حقل من نوع Calculated في الجدول كما في الصورة
[صورة: sanstitrehsg.jpg]
* إضغط مرتين على الجدول ( Table.. )
1- إضغط باليمين على النافذة الظاهرة
2 - إختر NewField

تظهر لك نافذة أخرى كما في الصورة
- أكتب إسم الحقل
- أختر نوع المتغير
- نوع الحقل Calculated
Ok

أضف كود الحساب في الحدث OnCalcFields الخاص بالحول المستعمل بالشكل التالي
كود :
procedure TDataM.Table1CalcFields(DataSet: TDataSet); begin table1calcField.Value:=table1MT_01.value * table2Tx.value/100; end;
جرب و لاحظ الفرق

بالتوفيق


ماهي افضل طريقة للعمليات الحسابية - medreg - 07-08-2010

شكرًا سأجرب وارد عليك لاحقًا


ماهي افضل طريقة للعمليات الحسابية - kachwahed - 07-08-2010

إقتباس :الطريقة التي استعملها الآن هي كالتالي
شيء آخر، أضف إليها:
كود :
table1.DisableControls; table1.first; ... end; table1.EnableControls;
تصبح أسرع.



ماهي افضل طريقة للعمليات الحسابية - medreg - 07-08-2010

اخي شكرا لكم على هذه المعلومة القيمة
كنت عللى وشك ان اسأل هل تعمل على كل السجلات دفعة واحدة ام الواحد تلوا الأخر
وها انت تفاجءني بهذه الإضافة والتي ربما هي التي كنت على وشك السؤال عنها
اخي اين اضع هذا الكود من فضلك
هل تقصد هكذا
PHP كود :
procedure TDataM.Table1CalcFields(DataSet: TDataSet);
begin
table1
.DisableControls;
table1.first;
table1calcField.Value:=table1MT_01.value * table2Tx.value/100;
end;
table1.EnableControls;
end; 



ماهي افضل طريقة للعمليات الحسابية - Lam.Abdeldjalil - 07-08-2010

1- بالنسبة للطريقة المعطاة من طرف الأستاذ kachwahed

أي أضف في كودك الأول دون إستعمال الطريقة الثانية
يصبح الكود كالتالي
كود :
table1.DisableControls; table1.first; while not table1.eof do begin table1.edit; table1MT_TOT.Value:=table1MT_01.value * table2Tx.value/100; table1.post; table1.next; end; table1.EnableControls;
2- بالنسبة للطريقة 1 Calculated

فقط تأكد من الخاصية AutoCalcFields بقيمة true

الحساب يقام به أوتوماتيكيا بعد الفتح / التعديل / الإضافة

لا تنسى فقط الكود
كود :
procedure TDataM.Table1CalcFields(DataSet: TDataSet); begin table1calcField.Value:=table1MT_01.value * table2Tx.value/100; end;
بالتوفيق


ماهي افضل طريقة للعمليات الحسابية - medreg - 07-08-2010

اخي انا قمت بوضع الكود الذي اعطيتني ورايت النتيجة فعلا شيء رائع
لكن انا كنت اتساءل بالنسبة للعملية على عدة سجلات دفعة واحدة
كيف يمكن فعل ذلك
على ان تكون العملية اسرع وحتى في عملية جمع عمود في الديبقريد


ماهي افضل طريقة للعمليات الحسابية - Lam.Abdeldjalil - 07-08-2010

إقتباس :لكن انا كنت اتساءل بالنسبة للعملية على عدة سجلات دفعة واحدة
كيف يمكن فعل ذلك
الكود السابق يقوم بها جرب مع عدة تسجيلات وسوف ترى
فالحدث OnCalcFields يقوم بحساب جميع الحقول الحسابية في جميع الأسطر

بالنسبة لـ :

إقتباس :عملية جمع عمود في الديبقريد
أفضل طريقة Sql


بالتوفيق