آموزش Microsoft Office Access

آموزش اکسس بخش دوازدهم

توسط amin8505 | گروه مقاله های آموزشی | 1394/07/28

نظرات 0

 افزودن ستونهاي جديد به جداول موجود 

* بدست آوردن درك كلي از اينكه هدف از ايجاد هر جدول و هر ستون چه مي باشد 
* ايجاد تغييرات برروي بانك اطلاعاتي بدون نياز به ايجاد تغييرات وسيع برروي صفحات 

براي اطمينان از طراحي بانك اطلاعاتي با كيفيت بالاتر, تعدادي تكنيك هاي حرفه اي وجود دارند كه به وسيله توسعه دهندگان بانك اطلاعاتي مورد استفاده قرار مي گيرند. اولين و مهمترين تكنيك, نرمال سازي بانك اطلاعاتي مي باشد. اين تكنيك در بخش "نرمال سازي بانك اطلاعاتي" مورد بحث قرار مي گيرد. نرمال سازي بانك اطلاعاتي به شما و ديگران اجازه مي دهد كه ستونهاي جديدي را اضافه نماييد و جدول را با سادگي هرچه بيشتر بسازيد. همچنين, هنگام مشاهده بانك اطلاعاتي ديگران, نرمال سازي باعث سادگي تفسير و درك آن بانك هاي اطلاعاتي مي گردد. 

يك تكنيك مشابه با نرمال سازي كه مورد استفاده قرار مي گيرد تكنيك جداول مرجع (Lookup Tables) مي باشد. فرض كنيد كه شما يك جدول با يك ستون داريد كه مي توانيد آن را فقط برابر يك مقدار از پيش تعيين شده قرار دهيد. براي مثال, شما ممكن است كاربراني داشته باشيد كه فرمي را برروي سايت وب شما پر مي نمايند. شما مايليد كه اين اطلاعات را در داخل جدول بانك اطلاعاتي ذخيره نماييد. اگر, در داخل فرم, از كاربران پرسيده باشيد كه چگونه با سايت وب تان آشنايي پيدا كرده اند, يك ليست از انتخابها را در اختيار آنها قرار مي دهيد كه مي توانند در داخل آن ليست گزينه دلخواه خود را انتخاب نمايند. چنين گزينه هايي ممكن است شامل, From a Search Engine يا From a Friend باشند. در موارد ديگر, گزينه هايي كه كاربران ممكن است انتخاب نمايند, محدود شده است, و اغلب, انواعي از سئوالات مي باشد كه با استفاده از يكList Box از آنها پرسيده مي شود. 

از آنجايي كه شما پاسخهاي كاربران را در داخل يك جدول ذخيره مي كنيد, يكي از ستونهاي جدول بايد مقداري كه تعيين مي نمايد كه چگونه كاربران با سايت وب شما آشنا شده اند را ذخيره نمايد. براي يك لحظه فكر كنيد كه چه چيزي را بايد در اين ستون ذخيره نماييد؟ يك روش ذخيره گزينه اي كه كاربران انتخاب كرده اند به صورت يك رشته مي باشد. بنابراين, اگر يك كاربر در مورد سايت شما از طريق يك موتور جستجو مطالبي را شنيده باشد, رشته From a Search Engine در داخل ستون قرار داده مي شود. اين راه حل داراي محدوديتهايي مي باشد, براي مثال, در صورتي كه شما بخواهيد گزينه ها را دستكاري نماييد, و گزينه هاي جديد را اضافه نماييد, يا گزينه هاي موجود را حذف نماييد چه كار مي كنيد؟ 

يك راه حل قدرتمندتر استفاده از جداول مرجع مي باشد. بحث در مورد جداول مرجع و اينكه چگونه مي توانند مورد استفاده قرار گيرند در بخش "استفاده از جداول مرجع" آورده شده است. تكنيك مرسوم ديگري كه بانك اطلاعاتي شما را قابل فهم تر مي نمايد, استفاده از آداب نامگذاري (Naming Conventions) مي باشد. يك بانك اطلاعاتي كه شامل ستونها و جداولي است كه به صورت منطقي نامگذاري شده اند, خواناتر از بانك اطلاعاتي مي باشد كه داراي نامهاي بي معني مي باشد. فرض كنيد كه شما بايد يك جدولي بسازيد كه شامل ليست مشتريانتان مي باشد. خوشايندتر است كه نام جدول را tblcustomers قرار دهيد و نام ستونهاي اين جدول را First Name,Last Name, Age و ساير اطلاعات ديگر قرار دهيد. با چنين نامهايي ستونها و جداول, فهم اطلاعاتي را كه جدول نگهداري مي نمايد و اينكه چه اطلاعاتي در هر ستون قرار دارد آسانتر مي گردد. آيا اگر نام جدول را T1 و ستونهاي آن را C1 و C2 تا CN نامگذاري نماييم فهم آن آسانتر مي باشد؟ هر شخصي به غير از شما, كه سازنده اين جدول مي باشيد, هنگام نگاه كردن در تعاريف اي جدول دچار سردرگمي خواهد شد. توصيه هايي در رابطه با آداب صحيح نامگذاري در بخش "آداب نامگذاري" گفته خواهد شد. 

مشكل رايج هنگام طراحي نرم افزارهاي بانك اطلاعاتي آن است هنگامي كه طراحي بانك اطلاعاتي تغيير مي كند, اعمال تغييرات زيادي در صفحات اي كه مسئول نمايش, به روزرساني, درج و حذف اطلاعات بانك اطلاعاتي هستند, ضروري مي باشند. اگرچه قطعاً غيرممكن است كه وقتي شما طراحي بانك اطلاعاتي را تغيير مي دهيد, مجبور به ايجاد تغييراتي در صفحات نباشيد, اما اقداماتي را مي توانيد انجام دهيد تا تعداد تغييرات موردنياز را به حداقل برسانيد. با استفاده از پروسيجرهاي ذخيره شده شما مي توانيد يك سطح تجرد بين پرس و جوهاي بانك اطلاعاتي و صفحات اي كه پردازش اطلاعات حاصل از اين پرس و جوها را انجام مي دهند ايجاد نماييد 
 

مزايا و معايب اکسس
نرم افزارميكروسافت اكسس در بين برنامه نويسان ايراني از جايگاه ويژه اي برخوردار بوده و مي توان گفت كه 50 الي 80 درصد نرم افزارهاي ايراني از اين بانك اطلاعاتي براي ساختن جداول و نگهداري اطلاعات استفاده مي نمايند. 

شايد مهمترين دليل اين مسئله, سادگي و سهولت استفاده از آن باشد. طبق مطالب ارائه شده از طرف ميكروسافت, بانكهاي اطلاعاتي اكسس توانايي نگهداري ميليونها ركورد در جداول خود را دارند, ولي طبق تجربيات بنده, اگر تعداد ركوردها از پنجاه هزار ركورد بيشتر بشود, برنامه خيلي كند شده و امكان به هم ريختن ساختار جداول يا خرابي هاي ديگر بشدت بالا رود ولي در عوض با تعداد ركوردهاي پائين واقعاً عملكرد عاليتري نسبت به بقيه بانكهاي اطلاعاتي ارائه مي دهد. 

از طرف ديگر مي توان مهمترين مزيت اكسس را امكانات واقعاً‌ عالي و ساده آن در ساختن فرمها و گزارشات دانست بطوري كه اگر كاربري حتي يك خط هم كدنويسي بلد نباشد, بازهم مي تواند با استفاده از Interface خيلي قوي و امكانات wizard آن به طور كامل يك پروژه كوچك را طراحي نمايد, كه خود اين مسئله را مي توان مهمترين دليل محبوبيت ميكروسافت اكسس در بين دانشجويان رشته هاي مهندسي دانشگاهها دانست. 


مزاياي استفاده از اكسس: 

1. نصب و راه اندازي آن خيلي ساده و راحت مي باشد. 
2. زبان كدنويسي آن VBA مي باشد كه تقريباً‌ همان VB استاندارد مي باشد. 
3. براي نصب و اجرا احتياج به سرور خاصي نداشته و برروي كليه ويندوزها براحتي نصب مي گردد. 
4. با حداقل كدنويسي مي توان حداكثر بازده را از فرمها و گزارشات دريافت كرد. 
5. داراي محيطي ساده و راحت براي طراحي و كدنويسي فرمها, گزارشات, ماژولها مي باشد. 
6. امكانات wizard آن خيلي كامل مي باشد. 
7. در فرمهاي آن امكانات جالبي مانند انواع sort , انواع فيلتر و ... درنظرگرفته شده و احتياجي به طراحي آنها از طرف برنامه نويس نمي باشد. 
8. در فرمهاي آن ابزار بسيار مفيدي بنام Subform وجود دارد كه براي شبيه سازي آن در VB بايد چند صد خط كد نويسي نماييد. 
9. فرمهاي آن بدون اينكه به كد نويسي احتياجي داشته باشند ميتوانند در سه حالت معمولي – ليست و فرم ادامه دار نمايش داده شوند 


معايب استفاده از اكسس: 

1. امكان ساختن فايل اجرايي exe از فايلهاي آن وجود ندارد. 
2. نداشتن امكان ساختن class ها و collection ها. 
3. يك database واقعي نبوده و امكاناتي نظير storprocedure, Trigger را ندارد. 
4. داراي امنيت با security بالايي نيست. 
5. حجم فايلهاي آن بزرگ مي باشد. مثلاً‌ 200 فرم برابر با 35 مگابايت مي باشد. 
6. وقتي كه تعداد ركوردها يا object هاي آن بالا مي رود, ضريب اطمينان پائين مي آيد. 
7. در صورت طراحي فرم و گزارشات در خود اكسس ، نمي توان از آن به حالت client-server در شبكه استفاده كرد, بلكه استفاده از آن به صورت file server خواهد بود. 
8. هرچه قدر كه تعداد كاربران استفاده كننده از برنامه در شبكه بالا برود به همان اندازه ضريب اطمينان برنامه نيز پائين مي آيد. 

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

مجموعه هاي زير به عنوان اجزايي از يك بانك اطلاعاتي 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
نيز ميتوان نوشت.
 
 
Join کردن بيش از ۲ جدول براي Database هاي Access 

 براي Join کردن بيش از دو جدول يک بانک اطلاعاتي راه حل زير را پيشنهاد مي شود: 

SELECT 
c.CompanyID, 
c.CompanyName, 
e.LastName, 
e.FirstName, 
e.Salary, 
d.FullName, 
d.RelationShip 
FROM 
Company c INNER JOIN Employee e 
ON c.CompanyID = e.CompanyID 
INNER JOIN Dependant d 
ON e.SSN = d.SSN 

که در بيشتر برنامه هاي Database Server درست عمل مي کند. 
اما در بانکهاي اطلاعاتي Microsoft Access پيغام خطايي با توضيح زير مي دهد : 


Operator expected 

 در اکسس در برخي قسمت ها وجو د پارانتز الزامي است با اينکه در انواع ديگر بانک هاي اطلاعاتي نيازي به آن پارانتز ها نيست. يعني کد مورد نظر را بايد به صورت زير باز نويسي کنيم : 


SELECT 
c.CompanyID, 
c.CompanyName, 
e.LastName, 
e.FirstName, 
e.Salary, 
d.FullName, 
d.RelationShip 
FROM 
(Company c INNER JOIN Employee e 
ON c.CompanyID = e.CompanyID) 
INNER JOIN Dependant d 
ON e.SSN = d.SSN 

و يک نمونه ي ديگر در اتصال ۴ جدول : 

SELECT 
cfarticle.id, 
cfarticle.title, 
cfarticle.description, 
cfarticle.dateadded, 
editorial.authorname as author, 
categories.name, 
levels.levelname 
FROM 
((cfarticle INNER JOIN categories ON cfarticle.category=categories.id) 
INNER JOIN editorial ON cfarticle.author=editorial.id) 
INNER JOIN levels ON cfarticle.skllevel=levels.id 
 

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر