Filter چند منظوره در دلفي

barkar1385

New Member
با عرض سلا خدمت دوستان. من مي خواهم در يك بانك محدوديتي را ايجاد كنم كه دو منظور را با هم ايجاد كند. مثلا ستون
(BankName) من هرچه "ملي" و ستون (Type) هرچه "نقدي" داشته باشد.
 

farhad110

Member
سلام
از f i l t er استفاده کن:
کد:
dataset.Filtered:=true;
dataset.Filter:='BankName='+QuotedStr(edit1.Text)+' OR '+'Type='+QuotedStr(edit2.Text);
مقادیر edit1 , edit2 متغیر هستند.
 

DrXoX

Active Member
سلام
با استفاده از Adoquery به راحتی می تونی این کار رو انجام بدی . من برای این که به راحتی بتونید این کار رو انجام بدین مراحل انجام این کار رو مرحله به مرحله و به زبان ساده توضیح می دم :
1-از سربرگ ADO یک ADOQuery روی فرم قرار بده و از سربرگ Data Access هم یک DataSource
2-خاصیت Connection مربوط به ADOQuery رو به Connection اصلی وصل کن (مثلا ADOConnection که به پایگاه داده اصلی متصل کرده اید)
3-در خاصیت SQL مربوط به ADOQuery روی ... کلیک کنید و در پنجره ظاهر شده کد های زیر رو بنویسید
کد:
 Select * From [COLOR="Red"]Table [/COLOR]
نکته: در کد بالا منظور از Table نام جدولی است که می خواهید عمل فیلتر رو انجام بدین
4- مقدار خاصیت Active مربوط به ADOQuery را True قرار بدین
نکته: اگر این خاصیت به True تغییر نکرد در کدی که در SQL نوشته اید اشکالی وجود دارد
5-خاصیت DataSet مربوط به DataSource را ADOQuery 1 قرار بدین
6- از سربرگ DataControls یک DBGrid روی فرم قرار بدین و خاصیت DataSource آن را DataSource1 قرار بدین
7-از سربرگ Standard دو تا Edit روی فرم قرار بدین
8- روی Edit1 دوبار کلیک کنید و کد های زیر را در آن بنویسید
کد:
procedure TForm1.Edit1Change(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Table where Bankname like'''+Edit1.Text+'%''');
ADOQuery1.Open;
end;
9- و در Edit2 کد های زیر رو بنویس
کد:
procedure TForm1.Edit2Change(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from Table where Bankname like'''+Edit1.Text+'%'' and Type like'''+Edit2.Text+'%''');
ADOQuery1.Open;
end;
نحوه کار: الان اگه برنامه رو اجرا کنید و داخل Edit1 بنویسید م مثلا تمام بانک ملی ها نمایش داده میشه و سپس در Edit2 هم الان بنویسید مثلا ا در این صورت تمام بانک ملی ها که Type آن با ا شروع میشه نمایش داده میشه
10-پایان

روش دوم:

توجه : یک روش دیگر هم برای این کار وجود داره و اون استفاده از پارامتره که این روش دیگر مثل روش قبلی نیست و باید نام کامل رو وارد کنید برای این روش نیز می توانید یک Button و دو تا Edit روی فرم قرار بدین و در SQl مربوط به ADOQuery کد قبلی را پاک کنید و کد زیر را بنویسید
کد:
select * from  Table
where Bankname =:a  and  Type =:b
سپس روی Button دوبار کلیک کنید و کدهای زیر را در آن بنویسید:
کد:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Close;
ADOQuery1.Parameters.ParamValues['a']:=Edit1.Text;
ADOQuery1.Parameters.ParamValues['b']:=Edit2.Text;
ADOQuery1.Open;
end;
نحوه کار: در این روش باید نام کامل را در Edit ها وارد کنید مثلا در Edit1 بنویسید ملی و در Edit2 بنویسید مثلا بزرگ خوب الان اگه روی Button کلیک کنی تمام BankName هایی که نامش ملی و Type آن بزرگ است در DBGrid نمایش داده میشه
اگر باز هم مشکلی داشتید بپرسید تا جایی که بتونم کمک کیکنم
____________

روزي کـه تو آمــــدي به دنيا عــريان *** جمعي به تو خندان و تو بودي گريان
کاري بکن اي دوست که وقت رفتن *** جمعي به تو گريند و تو باشي خندان
 

farhad110

Member
DrXoX عزیز ممنون از توضیحات کامل شما. البته این مورد رو هم من اضافه میکنم که این دستورات SQL رو میشه در تمام query ها استفاده کرد. اینجا برای زمانی هست که از بانک های ado مثل access و sql server استفاده کنیم، و اگر از paradox دلفی استفاده شده باشه میتونیم از همین دستورات در Query که از تب BDE قابل دسترس هست استفاده کنیم.
به هر حال barkar1385 نظر منم اینه که از SQL استفاده کنی چون قابلیتهای بسیار بیشتری نسبت به f i l t e r داره.
پیروز باشید.
 

جدیدترین ارسال ها

بالا