View Full Version : سوال: شمارش ركوردهاي باقيمانده بعد از عمل فيلتر dbgrid
hentjanson
جمعه 31 خرداد 1387, 18:17 عصر
سلام به همه اساتيد و روز بخير
براي من يك سوال پيش اومده كه نتونستم حلش كنم .
من براي جستجو در بانك از اين كد استفاده مي كنم
procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
if Form1.ComboBox2.ItemIndex=0 then
Accept:=(AnsiPos(Trim(Form1.MaskEdit11.Text),Trim( DataSet['namketab']))>0)
else if Form1.ComboBox2.ItemIndex=1 then
Accept:=(AnsiPos(Trim(Form1.MaskEdit11.Text),Trim( DataSet['nammoalef']))>0)
else if Form1.ComboBox2.ItemIndex=2 then
Accept:=(AnsiPos(Trim(Form1.MaskEdit11.Text),Trim( DataSet['nammotrajem']))>0)
حالا سوال من اينه وقتي سرچ در برنامه انجام گرفت و نتايج در dbgrid نشان داده شد چطور اين نتايج رو شمارش كنم و بگم مثلا 3 عدد .
اين كد رو امتحان كردم جواب نداد تعداد كل رو ميده
Label2.Caption:=IntToStr(ADOTable1.RecordCount);
برنامه رو ضميمه مي كنم يك جستجوگر
ميشه برنامه منو اساتيد ببينيد و نقص كار رو بگيد
delphiprog3000
جمعه 31 خرداد 1387, 18:32 عصر
با سلام دوست عزیز جواب شما در پست دوم این تاپیک داده شده با کمی دقت متوجه خواهید شد.
http://barnamenevis.org/forum/showthread.php?t=110457
hentjanson
جمعه 31 خرداد 1387, 18:41 عصر
سلام دوست من
select Count(user)from tbllogin where [user] like'admin'
ميشه در رابطه با همين خط كدي كه گفتيد توضيحي براي من بديد روند پياده سازي اين كد ، چطور و در كجا بايد از اين خط استفاده كنم
delphiprog3000
جمعه 31 خرداد 1387, 18:48 عصر
برای اجرای این دستور از شی Adoquery استفاده کنید. و در خاصیت sql.text کوری خود باید آن را قرار دهید.
این طور که از برنامه شما متوجه شدم . میتوانید آن را در on exit کومبو باکس خود قرار دهید.
به این صورت :
with Adoquery1 do
begin
close;
sql.add('select Count(namketab)as rc from table1 where [nameketab] like'+Quotedstr(maskedit1.text);
open;
if not isEmpty then
begin
label3.caption:=fieldvalues['rc'];
end;
end;
hentjanson
جمعه 31 خرداد 1387, 19:05 عصر
سلام بازم نشد .
اين كد رو امتحان كردم ميشه روي برنامه من خودت امتحان كني بعد بگي جواب ميده يا نه
SYNDROME
جمعه 31 خرداد 1387, 21:33 عصر
سلام بازم نشد .
اين كد رو امتحان كردم ميشه روي برنامه من خودت امتحان كني بعد بگي جواب ميده يا نه
چرا از RecordCount استفاده نمی کنید؟
موفق باشید
hentjanson
شنبه 01 تیر 1387, 06:50 صبح
سلام صبح بخير
من از اين كد بعد از كد accept استفاده كردم ولي جواب نداد مجموع كل رو بر مي گردونه :
اينطوري
procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
if Form1.ComboBox2.ItemIndex=0 then
Accept:=(AnsiPos(Trim(Form1.MaskEdit11.Text),Trim( DataSet['namketab']))>0)
else if Form1.ComboBox2.ItemIndex=1 then
Accept:=(AnsiPos(Trim(Form1.MaskEdit11.Text),Trim( DataSet['nammoalef']))>0)
else if Form1.ComboBox2.ItemIndex=2 then
Accept:=(AnsiPos(Trim(Form1.MaskEdit11.Text),Trim( DataSet['nammotrajem']))>0)
Label2.Caption:=IntToStr(ADOTable1.RecordCount);
مجموع كل رو ميگه بر حسب باقيمانده ها فعلي عمل نميكنه
delphiprog3000
شنبه 01 تیر 1387, 09:44 صبح
دوست من این یک مثال کوچیک از اون چیزی که شما میخواستید .
دیتابیس : Sql
در ضمن این لینک هم میتونه به شما کمک کنه:
http://barnamenevis.org/forum/showthread.php?t=7744&highlight=%D9%86%D9%85%D8%A7%DB%8C%D8%B4+%D8%AF%D8 %B3%D8%AA%D9%88%D8%B1+Count
موفق باشید..................
hentjanson
شنبه 01 تیر 1387, 09:57 صبح
مرسي دوست من .
از اين روش استفاده كردم ولي همچنان مشكل دارم مثال خوبي بود
hentjanson
دوشنبه 03 تیر 1387, 16:00 عصر
از دوستان كسي روش ديگه ياد داره برنامه خودم رو ضميمه كردم در پست اول .
hentjanson
سه شنبه 04 تیر 1387, 18:08 عصر
كسي راه حل بهتري به نظرش ميرسه براي شمارش
SYNDROME
سه شنبه 04 تیر 1387, 21:40 عصر
چرا از Filter استفاده نمی کنید تا بعد از اعمال فیلتر RecordCount را بر گردانید.
مشکلتان در استفاده از Filter چیست؟
موفق باشید
delphiprog3000
سه شنبه 04 تیر 1387, 21:52 عصر
با سلام.
من برنامه دوستمون رو دیدم با دیتابیس اکسس اون کدی که میخواستم در برنامه ایشان قرار بدم رو امتحان کردم ولی به مشکل برخورد . ولی همان مثالی که ایشان میخواست رو روی یک تکه برنامه که دیتابیس sql داشت تست کردم مشکل نداشت. و اون کد را براشون گذاشتم.
برای اطمینان بدنیست شما هم نگاهی به این دو برنامه بندازی علی جان.
موفق باشید.................
hentjanson
چهارشنبه 05 تیر 1387, 09:36 صبح
سلام دوست من
ميشه شما هم نگاهي به برنامه من بيندازي علي اقا در پست يك گزاشتمش
مرسي
SYNDROME
چهارشنبه 05 تیر 1387, 21:04 عصر
دوست عزیز براتون درستش کردم.
به رویداد OnChange مربوط به MaskEdit نگاه کنید.
دستورات که در رویداد OnFilterRecord و OnKeyUp نوشته بودید را پاک کردم.
در زمان اجرای برنامه (Create فرم) رویداد Onchange مربوط به MaskEdit را فراخوانی کردم تا تعداد رکوردها را در اول برنامه مشخص کند.
موفق باشید
hentjanson
چهارشنبه 05 تیر 1387, 21:19 عصر
مرسي از اينكه وقت براي رفع اين مشكل من گزاشتي . متشكرم .
از تمام اساتيد ديگر هم تشكر مي كنم . حل شد
hentjanson
چهارشنبه 05 تیر 1387, 21:52 عصر
اين خطا از كجا ناشي ميشي من با اين مشكل مواجهم موقع تايپ
item cannot be found in the collection corresponding to the requested name or ordinal
hentjanson
چهارشنبه 05 تیر 1387, 22:03 عصر
سلام دوست من همان طور ه شما گفتيد كد هاي برنامه اصلي رو عوض كردم و همانند نمونه شما نوشتم فقط نميدونم چرا فيلتر نميكنه غير فعال حالت فيلتر موقع تايپ فيلتري انجام نميشه
SYNDROME
پنج شنبه 06 تیر 1387, 07:06 صبح
اين خطا از كجا ناشي ميشي من با اين مشكل مواجهم موقع تايپ
item cannot be found in the collection corresponding to the requested name or ordinal
در زمانی جستجو من دستور زیر را نوشته ام.
FieldName+' Like '+Quotedstr('%'+Edit1.text+'%');
دستور فوق برای جستجوی رشته ای است.اگر فیلد شما از نوع عددی است دستور را به شکل زیر تغییر دهید.
FieldName+' = '+Edit1.text;
موفق باشید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.