نوشته شده توسط
saeed1234n
با سلام
جناب استاد امیری :
اگر محبت کنید راجع به کد زیر توضیح بفرمایید کمال تشکر را دارم برای بنده نامفهوم است
If Left(tdf.Name, 4) <> "msys" And tdf.Attributes <> 1073741824 _
And tdf.Attributes = 1 Then
tdf.Attributes = tdf.Attributes - dbHiddenObject
اگر در object Browser عبارت TableDefAttributeEnum رو جستجو کنید با تصویر زیر مواجه می شوید:
اینها ثوابت عددی هستند که برخی ویژگیهای یک جدول را مشخص می کنند که هرکدام مشخص کننده عددی خاص هستند . مثلا dbAttachedTable برایر 1073741824 می باشد .
چنانچه یک جدول عادی داشته باشید خصوصیت Attributes آن صفر خواهد بود و با توجه به تصویر فوق برای باقی حالات طبق جدول زیر است
معمولا ثابت های شمارشی طوری تنظیم شده اند که می توانید ترکیبی از آنها را بکار ببرید ( با OR و AND کردن و یا جمع و تفریق) یعنی بطور مثال یک جدول هم می تواند سیستمی شده باشد و هم مخفی :
tdf.Attributes = dbHiddenObject + dbSystemObject
و یا
tdf.Attributes = dbHiddenObject OR dbSystemObject
در دستور دومی احتیاج به چک کردن این موضوع نیست که جدول قبلا مخفی نشده باشد .
زمانی هم که قصد برداشتن ویژگی داده شده را داشته باشیم مثلا آنرا ازحالت مخفی در آوریم بهترین روش AND NOT آنست
tdf.Attributes = tdf.Attributes And Not dbHiddenObject
اگر بخواهیم مانند نمونه دوستمان مقدار را کم کنیم حتما بایستی وجود ویژگی در جدول چک شود درغیر اینصورت مقدار نادرستی میگیرد و باعث خطا خواهد شد.
در مورد If Left(tdf.Name, 4) <> "msys"
چک شده که جدول جزو جدولهای سیستمی نباشد که می شد بجای آن
And Not(tdf.Attributes Or dbSystemObject)
را هم نوشت که هیچ فرقی نمی کند .