PDA

View Full Version : فیلتر پیشرفته



meghdadcomputer
شنبه 06 مرداد 1386, 13:40 عصر
ا سلام خدمت دوستان
من یه جدول دارم که دارای فیلدهای نام-فامیل-سن-شغل و..است
حالا می خوام در برنامه این امکان را به کاربر بدم که بتونه بر اساس همه فیلدها جدول را فیل تر کنه
مثلا بتونه بگه افرادی که نام انها x وفامیل آنها y و سن انها بیشتر از 20 باشه.
البته کدهای زیر را در یکی از پستها دیدم وبرای این برنامه بازنویسی اش کردم اما خطا میده(یه همچین چزایی که میگه آرگومانهتایت درست نیست)
(تو چند تا تاپیک پیش بحث شده بود ولی من در آنجا به نتیجه ای نرسیدم

s:='';
f:=False;
if edit1.Text<>'' then
begin
s:='name='+QuotedStr(edit1.text);
f:=True;
end;
if edit2.text<>'' then
begin
if f then
begin
s:=s+'and';
s:=s+'famil='+QuotedStr(edit2.Text);
f:= True;
end;
end;
IF S <> '' Then
begin
ADOTable1.Filtered := True;
ADOTable1.Filter:=s;
end;

فقط دمتون گرم .

علامت سوال
شنبه 06 مرداد 1386, 14:47 عصر
فقط دمتون گرم .
این جمله خیلی بامزه ست.

شما فرض کن که Edit1 درش چیزی وارد نشه فکر میکنی در انتها چه مقداری چه مقداری توی s باشه؟
اگر توی Edit2 مقداری بود s میشه چیزی شبیه این


and famil='ایرانی'

که این خطا ست.اینو باید اصلاح کنی

SYNDROME
شنبه 06 مرداد 1386, 16:12 عصر
با سلام


اگر توی Edit2 مقداری بود s میشه چیزی شبیه این


and famil='ایرانی'


کاملا درست است.
من در تاپیک زیر دقیقا همانند همین مثال را نوشته ام و اشکالی راکه دوستمان گفتم هم ندارد.(پست سوم)
http://barnamenevis.org/forum/showthread.php?t=73633
موفق باشی

meghdadcomputer
شنبه 06 مرداد 1386, 16:28 عصر
سلام
syndrome من هم از کدهای شما استفاده کردم و در پست اولم هم کدهای باز نویسی شده برای این برنامه را آوردم ولی کار نمی کنه یهنی اررور میده

m-khorsandi
شنبه 06 مرداد 1386, 16:34 عصر
Errorات رو بنویس، تا هم خودت زودتر به نتیجه برسی و هم بقیه بتونند راحتتر راهنماییت کنند.

meghdadcomputer
شنبه 06 مرداد 1386, 16:46 عصر
سلام گفتم که میگه نوع آرگومانهایت اشتباه است

که این خطا ست.اینو باید اصلاح کنی
کجاش را اصلاح کنم اگه میشه راهنماییم کنید

Batman
شنبه 06 مرداد 1386, 17:05 عصر
با سلام
ببین دوست عزیز این حالت کلیش هست
select * from tablename where(family=:family) and (age=:age) and (job=:job)
استفاده از ":" به خاطر در یافت از ورودی که باید مثلا از edit ها مقدار خونده بشه
موفق باشی

SYNDROME
شنبه 06 مرداد 1386, 18:05 عصر
با سلام

سلام گفتم که میگه نوع آرگومانهایت اشتباه است
کجاش را اصلاح کنم اگه میشه راهنماییم کنید
مقدار متغییر SQLخودت را به دست بیاور (Ctrl+F5)و آن را در اینجا قرار بده تا مشکل حل شود.
موفق باشی

meghdadcomputer
شنبه 06 مرداد 1386, 18:12 عصر
سلام
چک می کنم دوباره خبرش را می دم

meghdadcomputer
شنبه 06 مرداد 1386, 18:37 عصر
سلام
بعد از s=s+'and' یک فاصله گذاشتم s=s+' and '
بعد مقدار s
این شد

'name='ali' and famil='karimi''

SYNDROME
شنبه 06 مرداد 1386, 19:24 عصر
با سلام

سلام
بعد از s=s+'and' یک فاصله گذاشتم s=s+' and '
بعد مقدار s
این شد

'name='ali' and famil='karimi''
مشکل حل شد؟

meghdadcomputer
شنبه 06 مرداد 1386, 19:54 عصر
نه متاسفانه
من یه فیلد عددی به اسم age دارم که وقتی اونا با فبلد name استفاده میکنم جدول را فیلتر میکنه ولی وقتی فیلد ی مثلfamily را می آورم فیلتر میکنه ولی هیچ چیز را نمایش نمیده
به نظر شما مشکل از چیست

البته من کد زیر را نوشتم که برای فیلد سوم جواب نمیده
Form1.ADOTable1.Filtered:=True;
form1.ADOTable1.filter:='name='+QuotedStr(edit1.te xt)
+ ' or age'+ComboBox1.text+' '+QuotedStr(edit2.text)
+ ' or famil='+QuotedStr(edit4.Text);

SYNDROME
شنبه 06 مرداد 1386, 21:28 عصر
با سلام

نه متاسفانه
من یه فیلد عددی به اسم age دارم که وقتی اونا با فبلد name استفاده میکنم جدول را فیلتر میکنه ولی وقتی فیلد ی مثلfamily را می آورم فیلتر میکنه ولی هیچ چیز را نمایش نمیده
به نظر شما مشکل از چیست
البته من کد زیر را نوشتم که برای فیلد سوم جواب نمیده
Form1.ADOTable1.Filtered:=True;
form1.ADOTable1.filter:='name='+QuotedStr(edit1.te xt)
+ ' or age'+ComboBox1.text+' '+QuotedStr(edit2.text)
+ ' or famil='+QuotedStr(edit4.Text);

فکر کنم اشکال شما در قسمتی که با رنگ قرمز مشکل کردم باشد.
دستور خود را به این شکل بنویسید.


form1.ADOTable1.filtered := False;
form1.ADOTable1.filter:=' name = '''+ Edit1.Text +''' OR Age = '+ComboBox1.text+' OR family='''+Edit4.Text+'''';
form1.ADOTable1.filtered := True;

موفق باشید

meghdadcomputer
شنبه 06 مرداد 1386, 21:31 عصر
دستت درد نکنه امتحان می کنم

meghdadcomputer
شنبه 06 مرداد 1386, 21:46 عصر
سلام
متاسفانه باز هم جواب نداد
این دفعه دیگه برای هیچکدام از فیلدها جواب نمیده و میگه آرگومانها اشتباه هستند
...........به هر حال من منتظرم....................

merced
شنبه 06 مرداد 1386, 23:22 عصر
چرا اولا با And کار می کردین .. حالا شد OR ؟؟

به هر حال اگه بخوام رو یه جدول چند از چند تا فیلد برای شرط استفاده کنم که هر کدومش ممکنه تو شرایطم باشه یا نباشه ....


fileter = ' 1 = 1 '
if edit1.text <> '' then filter := filter + ' and x =1 '
if edit2.text <> '' then filter := filter + ' and x2 =1 '

meghdadcomputer
یک شنبه 07 مرداد 1386, 11:55 صبح
با سلام
خدمت همه دوستان که در این یکی دو روز کمکم کردند
بالاخره با هزار دنگ وفنگ درست شد

meghdadcomputer
یک شنبه 07 مرداد 1386, 14:07 عصر
یه سوال دیگه
من می خوام یه کاری کنم که کاربر تا در یک edit حرف ب را زد تمام رکوردهایی که در آنها حرف ب هسترا بیاورد(لبته تو سایت یه چیزایی بود ولی کارم را راه ننداخت)

Batman
یک شنبه 07 مرداد 1386, 18:00 عصر
select * from tablename where filedname like "'+edit1.text+'%"
موفق باشید

meghdadcomputer
یک شنبه 07 مرداد 1386, 18:18 عصر
سلام
این کد را این طور نوشتم ولی بازم خطا میده من زیاد با کوئری کار نکرده ام اگه میشه تستش کنید وبرام بذارید

adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from table1 where name like "'+edit1.text+'%");
adoquery1.Open;

Batman
یک شنبه 07 مرداد 1386, 18:22 عصر
چه error ی میده؟

SYNDROME
یک شنبه 07 مرداد 1386, 19:08 عصر
با سلام




adoquery1.SQL.Add('select * from table1 where name like "'+edit1.text+'%");


دستور خود را به شکل زیر بنویسید.


adoquery1.SQL.Add('select * from table1 where name like "'+edit1.text+'%"');

یک ' در آخر دستور کم گذاشته ای.من آن را با رنگ قرمز مشخص کرده ام.
موفق باشید

meghdadcomputer
سه شنبه 09 مرداد 1386, 10:44 صبح
سلام
با تشکر ازهمه دوستان درست شد
فقط یه سوال اینکه SYNDROME جان قانون استفاده از ' (کوتیشن) در دستور فیلتر و همینSELECT چی هست که با یه کم و زیاد گذاشتن کل دستور غلط میشه
ممنون

Batman
سه شنبه 09 مرداد 1386, 11:24 صبح
دوست عزیز (meghdadcomputer) من فکر کردم خودت تک کوتیشن مربوط به دستورات sql رو گذاشتی
ایرادی نداره
اما کوتیشن ها
قانون خاصی نداره فقط تعداد کوتیشن های باز شده با تعداد کوتیشن های بسته شده باید برابر باشه مانند پرانتزها تو دستوری که خودت نوشتی یه دونه ' کم گذاشتی
موفق باشید

SYNDROME
سه شنبه 09 مرداد 1386, 15:37 عصر
قانون استفاده از ' (کوتیشن) در دستور فیلتر و همینSELECT چی هست که با یه کم و زیاد گذاشتن کل دستور غلط میشه



قانون خاصی نداره فقط تعداد کوتیشن های باز شده با تعداد کوتیشن های بسته شده باید برابر باشه مانند پرانتزها تو دستوری که خودت نوشتی یه دونه ' کم گذاشتی

کاملا درسته.
' اول را در دستور خود نگاه کنید.در آخر آن ' را نبسته اید.
در این گونه مواقع اگر به قسمت Messageها خود دلفی نگاه کنید پیغامی مبنی بر این موضوع دیده می شود.
موفق باشید