View Full Version : مقاله: نگاهی به عملکرد گزینه Priority
nabeel
سه شنبه 10 دی 1387, 17:29 عصر
ضمن سلام
در این تاپیک سعی دارم شما رو با عملکرد گزینه Priority آشنا کنم
مخاطبان این مبحث اون دسته از دوستانی هستن که آشنایی نسبی رو با برنامه نویسی VBA دارن ( هر چند توضیحات ارائه شده دقیقاً در خود VB هم مصداق پیدا میکنه )
این مبحث میتونه روی کارائی برنامه تاثیر بسزایی داشته باشه پس از خوندن اون غافل نشید .
امیدوارم بتونم به زودی بخشی از مطالب رو آماده کنم و در اختیار دوستان قرار بدم
محل دسترسی به این گزینه در داخل بخش References هستش
بد نیست اگه اول با میزان آشنایی کاربرا در این خصوص آشنا بشم و اگه نظری و یا اطلاعی دارن در این بخش بنویسن .
امیدوارم این تاپیک به جایی برای بحث و تبادل نظر تبدیل بشه و از قالب ارائه یه مقاله خارج بشه .
قبلاً به این مبحث توی سایت برخورد نکردم و در خصوص این گزینه یه مقدار کم توجهی شده , بیاید به کمک هم زیر ذره بین قرارش بدیم .
پس تا اون موقع
خدا نگهدار
مهدی قربانی
سه شنبه 10 دی 1387, 17:51 عصر
سلام
دوست عزیز آقا نبیل ، بنده موافقم البته به شرطی که این سلسه مقالات از کارگاه آموزشی هم برخوردار باشه یعنی بعد از چند مرحله یا مبحث تمرینی طرح بشه تا دوستان بواسطه حل این تمرینات بتونن بیشتر و ملموستر با این فنون آشنا بشن و خودشون رو با موضوع بحث هماهنگ کنن مخلص کلام آموزش به شرط مشارکت ارائه میشه و صد البته که از طرح گفتمانهای چالشی مفید هم استقبال خواهد شد انشاءالله اگر مباحث رونق پیدا کنه در قسمت اعلان هم یک تاپیک بمنظور متمرکز کردن مقالات و مباحث آموزشی دایر میشه تا دسترسی بسهولت انجام بگیره . ضمناً مثل همیشه تاکید می کنم دوستان فقط به محوریت بحث بپردازن و از هر نوع حاشیه ای جداً دوری کنن هر مشکلی بود شخصاً در خدمتم و با خودم مطرح کنید .
nabeel
چهارشنبه 11 دی 1387, 23:00 عصر
ضمن سلام
در اولین بخش این مبحث , لازمه که مقداری در خصوص برنامه نویسی VBA در محیط Access توضیحاتی رو عرض کنم
هدف از ایجاد VBA به عنوان یک محیط توسعه , در اختیار گذاشتن امکانات زیر بوده :
- سفارشی سازی برنامه متناسب با نیازهای خودتون
- امکان انجام کارها و عملیاتی که خیلی از اونها به صورت استاندارد در داخل Access گنجونده نشدن و یا به صورتی که جوابگوی تمامی سطوح کاری باشن , دیده نشدن .
در این محیط به شما امکان کد نویسی یا همون برنامه نویسی داده میشه .
توضیح : Access در عمل دارای دو بخش برنامه نویسی و برنامه سازی هستش که عملاً خیلی از کاربرها فقط اقدام به برنامه سازی توسط اون میکنن .
بد نیست تعریفی هم در خصوص Reference داشته باشم .
اجازه بدید مفهوم عمومیش رو با یه مثال ساده توضیح بدم .
فرض کنید که به کتابخونه محلتون مراجعه می کنید و یه کتاب رو به امانت میگیرید و به کمک اون کتاب یکسری از مشکلاتتون رو حل می کنید .
برای تهیه یه کتاب زحمتهای زیادی کشیده میشه , از شب بیداریهای نوشتنش گرفته تا مقوله چاپ و دردسرهای اون , ولی شما عملاً بدون متحمل شدن هیچ یک از اون مشکلات , از چکیده کل اون زحمات , یعنی همون کتابی که به امانت گرفتید استفاده می کنید .
در بخش References در واقع شما لیستی از این کتابها , که در نقش کتابهای مرجع هستند رو در اختیار دارید .
این فایلهای Dll ( عموماً از نوع Dll و یا همون Dynamic link library ) همون کتابهای فرضی شما هستند .
معمولاً شامل کدهایی از پیش نوشته شدن که قابلیت استفاده و به اشتراک گذاری کدها رو , در برنامه های دیگه در اختیار شما قرار میدن .
این کار عموماً با فراخوانی توابع موجود در داخل اونها به انجام میرسه .
اتصال به اونها معمولاً به راحتی و با حداقل کد نویسی امکان پذیره .
این مرجعها عملاً ممکنه توسط توسعه دهنده هایی مختلف و شرکتهایی متفاوت عرضه شده باشن .
مشکل دقیقاً از همینجا شروع میشه .
راه ارتباطی با این مراجع از طریق توابعی هست که در داخل اونها وجود داره و هر تابعی هم نامی و احتمالاً نیازمند پارامترهایی .
هیچ الزام و تضمینی وجود نداره که نامهایی کاملاً متفاوت در داخل Dll های تولید شده توسط شرکتهای مختلف , در نظر گرفته شده باشه .
ممکنه که دو تابع کاملاً همنام در داخل دو رفرنس وجود داشته باشه , در این حالت اکسس در هنگام استفاده از تابع مورد نظر شما دچار خطا میشه , که پیامد اون میتونه یک خطای منطقی در اجرای برنامه و یا یک خطای منجر به توقف اجرا بوده باشه .
به طور مثال دو Reference زیر رو که عمومیت دارن مثال میزنم
رفرنسهای DAO و ADO . عملاً از طریق این رفرنسها شما امکان اتصال به زیر مجموعه های Database رو دارید .
به کدهای زیر دقت کنید , من در این کدها قصد دارم که یک متغیر از نوع رکورد ست رو تعریف کنم منتها در اولی منظورم رکورد ستی از نوع DAO و در دومی رکورد ستی از نوع ADO هستش .
در این روش یک نوع معارفه غیر متعارف و غیر استاندارد رو استفاده میکنم .
Dim rstDAO_Sample As Recordset
Dim rstADO_Sample As Recordset
با این تعریف عملاً امکان دسترسی به زیر دستورهای ADO و DAO رو برای دو رکورد ست تعریف شده دارم .
مشکل چیه !؟
شاید مشکلی در ظاهر وجود نداشته باشه ولی متاسفانه حالا تقدم و تاخر رفرنسهای موجود در داخل لیست میتونه مساله ساز بشه .
Access در حالت استاندارد شروع میکنه به جستجو به دنبال دستور ( فقط نگیم تابع ) صادر شده , اون هم بر اساس نام دستور . به اولین رفرنسی که برسه و اون دستور در داخلش قرار داشته باشه اقدام به اجرای اون میکنه .
بعضی دستورات هستن که تشابه اسمی دارن ولی پارامترهایی مختلف و یا پیش نیازهایی متفاوت رو طلب میکنن . در این حالت متاسفانه Access با این روش تست و بازرسی ناقص خودش , منجر به بروز یک خطا میشه ( از نوع Run Time و یا logical )
ولی به دور از انصافه که تمام تقصیر رو به گردن Access بندازیم !
راه حل جلوگیری از این مشکل رو سعی میکنم در مبحث بعدی مورد نقد و بررسی قرار بدیم .
پس تا اون روز
خدا نگهدار
nabeel
پنج شنبه 12 دی 1387, 18:10 عصر
ضمن سلام
در ادامه مبحث قبلی به نکات دیگه ای می پردازم
همون طور که گفتم Access بر اساس تقدم و تاخر رفرنسهای موجود در داخل لیست , اقدام به شناسایی تابع ( دستور ) مورد نظر شما میکنه .
راه حل جلوگیری از این مشکل معرفی صریح متغیرها هستش . به طور مثال در همون مثال قبلی , اینبار قصد دارم که یک متغیر از نوع رکورد ست رو تعریف کنم منتها در اولی منظورم رکورد ستی از نوع DAO و در دومی رکورد ستی از نوع ADO هستش .
در این روش یک معارفه استاندارد رو استفاده میکنم .
Dim rstDAO_Sample As DAO.Recordset
Dim rstADO_Sample As ADODB.Recordset
با این تعریف عملاً امکان دسترسی به زیر دستورهای ADO و DAO رو برای دو رکورد ست تعریف شده دارم
در هر دو به صراحت به نوع رکورد ست اشاره شد . در این حالت اکسس دو منفعت زیر رو به میراث میگیره :
- یک راست میره به سراغ رفرنس مورد نظر ( مراحل جستجو رو طی نمیکنه )
-امکان خطا در شناسایی رفرنس درست به صفر میرسه
نتیجه عمل افزایش نسبی سرعت در لود اولیه و جلوگیری از بروز احتمالی خطا هستش
تا اینجا تنها در مورد خود لیست صحبت کردیم و بحثی از گزینه Priority به میون نیومد .
Priority در لغت به معنای اولویت و حق تقدم هستش .
شما معمولاً ( و در واقعیت باید ) کتابهایی که بیشتر استفاده میکنید رو دم دست تر قرار بدید . در اینجا مصداق دم دست تر بودن , همون بالاتر بودن در در داخل لیست References هستش .
رفرنسهایی رو که ارجاعات بیشتری به اونها در داخل برنامتون داشتید رو دم دست تر و به تعبیر دیگه در داخل لیست در موقعیت بالاتری قرار بدید .
این کار روی میتونید با کلیک بر روی نام رفرنس و استفاده از دو دکمه مربوط به تعیین Priority به انجام برسونید .
در کنار نام هر رفرنس یک چک باکس وجود داره . این چک باکس در صورتی که از حالت انتخاب در باید , رفرنس رو از داخل لیست حذف میکنه .
همونکاری که شما هم احتمالاً با کتابهاتون میکنید . کتابهایی رو که بهشون نیاز ندارید , از روی میز کارتون برمیدارید و میز کارتون و کتابخونتون رو خلوت تر میکنید .
نتیجه این عمل کمک به Access در دسترسی سریعتر به توابعی هستش که به صورت صریح معرفی نشدن .
البته مزیتهای دیگه ای هم داره که مرتبط با بحث ما نیست .
توجه : پس از حذف یک رفرنس از داخل لیست , یک بار برنامه رو Compile کنید تا به این وسیله مطمئن بشید که از اون رفرنس در جایی استفاده به عمل نیومده .
تذکر : در خصوص حذف رفرنسهای ADO و DAO کمی با دقت عمل کنید . چرا که در وحله اول ممکنه Compile کردن خطایی رو نشون نده . ( در حالتی که شما به صورت صریح متغیرهاشون رو معرفی نکرده باشید )
تا اینجای مطلب رو داشته باشید تا اگه چیز دیگه ای به نظرم رسید و یا احیاناً شما سئوالی مطرح کردید , مبحث رو ادامه بدیم .
با تشکر
مهدی قربانی
پنج شنبه 12 دی 1387, 18:48 عصر
سلام
با تشكر از آقاي پيروزمهر با توجه به تاكيد شما در ارتباط با لزوم ايجاد تصريح در تعريف متغيرها بويژه ركوردست سئوالي كه هست اينه آيا زماني كه ما متغيير مربوط به ركورد ست رو تعريف مي كنيم الزامي به اين هست كه قبل از اون متغيير ديتابيس رو هم بصورت صريح تعريف كنيم يا اينكه مانعي بر سر راه ست كردن ديتابيس بشكل زير نيست ؟
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset()
در مجموع هدفم مقايسه حالت فوق با تعريف صريح متغيير ديتابيسه
Dim Dbs As DAO.DataBase
Set Dbs = CurrentDb
nabeel
پنج شنبه 12 دی 1387, 19:16 عصر
جناب آقای قربانی ضمن سلام
در مجموع در حالت کلی توصیه میشه که تا حد امکان متغیرها رو در حالت صریح معرفی کنید .
در بخش آنالیز Performance کدهای موجود در داخل برنامه , اگه توجه کرده باشید اکسس همیشه استفاده از Option Explicit رو به عنوان یک ایده در مقابل شما قرار میده
اجرای این ایده پیشنهادی , عملاً شما رو ملزم به معرفی متغیرها به صورت صریح میکنه ( البته در حالت خالصش تنها معرفی اون هم کفایت میکنه )
پس تا اینجای بحث مشخص شد که حالت مطرح شده از سوی شما ( منظورم مثالتون هستش ) میتونه مفید باشه ولی تا بخشی که فقط بحث کارایی مطرح باشه .
ولی خب شانس بد دست گذاشتید روی چیزی که من خودم عقیده زیادی بهش ندارم چرا که اگه منظورتون عدم تداخل بین ADO و DAO بوده باشه با توجه به اینکه ADO در بخش Database رویکردی به Connection داره و عملاً آبجکتی به عنوان Database نداره ( از دید DAO یه قضیه عرض میکنم ) . پس توی این مورد خاص که مثال زدید الزام چندانی رو احساس نمی کنم . ( گو اینکه هیچ ضرری هم نداره )
یادآوری : در اینگونه حالات ( یا مثالهایی که تا اینجا زدیم ) افزایش کارایی در اون حدی نیست که شما بتونید به وضوح احساس کنید . اگر تعداد و تکرر Set نمودن ها زیاد باشه , این مورد نمود بیشتری پیدا میکنه .
موفق باشید .
e601
پنج شنبه 12 دی 1387, 19:40 عصر
با سلام
اول میخوام فلاش بکی بزنم به گفته دوست عزیزمون نبیل که هیچ تظمینی وجود نداره که دو برنامه نویس مختلف که تابعی رو که در یک زمینه نوشتن با نامهای مختلف نامگذاری کرده باشن.
مثلا امکان داره برنامه نویسی در تبریز با برنامه نویسی در تهران که اصلا بدون اطلاع از کارهای همدیگه ، دارن در مورد تبدیل تاریخ میلادی به شمسی کد مینوسین و از قضا جفتوشون هم اسم تابع خروجیشون رو میذارن ConvertHejriDate !!! مشکل وقتی بیشتر میشه که این دو تابع با نام یکسان ، امکان داره آرگومانهای مختلفی رو بعنوان ورودی در یافت کنن که بدلیل تفاوتهای احتمالی در ساختار توابع ذکر شده ، باعث سردرگمی کامپایلر و بوجود آمدن یک خطای منطقی خواهد شد که فکر میکنم هدف این تاپیک بحث در مورد اینطور موارده که شاید کسانی باشن که یا زیاد بهش توجه نمیکنن یا با اونها آشنا نیستن...
شاید سوالی پیش بیاد که چه دلیل داره که ما از 2 رفرنسی که یک نوع تابع رو دارن استفاده کنیم؟!!!
جواب اینه که اولا خروجی توابع ممکنه با هم فرق کنه و دوما امکان داره در یکی از رفرنسها تابع دیگه ای وجود داشته باشه که در اون یکی وجود نداره و مورد نیاز ماست. در ادامه در این مورد بحث میکنیم...
در هر صورت مطالع این تاپیک رو به تمام دوستان برنامه نویسی که با اکسس کار میکنن توصیه میکنم چون بحث کاربردی هستش
-----------------------------------------------------------
به نظر من گزینه Priority جاهایی قابل استفده هست که ما 2 رفرنس با توابع همنام داریم ولی امکان داره ارجاع ما در کد به اون رفرنسها یکسان نباشه
واضح تر میگم...
فرض کنید ما 2 رفرنس به نامهای X و Y داریم و در این مراجع تابعی با نام MyFunction قرار داره. ضمنا در مرجع Y تابع دیگری با نام مثلا TestDB قرار داره...
پس تا اینجا ما در لیست رفرنسها دو ارجاع داریم:
یکی به مرجع X با یک تابعی که درون اون قرار داره با نام MyFunction
یکی هم به مرجع Y با دو تابعی که درون اون قرار داره با نامهای MyFunction و Test DB
حالا قراره که ما در برناممون از تابع MyFunction مرجع X و تابع TestDB مرجع Y استفاده کنیم و کاری هم با تابع MyFunction مرجع Y نداریم...
در این حالت اگر در لیست رفرنسهای برنامه ما ، مرجع Y بالاتر از مرجع X باشه ویژوال بیسیک بصورت خودکار سراغ تابع MyFunction مرجع Y میره و بدلیل تفاوت ساختاری این تابع با تابع مورد نظر ما خطایی منطقی رو اعلام میکنه.
راه حل:
اول اینکه باید در برنامه هامون متغیرها رو بصورت صریح تعریف کنیم
و دوم اینکه ما به عنوان برنامه نویس باید یک تدبیر ساده رو جهت اطمینان هرچه بیشتر پیش بینی کنیم و در لیست رفرنسها با استفاده از کلید Priority مرجع X را بالاتر از مرجع Y قرار بدیم...
---------------------------------------------------------------------------------------
در انتها با اجازه مدیر بخش و طراح تاپیک یه نکته خارج از بحث این تاپیک و شاید هم خارج از این بخش رو دارم !!!
شاید تا به حال در مورد OOP(Object Oriented Programming) یا همون برنامه نویسی شی گرا شنیده باشید. تفاوت زبانهایی که کاملا از شی گرایی پشتیبانی نمیکنن مثل اکسس و ویژوال بیسیک 6 و ... با زبانهای کاملا شی گرا مثل VB .NET و C# و غیره در همچین مواردی هستش.
در OOP مباحثی مثل پلی مورفیسم یا چند شکلی وجود داره که شما میتونید با استفاده از اونها یک تابع با یک نام ولی با آرگومانهای مختلف طراحی کنید که کامپایلر با توجه به نوع آرگومانی که به تابع ارسال شده و حتی نوع داده ای آرگومان ارسال شده تشخیص میده که از کدوم حالت یا بعبارتی از کدوم شکل تابع استفاده کنه و این قدرت برنامه نویسی شی گراست
---------------------------------------------------------------------------------------------
جناب قربانی از بحث نامرطبتم با این بخش عذرخواهی میکنم اما گفتم شاید نکته جالبی باشه برای دوستان.
موفق باشید...
مهدی قربانی
پنج شنبه 12 دی 1387, 19:43 عصر
سلام
ممنون آقا نبيل ، بله نكته اي كه مورد نظر من بود و شما بدرستي به اون اشاره كرديد موضوع كلكسيونهاي اشياء در كدنويسي هست كه يه گريزهايي در لابه لاي اونها ميشه زد ( به سبب همون موجود و عدم موجود بودن زير مجموعه ها ) و اون نكته اي كه بايد مورد توجه ما باشه اينه كه به سادگي از كنار اين موارد عبور نكنيم و تا زمانيكه نسبت به ريزه كاري هاي امر واقف نشديم بي جهت ريسك نكنيم بارها اينجا بلحاظ عدم رعايت اين موضوع كه ناشي از عدم دقت و يا عدم آگاهي و دانش برنامه نويس بوده سئوالاتي در زمينه مشكلاتي كه ناشي از مغايرت رفرنسها بوده مطرح شده كه توجه به نكات تذكر داده شده در اين تاپيك ميتونه ديد لازم رو به برنامه نويسان گرامي بده پس به ان نتيجه مي رسيم كه علاوه بر مبحث Priority موضوع آگاهي از ساختار و معماري كتابخانه هاي اشياء كدنويسي در روند برنامه نويسي خيلي مهمه .
بد نيست دوستان ديگه هم لطف كنن تجربياتشون رو در ارتباط با موضوع بحث ارائه بدن تا بتونيم موضوع رو از تمام ابعاد آشكار و پنهانش بررسي كنيم .
nabeel
پنج شنبه 12 دی 1387, 21:08 عصر
سلام مجدد به دوستان
آخرش پس از مدتها به همون نتیجه ای که میخواستم رسیدم ! اشتراک جمعی کاربرا در بحث ( در تاپیکهای خودم رو عرض میکنم )
دوست من Eh.Masoudi عزیز ضمن تایید نظرات شما فقط در یک مورد نیاز به تصحیح یه بخش کوچیک در تاپیک ارسالی شما وجود داره و اون هم مربوط میشه به قسمتی که توضیحی در خصوص Priority دادید .
توضیحی که در خصوص عملکرد Priority دادید مربوط به معرفی صریح متغیرها میشه .
در هر صورت لطف کنید با توجه به اینکه بازدید کننده ها از ابتدا مطلب رو مطالعه میکنن , جهت جلوگیری از انحراف و سردرگمی اونها , یا اون بخش رو حذف و یا تصحیح بفرمایید ( البته اگه اسم من رو توی نقل قول حذف کنید دیگه بحثی نیست )
و اما در خصوص بحث انحرافی , گو اینکه به نظر من انحرافی نیست چرا که در اون به نوعی رویکرد جدید مایکروسافت رو به این قضیه شاهد هستیم ( البته در Access کاربردی نداره ) :
Access و VB6 هم شی گرا هستن
اون موردی که شما در خصوص مزیتهای زبانهای شی گرا فرمودید , مزیت زبانهای شی گرا از نوع دات نت هستش . ( منظورم VB.Net و C# هستش )
این بخش هم نیاز به تصحیح داره .
پلی مورفیسم یک مشخصه زبانهای شی گرا مطرح شده نیست , بلکه یکی از مشخصه های دات نته . ( منظورم اینه که این قابلیت به واسطه دات نت به اونها به ودیعه داده شده )
خب آقای قربانی هم که دقیقاً دست گذاشتن روی نکته اصلی .
دوستای عزیز همونطوری که آقای قربانی هم فرمودن ریزه کاریها اونقدر زیاده ( به قول پرویز پرستویی ( مارمولک ) به تعداد راههای رسیدن به خدا ) که برای جلو رفتن توی این مبحث نیاز به اشتراک جمعی وجود داره . این مبحث به ظاهر ساده ! از توان و پتانسیل بالایی در تاثیر گذاری روی راندمان برنامه برخورداره . ضمناً آبستن خطاهای بالقوه ای هم هستش که در صورتی که به سادگی از کنار اونها بگذرید میتونه منجر به نقص جزئی تا کلی در برنامه شما بشه .
با توجه به پروژه های متفاوت نمیشه یک فرمول خاص و عمومی رو تجویز کرد . اینها توصیه هایی هستن که عملاً شاهراه اصلی رو تشکیل میدن و بس . امکان ارائه نقشه کوره راهها وجود نداره .
با تشکر از شما دوستانی که در این بحث شرکت کردید
و با آرزوی موفقیت برای شما
مهدی قربانی
جمعه 13 دی 1387, 02:31 صبح
سلام
اجازه بديد يه گريز ديگه بزنيم به يك مشكل مرتبط كه فكر مي كنم اكثر دوستان كم و بيش با اون برخورد داشتن .
اگر دقت كرده باشيد در مواردي خطاي كامپايل با عنوان User-Defined Not Defined ظاهر ميشه و اين خطا در حالي رخ ميده كه حتي Reference مربوط به Microsoft DAO Object Library تيك خورده و مشكلي هم نداره منتها در زمان تعريف متغير ديتابيس و ركوردست به اين شكل اقدام شده :
Dim Db As Database
Dim Rs As Recordset
اينجور مواقع معمولاً خطا روي خطي كه ركوردست ما Set ميشه قرار ميگيره
Set Rs = Db.OpenRecordset("Table1")حالا در فايلهايي كه اين اتفاق رخ ميده اگر شما در خط تعريف متغيير يه اين شكل عمل كنيد مشكل در 98 درصد مواقع حل ميشه :
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
و اما 2 درصد بقيه مواقعيه كه ممكنه روشهاي فوق افاقه نكنه و شما نهايتاً مجبور به Repair و يا نصب Office بشيد
آقا نبيل اگر خاطرتون باشه مشكل دوستمون dadsara در تاپيك نمونه هاي كاربردي و آموزشي VBA از همين دست مشكلات بود
نتيجه : توصيه هاي دوستمون آقا نبيل رو در خصوص تعريف صريح متغييرهاي مرتبط با اشياء موجود در كلكسيونهاي VBA رو حتماً رعايت كنيد .
e601
جمعه 13 دی 1387, 02:36 صبح
با سلام
اول تشکر خودمو از آقا نبیل اعلام میکنم به جهت تذکرات بجایی که دادن. اصلاحات منطقی مورد درخواست شما رو هم قبول دارم و هم اعمال کردم
نبیل جان میدونم که موافقی درباره پاره ای از مسائل تبادل نظر کنیم. البته همفکری همه صاحبنظران این بخش رو هم درخواست میکنیم...
اون موردی که شما در خصوص مزیتهای زبانهای شی گرا فرمودید , مزیت زبانهای شی گرا از نوع دات نت هستش . ( منظورم VB.Net و C# هستش )
پلی مورفیسم یک مشخصه زبانهای شی گرا مطرح شده نیست , بلکه یکی از مشخصه های دات نته . ( منظورم اینه که این قابلیت به واسطه دات نت به اونها به ودیعه داده شده )
نبیل عزیز در این موارد کمی با شما اختلاف نظر دارم :چشمک:
ببین تا اونجایی که من میدونم شی گرایی یک روش در طراحی نرم افزار هست. اهداف مختلفی رو هم دنبال میکنه که از حوصله بحث خارجه...
ولی برنامه نویسی شی گرا 3 رکن اساسی داره:
1. کپسوله کردن
2. وراثت
3. پلی مورفیسم یا چند شکلی
کپسوله کردن:
کپسوله کردن یعنی بجای آنکه ما برنامه رو یک کل در نظر بگیریم آن را به قطعات کوچکتر تقسیم کنیم تا هر قطعه فقط به وظیفه خودش عمل کنه و به بخشهایی که نیاز نیست ارتباط نداشته باشه. این مفهوم تقریبا در اکسس و VB6 پشتیبانی میشه.
مورد دیگر در بحث کپسوله کردن سطح دسترسی به اجزا یا بهتره بگیم اشیا هست که لازم بذکره همه برنامه های شی گرای کامل (بدون توجه به کلیمات کلیدی و نحوه تعریف در آنها) حداقل 3 نوع سطح دسترسی به اشیا رو در دسترس برنامه نویس قرار میدن: عمومی یا Public ، خصوصی یا Private و محافظت شده یا Protected
در اکسس و VB6 دو نوع اول وجود داره اما سطح دسترسی محافظت شده رو در اونها نمیبینیم.
کپسوله کردن خودش مبحث طولانیه که لازم نیست در اینجا راجبش صحبت کنیم...
وراثت
همونطور که از اسمش پیداست یعنی مشتق کردن یک کلاس جدید از یک کلاس موجود بطوریکه تمام خواص ، متدها و رفتارهای کلاس قبلی توسط کلاس جدید به ارث برده شوند.
این روش به شما این امکان رو میده که از نوشتن کدهای تکراری اجتناب کنید و در مواقعی که کلاس اصلی نیاز شما رو برآورده نمیکنه آنرا با یک کلاس جدید جایگزین (Override( کنید بدون اینکه کلاس اصلی شما تغییر کنه...
ما در VB6 کلاس و ماژول و ... رو که هر کدومشون میتونن به عنوان یک شی برنامه در نظر گرفته بشن رو داریم اما آیا امکان وراثت و یا مشتق کردن اونها رو هم داریم؟
مسلما نداریم...
پلی مورفیسم
پلی مورفیسم هم مانند سایر ارکان برنامه نویسی شی گرا هدف ایجاد کدی با قابلیت استفاده مجدد ، قابلیت مدیریت بهتر و ... رو دنبال میکنه
در حقیقت پلی مورفیسم یعنی پیش بینی آینده
پلی مورفیسم خودش بخشها و آیتمهای مختلفی داره که در زیر به برخی از اونها اشاره میکنم:
1. Overload کردن که در برخی منابع بیش بارگزاری معنی شده و هدفش ایجاد توابعی با انواع آرگومانهای مختلف و حتی با نوع داده ی مختلف هستش.
2. Override کردن یا جایگزین کردن: که قبلا در بحث وراثت بهش اشاره کردم. فرض کنید اکتیوایکس اختصاصی رو برای خودتون طراحی کردید و دارید در برنامتون ازش استفاده میکنید. این اکتیوایکس متدی داره که کار خاصی رو برای شما انجام میده ولی مورد خاصی پیش میاد که لازم میشه شما با اون متد عملکرد دیگه ای رو انجام بدید.
اینجا شما میتونید بدون تغییر در کد اکتیوایکس و تنها با Override کردن عملکرد جدید بجای عملکرد قدیمی ، کلی جلو بیفتید!!!!!
3. Shadows یا سایه ای کردن: این قسمت شاید تا حدودی به موضوع این تاپیک مرتبط تر باشه
سایه ای کردن یعنی در یک حوزه دید وقتی دو آیتم دارای نام یکسان هستند میتوان یکی را به سایه دیگری تبدیل کرد تا اون آیتمی که مورد نظر ماست اجرا بشه...
Access و VB6 هم شی گرا هستن
با توجه به توضیحات فوق کماکان عقیده دارم اکسس و VB6 شی گرای کامل نیستن
در کل باید خدمت دوستان عرض کنم هر 3 رکن شی گرایی به شدت با هم مرتبط و البته بسیار پیچیده هستند. بنده خودم شخصا تا بحال از برنامه نویسی با الگوریتم شی گرا در برنامه هام استفاده نکردم و فقط بصورت تئوری آشنایی نسبی با این مسائل دارم و به هیچ وجه خودمو مسلط به اونها نمیدونم چون نیاز به تجربیات متعددی داره...
ضمنا باید توجه داشت صرف استفاده از یک زبان برنامه نویسی شی گرا نمیتوان ادعا کرد که برنامه تولید شده شی گراست!!! با یک زبان شی گرا نیز میتوان کد غیر شی گرا نوشت همانطور که فکر میکنم اکثر برنامه نویسان ایرانی در همین سطح هستند
فکر کنم پستم زیاده از حد طولانی شد. شرمنده به بزرگی خودتون ببخشید
تا فرصتی دوباره
خدا نگهدار...
nabeel
جمعه 13 دی 1387, 04:51 صبح
سلام Eh.Masoudi عزیز
من هنوز به طور کامل نفهمیدم که مسائلی رو که توضیح دادید , با ایرادهاییکه به بخشهایی از تاپیک شماره 7 وارد کردم چه ارتباطی داره .
از بین مشخصه های چهار گانه یک زبان شی گرا ( Abstraction فراموش شده بود ) مشخصه پلی مورفیسم با قابیتهای جدیدش , با ظهور دات نت , به محیط VB وارد شد .
Access به طور کامل فاقد این مشخصه هستش . ولی همونطوری که خودتون هم گفتید Access به طور کامل از مشخصه های چهار گانه یک زبان شی گرا حمایت نمیکنه ( این به معنای شی گرا نبودن اون نیست )
Access رو فاقد قابلیت کپسوله کردن معرفی کردید . به طور کامل این خاصیت رو حمل نمیکنه ولی چندان با این مفهوم هم غریب نیست ! ( البته اگه اون رو به معنای تنها نمایش خصوصیات و متدهای یک آبجکت بدونیم )
من نمیدونم که شما برداشتتون از زبانهای شی گرا چیه ولی فقط همینو بگم که حتی زبانهایی مثل Basic و Pascal هم شی گرا هستند !
از عمر زبانهای شی گرا نزدیک به پنجاه سال میگذره . در طول دوران مثل تمامی مقوله های دیگه تکمیل شده و امکانات جدیدی به اون اضافه شده .
با اومدن دات نت زیر شاخه ها و امکانات بیشتری جهت سهولت کار اضافه شدن .
ویژگی شی گرایی , قابلیتی نبوده که تنها در گرو خود دات نت بوده باشه . اصل و مبنای ایجاد دات نت فریم ورک چیز دیگه ای بوده که خوشبختانه هر تکنولوژی جدیدی متعاقباً بسترهای خاص خودش و به تبع اون امکانات متفاوت دیگه ای رو به همراه میاره .
پلی مورفیسم با حیطه عملکردی که مد نظر شماست و میتونه نیازهایی که ما در بحث اصلی این تاپیک داشتیم رو جوابگو باشه , تنها در سری دات نت زبانهای مطرح شده از سوی شما وجود داره .
اگر VB6 و Access رو با سری دات نت مقایسه میکنید , زبانهایی شی گرا در سطح پایینتر هستن ولی اگه اونها رو در مقام مقایسه با زبانهای دیگه قرار بدید , احتمالاً با من همراه میشید . ( البته در هر دو حالت شی گرا هستن )
به نظر من گزینه Priority جاهایی قابل استفده هست که ما 2 رفرنس با توابع همنام داریم ولی امکان داره ارجاع ما در کد به اون رفرنسها یکسان نباشه
این یکی از ایرادهاست .
سئوال : حالا اگه یه تابع مشترک در هر دو تا رفرنس وجود داشته باشه و این دفعه منظورمون تابع موجود در رفرنس دومی بوده باشه چی ؟
حالا مجدداً میخواید Priority رو تغییر بدید ؟
این تعریف و توجیه کاربرد Priority اشتباهه .
در خصوص راه حل ارائه شده دوم هم که عنوان کردید با توجه به سئوالی که همین الان پرسیدم به اون هم ایراد وارده .
گزینه Priority هیچگونه کمکی در شناخت و عدم تداخل نمیتونه بکنه .
باز هم عرض میکنم این گزینه بر روی کارایی و سرعت عمل میتونه تاثر گذار باشه نه بر روی فرآیند کنترل خطا .
در پایان : شما واژه هایی مثل Implements , ByVal و ... رو در VB و VBA استفاده نکردید ؟ ( کاربردشون رو که حتماً میدونید چیه ؟ احتمالاً با مشخص شدن تعاریف اونها یکی از مواردی رو که VB و به تبع اون VBA رو فاقد اون دونستید رفع میشه )
توصیه میکنم از ادامه این بحث به صورت فعلی که وزن مباحث مربوط به دات نت بخواد بیشتر از عنوان اصلی خود تاپیک بشه خودداری کنیم .
Access در هیچ جایی تعاریف مشترکی با تعاریف جدید موجود در VB.Net نداره .
ایرادی که من وارد کردم مربوط به اینه که شما از مشخصه هایی اسم بردید که قابلیت رفع مشکل Priority رو دارن ولی در جایی که عملاً بستر مناسبی برای اون فراهم نیست .
جناب آقای قربانی : این بحث خوشبختانه غیر مرتبط نیست و به نوعی به رویکرد جدیدی که مایکروسافت در زمینه حل مشکلات ( و به نوعی یکیش همین مشکلات مربوط به Priority ) داشته اشاره میکنه .
البته شاید یه مقدار سنگین باشه ولی خب چاره ای نیست . دیگه ساده تر از این نمیتونم در رابطه با اون بحث کنم .
توصیه : این بخش زیر رو در داخل تاپیکتون پاکش کنید :
ضمنا باید توجه داشت صرف استفاده از یک زبان برنامه نویسی شی گرا نمیتوان ادعا کرد که برنامه تولید شده شی گراست!!! با یک زبان شی گرا نیز میتوان کد غیر شی گرا نوشت همانطور که فکر میکنم اکثر برنامه نویسان ایرانی در همین سطح هستند
جمله نوشته شده خیلی عمومی نوشته شده . نوشتن برنامه توسط یک محیط توسعه دهنده شی گرا الزاماً یکسری از مشخصه های شی گرایی رو با خودش به همراه میاره ( بدون دخالت برنامه نویس )
موفق باشید
یادآوری : Eh.Masoudi عزیز , شما در پاک کردن یا نکردن موارد عنوان شده مختار هستید ولی با توجه به اینکه ممکنه بعضی تناقض گوییهای من و شما منجر به سردرگمی بقیه کاربرا بشه از این رو اونو توصیه کردم ( شاید هم من متوجه اشتباهم بشم و اونی که باید نوشته هاش رو اصلاح کنه من باشم , مطمئن باشید اگه هر زمانی متوجه اشتباهم بشم مورد رو به قطع اصلاح میکنم ) من فقط قصدم ارائه یک تاپیک با مطالبی همسو و هم جهت هستش اون هم با اشتراک جمعی دوستان .
خدانگهدر
e601
جمعه 13 دی 1387, 11:13 صبح
با سلام
بحث جالبی شده دوستان دیگه هم اگه نظری دارن بیان کنن
من هنوز به طور کامل نفهمیدم که مسائلی رو که توضیح دادید , با ایرادهاییکه به بخشهایی از تاپیک شماره 7 وارد کردم چه ارتباطی داره .
برداشت من از صحبتهای شما اینه که VBA و VB6 رو یک زبان شی گرای کامل میدونین ولی از نظر من اینها برای پشتیبانی از روش شی گرایی ناکامل هستند
از بین مشخصه های چهار گانه یک زبان شی گرا ( Abstraction فراموش شده بود ) مشخصه پلی مورفیسم با قابیتهای جدیدش , با ظهور دات نت , به محیط VB وارد شد .
Abstraction یا همون تجرید در برخی منابعی که من مطالعه کردم یکی از مشخصه های یک زبان شی گرا معرفی شده بود و در برخی منابع دیگه با توجه به مفهوم تجرید یکی از زیر مجموعه های کپسوله سازی یا همون Encapsulation معرفی شده بود...
من نمیدونم که شما برداشتتون از زبانهای شی گرا چیه ولی فقط همینو بگم که حتی زبانهایی مثل Basic و Pascal هم شی گرا هستند !
از عمر زبانهای شی گرا نزدیک به پنجاه سال میگذره . در طول دوران مثل تمامی مقوله های دیگه تکمیل شده و امکانات جدیدی به اون اضافه شده .
با اومدن دات نت زیر شاخه ها و امکانات بیشتری جهت سهولت کار اضافه شدن .
ویژگی شی گرایی , قابلیتی نبوده که تنها در گرو خود دات نت بوده باشه . اصل و مبنای ایجاد دات نت فریم ورک چیز دیگه ای بوده که خوشبختانه هر تکنولوژی جدیدی متعاقباً بسترهای خاص خودش و به تبع اون امکانات متفاوت دیگه ای رو به همراه میاره .
پلی مورفیسم با حیطه عملکردی که مد نظر شماست و میتونه نیازهایی که ما در بحث اصلی این تاپیک داشتیم رو جوابگو باشه , تنها در سری دات نت زبانهای مطرح شده از سوی شما وجود داره .
اگر VB6 و Access رو با سری دات نت مقایسه میکنید , زبانهایی شی گرا در سطح پایینتر هستن ولی اگه اونها رو در مقام مقایسه با زبانهای دیگه قرار بدید , احتمالاً با من همراه میشید . ( البته در هر دو حالت شی گرا هستن )
من در تمام پستهای قبلیم اینو اعلام کردم که اکسس و VB6 شی گرای کامل نیستند بلکه از بعضی مشخصه های اون پشتیبانی میکنن. این از همون 50 سالی که فرمودین از عمر شی گرایی زبانها میگذره شروع میشه و به تدریج به مفاهیم امروزی میرسه.
بنابراین به این نتیجه میرسیم زبانهایی هستند که شاید در زمان پیدایش از تمام خصوصیات شی گرایی پشتیبانی میکردن و امروز با توجه به تغییر مفاهیم باید اونها رو نسبتا شی گرا بنامیم...
ضمنا باید توجه داشت صرف استفاده از یک زبان برنامه نویسی شی گرا نمیتوان ادعا کرد که برنامه تولید شده شی گراست!!! با یک زبان شی گرا نیز میتوان کد غیر شی گرا نوشت همانطور که فکر میکنم اکثر برنامه نویسان ایرانی در همین سطح هستند
جمله نوشته شده خیلی عمومی نوشته شده . نوشتن برنامه توسط یک محیط توسعه دهنده شی گرا الزاماً یکسری از مشخصه های شی گرایی رو با خودش به همراه میاره ( بدون دخالت برنامه نویس )
منظور بنده برداشت روشتن تر دوستان در مورد استفاده از یک زبان شی گراست. همونطوری که جنابعالی فرمودین امکان داره بدون دخالت برنامه نویس مواردی از شی گرایی استفاده بشه.
با یک زبان شی گرای کامل میشه برنامه ای نوشت که نه اصول تجرید در اون رعایت شده باشه ، نه کپسوله شده باشه و نه از پلی مورفیسم استفاده کرده باشه. فقط شاید در مواردی خود IDE زبان یکسری اشیایی که ما به برناممون اضافه میکنیم رو بصورت خودکار عمل اشتقاق و وراثتش رو انجام بده...
نکته مهم: این صحبتها دلیل بر این نیست اکسس یا VB6 زبانهای ضعیفی هستند. بلکه در جای خودشون از بهترین ابزارهای برنامه نویسی هستن که هر برنامه نوسی باید با توجه به هدفش در طراحی یک نرم افزار ابزار (یا زبان) مناسب خودش رو انتخاب کنه. هر کسی غیر این میگه باید در اطلاعات برنامه نویسی خودش یه تجدید نظر اساسی بکنه (مخصوصا افرادی که اکسس رو سطحی و ضعیف میدونن) :عصبانی:
و اما در مورد گزینه Priority:
فکر میکنم نکات جدیدی رو در این بحث یاد گرفتم. اگه اشتباه نکنم گزینه مذکور هیچ ارتباطی با کامپایلر ویژوال بیسیک و در نتیجه مدیریت خطا نداره. درسته نبیل جان؟
nabeel
جمعه 13 دی 1387, 12:21 عصر
ضمن سلام به حضور دوست خیلی خوبم Eh.Masoudi
من به شخصه از بحثهای چالشی که هدف , آموزش و روشن شدن کامل مفاهیم باشه استقبال میکنم ( از جمله همین بحث پش اومده )
خب با این مقدمه دوباره میریم به سراغ بحث اصلی
و اما در مورد گزینه Priority:
فکر میکنم نکات جدیدی رو در این بحث یاد گرفتم. اگه اشتباه نکنم گزینه مذکور هیچ ارتباطی با کامپایلر ویژوال بیسیک و در نتیجه مدیریت خطا نداره. درسته نبیل جان؟
دوست گرامی مطالب نوشته شده توسط من رو نخوندی و یا احتمالاً سطحی از کنارش گذشتی .
یک بار دیگه اونو کاملتر توضیح میدم .
در جایی در رابطه با چک باکس موجود در کنار رفرنسها صحبت کرده بودم و برداشتن چک باکس رو با خلوت کردن یه میز مقایسه کردم .
نتیجه خلوت کردن میز کار چیه ؟ دسترسی سریعتر به کتابهایی که روی اون قرار دادید و مورد نیازتونه .
پس از حذف یک رفرنس , توصیه به Compile مجدد چه در VB و چه در VBA ( در اینجا Access به نمایندگی از این گروه وجود داره ) کردم و همین الان هم مجدداً اصرار میکنم و اشاره به الزام اون میکنم , چرا که این بخش در مدیریت خطا به کمک ما میاد .
من این عملکرد رو به Priority نسبت داده بودم !؟! ( کجای بحث ؟ )
گو اینکه این نکته ای که من به اون اشاره کردم بی تاثیر در عملکرد Priority نیست و نخواهد بود
توضیح : حذف یک رفرنس موجب بالاتر اومدن رفرنسهای موجود در داخل لیست میشه دیگه ( نمیشه )
یعنی همون کاری که به واسطه Priority میخواستیم انجام بدیم .
تا اینجاش که بد نبوده , میبینم حالا شما اونها رو ( VB و Access ) نسبتا شی گرا تلقی کردید .
خب عزیز من هم فکر کنم که همینا رو میگفتم
من که در تاپیک شما 12 عرض کرده بودم که اکسس فاقد پلی مورفیسم هستش ( البته باز هم تاکید میکنم از نوع رویکرد جدیدش ) و یا کپسوله کردن رو به طور کامل پشتیبانی نمیکنه .
من منظورم از کامل ویژگیهای آخرین نسخه های برنامه های شی گراست .
( شما پیکان مدل 52 رو با اومدن بنز مدل 2009 , دیگه ماشین نمیدونید ! ؟! )
صحبت من در خصوص VB و Access دال بر اینه که داشته های اونها رو منکر نشیم و نگیم که شی گرا نیستن .
شی گرا هستن ولی در سطحی پایینتر از VB.Net و در سطحی فوق العاده بالاتر از Basic . ( گو اینکه الان بحث کردن از Basic چندان جالب نیست فقط اینو گفتم که بدونیم پیشینه زبانهای شی گرا مربوط به این یکی دو روز اخیر نیست )
مجدداً میگم خاصیتهای چهار گانه زبانهای شی گرا جدید به واسطه حضور تکنولوژی دات نت فریم ورک الزاماً نیازمند مفاهیم جدید و بسط داده شده ای بودن که شاهد هیچ یک از اونها در زبانهای دیگه ای که غیر دات نتی هستند نبودیم و نیستیم
( توجه کنید : این رویکرد جدید مایکروسافت رقیب دیرینش رو ( Delphi ) به زانو در آورد و اونو مجبور به استفاده از این استاندارد جدید یا همون دات نت فریم ورک کرد )
با تشکر از شما , از اینکه در این بحث حضور فعالیت دارید .
و خدانگهدار
مهدی قربانی
جمعه 13 دی 1387, 14:09 عصر
سلام
دوستان گرامی آقای پیروزمهر و آقای مسعودی ، اگر تمایل داشته باشید می تونیم اون قسمتهایی از مباحث که با موضوع این تاپیک مغایرت دارن رو تحت عنوان و تاپیک دیگه ای ادامه بدیم .
e601
جمعه 13 دی 1387, 14:28 عصر
با سلام
جناب قربانی هر جور صلاح میدونید عمل کنید
من در خدمتم...
nabeel
جمعه 13 دی 1387, 19:07 عصر
ضمن عرض سلام خدمت دوستان
جناب آقای قربانی
به نظر من این مواردی که تا اینجاش بحث شده هیچ لزومی درش وجود نداشت . من فکر میکردم که این بحث خیلی زودتر به پایانش برسه .
ایجاد تاپیک در داخل بخش VB.Net باید انجام بشه . ( چون ظاهراً فقط اونها رو شی گرا میدونن )
با ایجاد اون تاپیک الزامی رو در انتقال مطالب عنوان شده فعلی نمیبینم ( عرض کردم که من اونها رو انحرافی نمیدونستم تا وقتی که تصورم این بود که با دید ارائه رویکردهای جدید مایکروسافت مطرح شده و بس ) ولی خب ظاهراً وزن این بحث از بحث اصلی بیشتر شد ! ( قبلش هم خود من تذکر داده بودم )
مطالبی که در این خصوص رد و بدل شد ( البته از سمت من با اصطلاحات غیر فنی جهت سهل الوصول تر بودن درک و از سوی دسوست دیگمون با اصطلاحات فنی ) در کتابها با وضوح و نظم و ترتیب بیشتری نوشته شده .
فقط در نهایت من توصیه میکنم که اگه خواستید بحثی ( و احتمالاً جدلی رو ) در این رابطه ایجاد کنید موارد زیر رو برای اینکه سریعتر به نتیجه برسید مد نظر قرار بدید :
- اصلاحات فنی رو با همون لغات انگلیسیش مطرح کنید . ترجمه های فارسی اونقدر گنگ و نامفهوم هستن که جایی رو برای بحث کردن و تعبیر و تفسیر باقی نمیذارن
سعی بشه تعاریف همراه با یک مثال واضح ارائه بشه ( مثل کتاب و کتابخونه ای که من در این تاپیک از اون استفاده کردم ) تا با توجه به مثال ارائه شده و مقایسه اون با امکانات موجود در دیگر برنامه های به ظاهر غیر شی گرا , به داشتن یا نداشتن اون امکانات و یا سطح دارایی اونها در برنامه های دو طرف دعوی پی ببریم .
- نمیدونم . ولی واقعاً فکر میکنم اگه روی مبحث مدیریت نشه , با توجه به بستر موجود اگه بخواید نتیجه گیری بشه احتمالاً باید در انتظار یه مثنوی دیگه باشیم که این دفعه از آستین سایت برنامه نویس بیاد بیرون !
به هر حال هر چی خودتون صلاح میدونید . به نظر من در وضعیت فعلیش نیازی به انتقال نیست ( مگه اینکه باز هم منحرف تر بشه )
من در اون تاپیک مشارکتی نخواهم ( وقتش رو ندارم که بنویسم )
در خصوص همین بحث اصلی هم هنوز پاسخ یکسری نکات مبهم مطرح شده داده نشده .
پی نوشت :
من اصراری در قبولوندن تفکرات خودم به کسی ندارم ولی وقتی دارم با Access برنامه نویسی شی گرا انجام میدم ( خودمو عرض میکنم ) بگم نه نمیشه ! ( البته از نوع پیکان مدل 52 )
پیکان فرمون داره ولی از نه از نوع هیدرولیک
پیکان ترمز داره ولی نه از نوع ABS
پیکان همه چیزهایی رو که باید یه ماشین داشته باشه داره !
فراموش نکنید که سه چرخه Vespa , پیکان , تراکتور , بنز 2009 و دوچرخه , همه و همه در زیر چتر واژه و مفهومی عمومی و علمی به نام Machine قرار میگیرن .
توی اینترنت خیلی چیزها رو میشه پیدا کرد که اشاره به شی گرایی Access داشته باشن ! به طور مثال به دنبال جمله زیر جستجو کنید :
( در بخش exact تایپ کنید )
Object-Oriented Programming with Access VBA
سعی کنیم از لای کتابهای ناقصی که توی ایران ترجمه میشه بیایم بیرون .
متاسفانه توی اینجا که فقط کتابهای مربوط به VB.Net و ... هستش . مسلماً توی اونها اشاره ای به این موضوع Access نمیشه . ولی نمیتونیم با استناد به اینکه اونها ننوشتن , بگیم پس Access این موارد رو نداره .
باز تاکید میکنم :
Access شی گراست ( دیگه در مورد سطحش صحبت نمیکنم , ترازو نداریم که بزاریمش روش و بگیم این کامله و اون ناقصه و اون یکی تقریباً داره و ... اینا همش نسبیه )
با آروزی موفقیت شما
و در انتظار تاپیکی دیگه که موضوع به طور واضح از طریق دوستان دیگه در اون مورد بررسی و کند و کاو قرار بگیره .
خدا نگهدار
alifa135
شنبه 28 دی 1387, 16:33 عصر
به نظرمن فرمایش آقا نبیل درسته و نباید Access رو دست کم گرفت وقتی ماکروسافت یه محصول رو منتشر کنه ، به سختی می شه از توش عیب و ایراد در آورد ،
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.