View Full Version : فیلتر
bijan_mahbaz
شنبه 04 شهریور 1385, 10:18 صبح
سلام به همه دوستان
من یک جدولی دارم که دستور فیلتر برای فیلدی که رکوردهای اون عدد هستند درست عمل می کنه ولی برای فیلدی که رکورد های اون به صورت String هستند مثلا اسم، جواب نمی ده. البته در رویداد OnFilterRecord می تونم این کار رو انجام بدم اما این رویداد در یک مورد عمل می کنه و برای بیش از یک حالت جواب نمیده. اگه دستوری هست که بتونم جایگزین OnFilterRecord کنم یا اینکه از همون دستور Filter برای رکوردهایی که به صورت رشته اند استفاده کنم، ممنون می شم که بهم بگین. باتشکر فراوان
بیژن
فرزاد دلفی باز
شنبه 04 شهریور 1385, 12:43 عصر
با دستور زیر شما می توانید در رکورد های خودتون دنبال حتی یک حرف خاص بگردید
procedure TForm1.Edit1Change(Sender: TObject);
begin
Query1.Active:=False;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM adad Adad_1 WHERE name Like :a');
Query1.Params[0].Value:='%'+Edit1.Text+'%';
Query1.Active:=true;
end;
از تگ کد استفاده کنید امضا Mzjahromi
متشکرم حتما فرزاد دلفی باز
mzjahromi
شنبه 04 شهریور 1385, 13:01 عصر
سوالتون خیلی مبهمه.
منظورتون از بیش از یک حالت جواب نمیده چیه؟
با خاصیت Filter کار کردید؟
مونه کدهائی که استفاده کردید رو بذارید
bijan_mahbaz
یک شنبه 05 شهریور 1385, 07:24 صبح
با سلام و تشکر
اما من از Table استفاده کردم و فکر نمی کنم که استفاده از دستورهای مربوط به SQL و Query درست باشه. ازستور فیلتر استفاده کردم. اما این دستور فقط در یکی از فیلدها که داده های اون عدد هستند عمل می کنه. فیلدی با نام Year که رکوردهای اون اعدادی مثل 1953 و غیره اند. اما فیلدی که رکوردهاش اسم هستند مثل فیلد Author و رکوردهایی مثل Subbotina, Morozova و غیره جواب نمیده. در رویداد OnFilterRecord می تونم این کار رو بکنم اما وقتی دوفیلتر رو کد نویسی می کنم. هردو فیلتر بعد از احضار OnFilterRecord اجرا می شه در حالیکه من می خوام هرکدوم رو جدا گانه اعمال کنم و به این ترتیب این رویداد به درد من نمی خوره. اگه راهی باشه که با دستور فیلتر بتونم در فیلدهای دیگه هم این کار رو انجام بدم ممنون می شم که بهم بگین. باتشکر فراوان
بیژن
mzjahromi
یک شنبه 05 شهریور 1385, 08:20 صبح
سلام دوست عزیز
باز که کدها رو ننوشتید
با این حال من فکر میکنم با case کاراکتر ها مشکل دارید.
از UpperCase هنگام مقایسه رشته ها استفاده کنید ببینید درست میشه؟
bijan_mahbaz
یک شنبه 05 شهریور 1385, 08:56 صبح
سلام
کدهای زیر در مورد دستور فیلتر برای فیلد Year جواب میده:
;Table1.Filter := 'Year =' Edit1.Text
;Table1.Filtered := Treu
یعنی وقتی در Edit1 مقدار سال مربوط رو وارد می کنم (1953) عمل فیلتر رو انجام میده.
اما برای فیلد Age همین دستور عمل نمی کنه:
;Table1.Filter := 'Age =' Edit1.Text
;Table1.Filtered := Treu
اما در رویداد OnfilterRecord برای هرکدام از این فیلد ها می تونم عمل فیلتر رو انجام بدم. مثلا برای فیلد Age به صورت زیر برای پیداکردن سن Paleocene
var
age : String
begin
age : DatSet['Age'];
Accept := age = 'Paleocene';
end;
end
اما وقتی دستور بالارو می خوام با فیلتر و یک دکمه اجرا کنم هم برای DataSet خطا می ده و هم برای Accept. کل قضیه همین هستش. از لطفتون متشکر و ممنون هستم و منتظر جواب
بیژن
[/LEFT]
[/LEFT]
mzjahromi
یک شنبه 05 شهریور 1385, 09:18 صبح
Paleocene رو درون بانک هم با همین حالت نوشتید؟ منظورم حروف کوچک و بزرگ هست
این شکلی بنویسید
Table1.Filter := 'Age ='+QuotedStr( Edit1.Text )
babak869
یک شنبه 05 شهریور 1385, 09:59 صبح
اینم یه نمونه برنامه.شما به دلخواه میتونید پارامترهای اعمال فیلتر رو اضافه کرده یا کمک کنید
bijan_mahbaz
یک شنبه 05 شهریور 1385, 13:39 عصر
سلام
از نظر املایی و کوچک یا بزرگ بودن حروف کاملا دقت کردم و این خط دستور رو هم امتحان کردم. اما باز هیچ عکس العملی نشون نمیده. اما بازهم امروز امتحان می کنم و جوابش رو فردا بهتون می گم. از لطفتون خیلی ممنون هستم.
به امید سلامتی شما
بیژن
--------------------
آقای Babk869
خیلی ممنون من امشب برنامتون رو امتحان می کنم و جواب رو فردا بهتون می گم. خیلی ممنون.
بیژن
bijan_mahbaz
دوشنبه 06 شهریور 1385, 08:03 صبح
با سلام
دوستان خوب با کمک شما مشکل برنامه ام حل شد از همتون ممنون و متشکر هستم در ضمن از آقای mzjahromi و babak869 تشکر مجدد و اضافی بخاطر اینکه با راهنمایی های خوبشون مسأله حل شد.
بیژن
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.