ورود

View Full Version : سوال: تابعی شبیه QuotedStr که کلمات مشابه را هم بدهد



ali_abbasi22145
چهارشنبه 17 خرداد 1391, 15:50 عصر
سلام

تابع QuotedStr(s) در زیر برای مثلا فیلتر کردن نام خانوادگی هایی که دقیقا "عباسی" هستند بکار می رود.
تابعی دیگر وجود دارد که تمام نام خانوادگی هایی که "عباسی" و "عباسی تهرانی" و "حسینی عباسی" را نشان دهد؟

procedure TDynamicForm.DoFilter( S: String );
begin
Field_name1:= Filter_ComboBox.Text ;

MainForm.ADOTable1.Filtered := False;
MainForm.ADOTable1.Filter := last_name+' = '+ QuotedStr(S) ;
MainForm.ADOTable1.Filtered := True;
end;

hossein_h62
چهارشنبه 17 خرداد 1391, 17:00 عصر
سلام
اگر از کوئری استفاده میکنید که LIKE براحتی کارتون رو راه میندازه ولی اگر حتما می خواید که از Filter استفاده کنید، راه زیر هست :
procedure DoIncrementalFilter(Dataset: TDataSet; const FieldName, SearchTerm: string);
begin
Assert(Assigned(Dataset), 'No dataset is assigned');

if SearchTerm = '' then
Dataset.Filtered := False
else
begin
Dataset.Filter := FieldName + ' LIKE ' + QuotedStr(SearchTerm + '*');
Dataset.Filtered := True;
end;
end;

و استفاده از روال بالا :
DoIncrementalFilter(ADOTable1, 'FieldName', Edit1.Text);

ali_abbasi22145
شنبه 20 خرداد 1391, 16:20 عصر
سلام وتشكر
حالا بخواهيم آنهايي كه SearchTerm (مثلا نام شان) خالی یا Null باشد را هم پيدا كنيم چه كدي بنويسيم؟

hossein_h62
یک شنبه 21 خرداد 1391, 11:17 صبح
کدش رو خودتون در بالا نوشتین :

MainForm.ADOTable1.Filtered := False;
MainForm.ADOTable1.Filter := last_name+' = '+ QuotedStr(S) ;
MainForm.ADOTable1.Filtered := True;
ولی کلا اگه از کوئری استفاده کنید خیلی راحت تر هستین.

ali_abbasi22145
یک شنبه 21 خرداد 1391, 15:44 عصر
کدش رو خودتون در بالا نوشتین :

MainForm.ADOTable1.Filtered := False;
MainForm.ADOTable1.Filter := last_name+' = '+ QuotedStr(S) ;
MainForm.ADOTable1.Filtered := True;
ولی کلا اگه از کوئری استفاده کنید خیلی راحت تر هستین.

سلام
وقتی کد بالا را برای خالی یا Null تست کردم کار نمی کند و خالی ها را نشان نمی دهد و حاصل فیلتر هیچ رکوردی نیست.

hossein_h62
یک شنبه 21 خرداد 1391, 16:36 عصر
سلام
وقتی کد بالا را برای خالی یا Null تست کردم کار نمی کند و خالی ها را نشان نمی دهد و حاصل فیلتر هیچ رکوردی نیست.
وقتی متغیر S خالی باشه جواب میده مگر اینکه رکوردی با شرایط موجود نداشته باشین!

ali_abbasi22145
دوشنبه 22 خرداد 1391, 12:07 عصر
وقتی متغیر S خالی باشه جواب میده مگر اینکه رکوردی با شرایط موجود نداشته باشین!

سلام
تست کردم آنها نام خانوادگی هایی که یک SPACE زده باشیم در فیلتر می آورد ولی آنهایی نام خانوادگی Null دارند را نمی آورد.
یا به عبارت دیگر: آنهایی نام خانوادگی Null دارند را بخواهیم نشان دهیم چه کدی بنویسیم؟