فعال سازی غلطک ماوس در اکسس 2013 - 2007
ضمن سلام
یکی از تغییراتی که از بدو ایجاد نسخه 2007 اکسس با آن مواجه شده ایم , غیر فعال سازی عملکرد غلطک ماوس در خصوص گشت و گذار در بین رکوردهای ثبت شده می باشد
تا نسخه 2003 با چرخاندن غلطک ماوس , اکسس اقدام به تغییر رکورد جاری کرده و رفتاری همچون فشار بر روی دکمه های Next Record و Previous Record را از خود به نمایش می گذاشت
بر همین اساس مایکروسافت اقدام به حذف این مشخصه رفتاری , از نسخه 2007 اکسس نمود
جهت فعال سازی مجدد , شما نیاز به درج چند خط کد خواهید داشت
عرضه MultiBox , محصولی به جایگزینی InputBox
جداسازی اعداد از یکدیگر
راه حل ساده و بسیار کارآمدی که در این خصوص وجود داره استفاده از دستور حلقه ...
تابع LCase و UCase
تابع Switch
آموزش ADO بخش چهارم
ضمن سلام , با هم نگاهی به بخش چهارم آموزش برنامه نویسی ADO میندازیم
يك واقعيت وجود داره كه دلايل استفاده ADO در ديتابيسي كه اصطلاحاًً اون رو تك فايل ميناميم شايد موارد استفاده بسیار محدودي رو در بر بگيره ( برنامه ای که تنها مشتمل بر یک فایل هستش )
قاعدتاً خواستگاه اصلي اين مدل برنامه نويسي , در مدلهاي FrontEnd/BackEnd هستش كه در ادامه با تمركز بيشتر بر روي اون به پيش ميريم
متاسفانه اين بخش از وسعت بسيار زيادي برخورداره كه در اين مقاله فرصت زماني به گونه اي هستش كه تنها امكان بررسي برخي روشها وجود داره
در ابتدا با روشي مشابه روش ارائه شده در آموزش بخش سوم , اقدام به معرفي يك متغير ميكنيم كه بتونيم اين آبجكت رو معرفي و در مواقع لزوم بارگذاري و احيا كنيم
تنها در اين نوع اتصال به يك نكته توجه داشته باشيد و اون هم تغييري هستش كه در نوع معارفه به انجام رسونديم
با توجه به اينكه در معماري FrontEnd/BackEnd و يا به نوعي همون Client/Server ممكنه به
صورت همزمان چند اتصال توسط كاربراني متفاوت برقرار بشه ، از اينرو از كليد واژه New استفاده
ميكنيم تا به نوعي برنامه رو مجبور به بارگذاري نسخه جديدي از متغير در حافظه
سيستم کاربر كنيم
Dim remoteConnection As New ADODB.Connection
در اين مرحله فعاليت اصلي شروع ميشه
در معماري CS و يا FEBE شما نياز داريد به گونه اي يك پل ارتباطي بين بانك اطلاعاتي هدف و برنامه مقصد برقرار كنيد ، اين امر رو به واسطه يك Provider كه به نوعي كار آماده سازی و برقراري ارتباط رو به عهده داره به انجام ميرسه
Provider هاي متفاوت و بسيار گسترده اي در اين بخش قابل اعمال هستن كه در مثال حال حاضر از OLEDB استفاده ميكنيم
يكي از مزاياي اين Provider اينه كه به همراه خود Access نصب ميشه و شما دغدغه اي در خصوص وجود و يا عدم وجود اون بر روی سیستم نهایی کاربر نداريد
پس از تعيين نوع Provider , شما بايد اقدام به معرفي مسير ديتابيس هدف كنيد ، كه اين كار رو بايد به واسطه متد Open به انجام برسونيد ( توجه كنيد در مثال قبلي اين بخش به صورت خودكار به انجام ميرسيد )
نگاهي به مثال زير كنيد و مطالب درج شده فوق رو در داخل اون مورد واكاوي قرار بديد
Private Sub cmdConnectToRemoteDB_Click()
On Error GoTo ConnectionError
Dim remoteConnection As New ADODB.Connection
With remoteConnection
.Provider = “Microsoft.Jet.OLEDB.4.0”
.Open “Database Address Here ، For Example : C:\Sample.mdb”
End With
MsgBox “Remote connection successfully established.”
remoteConnection.Close
Exit Sub
ConnectionError:
MsgBox “There was an error connecting to the database. “ & Chr(13) _
& Err.Number & “, “ & Err.Description
End Sub
در مثال فوق به دیتابیس فرضی Sample.mdb واقع در ریشه درایو C متصل شدیم
دقت كنيد هر اتصال / Connection پس از انجام عمليات مد نظر شما بايد بسته بشه كه اين امر توسط دستور Close به انجام رسيده
از ساختار With/End With به جهت خلاصه سازي دستور استفاده شده
در فرصتی دیگه و بنا به نیاز در خصوص Provider توضيحات بيشتري ارائه خواهد شد
توضیح : در حال حاضر تنها با مسائل تئوریک آشنا میشیم و نیازی به ارائه مثال وجود نداره
موفق باشید
آموزش ADO بخش سوم
سلام
بخشی دیگه از آموزش برنامه نویسی ADO رو در پیش میگیریم
توجه : در تمامي مراحل اين توجه رو داشته باشيد از آنجايي كه دستورات ADO بر مبناي كتابخانه ADO نوشته ميشن ، به همين جهت از در انتخاب بودن كتابخانه Microsoft ActiveX Data Objects X.X Library اطمينان حاصل كنيد
Tools > References
X.X اشاره به نسخه مورد نظر از كتابخانه مورد استفاده داره .
قبل از اينكه شما به كمك ADO بتونيد اقدام به كار با اطلاعات كنيد لازمه كه در ابتدا اقدام به استقرار و برپايي يك ارتباط با ديتابيس مورد نظر داشته باشيد
همونطوري كه در قبل هم گفته شد ، شما اين كار رو به كمك آبجكت Connection به انجام ميرسونيد
از اونجا كه ADO قابليت اتصال به ديتا بيس كنوني ( ديتابيسي كه در حال حاضر در داخل اون هستيم ) و يا اتصال به ديتابيسهاي راه دور رو داره به همين جهت برخي مثالها در هر دو حالت مورد بررسي قرار ميگيرن
توضيح : اتصال راه دور رو به جايگريني اصطلاح Remote Connection به كار برديم ، در اين گونه اتصال فرض رو بر اين قرار ميديم كه شما به ديتابيسي غير از ديتا بيس جاري متصل ميشيد
در مثال اول نگاهي به نحوه اتصال به ديتابيسي كه در داخل اون هستيد و یا همون دیتابیس جاری ميندازيم تا با كليات اين نوع اتصال آشنا بشيد
در ابتدا اقدام به معرفي يك متغير ميكنيم كه بتونيم اين آبجكت رو معرفي و در مواقع لزوم بارگذاري و احيا كنيم
به كتابخونه ADODB وصل ميشيم و از داخل اون آبجكت Connection رو انتخاب ميكنيم پس متغیر رو معرفی میکنیم :
Dim localConnection As ADODB.Connection
اين دستور اقدام به معرفي يك متغير با نام localConnection و از نوع ADODB.Connection ميكنه
نام localConnection اختياري هستش و ميتونيد با توجه به نياز خودتون نام مناسبي رو انتخاب كنيد ولي نوع متغير كه ADODB.Connection هستش الزاماً بايستي به همين طريق معرفي بشه
در بخش بعدي شما نياز داريد كه توجه برنامه رو به سوي اين اتصال هدايت كنيد و آبجكت رو برپا كنيد ، از واژه كليدي Set جهت استقرار و بارگذاري آبجكت در حافظه سيستم كمك ميگيريم و آبجكت رو ايجاد ميكنيم
Set localConnection = CurrentProject.AccessConnection
به بخش دوم دستور توجه كنيد ، CurrentProject اشاره به پروژه جاري داره ، يعني همون پروژه اي كه در حال كار در داخل اون هستيم
در اينجا و در این مرحله فقط به صدور يك پيغام مبني بر موفق بودن اتصال اشاره ميكنيم
دستور كامل به صورت زير نوشته ميشه كه اون رو در داخل رويداد كليك يك دكمه پياده سازي كرديم
Private Sub cmdConnectToLocalDB_Click()
On Error GoTo ConnectionError
Dim localConnection As ADODB.Connection
Set localConnection = CurrentProject.AccessConnection
MsgBox “Local connection successfully established.”
Exit Sub
ConnectionError:
MsgBox “There was an error connecting to the database. “ & Chr(13) _
& Err.Number & “, “ & Err.Description
End Sub
* کدها ممکنه در داخل مرورگر به صورت به هم ریخته مشاهده بشن که با کپی به داخل برنامه به صورت صحیح به نمایش درخواهند اومد
توجه كنيد در هنگام كار با Connection ها و در مجموع هر گونه مدل برنامه نويسي ديتا بيس فرآيند Error Handler فراموش نشه ، کلیه خطاها بایستی مدیریت شده و به نحوی مناسب مورد تحلیل قرار بگیرن
عدم كنترل مناسب خطاها ميتونه منجر به بروز خطاهايي گاهاً مشكل ساز بشه
موفق باشید
آموزش ADO بخش دوم

در تصویر زیر ساختار آبجکتهای اتصال در ADODB رو ملاحظه میکنید و در ادامه توضیحاتی مختصر در خصوص

نحوه رسيدن و دسترسي به Data Source در واقع توسط اين آبجكت تعريف ميشه ، شما در اين آبجكت مسير رو تعريف خواهيد كرد ، نحوه اتصال و شرايط برقراري اين اتصال رو كنترل ميكنيد
Command
دستورات و عملياتي كه بايد بر روي ديتابيس به انجام برسه رو از طريق اين پروسه به انجام ميرسونيد ، فرضاً يك دستور SQL رو به اجرا در مياريد تا اطلاعاتي رو حذف و يا به روز رساني كنه
پس شما توسط آبجكت Command ، دستورات ADO رو به مرحله عمل در مياريد
Field
ركوردستهاي ADO شامل يك و يا چند فيلد هستند ، فيلدها در ADO توسط آبجكت Field مورد هدف قرار ميگيرن ، توسط اين آبجكت شما قادر به انجام بسياري اعمال در خصوص فيلدهاي اطلاعاتي خواهيد بود
Parameter
اين آبجكت در ارتباطي مستقيم با آبجكت Command قرار داره ، و به شما اين امكان رو ميده كه پارامتري رو به صورت يك متغير به يك دستور SQL صادر كنيد
ADO از Parameter جهت انتقال يك متغير ورودي به يك پرس و جوي پارامتريك استفاده ميكنه
Recordset
اطلاعات برگردانده شده از سوي دستوري ، فرضاً از گونه SQL در ركورد ست ذخيره ميشه ، شما با كمك آبجكت Recordset قادر خواهيد بود در اطلاعات برگردانده شده تغييرات مورد نطرتون رو اعمال كنيد
توجه : واژه آبجكت در مبحث فوق مورد تاكيد واقع شده ، متاسفانه اين تصور نادرست در بين برخي برنامه نويسان و كاربران وجود داره كه آبجكت و يا شي ، تعريفي با اشاره به ماهيتي فيزيكي و قابل روئیت هستش ! به طور مثال خيلي ار كاربران يك دكمه رو كه با كشيدن در داخل يك فرم طراحي ميشه و يا آبجكتهايي از اين دست رو ، مبناي شي بودن ميدونن
اين احتمال وجود داره كه در آينده مطالبي در خصوص همين مبحث و در واقع برنامه نويسي مبتني بر شي گرايي – OOP در اکسس ، درج كنم
در حال حاضر تنها به همين امر بسنده كنيد كه كليه موارد فوق آبجكت بوده و با تعاريف ابن مبحث سازگار هستند
آموزش ActiveX Data Object - ADO
به زودی آموزش ActiveX Data Object - ADO در همین وبلاگ
توابع مفید 1 ( شمارش تعداد خطوط )
در تابع زیر شما میتونید عملیات شمارش تعداد خطوط موجود در داخل یک Text Box و یا یک ورودی از نوع متن رو به انجام برسونید
موفق باشید
Access Fans - بررسی وجود یک جدول یا یک ماکرو
ضمن سلام
در برخی موارد این نیاز هست , که از وجود یک آبجکت در داخل Database اطمینان حاصل کنید , این اطمینان در برخی مواقع لازم الاجرا بوده و به جهت بهبود کار و یا جلوگیری از برورز برخی نقائص باید مد نظر قرار بگیره
مساله مطرح شده میتونه حتی در بخش امنیت هم به کمک شما بیاد
امکان اجرای برخی دستورات در ابتدای باز شدن یک فایل اکسس , به دو طریق زیر امکان پذیره :
اجرا از طریق فراخوانی دستورات در داخل یک ماکروی AutoExec
در این حالت Access آقدام به اجرای دستورات مندرج در داخل این ماکرو نموده و درنهایت کنترل رو به برنامه Access باز خواهد گردوند
اجرا از طریف فرخوانی دستورات در داخل فرم معرفی شده در بخش Startup
در این حالت اقدام به طراحی یک فرم اولیه نموده , و در بخش Startup اقدام به معرفی این فرم به عنوان اولین عضوی که در برنامه به اجرا درخواهد اومد میکنید
............
هر دو سناریوی فوق دارای نقاط ضعف و قوت خود بوده و به فراخور موضوع قابلیت دور زدن خواهند داشت , امری که فرضاً در پروسه چک نمودن یک قفل به هیچ عنوان مورد تایید نیست
توصیه این است که تحت هیچ شرایطی کنترل قفل و یا پروسه های مهم را به ماکروی AutoExec محول ننمایید , گزینه Startup از سطح امنیتی بسیار بالاتری برخوردار بوده و امکان مغلوب نمودن آن به سادگی میسر نیست
ذکر یک نکته الزامیست , که در اینگونه مواقعی یکی از نکاتی که همواره فراموش میشود , چک نمودن عدم وجود ماکرویی با نام AutoExec میباشد , چرا که یک نفوذگر با تزریق یک ماکروی AutoExec به داخل برنامه قربانی , در بسیاری مواقع قادر به تغییر کل مسیر پروسه میباشد و در این گذر این احتمال افزایش خواهد یافت که به سادگی به مقصود خود دست پیدا کند
مثال از وضوح کافی برخوردار بوده که در صورت نیاز , ابعاد کاربردی آن با شفافیت بیشتری ارائه خواهد شد
موفق باشید
بستن دکمه Shift در اکسس به نحوی کارآمد تر
در آموزش پیش رو , شما با نحوه حمایت نسبی از بسته بودن دکمه Shift در اکسس آشنا خواهید شد .
با تکیه بر این روش , لایه دفاعی دیگری به برنامه های خود خواهید افزود , البته لازم به یادآوری نیست که این روش نیز دارای نقاط ضعف خاص خود است , ولیکن در مجموع از روش متداول کنونی کاملتر بوده و در واقع مکمل آن روش میباشد . استفاده از این روش را به برنامه نویسان توصیه میکنم .
مصرف کمتر کاغذ با ایده Green Access
سلام
چندی پیش سفری یک روزه داشتم به شهر یزد ! شهری , جدا از همه زیباییهای اون , فاقد پوشش گیاهی قابل توجه .
به نظر میرسه آینده تمام دنیا به همین سمت و سو در حال حرکت باشه , روز به روز درختان بیشتری بریده میشن تا بر روی کاغذهای تهیه شده از اونها , گزارشات گاهاً بی مصرف ما آدمها حک بشه .
در سیستم اداری ایران , رونوشت گزارش از اهمیت فوق العاده ای برخورداره ! گاهاً رونوشت از اصل خود نامه هم مهمتر جلوه میکنه که همین امر موجب تکثیر چندین و چند باره گزارش و یا نامه میشه .
چه بسا در بسیاری موارد گیرنده رونوشت , زمانی گزارش به دستش میرسه که یا خیلی دیر شده و یا اصلاً به گزارش توجهی نمیکنه .
خوشبختانه Access دارای امکانیست که متاسفانه از دید برخی کاربران پنهان مونده . در بسیاری موارد کاربران به دنبال کامپوننتی می گردند که قابلیت ارسال گزارش به فرمت PDF رو داشته باشه . این امکان میتونه به عنوان جایگزینی بسیار مناسب به جای PDF مد نظر قرار بگیره .
فرمت مد نظر Snap Shot نام داره .
Snap Shot اين قابليت رو در اختيار ما قرار میده كه فرمت خروجي گزارش بدون كوچكترين تغييري همانند گزارش اصلي پياده سازي بشه ، اين امر در برخی روشهای دیگه خارج از اشكال نيست .
گزارش در حالت انتقال به فرمت Snap Shot ، به صورت مستقل و بدون نياز به برنامه اي خاص كه نياز به نصب مجزايي از مجموعه آفيس داشته باشه ، قابليت اجرا داره . به بياني دیگه در حين باز شدن اين گزارش نيازي به وجود برنامه اصلي وجود نداره .
فايلهاي خروجي داراي حجمي بسيار كم هستند كه همين امر انتقال گزارش از طريق Email , شبکه داخلی و يا OutLook رو به سادگي و با سرعت امكان پذير میکنه .
فرمت فايل Snap Shot غير قابل تغيير توسط گيرنده فايل هستش , همين امر گزارش رو از هرگونه دخل و تصرفی مصون نگه میداره .
مزاياي ارسال گزارش در فرمت Snap Shot میتونه از سه بعد مورد توجه قرار بگیره :
ارسال گزارش در سريعترين فرصت ( به طور مثال ارسال گزارش به دفتر مركزي در كمتر از يك دقيقه ) ، در اين حالت گيرنده گزارش در صورت نياز به نسخه كاغذي ، میتونه خودش اقدام به پرينت از فايل ارسالي کنه .
دومين مزيت نيز در مواردي برآورده میشه كه گيرنده تنها نياز به روئيت گزارش داره , یعنی قرار نیست کاری رو بر روی گزارش انجام بده و یا چیزی بر روی گزارش بنویسه , كه در همين حالت نيز بحث صرفه جويي در مصرف كاغد به ميان خواهد اومد .
و در بيان سومين مزيت نيز نگهداري سوابق گزارشات بدون تغيير در مندرجات آنها هستش كه اين امر میتونه به صورت خودكار و بدون دخالت كاربر به انجام برسه ! این امکان به وجود میاد که برخي بايگانيها به صورت ديجتالي ایجاد بشن ( ذخیره سازی در داخل کامپیوتر ) ، در اين حالت بسياري زونكنها برچيده شده ، اطلاعات با سرعت بالاتري قابل دسترسي خواهند بود و در نهايت سيستم موجود ، سيستمي تر از گذشته خواهد شد .
امیدوارم در داخل برنامه های خودتون از این قابلیت استفاده کنید تا شما هم کمک کنید , درختی چند روزی بیشتر به زندگی خودش ادامه بده .
موفق باشید
نحوه اجرای یک ماکروی خاص در هنگام باز شدن برنامه Access
همونطوري كه ميدونيد براي اينكه عملياتي رو در هنگام باز شدن يك برنامه اكسس به اجرا برسونيم ، ناگزير از انجام اين فرایند از طريق ماكروي AutoExec و يا تعريف عمليات در داخل يك فرم و فراخواني اون فرم در داخل بخش StartUp هستيم
در واقع امكان انجام عمليات , غير از اين دو روش به گونه اي ديگه در داخل خود اكسس امكان پذير نيست , چرا كه اكسس اين عمليات رو بر مبناي رخدادي كه بر روي آبجكتها اعمال ميشه به انجام ميرسونه
در پاسخ به اين سئوال كه آيا ميشه عملياتي رو در هنگام باز شدن برنامه به غير از دو روش فوق از طريق امكانات داخلي خود اكسس به انجام رسوند ؟ بايد گفت : خير , وليكن اكسس نيز همچون بسياري برنامه هاي ديگه قابليت پذيرش پارامترهايي رو از طريق خط فرمان داره كه به اون اجازه ميده تا برخي عمليات غير ممكن داخلي رو به واسطه همكاري ويندوز به انجام برسونه
در مثال زير ميخوايم بدونيم كه چه طور ميشه ماكرويي به غير از ماكروي AutoExec رو در هنگام باز شدن برنامه فراخواني كرد ( و به تبع اون هرتابع و کد مورد نظری رو )
فرم Login بر مبنای Trial Keeper Professional
ضمن سلام
پروژه موجود نمونه ای از یک فرم Login ( درخواست رمز عبور ) میباشد که بر مبنای امکانات رمز نگاری موجود در داخل قفل نرم افزاری Trial Keeper Professional پایه گذاری شده است .
از مشخصه های کلیدی این برنامه میتوان به :
• امكان تعريف كد كاربري ، نام كاربري و رمز عبور
• ذخيره سازي رمز عبور به صورت رمز نگاري شده
• امكان بازگرداندن كد كاربر فعال در تمامي نقاط برنامهاشاره نمود .
این پروژه با تغییراتی بسیار اندک , قابلیت استفاده در داخل پروژه های شما را خواهد داشت .
اعمال تغيير در فايلهاي MDE بخش دوم
ضمن سلام به حضور شما دوستان
امروز قصد دارم در خصوص خطرناك ترين نوع حمله به فايلهاي Access صحبت كنم ، روشي كه ميشه گفت ايستادگي در مقابل اون اگه نگيم غير ممكن ، ولي بسيار سخته .
با ضريب اطمينان ميتونم بگم بيش از 99 درصد كاربرها از اين نوع حمله و نحوه عملكرد اون بي اطلاع هستند .
جهت جلوگيري از تاثيرات اين نوع حمله نياز به تمهيداتي پيچيده هستش كه در حوصله اين بحث نمي گنجه .
در اين مبحث قصد دارم موضوع رو در قالب يك مثال بسيار ساده ارائه كنم . اين مثال تنها بر روي فايلهاي MDB قابليت اجرايي داره . در واقع قصد آموزش نحوه نفوذ به داخل فايل MDE رو ندارم . ( شما كليد خونتون رو به كس ديگه اي ميديد ؟! )
اعمال تغيير در فايلهاي MDE بخش اول
در مبحث فعلي قصد دارم نحوه اعمال تغيير در ساختار فرمها و گزارشها رو آموزش بدم .
توضيح : نرم افزارهايي وجود دارن كه ميتونن بخشي از عمليات رو به صورت خودكار انجام بدن به طور مثال نرم افزار MDE Unlocker جزو يكي از اون انتخابها هستش ولي به يه نكته اشاره كنم و اون هم اينكه اين نرم افزارها هيچ كار غير ممكني رو به انجام نمي رسونن , اونها تنها عملياتي امكان پذير رو به صورتي سهل الوصول تر در اختيار ديگر كاربران قرار ميدن ( البته با دريافت مبالغي جهت خريد )
ما در اينجا قصد داريم عمليات قابل انجام توسط اين برنامه رو بدون نياز به اون و در داخل خود Access به انجام برسونيم .
مثال رو با يك Form آغاز ميكنيم :