با توجه به اینکه Access از زبان VBA مخفف Visual Basic for Application برای نوشتن کد برنامه ها استفاده می کند . در این مقاله میخواهیم ببینیم نحوه دسترسی به این اجزا از طریق کد برنامه چگونه است.
Access هر یک از دو جزء فوق را به عنوان مجموعه هایی از یک بانک اطلاعاتی می شناسد البته مجموعه های دیگری نیز در Access وجود دارند که بعدا به آنها خواهیم پرداخت . جهت دسترسی به هر یک از اجزای یک مجموعه در Access نیاز به تعریف متغیرهایی از همان نوع داریم. تعریف متغیرها توسط دستور Dim صورت می گیرد و علاوه بر انواع معمول در سایر زبانهای برنامه نویسی مانند Integer و String ، انواع زیر نیز کاربرد دارند .
1) Database (برای دسترسی به یک بانک اطلاعاتی )
2) TableDef (برای دسترسی به جداول یک بانک اطلاعاتی )
3) QueryDef (برای دسترسی به پرس وجوهای یک بانک اطلاعاتی )
4) Property (برای دسترسی به خصوصیات یک عنصر اطلاعاتی مانند فیلد )
5) Index (برای دسترسی به اندیسهای یک جدول)
6) Field (برای دسترسی به فیلد های یک جدول)
دستورات زیر مثالهایی از تعریف متغیر هستند
Dim db As Database
Dim tabel As tabledef
Dim Query As QueryDef
Dim fld As Field
Dim Prop As Property
Dim s As String
Dim i As Integer
که از الگوی کلی زیر جهت تعریف متغیر تبعیت میکنند
Dim نام متغیر AS نوع متغیر
جهت انتساب هر یک از متغیرهای اطلاعاتی فوق به عنصر متناظر از بانک اطلاعاتی از دستور Set به شکل زیر استفاده میشود
Set نام متغیر = مقدار
برای مثال دستور Set db = CurrentDb جهت انتساب متغیر db به بانک اطلاعاتی جاری به کار میرود (از تابع CurrentDb جهت اشاره به بانک اطلاعاتی جاری استفاده شده است )
برای دسترسی به اجزا یا خصوصیات یک متغیر اطلاعاتی بین نام متغیر و جزء مربوطه نقطه قرار می گیرد
برای مثال روال زیر که در رویداد کلیک دگمه Command1 واقع بر یک فرم نوشته شده است باعث نمایش نام کلیه جداول اطلاعاتی موجود در بانک اطلاعاتی جاری میشود. البته جداول اطلاعاتی دیگری نیز علاوه بر جداولی که خودتان ایجاد کرده اید نیز نمایش داده میشوند که جدول سیستمی مورد استفاده Access هستند .
Private Sub Command1_Click()
Dim db As Database
Dim i As Integer
Set db = CurrentDb
For i = 0 To db.TableDefs.Count - 1
MsgBox db.TableDefs(i).Name, vbOKOnly
Next i
End Sub
همانطور که در کد فوق مشاهده میشود مجموعه TableDefs مربوط به عنصر بانک اطلاعاتی آرایه ای است از جداول اطلاعاتی .
اندیس آرایه ها از صفر شروع میشود و توسط متد Count تعداد آنها به دست می آید .
جهت مرور اجزای یک مجموعه در Access روش ساده تری نیز وجود دارد و آن استفاده از حلقه For Each Next با الگوی زیر میباشد.
For Each element In Collection
Next element
با استفاده از این دستور روال فوق به شکل زیر در می آید
Private Sub Command1_Click()
Dim db As Database
Dim tabel As tabledef
Set db = CurrentDb
For Each tabel In db.TableDefs
MsgBox tabel.Name, vbOKOnly
Next tabel
End Sub
فیلدهای یک جدول اطلاعاتی نیز تشکیل مجموعه ای به نام Fields را میدهند. کد زیر با مرور فیلدهای جدول TableName نام کلیه فیلدهای آن را نمایش میدهد.
Private Sub Command2_Click()
Dim db As Database
Dim fld As Field
Set db = CurrentDb
For Each fld In db.TableDefs("TableName").Fields
MsgBox fld.Name, vbOKOnly
Next fld
End Sub
در کد فوق امکان انتساب جدول TableName به یک متغیر اطلاعاتی از نوع tabledef و استفاده از آن در برنامه نیز وجود دارد .
هر یک از فیلدهای یک جدول اطلاعاتی دارای خصوصیاتی هستند که این خصوصیات نیز تشکیل یک مجموعه به نام Properties میدهند مثلا خاصیت AllowZeroLength مربوط به یک فیلد مشخص میکند که در هنگام ورود اطلاعات میتوان آن فیلد را خالی رد کرد یا نه . کد زیر با به کارگیری سه حلقه تو در تو نام کلیه خصوصیات مربوط به کلیه فیلدهای جداول اطلاعاتی بانک اطلاعاتی جاری را نمایش میدهد از آنجایی که ای ن تعداد زیاد است میتوانید با فشار Ctrl+Break برنامه را متوقف کرد.
Private Sub Command3_Click()
Dim db As Database
Dim tabel As tabledef
Dim fld As Field
Dim Prop As Property
Set db = CurrentDb
For Each tabel In db.TableDefs
For Each fld In tabel.Fields
For Each Prop In fld.Properties
MsgBox Prop.Name, vbOKOnly, tabel.Name & "." & fld.Name
Next Prop
Next fld
Next tabel
End Sub
علاوه بر فیلدهای هر جدول اطلاعاتی ، خود جدول نیز خصوصیاتی دارد که خودتان با نوشتن کد مشابه میتوانید آنها را نمایش دهید.
پرس و جوهای موجود در هر بانک اطلاعاتی نیز تشکیل یک مجموعه به نام QueryDefs میدهند کد زیر با مرور این مجموعه در بانک اطلاعاتی جاری اسامی آنها را نمایش میدهد.
Private Sub Command4_Click()
Dim db As DAO.Database
Dim Query As QueryDef
Set db = CurrentDb
For Each Query In db.QueryDefs
MsgBox Query.Name, vbOKOnly
Next Query
End Sub
هر یک از مجموعه های فوق را علاوه بر مرور با دستور For Each Next توسط اندیس آرایه مربوطه نیز میتوان مرور کرد کد قبل را با این روش نیز بازنویسی میکنیم.
Private Sub Command4_Click()
Dim db As DAO.Database
Dim i As Integer
Set db = CurrentDb
For i = 0 To db.QueryDefs.Count - 1
MsgBox db.QueryDefs(i).Name, vbOKOnly
Next
End Sub
جهت جستجوی سریع رکوردهای یک جدول اطلاعاتی از ایندکس استفاده می شود . اکسس توصیه میکند هر جدول اطلاعاتی دارای یک Primary Key یا کلید اولیه باشد که در حقیقت نوعی ایندکس است که اجازه ورود مقادیر تهی یا Null به فیلد مربوطه را نمی دهد و همچنین از ورود مقادیر تکراری به آن فیلد جلوگیری میکند . به عنوان مثال فیلد کد پرسنلی در جدولی که حاوی اطلاعات پرسنل است میتواند یک فیلد Primary Key باشد.
جهت ایجاد یک ایندکس ، در محیط طراحی یا Design جدول مربوطه روی آیکن Indexes واقع در Toolbar اکسس کلیک کنید در اینجا هر سطر میتواند بیانگر یک ایندکس یا ترتیب بر اساس یک فیلد به صورت صعودی یا نزولی باشد . برای ایجاد یک ایندکس بر اساس چند فیلد ، در سطرهای بعدی ستون نام ایندکس را خالی بگذارید و فقط نام فیلد را انتخاب نمایید.
اندیسهای هر جدول اطلاعاتی نیز تشکیل یک مجموعه به نام Indexes میدهند که توسط کد زیر میتوان آنها را مرور کرد .
Private Sub Command5_Click()
Dim db As Database
Dim tabel As tabledef
Dim ind As Index
Set db = CurrentDb
Set tabel = db.TableDefs("TableName")
For Each ind In tabel.Indexes
MsgBox ind.Name, vbOKOnly
Next ind
End Sub
دستور انتساب
Set tabel = db.TableDefs("TableName")
را به شکل
Set tabel = db!TableName
نیز میتوان نوشت.
در این مقاله به مرور و نمایش عناصر مجموعه های TableDefs ، QueryDefs ، Fields ، Properties و Indexes بسنده کردم در مقاله بعد اگر عمری باقی باشد قصد دارم نحوه اضافه نمودن یک عنصر جدید به هر یک از این مجموعه ها و نیز حذف یک عنصر موجود را تشریح کنم .