PDA

View Full Version : سوال: جمع کردن رکوردها هنگام فیلتر کردن آنها



hasandrw
یک شنبه 26 تیر 1390, 19:10 عصر
با سلام
چجوری میشه پس از فیلتر کردن رکوردها جمع رکوردهای یک فیلد مثلا به نام SUM را در یک Edit نمایش داد.

pezhvakco
یک شنبه 26 تیر 1390, 19:46 عصر
سلام :
شما بهتره ابتدا جستجو نمایید .
چون پاسخ این پرسش ها رو می تونین پیدا کنین .

اگر هم می خوای بپرسین، از نگاه خودتون ننویسین و از نگاه کسی بنویسین که از خواسته و برنامه شما هیچ نمی دونه .
اگه می تونین دستورات SQL رو بکار بگیرین :

DataSet1.Close;
DataSet1.CommandText:='SELECT ISNULL(SUM(col1), 0) AS Expr1 FROM Table1 WHERE (col2 > 10) ';
DataSet1.Open;
Edit1.Text:=IntToStr(DataSet1.FieldByName('Expr1') .AsInteger);

یوسف زالی
یک شنبه 26 تیر 1390, 21:12 عصر
سلام.
اگر در برنامه می خواهید این فیلتر اتفاق بیفته چاره ای ندارید چز اینکه روی ردیفهای گزارش مرور کنید.
مثلا:


sum := 0;
ADOStoredProc1.DisableControls;
ADOStoredProc1.First;
while not ADOStoredProc1.Eof do
begin
sum := sum + ADOStoredProc1.FieldValues['FieldName'];
ADOStoredProc1.Next;
end;
ADOStoredProc1.EnableControls;



فرض کردم از ADO استفاده می کنید.

hasandrw
دوشنبه 27 تیر 1390, 13:08 عصر
در کل می خوام فاکتورهای بین دو تاریخ رو فیلتر کنم و بعد هم جمع همون فاکتورهای فیلتر شده رو بدست بیارم.من عملیات فیلتر کردن رو انجام دادم ولی تو عملیات جمع کردنش موندم.
اگه کمکم کنین خیلی خیلی ممنون میشم.

یوسف زالی
دوشنبه 27 تیر 1390, 15:02 عصر
بازم که اطلاعات ناقص دادید

hasandrw
سه شنبه 28 تیر 1390, 01:03 صبح
ببین مهندس:
من فیلدهایی به نام شماره فاکتور،نام خریدار،تاریخ،جمع فاکتور،تخفیف،مبلغ دریافتی دارم.و به ازای فروش هر فاکتور این فیلدها در جدول ذخیره می شوند.با فرض اینکه ما 100 فاکتور فروش در تاریخ ها ی متفاوت ذخیره کرده ایم.
ما می خواهیم مثلا فاکتورهای بین تاریخ (20/04/1390) و تاریخ (22/04/1390) را پیدا کنیم وجمع فیلد مبلغ دریافتی را در یک Edit نمایش بدیم.
حالا دیگه فکر کنم کامل باشه.
ممنونم از همکاریتون

یوسف زالی
سه شنبه 28 تیر 1390, 08:34 صبح
منظور من این هست که آیا در StoredProc فیلتر می کنی یا SQL یا ADOTable یا از Command استفاده می کنی.
اگر ADO هست و فیلترینگ سمت کلاینت انجام میشه تو پست بالا گفتم.
اگر هم Command هست یا سمت SQL می تونین از کد دوستمون استفاده کنین.

hasandrw
سه شنبه 28 تیر 1390, 10:49 صبح
از هیچ کدوم اینها استفاده نمی کنم من از ADOQuery استفاده می کنم.
اگه میشه کمکم کنین.

یوسف زالی
سه شنبه 28 تیر 1390, 12:00 عصر
در خاصیت ADOQuery1.SQL.Text سلکت مربوطه رو بنویسید و با Open کردن به اون دسترسی خواهید داشت.
مثال:


ADOQuery1.Close;
ADOQuery1.SQL.Text := 'select sum(price) as SumPrice from factors where number between ' + IntToStr(P1) + ' and ' + IntToStr(P2);
ADOQuery1.Open;
edit1.text := ADOQuery1.FieldByName('SumPrice').AsString;

hasandrw
سه شنبه 28 تیر 1390, 16:26 عصر
از راهنمایی تون کمال تشکرم دارم

این کدها درست کار می کنند ولی وقتی اجرا می کنم دیگه همه رکوردها پنهان میشن.
راهکار چیه؟

Felony
سه شنبه 28 تیر 1390, 17:56 عصر
یا امام !

شما جدول رو با اون Query فیلتر کردی تا جواب جمع فیلد مورد نظر در رکوردهای موجود رو به دست بیاری ، یا Query رو در یک ADOQuery دیگه اجرا کن یا بعد از اجرای این Query یه Select دیگه بزن و همه رکوردها رو دوباره انتخاب کن !

یوسف زالی
سه شنبه 28 تیر 1390, 20:44 عصر
بله جدول رو فیلتر کردم!
البته در ADOQuery جداگانه.
ترسیدم ، گفتم حتما کد ترکوندن مانیتور رو کشف کردم

Delphi 2010
سه شنبه 18 مرداد 1390, 18:56 عصر
با یه حلقه از رکورد اول تا رکورد آخر رو جمع کنید