PDA

View Full Version : سوال: میشه یه نفر تمام کد های فیلتر در AdoTable رو بگه؟؟



DelphiFriend
چهارشنبه 09 بهمن 1387, 23:11 عصر
میشه یه نفر لطف کنه و تمام کد های فیلتر در AdoTable رو بگه؟؟

bmanfy
جمعه 11 بهمن 1387, 10:57 صبح
AdoTable1.Filter := 'عبارت مورد نظر برای فیلتر' ;
AdoTable1.Filtered := True


به همین سادگی .
مثلا اگه بخوای رکوردهایی رو نشون بدی که id اونها بزرگتر از 10 باشه به این شکل میشه با فرض بر اینکه 10 رو دورن Edit1 ریخته باشی و با فرض بر اینکه id از نوع عددی باشه :


AdoTable1.Filter := 'id>'+ edit1.text ;
adotable1.diltered := True ;


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


Quetedstr() ;

DelphiFriend
شنبه 12 بهمن 1387, 17:59 عصر
خوب حالا چه طور میشه دو مقدار رو با هم جستجو کرد.یعنی من نام خاصی را که در بین دو تاریخ خاص در جدول دارم جستجو کنم؟

برای مثال:

فرض کنید جدولی داریم که نام و مشخصات و تاریخ ثبت نام دانش آموزان رو در خودش ذخیره کرده چه طور میشه کسانی رو جستجو کرد که نام مشخصی دارند و در یه تاریخ مشخص ثبت نام کرده اند؟

en.kamali.ir
شنبه 12 بهمن 1387, 23:02 عصر
با استفاده از همین مطالبی که دوستمون فرمودند میتونید این کار رو انجام بدید ولی باید اون مطالب رو بسط بدید یعنی با استفاده از پرانتز و عملگر هایی مانند and or و یا دیگر عملگر ها .

DelphiFriend
شنبه 12 بهمن 1387, 23:22 عصر
با استفاده از همین مطالبی که دوستمون فرمودند میتونید این کار رو انجام بدید ولی باید اون مطالب رو بسط بدید یعنی با استفاده از پرانتز و عملگر هایی مانند and or و یا دیگر عملگر ها .

این که فقط نوشتید با استفاده از and و یا or که مشکل کسی رو حل نمیکنه . کد کامل رو بزارید.

shervin farzin
یک شنبه 13 بهمن 1387, 02:32 صبح
این که فقط نوشتید با استفاده از and و یا or که مشکل کسی رو حل نمیکنه . کد کامل رو بزارید.
يكم مودبانه تر لطفا .
ايشون شما رو راهنمايي كردند ، يعني سر نخي به شما دادن تا با دنبال كردنش به جواب برسيد
از اين به بعدش مشكل شماست نه وظيفه ديگران .

lena abbaszadeh
یک شنبه 13 بهمن 1387, 10:02 صبح
سلام
میشه بگین quetedstr دقیقا چی کار میکنه؟
مثلا quetedstr(trim(edit1.text)) یعنی چی؟
tanx

bmanfy
یک شنبه 13 بهمن 1387, 10:19 صبح
این که فقط نوشتید با استفاده از and و یا or که مشکل کسی رو حل نمیکنه . کد کامل رو بزارید

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



AdoTable1.Filter := '(عبارت اول)' + عملگرهای منطقی + '(عبارت دومی)' ;
AdoTable1.Filtered := True ;

فرض کن میخوای کسانی رو نشون بدی که id انها بین 10 و 20 باشه .


adoTable1.Filter ;= '(id >=10) and (id <=20)' ;
adotable1.filtered := true ;


موفق باشید .

accpascal
یک شنبه 13 بهمن 1387, 19:55 عصر
ممکنه بفرمایید مشکل این کد چیه چون ارور می ده

query1.Filter:='(fld1 = '+ quotedstr('val1')+ ' or fld2 = '+quotedstr('val1')+')and(fld3 = '+ quotedstr('val2')+')';

en.kamali.ir
یک شنبه 13 بهمن 1387, 21:59 عصر
کد :
query1.Filter:='((fld1 = '+ quotedstr('val1')+ ') or( fld2 = '+quotedstr('val1')+'))and(fld3 = '+ quotedstr('val2')+')';

en.kamali.ir
یک شنبه 13 بهمن 1387, 22:02 عصر
شما عبارت های قبل از and رو میبایست در پرانتز هایی جداگانه بگذارید
(( شرط)or( شرط))and( شرط)
به جاگذاری پرانتزها دقت کنید

accpascal
یک شنبه 13 بهمن 1387, 22:38 عصر
شما عبارت های قبل از and رو میبایست در پرانتز هایی جداگانه بگذارید
(( شرط)or( شرط))and( شرط)
به جاگذاری پرانتزها دقت کنید
کد را به این صورت اصلاح کردم ولی باز جواب نمی دهد

query1.Filter:='(fld1 = '+ quotedstr('val1')+') and ((fld2 = '+ quotedstr('val2')+ ') or (fld3 = '+quotedstr('val2')+'))';

lena abbaszadeh
دوشنبه 14 بهمن 1387, 09:16 صبح
بد نیست جواب منم بدیناااااا:ناراحت:

merced
دوشنبه 14 بهمن 1387, 09:51 صبح
سلام
میشه بگین quetedstr دقیقا چی کار میکنه؟
مثلا quetedstr(trim(edit1.text)) یعنی چی؟
tanx

دو طرف رشته اي كه به عنوان پارامتر بهش ميفرسيد رو كوتيشن ميذاره.

مثلا بجاي اينكه بنويسيد .


filter = 'strfield = '''+edit1.text+ '''' ;

مينويسيد


filter = 'strfield = '+ quetedstr( edit1.text) ;

كه راحتره!

bmanfy
سه شنبه 15 بهمن 1387, 18:31 عصر
کد را به این صورت اصلاح کردم ولی باز جواب نمی دهد

دوست عزیز هر چی که به کد شما نگاه می کنم خطای دستوری نداره و ممکنه خطای نمطقی باشه . البته شما نگفتی خطایی که میده چیه !
نکاتی رو که حدس میزنم رو میگم .
_ بعضی از دوستان کد فیلتر رو مینویسن اما Filtered رو True نمیکنند که البته با توجه به اینکه گفتی خطا میده پس حتما این کار رو میکنی که خطا میده .
_ مسئله دوم اینه که فیلدهای نوع عددی نیازی نیست که برای اونها از تابع quotedstr استفاده کنی . و تنها کافیه که رشته باشه دیگه نیاز بع این نیست که در بین تک کتیشن قرار بگیره . و تنها این تابع رو باید برای فیلدهای از نوع رشته ای استفاده کنی .
_ مقادیر ارسال شده باید با نوع فیلد مطابقت داشته باشه .
_ اسامی فیلدها رو هم بررسی بکن ببین درست نوشتی یا نه ؟
......
اگر هیچ یک از این موارد نبود لطف کن و بگو چه خطایی میده .
موفق باشی .

accpascal
سه شنبه 15 بهمن 1387, 23:16 عصر
دوست محترم جناب Bmanfy
اولا تشکر که پیگیری می کنی
دوما اگر توجه کرده باش دستور من از ترکیب دودستور and و or تشکیل شده است جالب است که این دودستور هرکدام به تنهایی درست عمل می کند ولی وقتی ترکیب می شوند عمل نمی کند
تمام مواردی که شما فرمودید را چک کرده ام
فکر می کنم این یک مشکل کلی باشد
ضمنا متن ارور این است
Arguments are of the wrongtype,are out of acceptable rang,or are in confilict with one another

DelphiFriend
چهارشنبه 16 بهمن 1387, 14:02 عصر
من هنوز مشکلم حل نشده
من از تمام راههايي که در بالا دوستان ذکر کردند استفاده کردم ولي يا خطاي کامپايلري ميگرفت يا در حين اجراي برنامه خطا ميگرفت. ميشه با توضيحاتي که ميدم راهي معرفي کنيد.
من يه جدولي دارم با فيلدهاي نوع ، گروه ، تيتر و متن. حالا ميخواهم بيت اطلاعاتي که از نوع خاصي هستند و داراي گروه خاصي ميباشند، تيتر خاصي رو جستجو کنم.
توضيح: من از AdoTable استفاده ميکنم.

bmanfy
پنج شنبه 17 بهمن 1387, 09:33 صبح
کاش نوع فیلدهاتو هم میگفتی .
با فرض گروع تز نوع عدد باشه و تیتر از نوع متن و با فرض بر اینکه مقادیر رو از Edit میخونه به شکل زیر میشه :


AdoTable1.Filter := '(Group = ' + EditGroup.Text + ') and ( Titr = ' + QuotedStr(EditTitr.Text) + ')' ;
AdoTable1.Filtered := True ;

bmanfy
پنج شنبه 17 بهمن 1387, 10:16 صبح
وقتی ترکیب می شوند عمل نمی کند

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