::. شبدا .::

Shabda Quest Team

::. شبدا .::

Shabda Quest Team

نوع دایناست

مزایا:
در این نوع از رکورد ست ها متد های خاص و پر کاربردی وجود دارد بطوریکه اکثر برنامه های بانک اطلاعاتی با استفاده از این نوع رکورد ست نوشته می شود و همچنین گزینه پیش فرض VB نیز می باشد. در این نوع رکورد ست نحوه اتصال و برقراری ارتباط به صورت داینامیک است و برای اجرای خود بر روی حافظه اصلی می نشیند. فضای کمی اشغال میکنند و میتوان آنها را به چند تکه تقسیم کرد و همچنین با شی ODBC می توان آنرا به روز کرد. در واقع دایناست به جای کپی تمام بانک در Ram فقط کلید های دسترسی به هر رکورد را در Ram ذخیره می کند. دایناست همانطور که از اسمش بر می آید دینامیک است به این معنی که با تغییر بر روی جدول با استفاده از دایناست با استفاده از متد refresh دایناست جدول به روز می شود و تغییرات در آن منعکس می شوند.از ویژگی های ویژه دایناست ها می توان به آین اشاره کرد که دایناست می تواند بیش از یک جدول باشد و یا میتوان دایناست هایی از یک دایناست بدست آورد.
معایب:
با آنکه داینامیک بودن دایناست مزایای بسیاری دارد اما خالی از اشکال هم نیست. مثلا اگر کاربر دیگری رکوردی را پاک کند و شما به آن رکورد بروید پیغام خطا صادر می شود.دایناست از نبود Index ها که به Seek معروفند نیز رنج می برد. Seek در واقع آدرس رکورد است که دسترسی مستقیم به رکورد را عملی می کند. اما میتوان با استفاده از Flag ها که همان Seek ها هستند که به صورت دستی ساخته شده اند این نقص را برطرف کرد. همچنین احتمال تداخل در دایناست بسیار است زیرا امکان دارد دو نفر در آن واحد بخواهند یک رکورد را دستکاری کنند. در این صورت برای نفر اول اجازه دسترسی و برای نفر دوم پیغام خطا صادر می شود. چون VB برای حفظ یکپارچگی پایگاه داده اجازه نمیدهد که دیگری آنرا دستکاری کند.
در کدام شرایط استفاده از دایناست مناسب است؟
برای کار با بانکهای کوچک و متوسط مناسب است اگر در برنامه نیاز به ارتباط با منابع ODBC دارید باید از این نوع استفاده کنید.

طریقه اتصال یک پایگاه داده از نوع دایناست

کد نویسی برای ارتباط یک بانک اطلاعاتی در پروژه جدید:
ابتدا باید از منوی Project بر روی References کلیک کنید و سپس کتابخانه ی DAO 3.51 Object Library را اضافه کنید تا توابع آن به برنامه شما اضافه شود.سپس با استفاده از دو دستور زیر دو شی به نام های database و record set ایجاد می کنید.

Dim db As Database
Dim rs As Recordset

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

Set db = DBEngine.OpenDatabase("آدرس بانک")
Set rs = db.OpenRecordset("نام جدول",dbOpenDynaset)

متدهای اشیا
متد MoveNext :
برای رفتن به رکورد بعدی از این متد استفاده می کنیم.
Rs.MoveNext
متد های MovePrevious , MoveLast , MoveFirst:
Rs.MoveFirst برای رفتن به رکورد اول Rs.MoveLast برای رفتن به رکورد آخر Rs.MovePrevious برای رفتن به رکورد قبلی
نکته: اگر در رکورد آخر باشیم و از متد Movenext استفاده کنیم برنامه پیغام خطا صادر میکند ، همینطور این حالت برای متد MovePrevious بطور عکس صادق است. برای جلو گیری از این کار از دو متد زیر استفاده می کنیم.

متد Eof و Bof :
اگر به پایان بانک رسیده باشیم EOF مساوی با True میشود و اگر به اول بانک رسیده باشیم BOF مساوی با True میشود. برای جلوگیری کردن از پیغام خطاهای متد های Movenext و MovePrevious از دستورات زیر استفاده می کنیم:

rs.MoveNext
If rs.EOF = True Then rs.MovePrevious

rs.MovePrevious
If rs.BOF = True Then rs.MoveNext

متد clone :
برای کپی از شی رکورد ست به شی رکورد ست دیگر مورد استفاده قرار می گیرد.
Set rs2 = rs1.clone
متد Bookmark :
برای نشانه گذاری یک رکورد از bookmark استفاده میکنیم.برای Bookmark کردن یک رکورد شما باید خاصیت bookmark یک شی رکورد را در متغیر رشته ای ریخته و برای صدا کردن bookmark نیز خاصیت bookmark شی رکورد را برابر با آن رشته کنید.
کردن bookmark برای

Strbookmark = rs.bookmark

برای صدا کردن

Rs.bookmark=strbookmark


نکته : شما میتوانید با استفاده از Data Object که در Toolbox ویژوال بیسیک به صورت پیش فرض موجود است نیز استفاده کنید. برای اتصال آن به یک بانک کافیست از لیست خاصیت های آن DataBaseName را برابر با آدرس بانک و RecordSource را برابر با نام جدول کنید. خاصیت recordset آن نیز که بطور پیش فرض دایناست است.

متد Filter :
برای کوچک کردن جدول مورد استفاده در برنامه است. زیرا کار با جدول های بزرگ سرعت را پایین آورده و موجب کندی برنامه می شود. در نتیجه با استفاده از متد Filter یک شرط برای جدول دلخواه در نظر میگیریم تا جدول را به بخش کوچک تری اختصاص دهیم.

Data1.recordset.filter="شرط"

متد Find :
این متد شامل FindFirst,FindLast,FindNext,FindPrevious است که نقطه آغاز جستجو را مشخص می کند.

Data1.recordset.FindFirst "شرط"

Data1.recordset.FindFirst "نام فیلد > مقدار عددی"
Data1.recordset.FindFirst "نام فیلد = 'مقدار رشته ای ' "

نکته: از متدهای مرتبط با متد Find میتوان به متد noMatch اشاره کرد . اگر داده ی مورد نظر در بانک پیدا شد مقدار noMatch مساوی با False و در غیر اینصورت True می شود.

نکته: توجه داشته باشید که اگر noMatch=False شود (داده ی مورد نظر در بانک پیدا نشود) جایگاه قبلی رکورد را گم خواهیم کرد . برای جلوگیری از این کار مقدار قبل از جستجو را باید Bookmark کنیم تا بعد از جستجو بازیابی شوند.

نکته: برای جستجوی رشته ها باید از کلمه ی کلیدی Like استفاده شود و طرز استفاده از آن نیز به صورت زیر است.
Data1.recordset.FindFirst "نام فیلد LIKE رشته مورد نظر"

برای نمونه به برنامه زیر دقت کنید:

Strsearch=inputbox("متن پیغام")
Strsearch= "'" & strsearch & "'"
Data1.recordset.FindFirst "نام فیلد LIKE " & strsearch

با استفاده از کد بالا حتی میتوانید از کاراکتر های وایلدکارد یا همان ? و* نیز برای جستجو استفاده کنید.
اما برای جستجوی تاریخ باید از دستور زیر استفاده کنید:

Temp="#" & "تاریخ مورد نظر " & "#"
Data1.Recordset.FindFirst "نام فیلد = ' temp ' "

نکته: کلمات کلیدی مانند And نیز وجود دارند که برای برقراری شرط های پیشرفته بکار میروند.

Data1.Recordset.FindFirst "ID = 007 AND Name LIKE 'Shabda' "

به این معنی که رکوردی که فیلد ID آن برابر با 007 و فیلد Name آن برابر با Shabda باشد را نمایش میدهد.