ورود

View Full Version : چطور این دستور بنویسم؟



a-azad
یک شنبه 16 تیر 1387, 09:36 صبح
سلام.یک کوئری دارم میخوام دو شرط روش برقرار کنم .یا شرط 1 یا شرط 2 یا هر دو.
یعنی یا حالت true بودن فیلتر یا select اس کیو ال یا هر دو باهم.
هرو باهم و شرط اس کیو ال جواب میده .ولی شرط فیلتر به تنهایی کار نمی کنه.فیلتر نمی کنه(یعنی حتماً اطلاعات مربوط به select هم باید پر شود )

چطور این دستور اصلاح کنم

adoquery1.close;
adoquery1.clear;
adoquery1.filterd:=false;
adoquery1.filterd:=true;
adoquery1.sql.text:='select * from table1 where date between '+quotedstr(edit1.text) +' and quotedstr'+(edit2.tect);
adoquery1.open

سپاسگزارم

Hsimple11
یک شنبه 16 تیر 1387, 14:12 عصر
دلیل اینکه فیلتر شما به تنهایی کار نمیکند این است که شرطی برای فیلتر نگذاشته اید. قبل از True کردن فیلترتان کدی مانند زیر را قرار دهید :


MyADOQuery.Filter := 'Filed1 = '+'چیزی که قرار است فیلتر بر اساس آن صورت گیرد'

a-azad
یک شنبه 16 تیر 1387, 14:52 عصر
شرایط فیلترم توی رویداد onfilterrecord نوشتم
Accept := (
(tntedit1.Text='') or
(Pos(tntedit1.Text,ADOQuery1.FieldByName('name').A sWIDEString)>0)
) and
(
(tntedit2.Text='') or
(pos(tntedit2.Text,ADOQuery1.FieldByName('num').As WIDEString)>0)
) and
(
(tntedit3.Text='') or
(Pos(tntedit3.Text,ADOQuery1.FieldByName('factory' ).AsWideString)>0)
) and
(
(Tntedit4.Text='') or
(Pos(Tntedit4.Text,ADOQuery1.FieldByName('center') .AsWIDEString)>0) ) and
(
(Tntedit5.Text='') or
(Pos(Tntedit5.Text,ADOQuery1.FieldByName('source') .AswideString)>0))
and
(
(Tntedit6.Text='') or
(Pos(Tntedit6.Text,ADOQuery1.FieldByName('destinat ion').AsWIDEString)>0) );

اصغر (پآچ)
یک شنبه 16 تیر 1387, 15:56 عصر
سلام دوست من

ببین چرا همه فیلتر ها تو توی همون دستورات SQL وارد نمیکنی
همه اون شرایطی رو هم که توی دستور Accept گذاشتی می تونی با یک If.... then بازسازی کنی

موفق و موید باشی

a-azad
یک شنبه 16 تیر 1387, 21:45 عصر
سلام.می شه یک نمونه اش بنویسی

hastii
دوشنبه 17 تیر 1387, 08:41 صبح
سلام
من پیشنهاد می کنم اول با توجه به اطلاعات وارد شده یک رشته از فیلتر بسازید و بعد به SQL اجرایی اضافه کنید. به صورت زیر:


Filter:=Filter+' AND name like '+QuotedStr('%'+Trim(tntedit1.Text)+'%');

SYNDROME
دوشنبه 17 تیر 1387, 21:26 عصر
adoquery1.close;
adoquery1.clear;
adoquery1.sql.text:='select * from table1 where date between '+quotedstr(edit1.text) +' and quotedstr'+(edit2.tect);
adoquery1.open

دستور خود را اول به شکل زیر بنویسید.
اگر کار کرد سپس عمل فیلتر را روی آن انجام دهید.


adoquery1.filtered:=false;
adoquery1.filter := ' (Field1=1) OR (Field2=2)'
adoquery1.filtered:=true;

من 2 تا شرط براتون گذاشتم که هر کدام و یا هر دو اگر درست باشد رکورد نمایش داده شود.
اگر باز هم مشکلی بود با مثال توضیح دهید تا بتوانیم بیشتر کمکتان کنیم.
موفق باشید

a-azad
سه شنبه 18 تیر 1387, 13:34 عصر
سلام.منظورتون نمی فهمم؟می شه بیشتر توضیح بدین

SYNDROME
سه شنبه 18 تیر 1387, 20:27 عصر
سلام.منظورتون نمی فهمم؟می شه بیشتر توضیح بدین
در گام اول رکوردهایی را که در زمان انجام کار نیاز دارید واکشی می کنید.
سپس با انجام یک عمل فیلتر رکوردهای مورد نیاز را که کاربر باید ببنید نمایش می دهید.
اگر جایی ابهام وجود دارد بیگویید تا دوستان راهنمایی کنند.
موفق باشید