مشاهدة النسخة كاملة : ماهي افضل طريقة للعمليات الحسابية
medreg
07-08-2010, 12:47 PM
السلام عليكم ورحمة الله تعالى وبركاته
ماهي احسن طريقة تستعمل في العمليات الحسابية
انا معتاد على هذه الطريقة لكني اجدها تقيلة نوعا ما
هل من طريقة اخرى احسن واسرع
الطريقة التي استعملها الآن هي كالتالي
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, 01:19 PM
و عليكم السلام و رحمة الله و بركاته
شخصيا أفضل طريقة الحقل المحسوب (Calculated )
'الحقل المحسوب لا يوضع في القاعدة'
للعمل بها إتبع :
قم بإضافة حقل من نوع Calculated في الجدول كما في الصورة
http://img696.imageshack.us/img696/3223/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, 01:41 PM
شكرًا سأجرب وارد عليك لاحقًا
kachwahed
07-08-2010, 01:48 PM
الطريقة التي استعملها الآن هي كالتالي
شيء آخر، أضف إليها:
table1.DisableControls;
table1.first;
...
end;
table1.EnableControls;
تصبح أسرع.
medreg
07-08-2010, 01:55 PM
اخي شكرا لكم على هذه المعلومة القيمة
كنت عللى وشك ان اسأل هل تعمل على كل السجلات دفعة واحدة ام الواحد تلوا الأخر
وها انت تفاجءني بهذه الإضافة والتي ربما هي التي كنت على وشك السؤال عنها
اخي اين اضع هذا الكود من فضلك
هل تقصد هكذا
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, 02:09 PM
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, 02:14 PM
اخي انا قمت بوضع الكود الذي اعطيتني ورايت النتيجة فعلا شيء رائع
لكن انا كنت اتساءل بالنسبة للعملية على عدة سجلات دفعة واحدة
كيف يمكن فعل ذلك
على ان تكون العملية اسرع وحتى في عملية جمع عمود في الديبقريد
Lam.Abdeldjalil
07-08-2010, 02:23 PM
لكن انا كنت اتساءل بالنسبة للعملية على عدة سجلات دفعة واحدة
كيف يمكن فعل ذلكالكود السابق يقوم بها جرب مع عدة تسجيلات وسوف ترى
فالحدث OnCalcFields يقوم بحساب جميع الحقول الحسابية في جميع الأسطر
بالنسبة لـ :
عملية جمع عمود في الديبقريد أفضل طريقة Sql
بالتوفيق
vBulletin® , Copyright ©2008-2012