۷.۰۱.۱۳۸۸

مجموعه ها در اكسس

مقاله شماره 2
مجموعه ها در اكسس

در مقاله پيش مجموعه هاي زير به عنوان اجزايي از يك بانك اطلاعاتي Access معرفي شدند .

1. جداول 2. پرس وجوها

با توجه به اينكه 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

نيز ميتوان نوشت.

هیچ نظری موجود نیست:

http://up.iranblog.com/images/0z5dgraxwa4j49a5ts77.gif http://up.iranblog.com/images/gv83ah5giec9g8jkopmc.gif