PDA

View Full Version : مبتدی: فیلتر کردن



YkA1363
دوشنبه 15 دی 1393, 00:46 صبح
سلام
ابتدا بگم تمام تاپیک های مربوط به فیلتر کردن رو مطالعه کردم جواب نگرفتم
دو تا edit دارم رو فرمم edit1 و edit2
می خوام موقع فیلتر کردن محدوده اعدادی که بین اعداد وارد شده در این ادیت ها در جدول وجود داره رو فیلتر کنه برام.
از راهنمایی شما اساتید محترم پیشاپیش سپاسگزارم.:چشمک:

hadisalahi2
دوشنبه 15 دی 1393, 10:38 صبح
با چی میخوای فیلتر کنی؟
AdoTable یا Adoquery یا چیز دیگه ای؟

YkA1363
دوشنبه 15 دی 1393, 15:55 عصر
با adotable می خوام فیلتر بشه

DJ2008
دوشنبه 15 دی 1393, 16:09 عصر
هم میتونی با کدنویسی و هم میتونی در قیمت filter جدول رشته موردنظرتو وارد کنی بعدش فیلتر رو true بزنی.ولی فیلتر با sql خیلی راحت تر و هم دستت بازتره.

idehrayan
دوشنبه 15 دی 1393, 22:07 عصر
سلام
میتونی از دستور Between استفاده کنی

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from Table1 where code Between "'+edit2.Text+'" And "'+edit3.Text+'" ');
ADOQuery1.Active:=true;

YkA1363
سه شنبه 16 دی 1393, 02:33 صبح
سلام
میتونی از دستور Between استفاده کنی

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from Table1 where code Between "'+edit2.Text+'" And "'+edit3.Text+'" ');
ADOQuery1.Active:=true;



ممنونم از لطفت
میخوام نتیجه رو تو dbgrid متصل به بانکم نمایش بده واسه اون چکار کنم؟

idehrayan
سه شنبه 16 دی 1393, 08:04 صبح
در صورتی که dbgrid متصل باشه نتیجه توش نشون داده میشه

hadisalahi2
سه شنبه 16 دی 1393, 09:38 صبح
باید یک DataSource بزاری و اون رو متصل کنی به AdoQuery خودت
بعد Grid رو هم متصل که به DataSource

YkA1363
سه شنبه 16 دی 1393, 22:18 عصر
جواب نداد :گریه:
اینو نوشتم

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from Table1 where <b>code</b> Between "'+edit2.Text+'" And "'+edit3.Text+'" ');
ADOQuery1.Active:=true;
dbgrid1.datasource:=datasource1;


دیتا سورس متصل به adoquery
127335

این عکس فرمم پایینش یک دی بی گرید گذاشتم
باید بتونه با تمام این آیتمها جدول رو فیلتر کنم لطفا راهنمایی کنید

YkA1363
چهارشنبه 17 دی 1393, 01:18 صبح
یک راه پیدا کردم جواد داد نمی دونم چقدر منطقیه ولی برای فیلتر چند منظوره هم جواب داد کدش و می زارم شاید کسی مشکلی مشابه من داشت

var
str:string;
begin

if (edit8.Text <>'') and (edit9.Text = '') then
begin
if str='' then str:=' [Rahn]='+QuotedStr(edit8.Text)
else str:=str+ ' and [Rahn] ='+QuotedStr(Edit8.Text)
end
else if (edit8.Text ='') and (edit9.Text <> '') then
begin

if str='' then str:=' [Rahn]='+QuotedStr(edit9.Text)
else str:=str+ ' and [Rahn] ='+QuotedStr(Edit9.Text)
end
else if (edit8.Text <>'') and (edit9.Text <> '') then
begin
if str='' then str:='[Rahn]>='+QuotedStr(edit8.Text) +'and [Rahn]<='+QuotedStr(edit9.Text)
else str:=str +' and [Rahn]>='+QuotedStr(Edit8.Text) + ' and [Rahn]<='+ QuotedStr(edit9.text)
end;

hadisalahi2
چهارشنبه 17 دی 1393, 19:51 عصر
عزیزم اگه فیلتر میخوای راحت انجام بدی بهت توصیه میکنم از کامپوننت ehlib Grid استفاده کنی
کلا این روشت اصولی نیست برای جستجوی راجت تر دستورات SQL رو همراه با پارامتر بنویس

idehrayan
چهارشنبه 17 دی 1393, 21:01 عصر
سلام
دوست عزیز باید طبق فرمایش hadisalahi2 (http://barnamenevis.org/member.php?54383-hadisalahi2)

باید یک DataSource بزاری و اون رو متصل کنی به AdoQuery خودت
بعد Grid رو هم متصل که به DataSource
البته در زمان طراحی
در جدول object inspector مقدار DataSource گرید رو برابر DataSource1 قرار بدهنیازی به نوشتن کد
dbgrid1.datasource:=datasource1 نیست
در ضمن جسارت نباشه چون قبلا من هم همین اشتباه رو کردم میگم در خط ۲ نباید </b> و <b> رو وارد کنی

دلفــي
پنج شنبه 02 بهمن 1393, 09:20 صبح
يه روش كلي براي فيلتر كردن چندتايي جدول
( قبلا بايد ADOQuery ، DataSource و كنترلهاي مورد نظر جهت نمايش داده ها را در روي فرم قرار داده و به هم ارتباط دهيد )



ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From Table1 Where Field1 Like :Type1 , Field2 >= :Type2'+
' Field3 = :Type3 , ... , FiledN <= :TypeN')
ADOQuery1.Parameters.ParamByName('Type1').Value := '%'+Trim(Edit1.Text)+'%';
ADOQuery1.Parameters.ParamByName('Type2').Value := '%'+Trim(Edit2.Text);
ADOQuery1.Parameters.ParamByName('Type3').Value := Trim(Edit3.Text);
.
.
.
ADOQuery1.Parameters.ParamByName('TypeN').Value := Trim(EditN.Text)+'%';
ADOQuery1.ExecSQL;
ADOQuery1.Open;