به تمامی کاربران دارای هر نوع مدال پنل رایگان پیامک اهداء می گردد . لذا کاربران دارای مدال می توانند با کد تخفیف medals ، به صورت رایگان ثبت نام نمایند .

یکشنبه, 10 آذر 1392 00:00

آموزش ساخت فیلتر های پیچیده با استفاده از تابع EasyFilter در اکسس ویژگی

نوشته شده توسط 
رای دادن به این مورد
(5 آرا)
آموزش ساخت فیلتر های پیچیده با استفاده از تابع EasyFilter  در اکسس آموزش ساخت فیلتر های پیچیده با استفاده از تابع EasyFilter در اکسس خانه اکسس ايران
مبحث فيلتر كردن فرم ها يكي از مهم ترين مباحث در نرم افزار اكسس مي باشد . تاكنون امكانات و ابزار هاي گوناگوني توسط خود مايكروسافت و ساير شركت ها و افراد مختلف براي ساده سازي اين فرآيند طراحي گرديده است .
امكانات خود نرم افزار اكسس براي فيلتر كردن فرم هاي در حال نمايش بسيار قوي مي باشد ولي با دو مشكل عمده همراه مي باشد :
    1. اين امكانات به هنگام بستن منو و ريبون ها در برنامه اي كه تحويل كاربرنهايي مي گردد ، غير فعال مي شوند و استفاده از آنها ممكن ولي با مشكلاتي همراه مي باشد .
    2. تغيير زبان اين امكانات براي فارسي زبانان تقريبا كاري بسيار مشكل مي باشد .
لذا اكثر كاربران براي ايجاد امكان فيلتر كردن در فرم هاي خود اقدام به كد نويسي نموده كه اين كار نيز به نوبه خود كار پيچيده اي است و براي تمامي كاربران امكان پذير نمي باشد .
اين مشكل با افزايش تعداد فيلدها و امكان پر يا خالي بودن تصادفي آنها به هنگام فيلترينگ و متغير بودن نوع فيلدهاي استفاده شده در فيلتر ، دوچندان شده ، به نحوي كه ساختن فرمهاي فيلتر و جستجو را براي كاربران به امري شدني ولي طاقت فرسا تبديل نموده است .
خانه اكسس ايران بر آن شد تا به اين مشكل براي هميشه خاتمه دهد و ساخت پيچيده ترين فيلتر ها را براي فرم هاي در حال نمايش به پروسه اي بسيار ساده تبديل نمايد .
 تابع Mantis_Easy_Filter  ، كه از طريق ساخت يك عبارت قابل استفاده در خاصيت filter فرم ها به انجام فيلتر را راحت كرده ، به نحوي طراحي گرديده كه كنترل هاي متني ( TextBox , ComboBox , CheckBox ,MultiValueBox ) روي فرم را ( در صورتي كه نام آنها از قواعد خاصي كه مختص اين تابع است پيروي كرده باشد  ) شناسايي كرده و با توجه به مقدار درون آنها كه مي تواند حتي Null هم باشد ، عبارت فيلتر را ساخته و مورد استفاده قرار دهد .
براي استفاده از اين تابع بايستي مراحل ذيل را قدم به قدم براي رسيدن به هدف انجام داد :
    1. كنترل هاي فيلتر و جستجو در درون يك فرم اصلي قرار مي گيرد كه اين فرم به اين منبع داده اي متصل نيست و كليه كنترل ها به صورت unbound مي باشند .
    2. در درون فرم اصلي بايستي يك Sub Form قرار گيرد كه در اين سابفرم فيلدهاي مورد جستجو قرار مي گيرد . و Sub Form به جدول يا پرسش خاصي متصل مي باشد و كنترل ها درون آن نيز به فيلدها bound  شده اند . لازم به ذكر است كه اين Sub Form مي تواند در هر نمايي اعم از Datasheet , Single Form , Continuous Forms باشد .
    3.  هر يك كنترل هاي روي فرم اصلي را كه قرار است به عنوان شرط فيلتر يا جستجو استفاده شود طبق قاعده زير نام گذاري نماييد . (خاصيت 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 فيلد براي فيلترينگ همزمان استفاده كرد .
لطفا براي درك نحوه استفاده ازاين تابع پس از مطالعه اين مقاله ، فيلم آموزشي تهيه شده را نيز ملاحظه نموده و سپس فايل پيوست را كه به صورت عملي اين روش در آن پياده سازي شده ، دانلود و مرور نماييد .
خواندن 94440 بار آخرین بار تغییر یافته یکشنبه, 10 آذر 1392 23:06

5 نظرات

  • لینک نظر رضا دوشنبه, 06 آبان 1392 16:12 ارسال شده توسط رضا

    سلام

    فایل را نتونستم دانلود کنم مشکل چی هست

    مهم : چرا فایل را 2003 قرار نمیدید که طیف گسترده ای بتونند استفاده کنند ؟

    خواهشن فرمت mdb

  • لینک نظر مدیر سایت دوشنبه, 06 آبان 1392 17:53 ارسال شده توسط مدیر سایت

    با سلام
    ضمن تشكر از اطلاع رساني شما كاربر گرامي
    مشكل برطرف گرديد .
    در خصوص نسخه به دليل پشتيباني اين تابع از فيلدهاي multivalue امكان اين كار وجود ندارد .
    با تشكر
    كاويان

  • لینک نظر مجید چهارشنبه, 04 دی 1392 16:14 ارسال شده توسط مجید

    سلام
    ممنون و خسته نباشید

  • لینک نظر masoud سه شنبه, 01 بهمن 1392 21:13 ارسال شده توسط masoud

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

  • لینک نظر eh.bo.ir دوشنبه, 25 فروردين 1393 01:00 ارسال شده توسط eh.bo.ir

    با سلام، خدا قوت بسیار متشکرم

ارسال نظر

کدام را میپسندید؟

مایکروسافت اکسس 64 بیت - 66.7%
مایکروسافت اکسس 32 بیت - 16.7%
مایکروسافت اکسس 2007 - 16.7%

كل آرا: 6
اين نظرسنجي به پايان رسيده است on: 19 مارس 2017 - 00:00

عضویت در خبرنامه

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