# پایگاه‌های داده > سایر پایگاه‌های داده > Access > مقاله: ساخت فیلتر های پیچیده با استفاده از تابع EasyFilter در اکسس

## mhkavian

مبحث  فيلتر كردن فرم ها يكي از مهم ترين مباحث در نرم افزار اكسس مي باشد .  تاكنون امكانات و ابزار هاي گوناگوني توسط خود مايكروسافت و ساير شركت ها و  افراد مختلف براي ساده سازي اين فرآيند طراحي گرديده است .  امكانات خود نرم افزار اكسس براي فيلتر كردن فرم هاي در حال نمايش بسيار قوي مي باشد ولي با دو مشكل عمده همراه مي باشد :


اين  امكانات به هنگام بستن منو و ريبون ها در برنامه اي كه تحويل كاربرنهايي مي  گردد ، غير فعال مي شوند و استفاده از آنها ممكن ولي با مشكلاتي همراه مي  باشد .تغيير زبان اين امكانات براي فارسي زبانان كاري بسيار مشكل مي باشد .

لذا  اكثر كاربران براي ايجاد امكان فيلتر كردن در فرم هاي خود اقدام به كد  نويسي نموده كه اين كار نيز به نوبه خود كار پيچيده اي است و براي تمامي  كاربران امكان پذير نمي باشد .  اين  مشكل با افزايش تعداد فيلدها و امكان پر يا خالي بودن تصادفي آنها به  هنگام فيلترينگ و متغير بودن نوع فيلدهاي استفاده شده در فيلتر ، دوچندان  شده ، به نحوي كه ساختن فرمهاي فيلتر و جستجو را براي كاربران به امري شدني  ولي طاقت فرسا تبديل نموده است .

 



لذا مصمم شدم تا ساخت پيچيده  ترين فيلتر ها را براي فرم هاي در حال نمايش به پروسه اي بسيار ساده تبديل نمایم و تابع mantis_easy_filter را طراحی و در این انجمن قرار دادم تا به کمک اساتید و سایر اعضای گرامی سایت نواقص احتمالی آن را رفع کرده و آنرا توسعه بخشیده تا قابل استفاده برای عموم گردد . 
تابع  Mantis_Easy_Filter  ، كه از طريق ساخت يك عبارت قابل استفاده در خاصيت  filter فرم ها ، انجام فيلتر را راحت كرده ، به نحوي طراحي گرديده كه  كنترل هاي متني ( TextBox , ComboBox , CheckBox ,MultiValueBox ) روي فرم  را ( در صورتي كه نام آنها از قواعد خاصي كه مختص اين تابع است پيروي كرده  باشد  ) شناسايي كرده و با توجه به مقدار درون آنها كه مي تواند حتي Null  هم باشد ، عبارت فيلتر را ساخته و مورد استفاده قرار دهد .  
براي استفاده از اين تابع بايستي مراحل ذيل را قدم به قدم براي رسيدن به هدف انجام داد :


كنترل  هاي فيلتر و جستجو در درون يك فرم اصلي قرار مي گيرد كه اين فرم به اين  منبع داده اي متصل نيست و كليه كنترل ها به صورت unbound مي باشند .در درون فرم اصلي بايستي يك Sub Form قرار گيرد كه در اين سابفرم فيلدهاي مورد جستجو قرار مي گيرد . و Sub Formبه جدول يا پرسش خاصي متصل مي باشد و كنترل ها درون آن نيز به فيلدها bound  شده اند . لازم به ذكر است كه اين Sub Formمي تواند در هر نمايي اعم از Datasheet , Single Form , Continuous Forms باشد .هر  يك كنترل هاي روي فرم اصلي را كه قرار است به عنوان شرط فيلتر يا جستجو  استفاده شود طبق قاعده زير نام گذاري نماييد . (خاصيت name كنترل):

نام كنترل از سه قسمت تشكيل مي شود :  قسمت اول (پيشوند ) : يك عبارت سه حرفي است كه نوع فيلد مورد جستجو را تبيين مي كند .   اين عبارت سه حرفي بايستي قطعا يكي از موارد ذيل باشد .    Str : براي فيلدهاي متني   Val  : براي فيلدهاي عددي   Bol : براي فيلدهاي Boolean   Mul : براي فيلدهاي multivalue   Bt1 : براي فيلدهاي بازه اي عددي ( از عدد )   Bt2 : براي فيلدهاي بازه اي عددي ( تا عدد )   Dt1 : براي فيلدهاي بازه اي تاريخ ( از تاريخ )   Dt2 : براي فيلدهاي بازه اي تاريخ ( تا تاريخ ) قسمت دوم (نام فيلد ) : نام فيلدي است كه قرار است مورد جستجو قرار گيرد . قسمت  سوم (پسوند ) : عبارت ثابت flt مي باشد كه كنترل را براي تابع قابل  شناسايي مي كند كه باعث مي شود از مقادير درون اين كنترل در ساخت عبارت  فيلتر استفاده شود .  لازم به ذكر است كه قسمت اول ، دوم و سوم با استفاده از كاراكتر underline يا همان “_”  ، بايستي به هم متصل شوند .  به  طور مثال اگر ما قصد ايجاد فيلتر بروي يك فيلد با نام ID كه از نوع عددي  مي باشد داشته باشيد نام كنترل بايستي دقيقا عبارت “val_id_flt” باشد .  در مثال فوق اگر نوع فيلد متني باشد بايستي نام كنترل عبارت “str_id_flt “ باشد .  مثال  ديگر : در صورتي كه بخواهيد از دو تكست باكس براي تعيين بازه زماني در  فيلتر استفاده كنيد و نام فيلد مورد جستجو در جدول مثلا invoice_date و از  نوع date& time باشد ، بايستي خاصيت Name يكي از كنترل هاي متني را  برابر با “dt1_invoice_date_flt”  و خاصيت name  دومي برابر با  “dt2_invoice_date_flt”  قرار دهيد .  لازم به ذكر است در صورتي كه فيلد تاريخ شما در جدول از نوع عددي باشد بايستي از پيشوند عبارت bt1   و     bt2 به جاي dt1 و dt2 استفاده نماييد .  4 – آخرين قدم ساخت دكمه  "فيلتر"  و دكمه "حذف فيلتر" مي باشد : دكمه فيلتر : يك دكمه با نام فيلتر ايجاد نماييد و دو خط كد زير را در خاصيت on click آن درج كنيد :  Me.*SubForm_Name*.Form.Filter = Easy_filter_all(“*SubForm_RrecordSource*”) Me.* SubForm_Name*.Form.FilterOn = True لازم به ذكر است كه به جاي عبارت *SubForm_Name*در كد فوق بايستي نام سابفرم استفاده شده در فرم اصلي درج گردد . ( خاصيت name كنترل subform موجود )  همچنين به جاي عبارت *SubForm_RrecordSource*در  كد فوق بايستي نام جدول يا پرسشي جايگزين شود كه سابفرم به آن متصل مي  باشد . ( عبارت sql در اينجا قابل پشتيباني نبوده و بايستي تبديل به پرسش  شده و سپس ازنام پرسش استفاده شود . )  دكمه حذف فيلتر : يك دكمه با نام حذف فيلتر ايجاد نماييد و دو خط كد زير را در خاصيت on click آن درج كنيد :  Me.* SubForm_Name*.Form.FilterOn = False R_remove = Easy_remove_filter_all() در  پايان ذكر اين نكته ضروري به نظر مي رسد كه سادگی پروسه به ظاهر پيچيده فوق بعد از یک بار استفاده محرز می گردد به طوریکه تنها با چهار خط كد vba و يك نام گذاري مناسب روي فيلدها می توان برنامه را به یک جستجوی پیشرفته در هر کدام از جداول یا پرسش ها مجهز نمود . 
 همچنين  براي اضافه كردن يك فيلد اضافه برای جستجو در فرم  ، كاربر كافي است كه فيلد مورد  نظر را به سابفرم اضافه نموده و كنترل متناظر با آن فيلد را با يك نام  گذاري مناسب در فرم اصلي قرار دهد . و بدون كدنويسي جديد يا تغيير كدنويسي  هاي موجود به هدف خود برسد .  در  اين روش با توجه به محدوديت تعداد كاراكتر خاصيت فيلتر كه 1024 كاراكتر مي  باشد با يك نامگذاري مناسب ( با توجه به استفاده از پيشوند و پسوند بهتر  است نام فيلدها كوتاه تر در نظر گرفته شود . ) روي فيلدها مي توان از 30  الي 40 فيلد براي فيلترينگ همزمان استفاده كرد .  لطفا  براي درك نحوه استفاده ازاين تابع پس از مطالعه اين مقاله ، فيلم آموزشي  تهيه شده را نيز ملاحظه نموده و سپس فايل پيوست را كه به صورت عملي اين روش  در آن پياده سازي شده ، دانلود و مرور نماييد .
فایل نمونه را می توانید از این آدرس دانلود نمایید . 

*نمونه فایل ساخت فیلتر های پیچیده با استفاده از تابع EasyFilter  در اکسس*


فیلم آموزشی نحوه استفاده از تابع :
ایجاد فیلتر و جستجو ی پیشرفته با استفاده از تابع Easy Filter : قسمت اول 
ایجاد فیلتر و جستجو ی پیشرفته با استفاده از تابع Easy Filter : قسمت دوم
ایجاد فیلتر و جستجو ی پیشرفته با استفاده از تابع Easy Filter : قسمت سوم


پیروز و سربلند 
کاویان

----------


## mazoolagh

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

----------


## Nazir Ahmad

عرض سلام و خسته نباشید خدمت   گرامی
من تمام این کارایی که گفتید رو انجام دادم اما فیلتر انجام نمیشه و پیغام زیر رو میده.
لطفا راهنمایی کنید که مشکل چیه؟
 در ضمن نمونه‌ای که خود شما هم گذاشتید عمیله فیلتر انجام نمیشه. حالا نمیدونم مشکل از کجاست. (البته من از آفیس 2013 استفاده میکنم)
ممنون 
یا حق

----------


## mhkavian

با سلام
ضمن تشکر از اطلاع رسانی شما ، مشکل در تنظیم references بود که برطرف گردید می تونید مجددا از همون آدرس دانلود و استفاده کنید . 
در صورتی که باز هم مشکل دارید احتمالا به نسخه آفیس شما و رفرنس DAO 3.6  برمی گردد که بایستی در قسمت references رفته و نسخه بالاتر این رفرنس رو پیدا کرده و جایگزین کنید . 
با تشکر
کاویان

----------


## Nazir Ahmad

> با سلام
> ضمن تشکر از اطلاع رسانی شما ، مشکل در تنظیم references ها بود که برطرف گردید می تونید مجددا از همون آدرس دانلود و استفاده کنید . 
> در صورتی که باز هم مشکل دارید احتمالا به نسخه آفیس شما و رفرنس DAO 3.6  برمی گردد که بایستی در قسمت references رفته و نسخه بالاتر این رفرنس رو پیدا کرده و جایگزین کنید . 
> با تشکر
> کاویان


 سلام دوباره
فایل رو دوباره دانلود کردم اما باز هم همون ارور رو میده 
البته فایل اصلی شما مشکلی نداره اما وفتی تو فایل خودم همه اون کارایی که گفتید رو انجام میدم باز هم با همون پیغام پست 3# مواجه میشم.
فایل رو هم ضمیمه کردم. اگر ممکنه یه نگاهی بهش بندازید.
و یک سوال دیگه اینکه من بخش reference رو پیدا نکردم. اگر ممکنه بیشتر توضیح بدید.

ممنون 
یا حق

----------


## abas1388

سلام جناب كاوياني!
نمونه فوق در قالب چه ورژني از اكسس تهيه شده؟ من با اكسس 2003 و 2007 نميتوانم آن را باز كنم.
با تشكر

----------


## mhkavian

با سلام




> نمونه فوق در قالب چه ورژني از اكسس تهيه شده؟ من با اكسس 2003 و 2007 نميتوانم آن را باز كنم.


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




> فایل رو دوباره دانلود کردم اما باز هم همون ارور رو میده 
> البته فایل اصلی شما مشکلی نداره اما وفتی تو فایل خودم همه اون کارایی که  گفتید رو انجام میدم باز هم با همون پیغام پست 3# مواجه میشم.
> فایل رو هم ضمیمه کردم. اگر ممکنه یه نگاهی بهش بندازید.
> و یک سوال دیگه اینکه من بخش reference رو پیدا نکردم. اگر ممکنه بیشتر توضیح بدید.


برای رفع مشکل محتویات فایل شما را در فایل mantis_easy_filter وارد کردم . که دیگه اون ارور رو نمی ده . 
برای جواب گرفتن فایلتون مشکلات زیادی داشت که برطرف شد. به طور  مثال در نام جداول و فیلدها نباید از عملگر های -  = + &  و غیره استفاده می کردید که اصلاح شد . در غیر اینصورت تابع کار نخواهد کرد .

easy_filter.rar

برای تنظیم رفرنس در قسمت visual basic editor با یستی به منوی tools گزینه references رفته و توابع لازم را در آنجا کم و زیاد کنید . 

پیروز و سربلند
کاویان

----------


## 1397mehrdad

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

----------


## mhkavian

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

docmd.openreport "myreport",,me.filter
با سپاس
کاویان

----------


## 1397mehrdad

با تشکر از جناب کاویان . 
من راه حل شما رو امتحان کردم ولی جواب نداد . اگه ممکنه ی نمونه بگذارید
با تشکر

----------


## mhkavian

با سلام
در پست اول و پست شماره 7 دو نمونه آورده شده است . 
اگر ممکنه نمونه تون رو اینجا آپلود کنید تا بررسی بشه . 
با سپاس
کاویان

----------


## 1397mehrdad

من هر دو فایل رو دانلود کردم . فایل پشت شماره 1 اصلا باز نمی شه و فرمهای فایل پست شماره 7 هم باز نمی شه . لطفا در صورت امکان اصلاحشون کنید .
ممنون

----------


## hamid-nice

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

----------


## mhkavian

با سلام
ضمن تشکر از بررسی شما بر روی تابع به عرض می رساند که به مطلب درستی اشاره فرمودید . البته لازم به ذکر است که این تابع برای شرایطی طراحی شده که کاربر از استفاده از امکانات اکسس به دلیل امنیتی محروم شده است . در غیر این صورت اکسس امکانات فوق العادی ای برای انجام فیلترینگ فراهم نموده است . 
با توجه به اینکه در فیلتر با استفاده از امکانات اکسس نیز از خاصیت فیلتر فرم استفاده می شود ، بایستی یکی از این دو روش را انتخاب نمود . در غیر این صورت باید به گونه ای باشد که هنگامی که با استفاده از راست کلیکل سابفرم را فیلتر می کنیم ؛ فیلدهای بالا نیز که برای فیلتر در فرم اصلی تعبیه شده اند دارای مقداری شود که همان فیلتر را نتیجه دهد . البته انجام اینکار کار پیجیده ولی ممکنی می باشد که بایستی با استفاده از ترجمه معکوس عبارت فیلتر صورت پذیرد ولی مشکلی که بر سر راه است این است که ممکن است کاربر در فرم اصلی ( قسمت بالای فرم ) ، هیچ جعبه متنی با نام مناسب برای فیلدی که در سابفرم آن را با راست کلیک فیلتر کرده است فراهم ننموده باشد . 
به عبارت بهتر می توان گفت که ایجاد یک فیلتراسیون یکپارچه  با سایر روش های فیلتراسیون موجود در اکسس کاری شدنی که این محدودیت را به همراه دارد که بایستی فیلدهای موجود در سابفرم با جعبه متن های تعبیه شده برای انجام عملیات فیلتر در بالای فرم دقیقا متناظر باشند . در غیر اینصورت مبحث یکپارچگی دچار مشکل می شود . 
با سپاس 
کاویان

----------


## hamid-nice

با سلام
 از آنجا که شما موضوع فیلتر را به صورتی جامع مطرح کرده اید و برای آن اقدام به نوشتن تابع جامعی کرده اید انتظار می رود که این پیچیدگی ها لحاظ شود
2- راست کلیک را می توان با استفاده از ماکرو ها ایجاد کرد و هیچ نیازی به دسترس بودن منوی راست کلیک اصلی اکسس نیست بنابراین نیاز به لحاظ این پیچیدگی می باشد (البته من این کار را با ادغام فلتراسیون با کوئری انجام داده ام که عالی عمل می کند ) ولی در استفاده از فقط دستور filter شاید اگه بتوان فیلتر کردن با راست کلیک را با نامی یا ... ذخیره کرد و هنگام اعمال فیلتر آنرا فراخوانی و  لحاظ کرد جوابگو شود
و من الله توفیق
موفق باشید

----------


## mhkavian

با سلام



> مشکلی که بر سر راه است این است که ممکن است کاربر در فرم اصلی ( قسمت  بالای فرم ) ، هیچ جعبه متنی با نام مناسب برای فیلدی که در سابفرم آن را  با راست کلیک فیلتر کرده است فراهم ننموده باشد . 
> به عبارت بهتر می توان گفت که ایجاد یک فیلتراسیون یکپارچه  با سایر روش  های فیلتراسیون موجود در اکسس کاری شدنی که این محدودیت را به همراه دارد  که بایستی فیلدهای موجود در سابفرم با جعبه متن های تعبیه شده برای انجام  عملیات فیلتر در بالای فرم دقیقا متناظر باشند . در غیر اینصورت مبحث  یکپارچگی دچار مشکل می شود .


به نظر من اگر کاربر را مجبور کنیم که تمام فیلدهای موجود در سابفرم را برای انجام عملیات فیلتر روی فرم اصلی بیاورد عملا filter by form خود اکسس را شبیه سازی کرده ایم که عملا کاربر و برنامه نویس را دچار یک محدودیت بزرگ ( همان استفاده از تمامی فیلدها برای جستجو ) نموده ایم . 
به نظر شما در خصوص این مشکل چه راه کاری می توان پیش گرفت ؟
اگر راه کارتون قابل بهره برداری هست و براتون ممکنه آپلود کنید . 

با سپاس
کاویان

----------


## hamid-nice

با سلام 
چشم ، به زودی نمونه ای کاملا فراگیر و ساده که فیلتر بر اساس قسمت بالای فرم با انتخاب دلخواه تعداد فیلد ( نه لزوما همه فیلد ها ) و هم بر اساس راست کلیک که هردو همدیگر را پوشش دهند در هر صور تی بر روی نتایج همدیگر فیلتر را انجام دهند خدمتتان ارایه می کنم و اگر همه دوستان لطف کنند و چک کنند و اگر اشکالی بود تذکر دهند ممنون می شم 
اما جناب کاویان در ضمن تشکر از زحماتتان ،اگر می توانید پروژه خود را بر اساس همان یک روش کامل کنید یا روشی دیگر که تابعی باشد که بتوان به راحتی متغیر های دلخواه را تعریف کرد نیز بسیار خوب بود ، دوستان دیگر هم اگر بتوانند به شما کمک کنند که چه بهتر و پروژتون زودتر به نتیجه می رسد و قابل بهره برداری برای همه
با تشکر

----------


## 1397mehrdad

میشه نمونه ای که بوسیله اکسس 2003 هست رو یک بار دیگه در سایت قرار بدید؟فایل نمونه قبلی مشکل داره و فرمهاش باز نمی شه !!!
ممنون

----------


## hamid-nice

با سلام 
نمونه ای که در پست قبلی ام وعده داده  بودم را در ضمیمه پیوست کردم
نحوه کاربرد :
در قسمت بالا هر عبارتی که تایپ کنید دقیقا همان را با زدن کلید جستجو سرچ می کند
2-اگر می خواهید از نتایج یافته شده قسمتی ار یک فیلد را سرچ کنید به قسمت نتایج رفته در فیلد مورد نظر با موس همان قسمت از متن داخل فیل مورد نظر را انتخاب و با راست کلیک فیلتر کنید
3- اگر خواستید فیلتر راست کلیک را دوباره حذف کنید ولی نتایج قبلی که با دگمه جستجو بدست آمده بود را حفظ کنید (برگردد) کافی است با راست کلیک حذف فیلتر را بزنید
4- در هر صورت چه ابتدا با راست کلیک فیلتر کنید و بعد با جستجوی بالای صفحه یا حتی بالعکس فیلتر ها بر روی نتایج همدیگر عمل می کنند
5- برای حذف فیلتری که در بالای صفحه توسط دگمه جستجو انجام می دهید ار دگمه زیر آن استفاده کنید
6-برای حذف کل فیلتر های انجام شده ( توسط دگمه جستجو و راست کلیک ) باید هم دگمه زیر دگمه جستجو و هم حذف  فیلتر توسط راست کلیک کردن را انجام داد )یا از دگمه حذف کلیه فیلترها استفاده شود برای اینکه کاربر متوجه این باشد که از فیلترینگ راست کلیک استفاده کرده یا نه من یک دگمه با عکس چراخ درست می کنم که وقتی از فیلتر راست کلیک استفاده کند خاصیت visible آنرا yes و وقتی آنرا با راست کلیک حذف کرد این خاصیت No شود لذا کار به بهترین وجه کامل می شود . 
دوستان لطفا موارد عنوان شده را تست فرمایند و اگر ایرادی وجود داشت اعلام  نمایند 
با تشکر

----------


## 1397mehrdad

> با تشکر از جناب کاویان . 
> من راه حل شما رو امتحان کردم ولی جواب نداد . اگه ممکنه ی نمونه بگذارید
> با تشکر


کسی می تونه ی نمونه بگذاره که فیلتر انجام شده به یک گزارش وصل بشه و اون گزارش نمایش داده بشه؟

----------


## G.hemati

با سلام و احترام خدمت تمامی دوستان 



> دوستان لطفا موارد عنوان شده را تست فرمایند و اگر ایرادی وجود داشت اعلام نمایند


اکثر دوستان در فایل نهایی خود تیک های قسمت Startup  رو غیر فعال میکنن تا کاربران غیر مجاز به محیط طراحی دست پیدا نکنن . با این عمل ، عملا کلید راستی وجود ندارد که عمل فیلتر رو انجام بده 

در این مواقع چگونه عمل باید کرد.

----------


## hamid-nice

> با سلام و احترام خدمت تمامی دوستان 
> 
> 
> اکثر دوستان در فایل نهایی خود تیک های قسمت Startup  رو غیر فعال میکنن تا کاربران غیر مجاز به محیط طراحی دست پیدا نکنن . با این عمل ، عملا کلید راستی وجود ندارد که عمل فیلتر رو انجام بده 
> 
> در این مواقع چگونه عمل باید کرد.


با سلام 
با تشکر از ابراز نظرتان منوی راست کلیک را باید خودتان در برنامه ایجاد کنید
فایل ضمیمه در پست 19# مطابق با در خواست شما اصلاح و یک دگمه برای حذف هر دو فیلتراسون هم اضافه گردید
در ضمن جناب کاویان این تاپیک مربوط به شماست و پروژه خودتان را ادامه دهید و پست و فایلی که ارائه دادم صرفا به درخواست خودتان با روشی متفاوت بوده است و دیگر دوستان هم به پیشبرد موضوع این تاپیک بانظراتشان ادامه خواهند داد
برای اینکه ابراز نظر دوستان در رابطه با فایلی که اینجانب قرار دادم مزاحم و باعث به انحراف کشیده شدن موضوع شما نشود تاپیک زیر را ایجاد کردم که کسانی که مایل به بررسی فایل اینجانب هستند در این تاپیک ابراز نظر نکرده و به جای آن در تاپیک زیر ادامه دهند
https://barnamenevis.org/showthread.p...84%DB%8C%DA%A9
با تشکر
موفق باشید

----------


## Nazir Ahmad

سلام دوباره
یه سوال دیگه اینکه که در صورتیکه یکی یا چند تا از فیلدهایی رو که میخواهیم فیلتر کنیم به شکل مولتی سلکت باشه یعنی ما  به جای کمبوباکس از لیست باکس استفاده میکنیم و میخواهیم چند گزینه از لیست باکس رو  انتخاب کنیم و عملیة فیلتر رو انجام بدیم؛ چیکار کنیم.

ممنون
یاحق

----------


## Ermoodi

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

----------


## مجتبی8522201617

با سلام 
دوستان و مهندسین گرامی
من این تابع رو انجام دادم ولی با مشکل compile error مواجه شدم. درحالیکه بسیار علاقمند شده بودم که این کار فوق العاده رو روی برنامه خودم انجام بدم اما متاسفانه نشد.
در قسمت tools نیز گزینه refrence غیر فعال است.
و نکته دیگه اینکه در فیلم مشاهده شده، وقتی اولین حرف Easy filter رو وارد می کنید، چند گزینه به صورت پیشنهاد به شما می دهد ولی وقتی من این کارو می کنم هیچ خبری از پیشنهادات نیست.
خواهش می کنم راهنمایی بفرمائین
با تشکر فراوان

----------


## mehran_sm2010

*برادر گرامي جناب آقاي كاويان؛*
با سلام و تشكر به خاطر كار ارزشمندتون، بنده موفق نشدم فايلهاي آموزشي رو دانلود كنم. 
وقتي لينك رو كليك ميكنم وارد آدرس زير مي‌شه كه امكان دانلودش هم كار نميكنه:
https://www.dropbox.com/s/ndevvbg0pnke8rv/Mantis_easy_filter_1.swf
خواهش مي‌كنم بررسي و تصحيح بفرماييد. در آخر كاري كه از دست بنده براي افرادي مثل شما بر‌مياد يك دعاست:
تنت به ناز طبیبان نیازمند مباد -       وجود نازکت آزرده گزند مباد
در آن بساط که حسن تو جلوه آغازد   - مجال طعنه بدبین و بدپسند مباد

----------


## mhkavian

با سلام
ممنون از حسن نظرتون ، من هم برای شما آرزو سلامتی و بهروزی دارم . 
در خصوص دانلود فیلم ها با مرورگر فایرفاکس امتحان کنید احتمالا مشکلی نداره ! 




> من این تابع رو انجام دادم ولی با مشکل compile error مواجه شدم. در قسمت tools نیز گزینه refrence غیر فعال است.


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

----------


## مجتبی8522201617

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

----------


## مجتبی8522201617

کاویااااااااااااااااااااا  ااااااااااااااااااااااااا  ااااااااااااااااااااااااا  اااااااااااان
heeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeelp

----------


## mehran_sm2010

با سلام مجدد وخسته نباشید؛ جناب کاویان- من با استفاده از فایلی که دانلود کردم یک فرم جستجو درست کردم و همه مراحل رو به دقت انجام دادم. ابتدا پیغام ایراد کامپایل رو میداد که درست شد ولی مشکلی که الان دارم، عمل جستجو انجام نمی شود . مطمئنم که مراحل کار هم درست است . اگر ممکن است بفرمایید که در قسمت رفرنس باید چه تنظیماتی را انجام بدهیم و کدام گزینه ها بایدتیک خورده و یا کدام گزینه ها باید تیکشون برداشته شود.  فکر میکنم این مشکلی هست که اکثر کاربران و مراجعین به این تاپیک داشته باشند. در ضمن دقیقا از کدام نسخه (آفیس) اکسس 2007 استفاده کنیم که دیگر این مشکلات را نداشته باشیم. باز هم از کار عالی و پر محتواتون قدردانی میکنم.

----------


## mhkavian

با سلام
شما در صورتی که از اکسس 2010 استفاده کنید و یک فایل جدید ایجاد کنید و تمامی آبجکت های مورد نیاز خودتون رو از فایل قبلی خود و فایل mantis_easy_filter به درون آن منتقل کنید هیچ مشکلی نخواهید داشت . 
حداقل رفرنس های لازم  هم برای 2010 اینها هستش : 


فایل دو پست قبل هم به همین روش اصلاح و قابل دانلود Database2.rarگردید . 
از دوستان خواهش می کنم که با توجه به اینکه مدتهاست اکسس 2013 ارائه شده ، به نسخه قبل از آن یعنی اکسس 2010 مهاجرت کنند . 
با سپاس
کاویان

----------


## مجتبی8522201617

جناب کاویان 
ممنوووووووووووووووووووووو  ووووووووووووووووووووووووو  ووووووووووووووووونم!!
you're a life saver

----------


## ARData

با تشکر از تمامی دوستان با توجه به تلاش زیاد جهت ساخت این برنامه ، بهتر بود بدون اعمال Apply Filter و در زمان On Change فیلد ها ، فیلترها اعمال میشد !!!

----------


## mhkavian

سلام
با public  کردن کد متصل به دکمه اعمال فیلتر و سپس hide کردن آن دکمه ، می توان کد عمومی شده را در رویداد on change  هر یک از کنترل ها فراخوانی کرد و به هدف رسید . 
با سپاس
کاویان

----------


## Nazir Ahmad

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

ممنون 
یا حق

----------


## Nazir Ahmad

سلام خدمت جناب کاویان
یه مشکل دیگه هم پیدا شد. اینکه مثلا من یه فیلد دارم از جنس تکست که کلاس رو نشون میده؛ حالا تعداد کلاسها به این شکل تعیین میشه: مثلا 1(الف)، 1(ب)،2(الف)، 2(ب)، ...، 11(الف)، 11(ب)، 12(الف) و ... .
حالا وقتی ما مثلا از لیست کمبو باکسی که برای فیلتر ساختیم 1(الف) رو انتخاب میکنیم 11(الف) هم فیلتر میشه. یا اگر 2(الف) رو انتخاب کنیم 12(الف) هم به صورت فیلتر شده نشون داده میشه.
ممنون میشم اگر اصلاح بشه.

یا حق

----------


## Qad2013

> سلام خدمت جناب کاویان
> یه مشکل دیگه هم پیدا شد. اینکه مثلا من یه فیلد دارم از جنس تکست که کلاس رو نشون میده؛ حالا تعداد کلاسها به این شکل تعیین میشه: مثلا 1(الف)، 1(ب)،2(الف)، 2(ب)، ...، 11(الف)، 11(ب)، 12(الف) و ... .
> حالا وقتی ما مثلا از لیست کمبو باکسی که برای فیلتر ساختیم 1(الف) رو انتخاب میکنیم 11(الف) هم فیلتر میشه. یا اگر 2(الف) رو انتخاب کنیم 12(الف) هم به صورت فیلتر شده نشون داده میشه.
> ممنون میشم اگر اصلاح بشه.
> 
> یا حق


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

----------


## Nazir Ahmad

> سلام خدمت جناب کاویان
> یه مشکل دیگه هم پیدا شد. اینکه مثلا من یه فیلد دارم از جنس تکست که کلاس رو نشون میده؛ حالا تعداد کلاسها به این شکل تعیین میشه: مثلا 1(الف)، 1(ب)،2(الف)، 2(ب)، ...، 11(الف)، 11(ب)، 12(الف) و ... .
> حالا وقتی ما مثلا از لیست کمبو باکسی که برای فیلتر ساختیم 1(الف) رو انتخاب میکنیم 11(الف) هم فیلتر میشه. یا اگر 2(الف) رو انتخاب کنیم 12(الف) هم به صورت فیلتر شده نشون داده میشه.
> ممنون میشم اگر اصلاح بشه.
> 
> یا حق


جناب کاویان عزیز برای این مشکل راه حلی یافت نشد؟
درضمن یه مشکل دیگه هم اینه که وقتی از تابع EasyFilter در فرمهای Navigation Form استفاده میکنیم عمل نمیکنه.
به شکلی که در فرمهای ناویگیشن در داخل فرم تب‌هایی را تعریف میکنیم که با کلیک بر روی هر تب یک فرم رو در قسمت ساب‌فرم ناویگیشن باز میکنه.
حالا من یه فرم را با استفاده از این تابع درست کردم و وقتی فرم را باز میکنم عملیات فیلتر جواب میده اما وقتی همون فرم رو در یکی از تب‌های ناویگیشن فرم باز میکنم؛ تابع دیگه عمل نمیکنه.
ممنون میشم در این مورد راهنمایی کنید.

یا حق

----------


## alitor

> کسی می تونه ی نمونه بگذاره که فیلتر انجام شده به یک گزارش وصل بشه و اون گزارش نمایش داده بشه؟


 این سوال من هم بود

----------


## mehdidanesh

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

Private Sub Command19_Click()
Me.frm_interaction_sub2.Form.Filter = Easy_filter_all("qry_test")
Me.frm_interaction_sub2.Form.FilterOn = True
End Sub

test.png

----------


## mhkavian

سلام
لطفا فایلتون رو بفرستید تا بررسی بشه .

----------


## hmdrzy

> من هم دقیقا با همین مشکل که ایشان گفتند مواجهم. لطفا راهنمایی کنید.


این طور نامگذاری اشتباه است. اگر اعداد بیش از دو رقم نیست، باید به این صورت نامگذاری شوند:
01 و 02 و 03 و . . . و 09 و 10 و 11 و . . .
اگر سه رقمی باشند به این صورت:
001 و 002 و 003 و . . . و 09 و 010 و 011 و . . . 099 و 100 و 101 و . . .

----------


## hmdrzy

> سلام خدمت جناب کاویان
> یه مشکل دیگه هم پیدا شد. اینکه مثلا من یه فیلد دارم از جنس تکست که کلاس رو نشون میده؛ حالا تعداد کلاسها به این شکل تعیین میشه: مثلا 1(الف)، 1(ب)،2(الف)، 2(ب)، ...، 11(الف)، 11(ب)، 12(الف) و ... .
> حالا وقتی ما مثلا از لیست کمبو باکسی که برای فیلتر ساختیم 1(الف) رو انتخاب میکنیم 11(الف) هم فیلتر میشه. یا اگر 2(الف) رو انتخاب کنیم 12(الف) هم به صورت فیلتر شده نشون داده میشه.
> ممنون میشم اگر اصلاح بشه.
> 
> یا حق


این طور نامگذاری اشتباه است. اگر اعداد بیش از دو رقم نیست، باید به این صورت نامگذاری شوند:
01 و 02 و 03 و . . . و 09 و 10 و 11 و . . .
اگر سه رقمی باشند به این صورت:
001 و 002 و 003 و . . . و 09 و 010 و 011 و . . . 099 و 100 و 101 و . . .

----------


## hamid_147

با سلام خدمت اقاي كاويان
من تو اكسسم رفرنس Microsoft office 14.0 axxess database engine object library  رو نميبينم
نه در نسخه 2010 نه در نسخه 2007 از كجا اين رفرنسو پيدا كنم؟
چون وقتي تابع *easy_filter_all* رو ميزنم اصلاً نمي شناستش
ممنون ميشم راهنمايي بفرماييد باتشكر

----------

