PDA

View Full Version : یک سوال در مورد فیلتر نمودن



سیروس مقصودی
شنبه 17 اردیبهشت 1384, 08:12 صبح
با سلام
چگونه میتوان در یک فیلد عمل فیلتر را با شرایط زیر انجام داد .
بر اساس یک کلمه فیلتر گذاشت که امکان دارد این کلمه در اول فیلد یا وسط فیلد و یا در انتهای فیلد قرار گرفته باشد .

با تشکر :flower:

m-khorsandi
شنبه 17 اردیبهشت 1384, 09:59 صبح
درود

اگه شما از BDE استفاده میکنی:



property Filter: String;

Description

Use Filter to specify a dataset filter. When filtering is applied to a dataset, only those records that meet a filter’s conditions are available to an application. Filter contains the string that describes the filter condition. For example, the following filter condition displays only those records where the State field is 'CA' or 'MA':

State = 'CA' or State = 'MA'

To filter strings bases on partial comparisons, use an asterisk as a wildcard. For example:

State = 'M*'

Note: Applications can set Filter at runtime to change the filtering condition for a dataset at (for example, in response to user input).


اگر هم از ADO استفاده میکنی :



property Filter: String;

Description

Use Filter to specify a dataset filter. When filtering is applied to a dataset, only those records that meet a filter’s conditions are available to an application. Filter contains the string that describes the filter condition. For example, the following filter condition displays only those records where the State field is 'CA' or 'MA':

State = 'CA' or State = 'MA'

When a filter is set, Blank records do not appear unless explicitly included in the filter. For example:

State <> 'CA' or State = NULL

When a field name contains spaces, you must enclose the field name in brackets. For example:

[Home State] = 'CA' or [Home State] = 'MA'

Filter expressions on remote SQL tables and on client datasets support field comparisons. For example:

Field1 > Field2

The FilterOptions property controls case sensitivity and filtering on partial comparisons.

Tip: Applications can set Filter at runtime to change the filtering condition for a dataset at (for example, in response to user input).
Note: include a space between comparison values and comparison operators in filter expressions. For instance, ensure that there is a space after the field name and before the operator.

دنیای دلفی
شنبه 17 اردیبهشت 1384, 10:57 صبح
دوست عزیر از فیلتر گیری IP4000 استفاده کن کلیه مواردی را که گفتی داره و خیلی هم بیشتر فرقی هم نداره که موتور بانک اطلاعاتی شما چیه

می تونی نسخه آزمایشی این کامپوننت را از سایت www.jonoobshop.com دریافت کنی

:موفق:

سیروس مقصودی
شنبه 17 اردیبهشت 1384, 15:38 عصر
باسلام
دوست عزیز (m_khorsandi) از راهنمائی که به من کردید ممنون میباشم اینجانب راهنمای فیلتر نمودن Delphi را خوانده ام ولی سوال اینجانب در رابطه با فیلتر گذاشتن بر اساس کلمات داخل یک Field میباشد .

با تشکر :flower:

NOROOZY
شنبه 17 اردیبهشت 1384, 16:03 عصر
دوست عزیز
اگر در سطح دیتا بیس باشد که خوب معلوم است کافی است اول و آخر کلمه مورد نظر از کاراکتر % استفاده کنی
یعنی
SELECT TOP 100 PERCENT dbo.TBL_BK_MagResived.*, PK_D_DateAnteshar AS Expr1
FROM dbo.TBL_BK_MagResived
WHERE (PK_D_DateAnteshar LIKE '%my word%')

در دلفی هم بخواهی همان متن بالا را به خاصیت sql کوری اضافه کنی حله

فقط به جای % از #39 استفاده کن

m-khorsandi
شنبه 17 اردیبهشت 1384, 16:49 عصر
دوست عزیزم، آقای سیروس مقصودی
اگه ممکن هست یه مقدار بیشتر توضیح دهید.(من متوجه منظور شما نشدم)

سیروس مقصودی
شنبه 17 اردیبهشت 1384, 17:03 عصر
با سلام
دوست عزیز m_khorsandi منظور من این است که در یک فیلد کلیه رکوردهای که در آن یک کلمه بخصوصی مثلا کلمه "محمد" وارد شده است را فیلتر نماید .
مثلا

محمد آمد
از محمد پرسیدم
صل علی محمد و آل محمد

با تشکر :flower:

سیروس مقصودی
چهارشنبه 18 خرداد 1384, 17:58 عصر
با سلام

پس کسی جوابی برای این سوال نتوانست پیدا کند ؟

:( :( :(

vcldeveloper
پنج شنبه 19 خرداد 1384, 03:08 صبح
محمد آمد
از محمد پرسیدم
صل علی محمد و آل محمد


with ADOTable1 do
begin
Filtered := False;
Filter := 'field_Name LIKE ' + QuotedStr('%محمد%');
Filtered := True;
end;

بجای field_name اسم فیلد خودتو بزار

V60
پنج شنبه 19 خرداد 1384, 15:26 عصر
اینجوری می شه

adotable1.Filter:='id like '+QuotedStr('*'+edit1.Text+'*');

سیروس مقصودی
پنج شنبه 19 خرداد 1384, 15:42 عصر
با سلام

من با Table کار میکنم نه با AdoTable .
اگر امکان دارد مرا از طریق فیلتر نمودن با Table . راهنمائی نمائید .

با تشکر :flower: :flower: :flower:

vcldeveloper
جمعه 20 خرداد 1384, 02:01 صبح
من با Table کار میکنم نه با AdoTable .
اگر امکان دارد مرا از طریق فیلتر نمودن با Table . راهنمائی نمائید .

دوستمون جناب m-khorsandi دادند (رجوع کنید به: پست دوم از صفحه اول).

اگه شما از BDE استفاده میکنی:

سیروس مقصودی
جمعه 20 خرداد 1384, 11:28 صبح
با سلام

من دستوری را که فرمودید نوشتم ولی در هنگام اجرا این خطا ظاهر میشود


لطفا مرا راهنمائی فرمائید

با تشکر :flower: :flower: :flower:

vcldeveloper
شنبه 21 خرداد 1384, 01:55 صبح
من دستوری را که فرمودید نوشتم ولی در هنگام اجرا این خطا ظاهر میشود
لطفا هر دستوری که نوشتید بزارید اینجا.

سیروس مقصودی
شنبه 21 خرداد 1384, 10:48 صبح
با سلام

جناب آقای کشاورز دستوری که نوشتم بدین شکل میباشد .



Table1.Filtered := Flase
Table1.Filter := 'Name Like '+QuotedStr('*ALI*')
Table1.Filtered := True

با تشکر : :flower: :flower: :flower:

vcldeveloper
یک شنبه 22 خرداد 1384, 02:10 صبح
Table1.Filter := 'Name Like '+QuotedStr('*ALI*')
نمی دونم چرا در BDE استفاده از * در اول کلمه جواب نمیده(!!) اما ADO با %ALI% به راحتی کار میکنه. :sorry:

dr_eniak
دوشنبه 13 تیر 1384, 20:49 عصر
با سلام
متاسفانه با هیچ کدام از این روشها نتوانستم یک ado را فیلتر کنم
زیرا علامت % یا * را زمانیکه به کار می برم هیچ رکوردی را نشان نمی دهد .
مثلا :
Form1.ADOTable1.Filter :='namf = '+QuotedStr(edit1.text+'*');
یا
Form1.ADOTable1.Filter :='fam = '+QuotedStr('*rezaei*');

البته هیچ پیغام خاصی نشان نمی دهد و زمانی که فقط اسم را تنها می نویسیم فیلتر را صحیح انجام می دهد ولی زمانیکه از آن دو علامت استفاده می کنم هیچ چیزی را نشان نمی دهد . :wink:

محمد دادودنیا
جمعه 26 آبان 1385, 16:07 عصر
درسته ولی اگه خواستم تمام اونهایی رو که
مثلا با 'محم' شروع نمی شوند رو چطوری می شه با Filter پیدا کرد
همBDE هم ADO

محمد دادودنیا
جمعه 26 آبان 1385, 16:28 عصر
با سلام
متاسفانه با هیچ کدام از این روشها نتوانستم یک ado را فیلتر کنم
زیرا علامت % یا * را زمانیکه به کار می برم هیچ رکوردی را نشان نمی دهد .
مثلا :
Form1.ADOTable1.Filter :='namf = '+QuotedStr(edit1.text+'*');
یا
Form1.ADOTable1.Filter :='fam = '+QuotedStr('*rezaei*');

:wink:

توی BDEمی تونی از * استفاده کنی ولی توی ADO باید به جای ستاره از % استفاده کنی
ولی من با این مشکل دارم

ADODataset.Filter :='fam Not Like '+QuotedStr('%rezaei*');

vcldeveloper
جمعه 26 آبان 1385, 22:29 عصر
ولی من با این مشکل دارم

ADODataset.Filter :='fam Not Like '+QuotedStr('%rezaei*');
بهتره از SQL Query استفاده کنید، اما اگر اصرار به استفاده از فیلتر دارید...
من با استفاده از خصوصیت Filter به نتیجه مورد نظر نرسیدم، اما می تونید بجای خصوصیت فیلتر، از رویداد OnFilterRecord استفاده کنید. در این حالت دستتون بیشتر بازه، برای مثال:


procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := Pos('rezaei',DataSet['ContactName']) <= 0;
end;

یادتون باشه که برای استفاده از رویداد OnFilterRecord باید خصوصیت Filtered = True باشه.