ورود

View Full Version : فیلد مانده محاسباتی



AmirSky
دوشنبه 30 آذر 1388, 13:06 عصر
من در دی بی گرید یک فرم نیاز به یک فرم محاسباتی دارم که مانده را به صورت خط به خط نشان دهد . به گونه ای که پس از کم کردن دریافتی و پرداختی ها مانده را خط به خط نمایش دهد . من این کار را توسط SQL SERVER با کرسر انجام می دهم که در بعضی سیستم ها خیلی کند کار می کند . و بدون کرسر انجام آن فقط با کواری ممکن نیست . آیا کسی این کار را انجام داده یا می تواند کمک کند . ممنون

دلفــي
دوشنبه 30 آذر 1388, 15:53 عصر
يا من چيزي متوجه نشدم و يا اينكه سوال شما زياد واضح نيست !!!

AmirSky
چهارشنبه 02 دی 1388, 11:25 صبح
خوب سوال رو واضح تر میگم

ببین عزیز جان یک فیلد برای دریافت هست و یک فیلد برای پرداخت
و در انتها یک فیلد مانده نیاز هست که به صورت خط به خط مانده را نشان دهد
ولی سختی کار این است که مانده باید با مانده رکورد قبلی جمع گردد
من این رو با کرسر در SQL SERVER انجام می دهم ولی مشکل این است که کار با کرسرها خیلی کند است. من روشی غیر از کرسر نیاز دارم که کندی آن را نداشته باشد .
ممنون

دلفــي
چهارشنبه 02 دی 1388, 12:27 عصر
خوب سوال رو واضح تر میگم

ببین عزیز جان یک فیلد برای دریافت هست و یک فیلد برای پرداخت
و در انتها یک فیلد مانده نیاز هست که به صورت خط به خط مانده را نشان دهد
ولی سختی کار این است که مانده باید با مانده رکورد قبلی جمع گردد
من این رو با کرسر در SQL SERVER انجام می دهم ولی مشکل این است که کار با کرسرها خیلی کند است. من روشی غیر از کرسر نیاز دارم که کندی آن را نداشته باشد .
ممنون

شما مي تونيد يه فيلد محاسباتي (مانند Koll) براي نمايش مانده هر ركورد بعلاوه مانده ركورد قبلي ايجاد كرده و در رويداد OnCalcFields به اين صورت عمل كنيد :

ابتدا يه متغير عمومي از نوع Real (بسته به نوع مقدار مانده) به نام مثلا k ايجاد كنيد ، سپس در رويداد OnCalcFields كد زير رو وارد كنيد :


k := K + (AdoQuery1.FieldByName('Field1').AsFloat - AdoQuery1.FieldByName('Field2').AsFloat);
AdoQuery1.FieldByName('Koll').AsFloat := k;


البته بايد هنگام ورود به برنامه مقدار K رو برابر 0 قرار دهيد .

حالا اگه فيلد محاسباتي رو به DBGrid وصل كنيد همون نتيجه اي رو كه مي خواهيد رو نشون ميده .