ورود

View Full Version : در DBISAM می خواهم جمع یک ستون را بدست اورم (بعد از فیلتر)



Laia2005
دوشنبه 28 فروردین 1385, 16:45 عصر
وقتی که کاربر رکورد ها را فیلتر کرد

منظورم اینه که وقتی رکورد ها را فیلتر می کنیم بعد وقتی میائیم جمع ستون را میگیریم ، انگار نه انگار که ما فیلتر کردیم
مقدار برگشتی از جمع ستون را همون جمع مقدار کل رکورد ها را میدهد .

به طور مثال اگر ما سه رکورد داشته باشیم که هرسه آنها مقدار فیلد حقوقشون 10 باشه
وقتی جمع میکنیم ستون حقوق را باید مقدار 30 برگردانه .

حالا می آییم جوری فیلتر می کنیم که فقط 2 رکورد را نمایش بده
حالا که می آیم جمع میکنم بازم 0 را بر می گردانه


من برای فیلتر کردن از خود DBISAMAdoTable استفاده میکنم
و برای بدست آوردن جمع یک ستون از DBISAMAdoQuery استفاده میکنم


دوستان اگه راه حلی برای رفع این مشکل دارند بیان نمایند
با تشکر .

MNosouhi
سه شنبه 29 فروردین 1385, 11:42 صبح
من برای فیلتر کردن از خود DBISAMAdoTable استفاده میکنم
و برای بدست آوردن جمع یک ستون از DBISAMAdoQuery استفاده میکنم
اشتباه شما همینجاست ، table و query مستقل از هم کار می کنند و فیلتر کردن یکی تاثیری روی دیگری نمی گذارد ، شما برای رسیدن به هدفتان فقط باید با یکی از آنها کار کنید :
راه حل اول : به جای اینکه از فیلتر استفاده کنید از دستورات Sql استفده کنید ، اینطور هم می تونید فیلتر کنید و هم جمع صحیح فیلد را بدست بیاورید.
راه حل دوم : می توانید از کامپوننت هایی که عمل جمع کردن را خودشون انجام می دهند استفاده کنید در بسته Ehlib کامپوننتی با نام DBSumList هست که کارتون رو راه میندازه

Laia2005
سه شنبه 29 فروردین 1385, 12:55 عصر
اشتباه شما همینجاست ، table و query مستقل از هم کار می کنند و فیلتر کردن یکی تاثیری روی دیگری نمی گذارد ، شما برای رسیدن به هدفتان فقط باید با یکی از آنها کار کنید :
راه حل اول : به جای اینکه از فیلتر استفاده کنید از دستورات Sql استفده کنید ، اینطور هم می تونید فیلتر کنید و هم جمع صحیح فیلد را بدست بیاورید.
راه حل دوم : می توانید از کامپوننت هایی که عمل جمع کردن را خودشون انجام می دهند استفاده کنید در بسته Ehlib کامپوننتی با نام DBSumList هست که کارتون رو راه میندازه

لطف میکنید بگید چه جوری من در query یک SQL بنویسم که فیلتر کنه رکورد ها ی جدول ٌ

MNosouhi
سه شنبه 29 فروردین 1385, 21:10 عصر
در این مورد اگه جستجو کنید مثال های متعدد خواهید یافت.

Laia2005
چهارشنبه 30 فروردین 1385, 12:36 عصر
در این مورد اگه جستجو کنید مثال های متعدد خواهید یافت.

کمک کنید من نمی دانم چه جستجو کنم

moradi_am
چهارشنبه 30 فروردین 1385, 13:51 عصر
مثلا :
select * from personel whrere age>40 and marrid=1
که در واقع عبارت بعد از where عبارت فیلتر شما خواهد بود .

Laia2005
چهارشنبه 30 فروردین 1385, 16:25 عصر
مثلا :
select * from personel whrere age>40 and marrid=1
که در واقع عبارت بعد از where عبارت فیلتر شما خواهد بود .

می خواستم بدونم که اگر رکورد ها در DBGrid‌هم نمایش داده شده بود

روی DbGrid هم معلوم میکنه

Laia2005
چهارشنبه 30 فروردین 1385, 17:08 عصر
من این کد را می نویسم

ولی اصلی رکورد ها را فیلتر نمیکنه


procedure TFrmMain.Button1Click(Sender: TObject);
begin
DBISAMQuery1.Active := False ;
with DBISAMQuery1 do begin
SQL.Clear ;
SQL.Add('Select * From T1 Where ID>3') ;
Open ;
end ;
DBISAMQuery1.Active := True ;
end;

Laia2005
چهارشنبه 30 فروردین 1385, 17:10 عصر
من این کد را می نویسم

ولی اصلی رکورد ها را فیلتر نمیکنه


procedure TFrmMain.Button1Click(Sender: TObject);
begin
DBISAMQuery1.Active := False ;
with DBISAMQuery1 do begin
SQL.Clear ;
SQL.Add('Select * From T1 Where ID>3') ;
Open ;
end ;
DBISAMQuery1.Active := True ;
end;

به جای Open از ExectSQL هم استفاده کردم اما بازم نشد:اشتباه:

MNosouhi
پنج شنبه 31 فروردین 1385, 11:20 صبح
این هم یه مثال کوچک.
بهترین راهما ، Help خود Dbisam هستش.