مقدمه................................................................ 9
مختصري درباره پروژه........................................... 10
فصل اول - آشنايي با محيط Visual Basic 6........ 11
خلاصه فصل اول................................................. 12
1-1- پنجره پروژه جديد ......................................... 13
2-1- جعبه ابزار .................................................. 14
3-1- Form........................................................ 15
4-1-Properties ................................................. 15
5-1- ابزار هاي Visual Basic ................................ 15
1-5-1- pointer .................................................. 16
2-5-1-picture box ....................................... 16
3-5-1- label ..................................................... 16
4-5-1- text box ................................................ 16
5-5-1- frame ................................................... 17
6-5-1- command button ............................... 17
7-5-1- option button ........................................ 17
8-5-1- check box ........................................... 18
6-1-بررسي Properties ................................ 18
1-6-1- name ............................................... 18
2-6-1- caption .......................................... 19
3-6-1- top........................................................ 19
4-6-1- width .................................................... 19
5-6-1- height.................................................... 19
6-6-1- left........................................................ 19
7-6-1- border style............................................ 19
8-6-1- window state.......................................... 19
7-1- Event Procedure........................................ 19
8-1- رويداد هاي مهم........................................... 20
1-8-1- load....................................................... 20
2-8-1- click....................................................... 20
3-8-1- dblclick.................................................. 21
4-8-1- activate.................................................. 21
5-8-1- deactivate.............................................. 21
6-8-1- resize..................................................... 21
7-8-1- unload................................................... 21
8-8-1- change.................................................. 21
9-1- مفاهيم بنيادي VB........................................ 23
10-1- انواع داده هاي VB..................................... 25
11-1- دستور If.................................................. 26
12-1- انتخاب با Select Case ................................ 27
13-1- تکرار با استفاده از حلقه.............................. 28
1-13-1- دستور Do.............................................. 28
2-13-1- استفاده از Step..................................... 29
3-13-1- حلقه For ............................................. 29
14-1- ارتباط با کاربر............................................. 30
1-14-1- تابع Msg box و Input box.................... 30
15-1- آرايه اي از کنترل ها .................................... 31
16-1- پايگاه داده ها در VB................................... 33
1-16-1- آشنايي با ADO....................................... 33
2-16-1- اشيا در مدل ADO................................... 33
3-16-1- خواص ADO........................................... 34
4-16-1- Connection String.................................. 34
5-16-1- Command Text..................................... 34
6-16-1- Command Type..................................... 34
7-16-1- Cursor Location..................................... 35
8-16-1- Cursor Type.......................................... 36
9-16-1- Lock Type............................................. 38
10-16-1- Mode Type.......................................... 39
11-16-1- متدهاي کنترل داده ADO........................ 40
12-16-1- رويداد هاي کنترل داده ADO.................... 40
13-16-1- استفاده از ديالوگ براي تنظيم خاصيت Connection String............................................. 41
فصل دوم - مقدمه اي از SQL و SQL Server........ 47
خلاصه فصل دوم................................................. 48
1-2- دستور Select.............................................. 49
2-2- استفاده از توابع در Select.............................. 50
1-2-2-Count 50
2-2-2- Sum 50
3-2-2- Min,max................................................. 52
4-2-2-Top n 52
5-2-2- Into 52
3-2- دستور Delete ............................................ 52
4-2- دستور insert.............................................. 53
5-2- محيط Enterprise Manager............................ 53
6-2- ايجاد يك جدول جديد..................................... 55
7-2- ايجاد Stored Procedure................................ 56
8-2- ابزار View................................................... 59
9-2- ايجاد ديد.................................................... 59
10-2- مراحل ايجاد يك ديد..................................... 60
11-2- ايجاد Stored Procedure با استفاده از ويزارد ها 62
نتيجه گيري........................................................ 65
مراجع............................................................... 66
فصل اول - آشنايي با محيط Visual Basic 6
1-1- پنجره پروژه جديد.......................................... 13
2-1- جعبه ابزار................................................... 14
3-1- پنجره انتخاب ابزارها...................................... 15
4-1- نمونه اي از بر چسب.................................... 16
5-1- نمونه اي از جعبه متن................................... 17
6-1- نمونه اي از دکمه فرمان................................. 17
7-1- نمونه اي از Option button............................ 18
8-1- روال رويداد form load................................... 20
9-1- تعدادي از رويداد هاي فرم............................... 22
10-1- اجراي تابع Msg box................................... 30
11-1- آرايه اي از کنترل ها..................................... 32
12-1- گزينه هاي Command Type......................... 35
13-1- گزينه هاي Cursor Location......................... 36
14-1- گزينه هاي Cursor Type.............................. 37
15-1- گزينه هاي Lock Location............................ 38
16-1- گزينه هاي Lock Location............................ 39
17-1- راست کليک روي ADODC............................ 42
18-1- پنجره ADODC Properties........................... 42
19-1- انتخاب نوع ارائه کننده.................................. 43
20-1- صفحه Connection..................................... 44
21-1- پيغام Test Connection ............................... 44
22-1- پنجرهProperties ADODC............................ 45
23-1- پنجره Record Source................................. 45
24-1- مثالي از پنجره Record Source...................... 46
فصل دوم - مقدمه اي از SQL و SQL Server
1-2- صفحه Enterprise Manager........................... 53
2-2- پنجره New Database................................... 55
3-2- راست کليک براي ايجاد New View.................. 60
4-2- اضافه کردن جدول به ديد................................ 60
5-2- تنظيمات View ............................................ 61
6-2- ايجاد SP بوسيله ويزارد.................................. 62
7-2- انتخاب Database......................................... 62
8-2- ويرايش SP.................................................. 63
9-2- ويزارد راهبري SP.......................................... 64
اين مطلب در حقيقت خلاصه ايست از مطالبي که براي نوشتن برنامه اي به سبک برنامه اينجانب
مورد نياز است .
در اين گزارش سعي شده است در هنگام ياد دادن و بيان مطالب نمونه هايي از آنچه در برنامه استفاده شده است آورده شود .
در ابتداي گزارش هم روش کار کردن برنامه و کار کردن با برنامه آورده شده است .
اين گزارش شامل دو فصل است که هر کدام داراي بخش ها و زير فصل هايي مي باشند .
فصل اول که بيشتر مطالب مربوط به اين فصل است درباره Visual Basic و فصل دوم مربوط به SQL Server مي باشد .
در اين گزارش سعي شده است در موارد مورد نياز و براي خوانايي بيشتر ودرک بهتر مفاهيم از تصاوير استفاده شود .
اين برنامه نمونه اي از سيستم ثبت نام دانشگاه است .
اين برنامه شامل 6 ورودي جدا براي پرسنل مختلف است که در اين پروژه قسمت ثبت نام بيشتر مد نظر ما است .
در ورود به سيستم ابتدا نام کاربري و رمز عبور از ما سوال مي شود .
هنگامي که به بخش ثبت نام وارد مي شويم ابتدا بايد شماره دانشجويي را وارد کنيم .
در اين قسمت برنامه به گونه اي نوشته شده است که بطور خودکار بدون نياز به فشار دادن دکمه اي شماره وارد شده بطور خودکار در جدول جستجو مي شود .
در اين جستجوي ابتدايي نام و نام خانوادگي دانشجو بر اساس شماره وي داده مي شود .
در اين هنگام ما مي توانيم از بين 3 گزينه انتخاب ، حذف ، و يا اضافه واحد يکي را انتخاب کنيم و بر اساس اين انتخاب ما شماره ترم مورد نظر بطور خودکار توسط برنامه داده مي شود .
بعد از اين انتخاب ما مي توانيم شماره درس مورد نظر را براي انتخاب و يا اضافه کردن واحد وارد کنيم و در صورت تمايل به حذف درس روي آن درس کليک کنيم تا درس به رنگ قرمز درآيد وسپس روي دکمه مورد نظر کليک مي کنيم تا عمليات لازم انجام شود .
در اين فصل با مطالبي از Visual Basic که در اين گزارش به اختصار VB بيان شده آشنا مي شويد . اين مطالب مناسب و نسبتا کافي براي يک پروژه برنامه نويسي است .
براي درک اين مطالب بايد آشنايي نسبي با زبان هاي برنامه نويسي و بخصوص با زبانهاي Visual داشته باشيم .
اين فصل شامل 16 بخش است که اين بخش ها را بطور کلي مي توان به دو قسمت جدا تعبير کرد .
قسمت اول که شامل 15 بخش اول اين فصل است و بيشتر پيرامون زبان برنامه نويسي VB است و وارد جزئيات تخصصي در مورد خاصي نمي شود .
قسمت دوم که شامل بخش 16 که بخش پاياني اين فصل است و درباره پايگاه داده در اين زبان برنامه نويسي است و به طور کامل نياز هاي ما را در مورد استفاده از پايگاه داده
SQL Server در اين پروژه رفع مي کند.
در ابتداي اين فصل به بيان مطالبي مقدماتي در مورد اصول برنامه نويسي با VB پرداخته شده است که شامل کنترل ها ، ابزارها ، خواص و رويدادهاي اين زبان است .
در ادامه به بيان اصولي از ساختارهاي شرطي و تکرار در VB پرداخته شده است .
1-1- پنجره پروژه جديد
هر گاه ويژوال بيسيک را باز مي کنيم پنجره اي بنام new project ظاهر مي شود .
اين پنجره به شما امکان مي دهد تا نوع برنامه خود را انتخاب کنيد و بر اساس نوع کاربرد پروژه مناسب را باز نماييم .
در شکل 1-1 اين پنجره را مي بينيد .
اغلب برنامه هاي نوشته شده از نوع standard exe است .
شکل 1-1- پنجره پروژه جديد
شکل 2-1- جعبه ابزار
2-1- جعبه ابزار
در اين پنجره مهمترين و پر کاربرد ترين ابزار هاي visual basic آورده شده است .
اين پنجره قابليت اضافه و کم کردن ابزار ها را دارد .
همچنين قابليت افزودن component ها را نيز دارا مي باشد .
ما در اين پروژه تنها به کنترل ADO براي اتصال به پايگاه داده نياز داريم و همانطور که در شکل 3-1 مي بينيد آن را علامت دار مي کنيم سپس کليد OK را مي زنيم تا به کنترل هاي پروژه ما اضافه شود .
شکل 3-1- پنجره انتخاب ابزارها
3-1- Form
فرم محلي است که کنترل هاي برنامه روي آن قرار مي گيرند .
يک برنامه مي تواند شامل بيش از يک فرم هم باشد . تمامي فرم هاي برنامه در محلي بنام project explorer نمايش داده مي شود .
در اين پروژه از 28 فرم استفاده شده است .
4-1-Properties
يکي ديگر از پنجره هاي مهم ديگر در برنامه پنجره properties است و براي هر کنترل و فرم برنامه يک پنجره properties وجود دارد .
5-1- ابزار هاي Visual Basic
در اين قسمت ما با ابزار هايي که در قسمت toolbox قرار دارند آشنا مي شويم .
ما در اينجا ابزار هاي پيش فرض برنامه را از بالا به پايين شرح مي دهيم .
1-5-1- pointer
اين ابزار کنترل نبوده و براي وقتي است که ما يک کنترل را به حالت آماده در آورده باشيم و مي خواهيم از اين کار انصراف دهيم .
با فشار دادن اين ابزار کرسر ماوس به حالت اوليه خود در مي آيد .
2-5-1-picture box
اين کنترل براي قرار دادن يک تصوير روي فرم بکار مي رود .
اين کنترل از انواع تصاوير با پسوند هاي مختلف پشتيباني مي کند .
3-5-1- label
اين کنترل فقط براي نمايش متن هاي مورد نظر برنامه نويس بکار مي رود و کاربر اجازه هيچ عملي روي آن را ندارد .
عموما از برچسب در کنار فيلد هاي متني براي نام و توضيح اين فيلد ها استفاده مي شود .
در اين پروژه تقريبا در تمامي فرم ها در کنار دکمه ها و فيلد هاي متني از بر چسب براي نشان دادن نام يا عمل آن کنترل استفاده شده است .
در شکل4 -1 نمونه اي از آن را مي بينيد .
4-5-1- text box
اين کنترل در مواقعي که نياز به برقراري ارتباط با کاربر و بخصوص نياز به گرفتن اطلاعات از کاربر است استفاده مي شود .
مي توان بوسيله خاصيت text اين کنترل مقداري را بصورت پيش فرض در آن قرار داد .
در اين پروژه هم براي گرفتن اطلاعات و هم براي نشان دادن اطلاعات از فيلد متن استفاده شده است .
در شکل 5-1 نمونه اي از آن را مي بينيد .
شکل 4-1- نمونه اي از بر چسب
شکل 5-1- نمونه اي از جعبه متن
5-5-1- frame
اين کنترل در مواقعي که مي خواهيم تعدادي کنترل را به صورت محصور و جداگانه نگهداري کنيم استفاده مي شود .
6-5-1- command button
از اين کنترل براي اجراي فرامين برنامه استفاده مي شود و مي توان گفت که تقريبا پر کاربرد ترين کنترل در برنامه ها است .
در اين پروژه اين کنترل براي انجام شدن اعمال و وارد شدن به بخشهاي مختلف به کار رفته است .
در شکل 6-1 نمونه اي از دکمه فرمان که در پروژه بکار رفته است را مي بينيد .
7-5-1- option button
اين کنترل در مواردي که از چند مورد انتخاب کاربر مي تواند فقط يک مورد را انتخاب کند بکار مي رود .
Option button مشخصه اي به نام Value دارندکه از صفر يا يک بودن مقدار آن مي توانيم به انتخاب نشده بودن و انتخاب شده بودن آن گزينه خاص پي ببريم.
اگر برروي فرمي چند Option Button وجود داشت تنها يکي از آنها مي تواند Value برابر يک داشته باشد و وقتي کاربر يکي ديگر را انتخاب مي کند، به طور خودکار Value قبلي صفر و Value کنترل انتخاب شده يک مي شود.
شکل 6-1- نمونه اي از دکمه فرمان
در اين پروژه از اين کنترل در فرم انتخاب واحد استفاده شده است .
کاربر مي تواند نوع تغيير واحد ها را که شامل موارد زير است استفاده کند :
1- حذف
2- اضافه
3- انتخاب واحد
با قرار گرفتن فرم در هر يک از اين حالت ها محتويات جعبه هاي متن تغيير مي کند .
8-5-1- check box
اگر بخواهيم به کاربر (User) اين امکان را بدهيم که از بين چند گزينه يک دو يا چند مورد را انتخاب کند و يا حتي هيچ يک را انتخاب نکند از کنترل Check Box استفاده مي کنيم .
اگر برروي يک فرم چند Check Box وجود داشت مي تواند Value هر يک از آنها صفر يا يک باشد .
اين کنترل ها مهمترين کنترل هاي visual basic بودند . بقيه کنترل ها در موقع نياز تشريح خواهند شد .
6-1- بررسي Properties
در اينجا به بيان کاربردي ترين خواص کنترل ها مي پردازيم :
1-6-1- name
عبارتست از نامي که در هنگام نوشتن برنامه و روال ها استفاده مي شود .
اين نام با نامي که در روي کنترل نمايش داده مي شود تفاوت دارد .
شکل 7-1- نمونه اي از Option button
2-6-1- caption
به نام نمايشي فرم اطلاق مي شود که روي فرم يا کنترل به هنگام اجراي برنامه نشان داده مي شود.
3-6-1- top
فاصله کنترل از بالاي فرم را مشخص مي کند .
در اين پروژه فاصله کنترل ها از بالاي فرم در روال رويداد form load تنظيم شده است تا در تنظيمات مختلف صفحه نمايش جاي کنترل ها تغيير نکند .
4-6-1- width
عرض يا پهناي کنترل يا فرم را نشان مي دهد .
5-6-1- height
ارتفاع يا بلندي کنترل مورد نظر را نشان مي دهد .
6-6-1- left
فاصله کنترل از سمت چپ را مشخص مي کند . اگر اين خاصيت در قسمت فرم لود نوشته شود قابليت هماهنگي با هر تنظيم صفحه نمايشي را دارد .
7-6-1- border style
اين خاصيت نوع پنجره فرم را نمايش مي دهد و مي توان با استفاده از آن دکمه هاي لازم مانند MAX و MIN و ... را استفاده کرد يا از کار انداخت .
8-6-1- window state
بوسيله اين خاصيت مي توان حالت ظاهر شدن پنجره فرم را در صفحه تعيين کرد .
اين حالات شامل بزرگ و کوچک و معمولي است .
در اين پروژه همه فرم ها در حالت MAX ظاهر مي شوند .
7-1- Event Procedure
شکل 8-1- روال رويداد form load
روال رويداد عبارتست از عملي که کاربر باعث آن مي شود به عبارت ديگر هر کاري که کاربر انجام مي دهد مانند کليک کردن يک دکمه يا فشردن يک کليد صفحه کليد يا کليک
ماوس که همه اينها يک رويداد محسوب مي شود و برنامه اي که براي اين رويداد نوشته مي شود را روال رويداد مي گويند .
در شکل 8-1 به عنوان مثال محل نوشتن روال رويداد form load را مي بينيم :
8-1- رويداد هاي مهم
1-8-1- load
وقتي فرم در حافظه بار گذاري شود و وارد حافظه سيستم شد مي توان فرم را مشاهده کرد و اين رويداد اتفاق مي افتد .
تنظيم محل کنترل ها روي فرم در اين روال تعيين مي شود .
2-8-1- click
اگر روي يک قسمت خالي فرم کليک کنيم اين رويداد و اگر فوکوس در اختيار فرم نباشد رويداد activate همزمان اتفاق مي افتد .
به عنوان مثال در زير يک روال رويداد مربوط به حذف يک رکورد در اين پروژه را مشاهده
مي کنيد :
Private Sub Command3_Click ( )
a1.Recordset.Delete
a1.Refresh
End Sub
3-8-1- dblclick
دو بار کليک کردن روي فرم يا کنترل ها باعث اتفاق افتادن اين رويداد مي شود .
4-8-1- activate
اگر فرم فوکوس را در اختيار بگيرد يا از فرمي به فرم ديگر حرکت کنيم اين رويداد حاصل مي شود .
5-8-1- deactivate
وقتي فرم فوکوس را از دست بدهد اين رويداد اتفاق مي افتد .
6-8-1- resize
بر اثر تغيير اندازه فرم اين رويداد اتفاق مي افتد .
7-8-1- unload
اگر فرم را از حافظه خارج کنيم اين رويداد اتفاق مي افتد .ضمنا بايد در پايان برنامه تمام فرم ها را از حافظه خارج مي کند .
در زير استفاده از اين رويداد را در پروژه مي بينيم :
Private Sub Form_Unload(Cancel As Integer)
Unload Form1
End Sub
8-8-1- change
اين رويداد بيشتر مخصوص جعبه متن و ليست هاي کشويي است و وقتي اتفاق
مي افتد که در محتويات جعبه متن تغييري رخ دهد .
در پروژه از اين رويداد براي نشان دادن روز تشکيل کلاس به صورت متن که در جدول
به صورت عدد ذخيره شده است به کار رفته است .
Private Sub Combo1_Change ()
If b <> 1 Then
Select Case Combo1.Text
Case 0:
Combo1.Text = "شنبه"
Case 1:
Combo1.Text = "يکشنبه"
Case 2:
Combo1.Text = "دو شنبه"
Case 3:
Combo1.Text = "سه شنبه"
Case 4:
Combo1.Text = "چهارشنبه"
Case 5:
Combo1.Text = "پنج شنبه"
Case 6:
Combo1.Text = "جمعه"
End Select
End If
b = 0
End Sub
در شکل 9-1 تعدادي از رويداد هاي فرم را مي بينيم :
شکل 9-1- تعدادي از رويداد هاي فرم
9-1- مفاهيم بنيادي VB
درVB شئ (Object) هاي بسياري وجود دارد مانند فرمها، دکمه ها، برچسب ها، تصاوير و ... .
همانطور که مي دانيم هر شئ(Object) داراي يک سري مشخصات(Properties) مي باشد. به عنوان مثال اگر يک اتومبيل را به عنوان يک شئ در نظر بگيريم، اين اتومبيل داراي مشخصاتي چون رنگ خاص، وزن خاص، طول و عرض و ارتفاع خاص، ميزان خاص مصرف بنزين و ... مي باشد که در تمايز دو اتومبيل از هم، همين مشخصات هستند که به ما کمک مي کنند.
درVB نيز هر Object داراي يک تعداد مشخصه (Property) مي باشد.
به عنوان مثال يک دکمه(Button) داراي مشخصاتي چون عرض(Width) و ارتفاع(Height) خاص و يا يک عنوان(Caption) خاص و ... مي باشد.
برخي شئ (object) ها درVB، فقط در کدنويسي قابل دسترسي هستند (مانند شئ ADODB ) .
اما برخي ديگر علاوه بر زمان کدنويسي، در زمان طراحي (Design) نيز مي توان آنها را بر روي فرمها و در جاي دلخواه قرار داد و آنها را تنظيم (Set) نمود.
به اشياء نوع اخير، کنترل (Control) گفته مي شود.
کنترل ها خود دو گونه اند، برخي علاوه بر زمان طراحي (Design) در زمان اجرا (Run Time) نيز ديده مي شوند، به اين نوع کنترل در اصطلاح
(Visual Control) VCL گفته مي شود که بيشترين انواع کنترلها را در بر مي گيرند (مانند دکمه ها، جدولها، برچسبها و بسياري ديگر که در ادامه خواهند آمد) .
اما برخي ديگر از کنترل ها فقط در هنگام طراحي (Design) ديده مي شوند و در هنگام اجرا تنها عمل خاصي انجام مي دهند و خود ديده نمي شوند (مانند کنترلTimer) .
به اين نوع کنترلها، Non-Visual Control گفته مي شود. بايد توجه داشته باشيدکه کنترلهاي Non-Visual، ذاتاً در Run Time ديده نمي شوند ولي ممکن است بنابر نيازي و در زماني خاص از اجرا، خودمان براي يک يا چند VCL نيز مقدار مشخصه Visual آنها را برابر False قرار دهيم که مسلماً در اين حالت با وجود اينکه در آن زمان، اين کنترلها ديده نمي شوند ولي VCL بودن آنها تغييري نکرده است .
کنترل ها (اعم ازVCL ها و غير آن) معمولاً داراي تعدادي Event مي باشند. Event ، رويداد يا رخدادي است که توسط کاربر و معمولاً با استفاده از ماوس يا صفحه کليد براي يک کنترل خاص روي مي دهد.
مثلاً يک کنترل ممکن است داراي رويداد (Event Click ) باشدکه اين نوع رويداد زماني که کاربر در هنگام اجراي برنامه (Run Time) بر روي آن کنترل خاص کليک نمايد رخ مي دهد.
برخي Event هاي معمول ديگر براي کنترلها عبارتند از :Double-Click (زماني که بر روي آن کنترل دابل کليک شود) ، Mouse Move (زماني که نشانگر ماوس بر روي آن کنترل قرار دارد) ، Key Press (زماني که کليدي از صفحه کليد زده شد) ، Key Down (زماني که کليدي از صفحه کليد پايين بود) ، Key Up (زماني که کليد زده شده برداشته شد) ، Mouse Down ، Mouse Up و ... که در ادامه با آنها بيشتر آشنا خواهيم شد.
براي هر Event (رويداد) مي توان يک Event Procedure داشت.
Event Procedure پاسخي است که يک کنترل زماني که يک Event رخ مي دهد، از خود نشان مي دهد.
در واقع Event قطعه برنامه اي است که زماني که بر روي يک کنترل، يک Event رخ مي دهد، به طور اتوماتيک اجرا مي شود.
کنترلها معمولاً علاوه بر يک سري مشخصات (Properties) و يک سري رويداد (Event) داراي تعدادي نيز متد (Method) مي باشد.
متدها عملياتهاي تعريف شده اي هستند که توسط آنها يک عمل خاص بر روي کنترلها انجام مي شود.
توجه داريم که تفاوت متدها و Event Procedure ها در اين است که متدها توسط VB شناخته شده اند و عملشان هميشه ثابت است، اما Event Procedure ها توسط برنامه نويس و به دلخواه او تهيه مي شود.
بنابراين Method هاي مشابه بر روي کنترلهاي متفاوت، پاسخ مشابهي دارد ولي ممکن است Event هاي مشابه بر روي کنترلهاي متفاوت با توجه به Event Procedure هاي مخصوص هر يک، متفاوت باشد
مثلاً رويداد Click براي يک کنترل، کاري انجام دهد و براي کنترلي ديگر، کاري ديگر .
نکته ديگري که بايد به آن توجه داشت اينست که Procedure ها به طور مستقيم اجرا نمي شوند بلکه فقط زماني که نامشان فراخواني شود اجرا مي شوند.
بنابراين مثلاً در مورد Event Procedure ها بايد بدانيم که با اينکه کد مربوط به آنها نوشته شده است ولي تا وقتي که آن Event خاص (که باعث فرا خواني Event Procedure مربوط مي شود) روي ندهد، اين کدها اجرا نخواهند شد.
10-1- انواع داده هاي VB
در اين قسمت انواع مختلف متغيير ها را که در VB قابل استفاده است بيان مي کنيم.
Integer
اعداد صحيح بدون نقطه اعشاري .
به اندازه 2 بايت يعني اعداد بين 32767 تا 32768 .
Decimal
اعداد با نقطه اعشاري . در اعداد اعشاري بايد حتما نقطه اعشاري وجود داشته باشد حتي اگر عدد بعد از اعشاري صفر باشد .به اندازه 12 بايت است .
Byte
معادل يک بايت در کامپيوتر است .
Long
اعداد صحيح دو برابر Integer يعني 4 بايت .
Single
معادل 8 بايت است .
Double
معدل 8 بايت در کامپيوتر است .
Currency
داراي قابليت نگهداري اعداد تا 4 رقم اعشار و اندازه آن 8 بايت است .
String
مي تواند داراي طول ثابت يا متغيير باشد .
اگر طول ثابت را انتخاب کنيم حداکثر مي تواند 65400 کاراکتر را شامل شود .
اما در طول متغيير قابليت نگهداري 2 ميليارد کاراکتر را دارد .
Date
براي نگهداري تاريخ استفاده مي شود و قابليت نگهداري 8 بايت را دارد .
Boolean
2 بايت گنجايش دارد و فقط مقادير True و False را مي پذيرد .
Object
براي برنامه نويسي شيئ گرا مي باشد .
معادل شيئ تعريف شده است و اندازه اش 4 بايت است .
Variant
دو نوع عددي و متني دارد که در نوع عددي هر عددي را از نوع Double در نظر مي گيرد اما در نوع متني مقدار آن متناسب با طول متن است .
شکل تعريف متغيير ها که در قسمت General برنامه مي آيد به شکل زير است :
Dim نام متغيير As نوع متغيير
Dim month, sum As Double
11-1- دستور If
شکل کلي دستور If به صورت زير است :
If شرط Then
دستورات …
Else
دستورات …
End If
If z = 1 Then
a2.Recordset.Delete
Else
a2.Refresh
End If
12-1- انتخاب با Select Case
بهترين روش براي بررسي چند شرط در مورد يک متغيير استفاده از اين دستور است .
در حقيقت اين دستور جايگزين چند If مي شود .
شکل کلي استفاده از آن در زير آمده است :
Select case نام داده
Case مقدار 1
دستور 1
Case مقدار 2
دستور 2
.....
Case Else
n دستور
End Select
در اين پروژه نيز از اين دستور در موارد بسياري استفاده شده است که نمونه از آن را در زير مشاهده مي کنيد :
Select Case Combo1.Text
Case "شنبه" :
Combo1.Text = "0"
Case "يکشنبه " :
Combo1.Text = "1"
Case "دوشنبه " :
Combo1.Text = "2"
Case "سه شنبه " :
Combo1.Text = "3"
Case "چهارشنبه" :
Combo1.Text = "4"
Case "پنجشنبه " :
Combo1.Text = "5"
Case "جمعه" :
Combo1.Text = "6"
End Select
در اين قسمت براي ذخيره کردن روز کلاس ها در بانک اطلاعاتي از اين دستور استفاده شده است تا ايام هفته را به عدد متناظر آن تبديل کند .
13-1- تکرار با استفاده از حلقه
با استفاده از حلقه تکرار مي توان تعدادي دستور را به تعداد بار دلخواه تکرار کرد .
در زير انواع حلقه را با ذکر مثال توضيح مي دهيم :
1-13-1- دستور Do
اگر شرط حلقه در ابتدا باشد ممکن است حلقه هرگز اجرا نشود اما اگر تست حلقه در انتهاي حلقه باشد حلقه حداقل يک بار اجرا مي شود .
حلقه do داراي چند شکل مختلف است که آنها را مي بينيم :
Do While شرط
يک يا چند دستور
Loop
Do
يک يا چند دستور
Loop While شرط
Do Until شرط
يک يا چند دستور
Loop
Do
يک يا چند دستور
Loop Until شرط
حلقه هايي که While دارند تا هنگامي که تست حلقه درست باشد اجرا مي شود اما در حلقه هاي Until اگر شرط درست شود اجراي حلقه پايان مي يابد .
در زير قسمتي از اين پروژه که از حلقه استفاده شده است را مي بينيد :
Do Until a2.Recordset.EOF = True
If teb < CInt(Text12.Text) Then
teb = CInt(Text12.Text)
End If
a2.Recordset.MoveNext
Loop
2-13-1- استفاده از Step
با استفاده از Step تعداد گام هاي حلقه را بيشتر و يا کمتر قرار داد .
به عنوان مثال :
For I = 1 To 100 Step 5
B = B + I
Next
در اين حلقه به متغيير I در هر بار اجراي حلقه 5 واحد اضافه مي شود .
3-13-1- حلقه For
شکل کلي اين حلقه به صورت زير است و مثالي از آن را در بالا مشاهده مي کنيد :
For متغيير = مقدار اوليه To مقدار پاياني
دستورات
Next
در زير مثالي از اين دستور را که در پروژه به کار رفته است مي بينيم :
For I = 1 To 12
If Text1 (I).Back Color = &HC0FFFF Then
MsgBox (" لطفا بعد از رفع اشتباه دوباره سعي کنيد ")
Go To ee
End If
Next
14-1- ارتباط با کاربر
1-14-1- تابع Msg box و Input box
از تابع Msg Box براي ارسال يک پيغام به کاربر و يا مطرح نمودن يک پرسش و دريافت جواب مثبت يا منفي او به سؤال مطرح شده و از تابع Input Box براي دريافت يک عبارت از کاربر، استفاده ميشود.
توابع مذکور را ميتوان مانند دستور نوشت، يعني نام يکي از آن دو را و با يک فاصله پارامترهاي احتمالي آنها را نوشت. همچنين ميتوان آنها را مانند يک Function به VB معرفي کرد. (يعني اين توابع داراي مقدار بازگشتي باشند) که براي اين منظور بايد پارامترهاي آنها را داخل پرانتز نوشت.
تابع Msg Box يک جعبه پيام را در موقع فرا خواني بر روي صفحه ظاهر مي کند .
اين تابع حداقل شامل يک آيکون يک پيام و يک دکمه است .
در شکل 10-1 نمونه اي از اجراي اين تابع را که در پروژه بکار رفته است مي بينيم :
شکل کلي اين تابع به صورت زير است :
Int response = Msgbox ( Str prompt , [ Buttons ] , [ Title ] ,
[ Help File ] , [ Context ] )
که در اين تابع Int response مقدار برگشتي تابع است .
Str prompt يک آرگومان اجباري و پياميست که در جعبه پيغام نشان داده مي شود .
Button که مي توان دکمه هاي مورد نظر و علامت موردنظر براي Message Box را در آن
شکل 10-1- اجراي تابع Msg box
تعيين نمود. برخي از مقادير مهمي که مي توان در اين پارامتر قرار داد عبارتند از :
VBOKOnly - کادر مذکور فقط داراي دکمه OK خواهد بود.
VBOKCancel- کادر مذکور داراي دکمه هاي OK و Cancel خواهد بود.
VBYesNo- کادر مذکور داراي دکمه هاي Yes و No خواهد بود.
VBYesNoCancel- کادر مذکور داراي دکمه هاي Yes و No و Cancel خواهد بود.
VBAbortRetryIgnore- کادر مذکور داراي دکمه هاي Abort و Retry و Ignore خواهد بود.
VBRetryCancel- کادر مذکور داراي دکمه هاي Retry و Cancel خواهد بود.
VBMsgBoxRight- در کادر مذکور Title را راست چين ميکند.
VBMsgBoxRtlReading- کادر مذکور را راست به چپ (Right to Left) ميکند (و براي پيغام هاي فارسي مناسب است)
VBCritical- يک علامت در کنار کادر اضافه خواهد شد.
VBExclamation- يک علامت در کنار کادر اضافه خواهد شد.
VBInformation- يک علامت در کنار کادر اضافه خواهد شد.
VBQuestion- يک علامت در کنار کادر اضافه خواهد شد.
آرگومان سوم عنوان و آيکون جعبه پيام را مشخص مي کند .
آرگومان چهارم براي استفاده کاربر از کمک در هنگام اجراي برنامه است .
مي توان آنهايي را که با هم تداخلي ندارند با علامت + با هم ترکيب کرد. مثلاً اگر بخواهيم که هم دکمه هاي OK و Cancel بيايند و هم در کنار پيغام، علامت آن بيايد و هم Title راست چين شود، مي توان در اين پارامتر چنين نوشت :
VBOKCancel + VBInformation + VBMsgBoxRight
15-1- آرايه اي از کنترل ها
يکي از الفاظي که در برنامه نويسي، از آن بهره بسياري مي بريم ، آرايه مي باشد. آرايه ها معمولاً خانه هايي از حافظه اند که تحت يک نام واحد و با انديس هاي متفاوت نامگذاري مي شوند.
در Basic هم آرايه ها (مانند ساير زبانهاي برنامه نويسي) کاربرد فراواني دارند که مثلاً توسط دستور Dim A (10, 10) As Integer يک آرايه دو بعدي (در واقع يک ماتريس) به نام A از نوع داده Integer تعريف مي شود که سطر و ستون آن داراي انديس هاي 0 تا 10 مي باشد و توسط مثلاً A (5, 8) به خانه سطر 5 و ستون 8 از آن دسترسي خواهيم يافت.
در VB نيز (از آنجا که VB از Basic براي کدنويسي استفاده مي کند) ، آرايه ها، تعريف آنها و نحوه دسترسي به خانه هاي آن به طريق فوق مي باشد.
اما آنچه در اينجا متفاوت است اينکه در VB مي توان از کنترل ها نيز يک آرايه ساخت. مثلاً چند Command Button با يک نام خاص و با انديسهاي متفاوت ايجاد کرد تا بتوان کدهاي واحدي را با تفاوت بسيار کم براي همه شان نوشت.
اگر از يک کنترل کپي کنيم (در حالي که فوکوس در Design Time به آن است، کليدهاي CTRL+C را فشار دهيم) و سپس آن را در همان فرم Paste نماييم (کليدهاي CTRL+V را فشاردهيم) ، پيغامي بر روي صفحه نمايش ظاهر ميشود مبني بر اينکه "يک کنترل ديگر با همين نام در فرم وجود دارد، آيا مي خواهيد آرايه اي از کنترل ايجاد کنيد؟" که مي توانيد جواب No به آن بدهيد.
اما اگر به اين پيغام دکمه Yes را پاسخ دهيد، VB به طور خودکار نام هر دو را يکسان (و به نام کنترل کپي شده) در نظر مي گيرد و Index کنترل اول را صفر و Index کنترل دوم را يک قرار مي دهد (Index ، يکي از مشخصه (Property)هاي تمام کنترل ها مي باشد).
مي توان اينکار را دستي نيز انجام داد.
يعني دو کنترل (يا چند کنترل) خاص را يک نام واحد دهيم که در اينصورت VB پس از دادن يک پيغام مبني بر همين موضوع، آن دو کنترل (يا چند کنترل) را به صورت آرايه کنترل تبديل خواهد کرد و به هر يک Index خاصي را نسبت خواهد داد.
اگر آرايه کنترل ايجاد کنيم، هر رويداد (Event) اي که بر روي هريک از عناصر رخ دهد (مانند Click و غيره) ، روي تمام آرايه صورت مي گيرد و مقدار Index مربوط به عضوي که رويداد بر روي آن صورت گرفته، به عنوان يکي از پارامترهاي پروسيجر آن، باز مي گردد .
شکل 11-1- آرايه اي از کنترل ها
16-1- پايگاه داده ها در VB
1-16-1- آشنايي با ADO
اين مدل از ساير مدل هاي پايگاه داده کوچکتر است .
با ADO مي توان سريعا رکورد ست ها را ايجاد نمود . حتي مي توان بعد از ايجاد رکورد ست اتصال پايگاه داده را قطع نمود و پس از اعمال تغييرات در آن دوباره به پايگاه داده متصل شده و رکورد ست تغيير يافته را به آن ارسال کرد .
ADO براي کار با داده ها بجاي ODBC از واسط OLE DB استفاده مي کند .
بنابراين بوسيله ADO مي توان به منابع داده اي غير SQL و حتي سرويس هاي
شبکه هم متصل شد .
2-16-1- اشيا در مدل ADO
در مدل ADO تنها سه شيئ اصلي وجود دارد :
OLE DB يک روش کاملا جديد براي اتصال به منابع داده است.
انعطاف پذيري و سهولت کاربرد OLE DB بسيار بيشتر از ODBC است .
درايور ODBC در واقع يک مترجم بين پايگاه داده و برنامه است .
در OLE DB اين واسط ارائه کننده يا Provider ناميده مي شود .
در زير تعدادي از ارائه کنند گان OLE DB براي انواع مختلف پايگاه داده را مي بينيد :
3-16-1- خواص ADO
4-16-1- Connection String
براي مشخص کردن ارائه کننده OLEDB اتصال منبع داده و نيز ساير جزئيات مورد نياز از اين خاصيت استفاده مي شود .
اين خاصيت داراي دو بخش است :
Provider = نام ارائه کننده
Data Source = آدرس منبع داده
5-16-1- Command Text
اين خاصيت جستجويي را که بايد براي استخراج داده ها اجرا شود مشخص مي کند .
اين خاصيت قابليت کار با زبان هاي غير SQL را هم دارد .
6-16-1- Command Type
در اين خاصيت نوع جستجو را مشخص مي کنيم .
مقدار پيش فرض اين خاصيت adCmdUnknown است .
مقادير قابل قبول اين خاصيت را در زير مي بينيد :
شکل 12-1- گزينه هاي Command Type
7-16-1- Cursor Location
در اين مدل مي توان مديريت کرسر را در سمت ميزبان يا در سمت مشتري انجام داد.
در ADO کرسر مجموعه ايست از رکورد ها که با اجراي يک درخواست به برنامه برگردانده مي شود .
با اين خاصيت مي توان محل نگهداري اين رکورد ست را تعيين کرد .
در زير مقادير اين خاصيت را مي بينيد :
شکل 13-1- گزينه هاي Cursor Location
8-16-1- Cursor Type
اين خاصيت نوع رکورد ستي را که توسط ارائه کننده برگردانده مي شود مشخص
مي کند .
در صورت استفاده از کرسر سمت مشتري تنها مي توان از کرسر ايستا استفاده کرد .
همه ارائه کننده ها قادر به استفاده از همه انواع کرسر ها نيستند .
در زير گزينه هاي قابل استفاده را مي بينيم :
اين کرسر فقط مي تواند رو به جلو حرکت کند .
اين رکورد ست داراي عضويت متغيير است و تغييراتي که توسط ساير کاربران انجام مي شود در آن منعکس خواهد شد .
رکورد هاي حذف شده توسط ساير کاربران از دسترس شما خارج خواهد شد .
رکوردهايي که توسط ساير کاربران اضافه شوند در دسترس شما قرار نخواهند
داشت .
اين رکوردست نيز داراي عضويت متغير است . همه تغييرات رکورد هاي اضافه يا حذف شده توسط ساير کاربران در دسترس شما هم قرار خواهند داشت .
رکورد ست حاصل کپي رکوردهاي مورد نياز است که مي توان در آن به جلو يا عقب حرکت کرد .
تغييرات در اين رکورد ست منعکس نمي شود .
شکل 14-1- گزينه هاي Cursor Type
9-16-1- Lock Type
مي توان نوع قفل مورد استفاده در عمليات ويرايش و به روز رساني رکورد ست را تعيين کرد . همه ارائه کننده ها قادر به استفاده از همه انواع قفل ها نيستند .
اگر ارائه کننده درخواستي قادر به کار با قفل در خواستي نباشد قفل ديگري جايگزين قفل درخواستي مي شود .
در زير گزينه هاي اين خاصيت را مي بينيم :
امکان دستکاري رکورد ست وجود ندارد .
رکورد ها به محض شروع ويرايش قفل مي شوند .
رکورد ها تنها در هنگام به روز رساني رکورد ست قفل مي شوند .
هنگام اجراي متد UpdateBatch روي رکورد ست ارائه کننده تمامي دسته را قفل مي کند .
شکل -151- گزينه هاي Lock Location
10-16-1- Mode Type
اين خاصيت محدوديت هاي دسترسي به داده هاي رکورد ست را مشخص مي کند .
منبع در زمان باز کردن رکورد ست با توجه به مقدار اين خاصيت محدوده دسترسي به آن را تعيين مي کند .در زير گزينه هاي اين خاصيت را مي بينيم :
نشان دهنده آن است که مجوز ها هنوز مشخص نشده اند و يا قابل تعيين نيستند .
شکل-16 1- گزينه هاي Lock Location
11-16-1- متدهاي کنترل داده ADO
از متد جاري به عنوان يک دستور لغو فرمان استفاده مي شود .
12-16-1- رويداد هاي کنترل داده ADO
اين کنترل داراي 11 رويداد است که در زير آنها را مي بينيم .
اين کنترل ها در چند گروه دسته بندي مي کنيم :
FetchProgress - در جريان عمليات طولاني استخراج رکورد ست اين رويداد متناوباً روي مي دهد .
با استفاده از اين رويداد مي توان ميزان پيشرفت کار را در حين پر شدن رکورد ست نشان داد .
FetchComplete - با پايان يافتن عمليات استخراج رکورد ست اين رويداد تحريک مي شود .
با استفاده از اين رويداد مي توان پس از عمليات طولاني تکميل شدن کار را به کاربر اطلاع داد .
WillMove - قبل از جابجا شدن اشاره گر از رکوردي به رکورد ديگر اين رويداد تحريک مي شود .
MoveComplete - پس از جابجا شدن اشاره گر و انتقال آن از يک رکورد به رکورد ديگر اين رويداد رخ مي دهد .
EndOfRecordset - اگر اشاره گر رکورد از آخرين رکورد نيز بگذرد اين رويداد رخ خواهد داد .
WillChangeRecordset - قبل از آن که رکورد ست تغيير کند اين رويداد رخ مي دهد .با استفاده از اين رويداد مي توان از تغييرات نا خواسته در رکورد ست جلوگيري کرد .
RecordsetChangeComplete - پس از انجام هر تغيير در رکورد ست اين رويداد روي مي دهد .
با چک کردن پارامتر Status مي توان از موفقيت آميز بودن عمليات اطلاع يافت .
WillChangeRecord - قبل از ارسال مقادير جديد يک سطر به منبع داده اين رويداد روي مي دهد .
RecordChangeComplete - اين رويداد پس از ارسال شدن مقادير جديد يک سطر به منبع داده روي مي دهد .
WillChangeField - اين رويداد قبل از به روز در آوردن فيلد جاري در رکورد ست روي مي دهد .
FieldChangeComplete - پس از به روز در آمدن فيلد جاري رکورد ست اين رويداد روي مي دهد .
بيشتر اين رويداد ها به صورت دو حالتي قبل از انجام و پس از انجام هستند .
13-16-1- استفاده از ديالوگ براي تنظيم خاصيت Connection String
اين خاصيت را مي توان با استفاده از يک سري ديالوگ تنظيم کرد .
در زير روش ست کردن اين خاصيت را مي بينيد :
ابتدا بر روي اتصال راست کليک مي کنيم ) شکل-17 1(:
شکل-17 1- راست کليک روي ADODC
بروي خاصيت ADODC Properties کليک مي کنيم تا صفحه اي که در شکل-18 1 مي بينيم باز شود :
شکل-18 1- پنجره ADODC Properties
شکل-19 1-انتخاب نوع ارائه کننده
سپس روي دکمه Build کليک مي کنيم تا صفحه شکل-19 1 باز شود :
در اين صفحه نوع ارائه دهنده مورد نظر را انتخاب مي کنيم .
براي اين پروژه از ارائه کننده Microsoft OLE DB Provider for SQl Server
استفاده مي شود .
پس از آن روي دکمه Next کليک مي کنيم و صفحه شکل-20 1 باز مي شود .
در اين صفحه که Connection نام دارد گزينه هاي زير را کامل مي کنيم :
در گزينه 1 نام سرور مورد نظر را انتخاب مي کنيم و در صورتي که نام سرور مورد نظر در ليست نباشد با اسم آن را خودمان وارد کنيم .
در گزينه 2 در مورد نحوه وصل شدن به سرور سوال مي شود .
در صورتي که سرور ما فاقد رمز باشد گزينه 1 و در غير اين صورت گزينه 2 را انتخاب مي کنيم .
شکل-20 1- صفحه Connection
سپس در گزينه 3 نام Data Base مورد نظر خود را بر روي Server مورد نظر انتخاب مي کنيم .
با کليک روي گزينه Test Connection مي توانيم از صحت اتصال به Server آگاه شويم .
شکل-21 1- پيغام Test Connection
شکل-22 1- پنجرهProperties ADODC
سپس با کليک دکمه Ok به اين قسمت پايان مي دهيم .
پس از آن در قسمت Properties ADODC گزينه Record Source را انتخاب مي کنيم :
و صفحه شکل-23 1 باز مي شود :
شکل-23 1- پنجره Record Source
اين صفحه داراي چند خصوصيت است که در زير آنها را بررسي مي کنيم .
قسمت Command Type داراي 4 گزينه است که اين گزينه ها عبارتند از :
انتخاب گزينه اول سبب اين مي شود که ADO بفهمد جستجوي ما روي همه ستون هاي يک جدول است .
در اين حالت بايد نام جدول را در محل مناسب درج کنيم .
انتخاب گزينه دوم سبب مي شود که ADO جستجوي ما روي دستوراتي از SQL که ما در محل Text مي نويسيم انجام دهد .
انتخاب گزينه چهارم باعث نا شناخته ماندن نوع جستجو شود .
در شکل-24 1 نمونه اي از آن را در پروژه مي بينيم :
شکل-24 1- مثالي از پنجره Record Source
در اين فصل مطالبي پيرامون زبان SQL و نرم افزار پايگاه داده SQL Server بيان شده است .
اين فصل شامل 11 بخش است .
بخش هاي ابتدايي بيشتر در باره دستورات زبان SQL است که از اين دستورات در نرم افزار SQL Server نيز قابل استفاده مي باشد .
اين دستورات که در چند بخش جدا آورده شده است شامل Select ، Insert ، Delete است .
بخش هاي مياني شامل محيطي از اين نرم افزار به نام Enterprise Manager است .
در اين محيط ما قادر به ديدن پايگاه داده خود بطور کامل و ديدن جداول و داده هاي خود در محيطي Visual هستيم .
در يکي از بخش هاي اين فصل به طرز استفاده از ابزار View پرداخته شده است .
اين ابزار يکي از پر کاربرد ترين ابزار هاي اين نرم افزار است زيرا بوسيله اين ابزار امنيت داده هاي خود را کنترل مي کنيم .
در بخش هاي پاياني به طرز ايجاد و استفاده از ديد پرداخته شده است .
1-2- دستور Select
اين دستور كه دستوري مستقل نيست و حتما بايد با اجزايي بكار رود جهت ساخت پرس و جو بر روي بانك اطلاعاتي بكار ميرود و ركوردهايي كه با شرايط اين دستور همخوان باشد به عنوان نتيجه پرس و جو برميگرداند . چهار كلمه كليدي وجود دارند كه بخشهاي ارزشمند اين دستور را تشكيل ميدهند :
1- select
2- from
3- where
4- order by
شكل كلي دستور :
Select [*|distinct column1, column2,…]
From table [, table2,…]
Where شرط
Order by نام فيلد يا شماره فيلد
مثال :
Select * from customers
اين دستور تمام ركوردهاي جدول customers را برميگرداند.
كه نتيجه 91 سطر از اطلاعات اين جدول خواهد بود
حال اگر شرط Country ='uk' اضافه كنيم ، فقط اطلاعات مشتريان انگليس جواب خواهند بود كه به 7 سطر تقليل مييابد.
select * from customers
where Country ='uk'
حال
select City,Country from customers
order by city
فقط ستونهاي نام شهر (city) و نام كشور (Country) را بر گردانده و بر اساس نام شهر مرتب ميكند. دستور بالا با دستور پايين هردو يك جواب را ميدهند :
select City,Country from customers
order by 1
كه 91 سطر بازگردانده خواهد شد . در نتيجه پرس و جو تعدادي سطر تكراري وجود دارد مانند شهر London كه اگر از كلمه Distinct در Select استفاده كنيم اين سطرهاي تكراري حذف خواهد شد .
select distinct City,Country from customers
order by 1
و جواب 69 سطر خواهد بود.
2-2- استفاده از توابع در Select
1-2-2-Count
تعداد سطرهاي بازگردانده شده توسط select را ميشمارد.
Select Count(*) from Customers
where Country ='uk'
در اصل تعداد مشترياني را ميشمارد كه در كشور انگليس هستند. كه عدد 7 جواب است.
2-2-2- Sum
مجموع يك فيلد عددي را برميگرداند.
Select sum(Quantity) from [Order Details]
where productid = 11
مجموع فيلد Quantity را براي فيلدهايي كه شماره محصول آنها ( Productid) برابر 11 است را محاسبه ميكند .
نكته 1 - در دستور select ميتوان از اسم مستعار استفاده كرد ، يعني نام جديدي را براي يك ستون در نظر گرفت به عنوان مثال select قبل را به شكل زير بكار برد :
Select sum(Quantity) as Sum_QTY
from [Order Details]
where productid = 11
كه Sum_QTY يك اسم مستعار براي مجموع است. استفاده از كلمه كليديas اختياري است.
نكته 2 - در دستور select هرگاه اسم فيلدي اسم خاص باشد و يا فاصله بين اسم باشد مثل Order Details كه فاصله بين اسم جدول است حتماُ از علامت براكت [] ميبايست استفاده كرد.
نكته 3 - استفاده از group by :
هنگامي كه از توابع count و Sum به همراه يك فيلد ديگر در دستور select استفاده ميشود از group by استفاده ميكنيم .
به عنوان مثال دستور زير جمع مقادير فيلد Quantity را براي هر شماره محصول محاسبه ميكند .
Select productid, sum(Quantity) as sum_qty
from [Order Details]
group by productid
كه نتيجه مانند زير خواهد بود :
productid sum_qty
----------- -----------
61 603
3 328
32 297
6 301
41 981
64 740
9 95
12 344
در صورتيكه دستور ordr by 1 بعد از group by استفاده كنيم نتيجه بر اساس كد محصول مرتب خواهد شد.
نكته 4 - دستور where مي تواند خود شامل يك دستور select باشد :
select * from Products
where ProductID in
( select distinct ProductID from [order details] where Quantity >70)
order by ProductID
تنها نكته اي كه مي بايست توجه كرد اين است كه نام فيلدي كه در شرط آورده مي شود حتما در دستور select آورده شود, به عبارت ديگر select درون شرط تنها يك ستون را مي بايست برگرداند .
مثال : با فرض اينكه دو جدول Products و order details داراي ستون (فيلد) يكسان ProductID هستند , يك دستور Select بنويسيد كه تمام فيلدهايي از Products را نشان دهد كه فيلد ProductID آن با ProductID جدول order details يكي باشد.؟
حل :
Select pr.*
From Products as pr , [order details] as od
Where pr. ProductID = od. ProductID
قابل به ذكر است كه بيش از 90% از كارهايي كه ما برروي جداول انجام مي دهيم با select و تركيبات آن انجام مي شود. لذا بدست آوردن تبحر در نوشتن select ها مي تواند شما را در تهيه برنامه ها ياري كند.
3-2-2- Min,max
بيشترين و كمترين مقدار فيلد را در بانك اطلاعاتي بدست مي دهد.
Select min (Quantity)
from [Order Details]
4-2-2-Top n
تعداد n سطر اول بانك اطلاعاتي را برمي گرداند.
Select top 5 *
from [Order Details]
5 سطر اول بانك را برمي گرداند.
نكته 3 - در حالت بالا اگر مقدار سطر 5 و 6 يكي باشد فقط سطر 5 جواب خواهد بود براي گريز از اين حالت از شكل زير در اين دستور استفاده ميكنيم :
Select top n with ties *
From table
5-2-2- Into
Select * from table1 into table2
اطلاعات table1 را به table2 كپي ميكند. البته table2 بايد از قبل وجود نداشته باشد.
اين دستور خود table2 را ميسازد.
دستور select قويترين و كاربردي ترين دستور در sql است كه خود ماهها نيازمند تمرين و آموزش است . براي اطلاعات بيشتر به books online خود Sql Server مراجع كنيد.
3-2- دستور Delete
براي حذف اطلاعات از يك بانك اطلاعاتي استفاده ميشود.
شكل كلي دستور :
Delete table1
Where شرط
مثال :
فرض كنيد جدول authors
موجود باشد و فيلد كليد آن au_id باشد. براي حذف 10 سطر اول اين جدول از دستور زير استفاده مي كنيم :
DELETE authors
FROM (SELECT TOP 10 * FROM authors) AS t1
WHERE authors.au_id = t1.au_id
4-2- دستور insert
براي اضافه كردن اطلاعات به يك جدول از اين دستور استفاده ميشود.
Insert into table1 (f1,f2,…)
Values (v1,v2,…)
كه f1,f2 نام فيلدها و v1,v2 مقادير آنها ميباشد.
البته ميتوانيد مقادير را نتيجه يك select قرار داد.
مثال :
Insert into table1
Select top 10
From table2
مقدار 10 سطر اول را از table2 را در table1 درج ميكند. البته بايد تعداد فيلدها يكي باشد. در غير اينصورت از values استفاده كنيد.
5-2- محيط Enterprise Manager
ميتوان گفت قلب Sql Server است. در Enterprise Manager شما ميتوانيد يك اتصال به سرور Sql برقرار كنيد . table بسازيد. User تعريف كنيد و..... (شکل 1-2)
شکل 1-2- صفحه Enterprise Manager
علامت فلش سبز نمايانگر فعال بودن سرور است.
سرور ميتواند local باشد مانند بالا و يا يك Sqlserver باشد برروي يك سرور . براي ايجاد يك سرور جديد يا به عبارت ديگر وصل شدن client (ويندوز 98) به يك سرور ديگر بر روي يكي Microsoft Sql Server يا SQL Server Group و يا برروي سرور موجود كليك سمت راست كرده و گزينه New Sql Server Registratin را انتخاب كنيد. سپس كليد next را انتخاب كنيد. سپس در منوي بعدي در available Server نام سرور خود را تايپ كنيد . (نام سرور SQL خود را كه برروي ويندوز 2000 خود نصب كرده ايد) و بعد كليد add را فشار دهيد.و گزينه next را انتخاب كنيد.
در پنجره بعد از شما سوال ميكند كه آيا از username ويندوز استفاده كند و يا اينكه از يك username مخصوص خود Sql Server استفاده كنيد. گزينه دوم را انتخاب كرده و سپس Login Name و Password را وارد كنيد. (در حالت پيش فرض sa بعنوان login name و فضاي خالي بجاي Password وارد كنيد.) پس از چند بار فشار كليد next شروع به وصل شدن به Server ميكند. در صورت موفقيت آميز بودن با پيامي اين كار را اطلاع ميدهد.
از ديگر گزينه ها شما بيشترين استفاده را از Databases خواهيد كرد.
به عبارت ديگر هر كار و پروژه ما بعنوان يك Database در سرور sql قرار ميگرد. همه جداول و دستورات مربوط به آنها در اين محل نگهداري مي شود.
با كليك سمت راست برروي Databases و انتخاب New Database... ميتوانيد يك Database جديد براي خودتان بسازيد. (شکل 2-2)
پس از انتخاب نام آن را تاييد كنيد.
هر Database شامل موارد زير است :
Diagram - ارتباط جداول را نشان ميدهد.
Tables - جداول پروژه را نشان ميدهد.
Views - ديدهاي پروژه را نشان ميدهد.
شکل 2-2- پنجره New Database
Stored Procedure - كدهاي sql مربوط به عملياتهاي روي جداول را نگهداري ميكند.
Users - كاربران تعريف شده بر روي اين database را نشان ميدهد.
Roles- قوانين دسترسي به جداول و پروسيجرها را نشان ميدهد.
Rules - قوانين مربوط به داده ها را در جداول نشان ميدهد.
گزينه هاي 7 به بعد كاربرد آنچناني براي كارهاي ابتدايي ندارند
6-2- ايجاد يك جدول جديد
براي ايجاد يك جدول جديد بروي tables كليك سمت راست كرده و گزينه New Table را انتخاب كنيد. سپس در كادر بعدي نام جدول را انتخاب كنيد. حال فيلدها و نوع آنها را مشخص كنيد .
بعد از مشخص كردن نوع و احتمالاً طول فيلد , بايد مشخص كنيد كه آيا فيلد هميشه مي بايست مقدار داشته باشد و يا مي تواند null باشد. Allow Nulls اگر تيك داشته باشد يعني اينكه اين فيلد مي تواند هيچ مقداري به خود اختصاص ندهد.
تذكر : مقدار null را با فضاي خالي اشتباه نگيريد.
در قسمت Default Value مقدار اوليه براي فيلد وارد كنيد. تا در صورتيكه هيچ مقداري درج نشد آن مقدار درج شود. (در دستور insert )
اگر Identity را تيك بزنيد اين فيلد بشكل خود افزا خواهد شد كه اولا بايد نوع فيلد عددي و ثانيا مقدار گامها در Identity increment مشخص شود. مقدار اوليه آن را هم مي توانيد در Identity Seed قرار دهيد. بدين شكل با اين مقدار شروع و با گامهاي مشخص شده حركت خواهد كرد.
تذكر : هيچ مقداري در اين فيلد نمي توانيد درج كنيد , چراكه خود سيستم اين مقدار را توليد مي كند .
براي مشخص كردن فيلد كليد (يا فيلدهاي كليدي) فيلد(ها) را انتخاب و بر روي علامت كليد بر روي Toolbar كليك كنيد .
تذكر : فيلد كليدي نمي تواند Allow Nulls باشد.
تذكر : براي تعريف index كليك سمت راست كرده و index/keys را انتخاب كنيد .
( در مورد index بطور مفصل صحبت خواهد شد )
7-2- ايجاد Stored Procedure
مانند هر زبان ديگر رويه ها در sqlServer نيز موجود مي باشند. و بكار ميروند. سه رويه insert , Updaet و Delete را مي توانيد براحتي با ويزاردهاي خود SqlServer بسازيد. از اينجا به بعد از واژه SP بجاي رويه استفاده خواهيم كرد.
ابتدا با ساختار كلي SP آشنا شده و سپس به ويزارد موجود خواهيم پرداخت.
براي ايجاد يك SP جديد ابتدا برروي گزينه Stored Procedure كليك سمت راست كرده و گزينه new Stored Procedure... را انتخاب كنيد. در پنچره بعدي شما مي توانيد متن SP را وارد كنيد.
1- نام sp - ابتدا بجاي [PROCEDURE NAME] يك نام براي SP خود در نظر بگيريد. من خود از ساختار زير بدين منظور استفاده ميكنيم : عمليات_نام جدول
عنوان مثال اگر نام جدول Sale و عمليات مورد نظر يك عمليات insert باشد نام SP را Sale_INSERT ميگذاريم. بهتر است نام عمليات با حروف بزرگ تايپ شود . البته بعضي از دوستان از سه حرف عمليات استفاده مي كنند. براي مثال بالا خواهيم داشت :Sale_INS .
2- تعريف پارامترها - براي تعريف پارامترهاي ورودي SP قبل از كلمه كليدي As آنها را داخل پرانتز مشخص كنيد. بدين شكل كه ابتدا علامت @ سپس نام پارامتر بعد فاصله و نوع پارامتر.
تذكر - تمامي متغييرها در SP از ساختار نام متغيير@ پيروي ميكنند.
بعنوان مثال فرض كنيد يك SP داراي دو پارامتر با نامهاي Id از نوع int و Name از نوع Varchar(20) باشد , داريم : ( @id int,@name varchar(20))
حال بعد از As دستورات مورد نظر را تايپ ميكنيم :
مثال 1 - SP بنويسيد كه چهار حرف اول فيلد LastName و فيلد FirstName را از جدول Employees انتخاب كند به شرطي كه فيلد LastName با حرف A شروع شود ؟
ابتدا برروي Stored procedure كليك سمت راست كرده و گزينه New stored procedure را انتخاب كرده و خطوط زير را تايپ كنيد. بعضي از دستورات پايين در كادر باز شده موجود هستند كه نيازي به تايپ مجدد آنها نيست .
create Stored Procedure Employees_BROWSE
As
Select substring(Lastname,1,4) as LastNmae,FirstName
From Employees
Where LastName Like ‘%A’
حال بر روي دكمه ok كليك نماييد. حال SP با نام Employees_BROWSE در ليست SP اضافه شده است .
مثال 2 - تمام فيلدهاي Employees را انتخاب كنيد كه فيلد BirthDate در يك بازه تاريخي كه به شكل پارامتر وارد ميشود قرار گيرد ؟
create Stored Procedure Employees_BROWSE2
(@StartDate char(10) , @EndDate char(10))
As
Select *
From Employees
Where BirthDate between @StartDate and @EndDate
حال براي اجراي SP ها در Query Analyzer كافي است بنويسيم - نام Exec SP
بعنوان مثال -Exec Employees_browse
اگر پارامتر داشت مقدار پارامترها را هم مي آوريم :
Exec Employees_Browse2 ‘01/01/1940’ , ‘15/06/1955’
3- تعريف متغيرها - براي تعريف متغيرها مي بايست از كلمه كليدي Declare استفاده كنيم. بعنوان مثال - Declare @myname varchar(50)
متغيير @myname از نوع كاركتري پويا تعريف ميكند.
4- برگرداندن كد خطا - بدين منظور از دستور return @@Error
گرچه هرمقداري را كه بخواهيم مي توانيم با دستور return برگردانيم.
5- تعريف پارامترها كه مقداري را برمي گردانند - براي اين منظور هنگامي كه پارامتر را در ابتداي پروسيجر تعريف ميكنيم بعد از نوع آن از كلمه كليدي output مي كنيم بعنوان مثال :
create Stored Procedure Employees_BROWSE2
(@StartDate char(10) , @EndDate char(10) , @pp varchar(10) output)
As
6- مقدار دهي به متغييرها - به دو روش مي توانيد اين كار را بكنيد يكي با دستور Set و ديگري با دستور Select .
7- دستورات شرطي -مانند ديگر زبانها شما مي توانيد در Sql دستورات شرطي را بكار ببريد. ساختار آن به شكل زير است :
If شرط then دستور
If شرط then
Begin
دستور1
دستور2
...
End
مثال :
If @Sdate > @Edate set @newDate = @Sdate
8- دستور Set NOCOUNT on - اين دستور از نوشت تعداد سطرهاي برگردانده شده توسط دستورات جلوگيري ميكند. كاربرد مهم آن زماني است كه شما چند كار را پشت سرهم در SP انجام ميدهيد. مثلا يك جدوي موقت ميسازيد و سپس از آن يك تعدادي از فيلدها را با دستور Select انتخاب مي كنيد. اگر اين دستور را در ابتداي SP استفاده نكتيد , هنگامي كه ميخواهيد از آن SP در يك زبان برنامه نويسي استفاده كنيد با خطاي SP هيچ dataset ي برنمي گرداند مواجه خواهيد شد.
تذكر1 - شما مي توانيد يك SP را در يك SP ديگر فراخواني كنيد. براي اين منظور همانطور كه قبلا گفته شد از دستور exec استفاده نماييد.
تذكر 2 - با دستور exec شما مي توانيد يك دستور sql را نيز اجرا كنيد. اين كار زماني بكار مي آيد كه دستور مورد نظر پويا و متغير باشد.
مثال -
Exec (“ select * From Employees Where “+@Shart)
اين شرط ميتواند بر اساس فيلدهاي بانك توليد گردد.
8-2- ابزار View
ديدها به كاربران اجازه ميدهند تا بر روي داده هايي كه نياز دارند متمركز شوند. بنابر اين داده هاي غير ضروري ميتوان از ديد خارج كرد. ديدها امنيت داده ها را نيز افزايش ميدهند چراكه كاربر فقط داده هايي را مي بيند كه در ديد وجود دارند.
ديدها به كاربران اجازه ميدهند تا داده ها را به روشهاي متفاوت مشاهد نمايند. ديدها ميتوانند براي مبادله داده ها با ساير برنامه هاي كاربردي بكار روند.
و ....
9-2- ايجاد ديد
وقتي ديدي را ايجاد ميكنيد نام آن مي بايست در بين نام جداول و ديگر ديدهايي كه كاربر مورد نظر آنها را ساخته , يكتا باشد.در SQL Server 7.0 شما امكان ايجاد شاخص بر روي ديدها را نداشتيد , ليكن اين امكان در SQL 2000 اضافه شده است.
شکل 3-2- راست کليک براي ايجاد New View
10-2- مراحل ايجاد يك ديد
1- erprise Manager را باز كرده و بر روي Databases كليك كرده و پايگاه داده اي را كه مي خواهيد ديد در آن ايجاد كنيد . باز كنيد.
2- روي Views كليك راست كرده و سپس گزينه New View... را انتخاب كنيد.
(شکل 3-2 )
3- در پنجره بعدي كليك سمت راست كرده و گزينه Add Table... را انتخاب كنيد.
( شکل 4-2 )
شکل 4-2- اضافه کردن جدول به ديد
4- دكمه هاي Table و يا Views جدول و يا ديد هاي مورد نظر را انتخاب نماييد. و بر روي دكمه Add كليك نماييد. اين كار را براي تمام جداول و يا ديدهاي مورد نظر تكرار كنيد و سپس بر روي دكمه Close كليلك نماييد.
در قسمت Column از پانل مشبك , ستونهايي را كه ميخواهيد در ديد به آنها ارجاع نماييد انتخاب كنيد. اگر ميخواهيد ستوني در مجموعه نتيجه ديده شود گزينه Output متناظر با آن مي بايستي حتما تيك داشته باشد.
در ستون Criteria شرط را بنويسيد. چند شرط را ميتوانيد در ستونهاي OR تكرار كنيد. براي گروه بندي برروي ستون Criteria كليك سمت راست كرده و گزينه Group By را انتخاب نماييد. در اينصورت شما قادر خواهيد بود از توابعي همچون Sum استفاده كنيد.
تذكر1 - اگر Group by را انتخاب كرده باشيد. تمام شرايط كه در ستون Criteria بنويسيد به عنوان شرايط Having در نظر گرفته ميشوند. براي اينكه اين محدوديتها به شرط Where اضافه گردند , بر روي پانل مشبك متناظر كليك كرده و از ليست مورد نظر گزينه where را بجاي Group by انتخاب كنيد.
تذكر 2 - در ستون Alias شما ميتوانيد يك اسم مستعار براي اين ستون در نظر بگيريد.
براي ديدن نتايج ديد بر روي علامت (!) كليك نماييد. (شکل 5-2 )
شکل 5-2- تنظيمات View
شکل 6-2- ايجاد SP بوسيله ويزارد
توجه داشته باشيد كه ارتباط ها در صورتي برقرار ميشود كه كليدهاي خارجي بر روي جداول وجود داشته باشد. گرچه شما مي توانيد با انتخاب فيلد مورد نظر و حركت ماوس در حاليكه كليك سمت چپ را فشار داده ايد مابين دو جدول ارتباط را برقرار كنيد.
11-2- ايجاد Stored Procedure با استفاده از ويزارد ها
براي ايجاد SP هاي استاندارد جهت عمليات درج , حذف و ويرايش شما مي توانيد از ويزاردهاي خود SQL استفاده نماييد. با اين ابزار شما قادريد طي چند دقيقه تعداد زيادي SP جهت عملياتهاي گفته شده بر روي جداول خود بسازيد. براي اين منظور در Enterprise Manager بر روي كليد ويزارد كليك نماييد مانند شکل 6-2 -
بعد در پنجره Select Wizard بر رويDatabase كليك و گزينه Create Stored Procedure Wizard را انتخاب نماييد . مانند شکل 7-2 -
در پنجره بعدي به شما خوش آمد گويي مينماييد . برروي كليد Next كليك نماييد.در پنجره بعدي نام Database ي را كه قرار است بر روي جداول آن كار شود انتخاب نماييد و بروي Next كليك نماييد. در پنجره بعدي جداول و عمليات مورد نظري كه مي خواهيد انجام دهيد انتخاب كنيد. در پنجره بعدي نام SP هايي كه سيستم ساخته شما خواهيد ديد. براي ويرايش نام و يا كد
شکل 7-2- انتخاب Database
هركدام از آنها ميتوانيد آن Sp را انتخاب و كليد Edit را فشار دهيد. در اينصورت شما پنجره اي
به شکل 8-2 خواهيد داشت :
حال شما در قسمت Name مي توانيد نام Sp را عوض نماييد.
در قسمت Include in Set Clause شما فيلدهايي از جدول مربوطه كه مي خواهيد مقادير آن به شكل پارامتر براي Sp ارسال شود انتخاب نماييد. اگر Sp شما Update و يا Delete باشد در قسمت Include in Where Clause شما مي توانيد فيلدهايي كه قرار است در شرط (دستور Where) قرار مي گيرند انتخاب نماييد.
تذكر1 - اگر فيلدي از نوع Identity داريد در حالت Insertحتما از قسمت Include in Set Clause خارج كنيد. در غير اينصورت در زمان اجرا با خطا مواجه خواهيد شد.
تذكر2 - SQL فيلد كليدي جدول را در دستور Update در دستور Where خواهد آورد. همچنين شما اين فيلد را از Include in Set Clause خارج كنيد.
در نهايت شما با فشار كليد Finish همزمان اين Sp را خواهيد ساخت.
تا اين قسمت شما با ساخت Sp آشنا شديد. حال براي ويرايش آن نيز كافي است بر روي Sp كليد نموده و در پنجره باز شده كد آن را ويرايش نماييد.
شکل 8-2- ويرايش SP
شکل 9-2- ويزارد راهبري SP
از آنجائیکه در بین علوم معاصر علم کامپیوتر و انفورماتیک جزء جدیدترین علوم و دانش هاست در نتیجه به لحاظ کتب مرجع و جامع و کافی بویژه در زبان فارسی در مقابل متقاضیان خود اظهار عجز می نماید .
علاوه بر این دانش کامپیوتر بنا به اقتضای جوانیش در حال پیمودن بحران های اولیه مسیر است لذا انتظاری غیر از تحولات و تلاطمات روزانه در زمینه کتب و نشریات و نرم افزارهای گوناگون در زمینه های مختلف کامپیوتر بویژه شاخه نرم افزار نمی توان داشت .
بر این اساس در این نوشته سعی شده است در مواردی که منابع و مراجع داخلی دارای کاستی و کمبود است از کتب و نوشته های زبان انگلیسی که زبان کامپیوتر هم می نامند استفاده شود .
[1] R. vemair , R.Sautel , “ Teach your self SQL Server 2000 in 21 days “ , Sams ,
2001
[2] k.Esmit , M. amundsen , “ Teach your self database programming with Visual
Basic 6 in 21 days “ , Sams , 2002
[3] G.Pary , “ Teach your self Visual Basic 6 in 21 days “ , Sams , 2002
[4] www.amundsen.com