آموزش نكات فني قفل گذاري مبتني بر Trial Keeper Professional بخش دوم - نسخهی قابل چاپ +- فروم تخصصی - پشتیبانی CPSD (http://cpsd.ir/forum) +-- انجمن: محصولات (/forumdisplay.php?fid=1) +--- انجمن: غیر رایگان (/forumdisplay.php?fid=7) +---- انجمن: Trial Keeper Professional (/forumdisplay.php?fid=4) +----- انجمن: مقالات و مثال های آموزشی مرتبط با Trial Keeper Professional (/forumdisplay.php?fid=18) +----- موضوع: آموزش نكات فني قفل گذاري مبتني بر Trial Keeper Professional بخش دوم (/showthread.php?tid=86) |
آموزش نكات فني قفل گذاري مبتني بر Trial Keeper Professional بخش دوم - CPSD Admin - ۲۳ مرداد ۱۳۹۰ ۰۹:۲۷ عصر ضمن سلام
در ادامه مبحث قبلي ميخوام به روشي اشاره كنم كه علاوه بر كاهش زمان كاري به نوعي به عنوان يك پيچيدگي درجه سه هم جهت جلوگيري از شكسته شدن قفل به کار بیاد . يك كركر معمولاً مترصد اجراي يك رويداد ميمونه تا اون رو بتونه دور بزنه . ميتونيد به روش زير زمان انتظار اون رو اندكي به تعويق بندازيد . روال چك شدن تابع Initialize رو به صورت رندوم انجام بديد . در اين حالت قصد داريم فراخواني اين روال رو نه به صورت مستمر ، بلكه به صورت اتفاقي انجام بديم . در اين روش حتي اين امكان ميتونه به وجود بياد كه عمليات چك كردن رو در داخل يك رويداد تكرار پذير نيز به انجام برسونيد . بيايد با همديگه به ساختار دستور رندوم نگاهي بندازيم دستور رندوم و يا همون Rnd مقداري عددي از نوع Single رو برميگردونه و در هر بار اجرا ، اين عدد متفاوت از دفعه قبل خواهد بود . هميشه دقت كنيد اين تابع رو به همراه دستور Randomize به كار ببريد , تا پراكندگي عددي در هر بار فراخواني به وجود بياد . به مثال زير دقت كنيد : کد: Randomize دستور فوق اقدام به برگرداندن عددي بين 1 تا 100 ميكنه .
حالا همون مثال بالا در خصوص تابع Initialize هم قابل استفاده هستشخب اجازه بديد اون رو در داخل رويداد يك دكمه قرارش بديم تا در حالتي كه عدد برگشتي زوج بود برنامه اقدام به نمايش يك پيغام مزاحم كنه : کد: Private Sub cmdSampleButton_Click () کد: Private Sub cmdSampleButton_Click() در مثال فوق هم تابع Initialize به صورت اتفاقي فراخواني ميشه . شما نمي تونيد قبل از اجراي دستور ، از فراخواني تابع Initialize مطمئن باشيد چرا كه فراخواني اون رو به دست يك رويداد اتفاقي سپرديد .
با 100 بار كليك بر روي دكمه فوق ، دستور Initialize بين 0 تا 100 بار ميتونه اجرا بشه . در همين جا مجدداً اشاره اي به يك توصيه عمومي دارم : فاصله فيزيكي كدها در داخل اكسس از همديگه زياد باشه روالهاي كنترلي رو در فاصله اي دور از همديگه قرار بديد ، اينجوري رديابي كدها از طريق اديتورهاي متني موجود به سختي امكان پذيره . در پاسخ به اين سئوال كه چه جوري بايد اين كار رو انجام بديد ادامه مطلب رو مطالعه بفرماييد :
يكي از كارهاي خيلي مؤثري كه ميتونيد انجام بديد ، انجام بخشي از عمليات در داخل توابع هستش . اجازه بديد روال نحوه برگردوندن يك عدد اتفاقي رو در داخل يك تابع با همديگه ببينيم ، در داخل يك ماژول اقدام به معرفي يك تابع با عنوان SeedRandomA كنيد : کد: Function SeedRandomA() As Integer اين تابع دقيقاً همون كار رو انجام ميده , حالا بيايد نگاهي به نحوه استفاده از اون بندازيم .
در داخل رويداد کلیک دكمه ، دستورات با به كار گيري اين تابع به صورت زير تغيير پيدا ميكنه : کد: Private Sub cmdSampleButton_Click() هنوز هم جا براي بهينه سازي وجود داره ، اجازه بديد تغيير آخر رو هم اعمال كنيم و تابع رو به صورت زير تغيير بديم ، قبل از اون توجه شما رو به توضيح زير جلب ميكنم :
دستور If SeedRandomA Mod 2 = 0 Then عملاً داره بررسي ميكنه كه اگر شرط صحيح باشه ( عدد زوج باشه ) آنگاه دستور مورد نظر رو به انجام برسونه . ما قصد داريم همين عمليات رو هم در داخل تابع و به دور از چشم كركر انجام بديم . ( منظورم فاصله فيزيكي بيشتر كد كنترلي هستش ) کد: Function SeedRandomB() As Boolean به نوع مقدار برگشتي از تابع SeedRandomB دقت كنيد و تفاوت اون رو با حالت قبلي ببينيد . خروجي اين تابع بررسي ميكنه كه عدد مورد نظر زوج هست و يا نه ( تابع قبلی فقط عدد رو برميگردوند )
در نهايت تغييرات رو با هم در داخل روال انتساب داده شده به دكمه اعمال ميكنيم : کد: Private Sub cmdSampleButton_Click() مزيت اين كار توي چيه ؟! فهم الگوريتم به كار رفته و اعمال تغيير در داخل اون دشوار تر از حالت قبلي هستش ، كركر نياز داره كه به دنبال تابع SeedRandomB بگرده و عمليات داخلي اون رو ملاحظه كنه .
شما امكان فراخواني توابع رو در جاي جاي برنامه داريد و اين همون معناي يك بار بنويس و چندين بار استفاده كن هستش . در صورتي كه نيازي به تغيير داشته باشيد ، شما فقط نياز داريد كه روال داخل تابع رو تغيير بديد و رفلكس اين تغيير رو در تمامي جاهاي ديگه كه از اون تابع استفاده به عمل اومده ، به صورت يكجا ببينيد . ( با ذكر يك تبصره ) استفاده از توابع گامي در جهت يك برنامه نويسي پويا به حساب مياد . با اعمال اين تغييرات گامي ديگه به سمت طراحي برنامه اي با ديواره دفاعي مستحكمتر برداريد . در جلسه بعدي اين مبحث ، اشاره اي به رجيستري و نحوه كار با اون خواهم داشت . البته قصد باز كردن اون مبحث رو به صورت كامل ندارم چرا كه استفاده كارآمد از اين قابليت در مباحث قفل گذاري ، نيارمند تكنيكهايي خاص هستش كه متاسفانه امكان آموزش اونها در اين سطح وجود نداره . استفاده موثر از اين امكان در قفل گذاري نيازمند تكنيكهايي هستش كه يادگيري اونها براي شما دوستان زمان زيادي رو طلب ميكنه . كليه اون تكنيكها در داخل Trial Keeper Professional گنجونده شده و بر همين اساس از كنار اون مطلب با ديدي نه چندان عمقي عبور ميكنيم . در سرفصلهاي بعدي وارد مباحث عمقي تر قفل گذاري به كمك Trial Keeper Professional ميشيم . اين اكتيو ايكس بسياري از قابليتهاي حرفه اي رو در داخل خودش به صورت بالقوه حمل ميكنه كه سعي ميكنيم در اين سلسله مطالب اونها رو به صورت حرفه اي تر و كاملتر آموزش بديم و اجرا كنيم . توضيح و يادآوري چندين باره : تكنيك شكستن قفل در داخل Access متفاوت از فايلهاي اجرايي هستش ، بر همين اساس دوستاني كه با نحوه شكستن قفلهاي فايلهاي اجرايي آشنايي دارن شايد تناقضهايي رو با اصول موجود در اون نوع قفل شكني ها مشاهده كنند . برخي مطالب به صورت مشترك در داخل فايلهاي اجرايي نيز ميتونه مد نظر قرار بگيره ، ولي در حال حاضر قصد ايجاد مرزي مشخص رو در اون رابطه ندارم . خب اميدوارم اين مطلب هم مورد توجه شما قرار گرفته باشه . تا فرصتي ديگه خدا نگهدار . |