SQLServer
SQLServer
com
PDF created with pdfFactory Pro trial version www.pdffactory.com
SQL Server 2000 -- By Mr. Adel Sabour
SQL Server 2000 -- By Mr. Adel Sabour
ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷ ﺔ ﺗﺨ ﺺ أﺧﯿ ﺎرات اﻟﺘﺤﻤﯿ ﻞ وﻷﻧﻨ ﺎ ﻓ ﻲ أول ﻣ ﺮة ﺗﺠﮭﯿ ﺰ ﻧﺨﺘ ﺎر Create a new instance of
SQL Serverوﻧﻀﻐﻂ Next
2
ﻓﺘﻈﮭﺮ ﺗﻠﻚ اﻟﺸﺎﺷﺔ اﻟﺘﻲ ﺗﻀﻢ ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﻤﺴﺘﺨﺪم ﻓﺘﺴﺄل ﻋ ﻦ اﻻﺳ ﻢ واﻟ ﺸﺮﻛﺔ أدﺧ ﻞ ﻣ ﺎ ﺗ ﺸﺎء وأﺿ ﻐﻂ Next
ﺳﻮف ﺗﻈﮭﺮ ﻟﻚ ﺷﺎﺷﺔ ﺑﮭﺎ اﺗﻔﺎﻗﯿﺔ أﺿﻐﻂ ﻋﻠﻲ Yesﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
وﻣﻨﮭﺎ ﻋﻠﻲ ﺷﺎﺷﺔ ﺗﺨﺺ ﺗﻌﺮﯾﻔﺎت ﻟﻌﻤﻠﯿﺔ اﻟﺘﺤﻤﯿﻞ ﻧﺨﺘﺎر ﺗﺤﻤﯿﻞ ﻣﺎ ﯾﺨﺺ اﻟﺨﺎدم واﻟﻌﻤﯿﻞ ﻣﻌﺎ ﺛﻢ ﻧﻀﻐﻂ Next
3
ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺨﺺ اﻟـ ـ Instance Nameﻧﺘ ﺮك اﻻﺧﺘﯿ ﺎر اﻻﻓﺘﺮاﺿ ﻲ ﺛ ﻢ ﻧ ﻀﻐﻂ Nextﻓﺘﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ
ھﺎﻣ ﺔ ﺗﺨ ﺺ ﻧ ﻮع اﻟﺘﺤﻤﯿ ﻞ ﺣﯿ ﺚ ﯾﻮﺟ ﺪ ﺛ ﻼث أﻧ ﻮاع أوﻟﮭ ﻢ ﯾﺤﻤ ﻞ ﺟﻤﯿ ﻊ اﻷﺷ ﯿﺎء اﻟﺘ ﻲ ﯾﺤﺘﺎﺟﮭ ﺎ ﺗﻘﺮﯾﺒ ﺎ ﺟﻤﯿ ﻊ
اﻟﻤ ﺴﺘﺨﺪﻣﯿﻦ Typicalأﻣ ﺎ اﻻﺧﺘﯿ ﺎر اﻟﺜ ﺎﻧﻲ Minimumﯾﺤﻤ ﻞ اﻷﺷ ﯿﺎء اﻟ ﻀﺮورﯾﺔ ﻓﻘ ﻂ أﻣ ﺎ اﻻﺧﺘﯿ ﺎر اﻷﺧﯿ ﺮ
Customﻓﻤﻦ ﺧﻼﻟﮫ ﯾﻤﻜﻨﻚ ﺗﺤﺪﯾﺪ اﻷﺷﯿﺎء اﻟﺘﻲ ﺗﺮﯾﺪھﺎ ﺑﺎﻟﻔﻌﻞ وﻣﺎ ﻻ ﺗﺮﯾﺪھﺎ وﺑﻤ ﺎ أﻧﻨ ﺎ ﻣﺎزﻟﻨ ﺎ ﻓ ﻲ اﻟﺒﺪاﯾ ﺔ ﻓ ﺴﻮف
ﻧﺨﺘﺎر اﻻﺧﺘﯿﺎر اﻷول
أﻣﺎ اﻟﺠﺰء اﻟﺜﺎﻧﻲ ﻣﻦ اﻟ ﺸﺎﺷﺔ ﯾﺨ ﺺ ﺑﺘﻌﺮﯾ ﻒ ﻣﻮاﻗ ﻊ اﻟﻤﻠﻔ ﺎت ﻓ ﺎﻟﺰر اﻷول Browseﯾﻤﻜﻨ ﻚ ﻣ ﻦ ﺧﻼﻟ ﮫ ﺗﺤﺪﯾ ﺪ أن
ﺳﯿﺘﻢ ﺗﺤﻤﯿﻞ ﻣﻠﻔ ﺎت SQL Serverواﻟ ﺰر اﻟﺜ ﺎﻧﻲ ﯾﻤﻜﻨ ﻚ ﻣ ﻦ ﺧﻼﻟ ﮫ ﺗﺤﺪﯾ ﺪ أن ﺳ ﯿﺘﻢ وﺿ ﻊ اﻟﻤﻠﻔ ﺎت اﻟﺘ ﻲ ﺳ ﻮف
ﯾﻨﺘﺠﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت ﻧﺤﺪد ﻣﺎ ﻧﺮﯾﺪ ﺛﻢ ﻧﻀﻐﻂ Nextﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ
ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺨﺺ ﺣﺴﺎب اﻟﺨﺪﻣﺎت ﻧﺨﺘﺎر اﻻﺧﺘﯿﺎر اﻷول وھﻮ ﯾﻔﯿﺪ ﺑﺎن ﻧﺴﺘﺨﺪم ﺣﺴﺎب واﺣ ﺪ إﻟ ﻲ ﻛ ﻞ اﻟﺨ ﺪﻣﺎت
ﻓﻲ ﺑﺪاﯾﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺧﺪﻣﺎت ال SQL Serverواﻻﺧﺘﯿﺎر اﻟﺜﺎﻧﻲ ﯾﻔﯿﺪ ﺑﺘﺤﺪﯾ ﺪ ﺗﻠ ﻚ اﻹﻋ ﺪادات ان ﻛﻨ ﺖ ﺧﺒﯿ ﺮ ﺑ ﺬﻟﻚ
ﻟﻜﻦ أﻻن ﻧﺨﺘﺎر اﻻﺧﺘﯿﺎر اﻻﻓﺘﺮاﺿ ﻲ وﻣ ﻦ اﻟﺠﺎﻧ ﺐ Service Settingإﻋ ﺪادات اﻟﺨ ﺪﻣﺎت ﻧﺨﺘ ﺎر اﻻﺧﺘﯿ ﺎر اﻷول
وھﻮ ﯾﻔﯿﺪ ﺑﺎﺳﺘﺨﺪام اﻟﺤﺴﺎب اﻟﺨﺎص ﺑﻨﻈﺎم ﺑﺎل وﯾﻨﺪوز ﻟﻠﺪﺧﻮل واﻻﺧﺘﯿﺎر اﻟﺜﺎﻧﻲ اﻟﺨﺎص ﺑـﺎﻟـــ Domainﻛﺤﺴﺎب
ﻟﻞ SQL Serverﻧﺨﺘﺎر ﻣﺎ ﻧﺸﺎء ﻛﺎﻟﺘﺎﻟﻲ وﻧﻀﻐﻂ Nextﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :
4
ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺨﺺ ﻧﻈﺎم اﻟﺴﺮﯾﺔ اﻻﺧﺘﯿﺎر اﻷول وھﻮ ﺿ ﺒﻄﮭﺎ ﻋﻠ ﻲ ﻣﻨﮭﺠﯿ ﺔ ﻧﻈ ﺎم اﻟ ﺴﺮﯾﺔ اﻟﺨ ﺎص ﺑ ﺎل وﯾﻨ ﺪوز
واﻻﺧﺘﯿﺎر اﻟﺜﺎﻧﻲ ھﻮ ﻧﻈﺎم ﻣﺨﺘﻠﻂ ﻣﺎﺑﯿﻦ اﻟــ وﯾﻨﺪوز وال SQL Serverﻧﺨﺘﺎر اﻻﺧﺘﯿﺎر اﻷول وﻧﻀﻐﻂ Next
وﺑﮭﺬا ﯾﻜﻮن أﺧﺬ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻜﺎﻓﯿﺔ ﻟﻌﻤﻠﯿﺔ اﻹﻋﺪاد ﻓﻨﻀﻐﻂ Nextﻟﺒﺪأ ﻧﺸﺮ اﻟﻤﻠﻔﺎت ﻛﺎﻟﺘﺎﻟﻲ
5
ﺳﯿﺒﺪأ اﻵن ﻓﻲ ﺗﺤﻤﯿﻞ اﻟﻤﻠﻔﺎت ﻛﺎﻟﺘﺎﻟﻲ ﻓﺘﻨﺘﻈﺮ ﻗﻠﯿﻼ ﺛﻢ ﺗﻈﮭﺮ ﺷﺎﺷﺔ ﻧﮭﺎﯾﺔ اﻟﺘﺠﮭﯿﺰ ﻧﻀﻐﻂ Finish
وﻟﺤﺬف اﻟﺒﺮﻧﺎﻣﺞ ﯾﻤﻜﻨﻨﺎ ذﻟﻚ ﺑﺎﻟﻄﺮﯾﻘﺔ اﻻﻋﺘﯿﺎدﯾﺔ ﻣﻦ ﺧ ﻼل ﻧﻈ ﺎم ال وﯾﻨ ﺪوز وﻟﻔ ﺘﺢ اﻟﺒﺮﻧ ﺎﻣﺞ ﻛﺎﻟﺘ ﺎﻟﻲ وﻋﻨ ﺪ ذﻛ ﺮ أي
أداة ﺑﺒﻌﺪ ذﻟﻚ ﺗﻮﻗﻊ أﻧﮭﺎ ﻓﻲ ھﺬه اﻟﻘﺎﺋﻤﺔ وان ﻟﻢ ﯾﻜﻦ ﺳﻮف ﻧﺬﻛﺮ ذﻟﻚ .
6
ﻓﻜﻤﺎ ﺗﻼﺣﻆ أﻧﮭﺎ ﺗﻨﺴﻖ ﺑﻄﺮﯾﻘﺔ ﺷﺠﺮﯾﺔ ﯾﻤﻜﻨﻚ ﻓﺘﺢ أي ﻓﺮع واﻟﺘﻌﺮف ﻋﻠﻲ ﻣﺎ اﻷﻓﺮع اﻟﺘﻲ ﯾﺤﺘﻮي ﻋﻠﯿﮭﺎ .
أوﻻ :ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
ﺳﻮف ﻧﺘﺤﺪث ﻋﻦ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت دراﺳﯿﺔ ﺗﺨﺼﻨﺎ ﻟﻨﺮي ﻛﯿﻔﯿﺔ ﺗﻨﻔﺬھﺎ ﻣﻦ ﺧﻼل ھﺬه اﻷداة
ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻣﺪرﺳﺔ
- ١اﻻﺣﺘﯿﺎﺟﺎت اﻟﻤﻌﻠﻮﻣﺎﺗﯿﺔ :
اﻟﻤﻄﻠﻮب ﺗﺼﻤﯿﻢ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺗﺤﺘﻮي ﻋﻠﻲ ﻣﻌﻠﻮﻣﺎت ﺗﺨﺺ ﻣﺪرﺳﺔ وھﺬا ﻃﺒﻘﺎ ﻟﻠﺒﯿﺎﻧﺎت اﻟﺘﺎﻟﯿﺔ:
§ ﻟﻜﻞ ﻃﺎﻟﺐ ﺑﺎﻟﻤﺪرﺳﺔ رﻗﻢ وھﻮ رﻗﻢ ﻓﺮﯾﺪ ﻻ ﯾﺘﻜﺮر وأﺳﻢ ﻣﺘﻔ ﺮع ﻷﺳ ﻢ اﻟﻄﺎﻟ ﺐ و ﺑ ﺎﻗﻲ اﻻﺳ ﻢ وﺗ ﺎرﯾﺦ ﻣ ﯿﻼد
وﻋﻨﻮان وﻧﻮع ورﻗﻢ ﺗﻠﯿﻔﻮن ان وﺟﺪ وﻋﻤﺮ اﻟﻄﺎﻟﺐ اﻟﺤﺎﻟﻲ .
§ وﺑﺎﻟﻄﺒﻊ ﻗﺪ ﯾﺪرس اﻟﻄﺎﻟﺐ أﻛﺜﺮ ﻣ ﻦ ﻣ ﺎدة وھ ﺬا ﻋﻠ ﻲ أﺳ ﺎس أن اﻟﻤ ﺎدة ﺗﻮﺻ ﻒ ﺑ ﺮﻗﻢ ﻓﺮﯾ ﺪ ﻻ ﯾﺘﻜ ﺮر داﺧ ﻞ
اﻟﻘﺴﻢ اﻟﻮاﺣﺪ وﻋﻨﻮان اﻟﻤﺎدة وﻟﻜﻞ ﻃﻠﺐ ﻓﻲ ﻛﻞ ﻣﺎدة درﺟﺔ .
§ أﻣﺎ اﻟﻘﺴﻢ ﻓﻠﮫ رﻗﻢ ﻓﺮﯾﺪ ﻻ ﯾﺘﻜﺮر وأﺳﻢ ﻣﻤﯿﺰ ﻻ ﯾﺘﻜﺮر واﻟﻤﺎدة ھﻨﺎ ﺗﺘﺒﻊ ﻗﺴﻢ واﺣﺪ ) ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻣﺎدة
إﻋﺪاد اﻟﺘﻘﺎرﯾﺮ ﺗﺪرس ﺑﻘﺴﻢ اﻟﺤﺎﺳﺐ ﻓﻘﻂ وﻏﯿ ﺮ ﻣﺨﺘ ﺼﺔ ﺑ ﺄي ﻣ ﺎدة أﺧ ﺮي ﻓ ﻲ ﻗ ﺴﻢ آﺧ ﺮ ﺣﺘ ﻰ وﻟ ﻮ ﺗ ﺸﺎﺑﮭﺖ ﻓ ﻲ
اﻻﺳﻢ(.
§ وﻟﻠﻤﺎدة ﻣﺪرس واﺣﺪ ﯾﺪرﺳﮭﺎ ﻋﻠﻲ أﺳﺎس إن اﻟﻤﺪرس اﻟﻮاﺣﺪ ﻗﺪ ﯾﺪرس أﻛﺜﺮ ﻣﻦ ﻣﺎدة.
7
§ وﯾﺴﺠﻞ ﻋﻦ اﻟﻤﺪرس رﻗﻢ ﻣﻤﯿﺰ ﻟﻠﻤﺪرس وأﺳﻢ وﻧﻮع وﻣﺮﺗﺐ ورﺗﺒﮫ ﺟﺎﻣﻌﯿﺔ وﺷﮭﺎداﺗﮫ اﻟﺘ ﻲ ﺣ ﺼﻞ ﻋﻠﯿﮭ ﺎ
ﺗﺎرﯾﺦ ﺗﻌﯿﻨﮫ وﻣﺪﯾﻨﺘﮫ واﻟﻘﺴﻢ اﻟﺬي ﯾﻌﻤﻞ ﺑﮫ واﻟﻘﺴﻢ اﻟﺬي ﯾﺪﯾﺮه أن وﺟﺪ
8
اﻟﻘﯿﻮد اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ ﻃﻮل اﻟﺤﻘﻞ ﻧﻮع اﻟﺒﯿﺎﻧﺎت وﺻﻒ أﺳﻢ اﻟﺤﻘﻞ
Primary Key X ٤ int رﻗﻢ اﻟﻘﺴﻢDeptNo
Unique X ٢٥ Varchar أﺳﻢ اﻟﻘﺴﻢDName
Foreign Key /
Unique
ü ٤ int ﻣﺪﯾﺮ اﻟﻘﺴﻢManager
اﻟﻘﯿﻮد اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ ﻃﻮل اﻟﺤﻘﻞ ﻧﻮع اﻟﺒﯿﺎﻧﺎت وﺻﻒ أﺳﻢ اﻟﺤﻘﻞ
Primary Key X ٤ int رﻗﻢ اﻟﻤﺪرس TeacherId
Unique X ٥٠ Varchar أﺳﻢ اﻟﻤﺪرس Name
Check m or f X ١ Char اﻟﻨﻮع Gender
ü ٦٫٢ Numeric اﻟﻤﺮﺗﺐ Salary
ü ٣٠ Varchar اﻟﺮﺗﺒﺔ اﻟﺠﺎﻣﻌﯿﺔ Rank
ü ٨ DateTime ﺗﺎرﯾﺦ اﻟﺘﻌﯿﯿﻦ HireDate
ü ٣٠ varchar اﻟﺒﻠﺪ City
Foreign Key ü 4 int ﻗﺴﻢ اﻟﻌﻤﻞ DeptWork
اﻟﻘﯿﻮد اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ ﻃﻮل اﻟﺤﻘﻞ ﻧﻮع اﻟﺒﯿﺎﻧﺎت وﺻﻒ أﺳﻢ اﻟﺤﻘﻞ
Foreign
Key
X ٤ int رﻗﻢ اﻟﻤﺪرسTeacherId
Primary Key
X ٥٠ Varchar اﻟﺸﮭﺎدةCollegeDegree
اﻟﻘﯿﻮد اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ ﻃﻮل اﻟﺤﻘﻞ ﻧﻮع اﻟﺒﯿﺎﻧﺎت وﺻﻒ أﺳﻢ اﻟﺤﻘﻞ
Primary Key X ٤ Int رﻗﻢ اﻟﻄﺎﻟﺐ StudNo
X ٢٥ varchar أﺳﻢ اﻟﻄﺎﻟﺐ FName
X ٢٥ varchar ﺑﺎﻗﻲ اﻷﺳﻢ LName
ü ٨ DateTime ﺗﺎرﯾﺦ اﻟﻤﯿﻼد BDate
ü ١٠٠ Varchar اﻟﻌﻨﻮان Address
Check m or f X 1 Char اﻟﻨﻮع Gender
ü ١٢ Char اﻟﺘﻠﯿﻔﻮن Phone
اﻟﻘﯿﻮد اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ ﻃﻮل اﻟﺤﻘﻞ ﻧﻮع اﻟﺒﯿﺎﻧﺎت وﺻﻒ أﺳﻢ اﻟﺤﻘﻞ
Primary X ٤ int SubCodeرﻗﻢ اﻟﻤﺎدة
Key Foreign
Key
X ٤ int DeptBelongاﻟﻘﺴﻢ اﻟﺘﺎﺑﻌﺔ ﻟﮫ
Foreign Key ü ٤ int TeacherTaughtاﻟﻤﺪرس اﻟﻤﻠﻘﻦ
X ٢٠ varchar Titleﻋﻨﻮان اﻟﻤﺎدة
اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ اﻟﻘﯿﻮد ﻃﻮل اﻟﺤﻘﻞ ﻧﻮع اﻟﺒﯿﺎﻧﺎت وﺻﻒ أﺳﻢ اﻟﺤﻘﻞ
Foreign
Key
X ٤ Int StudNoرﻗﻢ اﻟﻄﺎﻟﺐ
Primary
Key Foreign X ٤ int SubCodeرﻗﻢ اﻟﻤﺎدة
Key
X ٤ int DeptNoرﻗﻢ اﻟﻘﺴﻢ
ü ٥٫٢ Numeric Scoreاﻟﺪرﺟﺔ
اﻟﻤ ﺴﺘﻮي اﻷول واﻟﺜ ﺎﻧﻲ ﻗ ﺪ ﺗﻌﻠﻤﻨ ﺎھﻢ ﻣ ﻦ ﻗﺒ ﻞ وﻟﻜ ﻦ ﻣ ﺎذا ﻋ ﻦ اﻟﻤ ﺴﺘﻮي اﻟﺜﺎﻟ ﺚ أﻧ ﮫ ﺑ ﮫ ﺑﻌ ﺾ اﻟﻨﻘ ﺎط اﻟﺘ ﻲ ﻻﺑ ﺪ أن
ﺗﻮﺿﺢ
Column Name -١أﺳﻢ اﻟﺤﻘﻞ ھﻮ ﻋﺒﺎرة ﻋﻦ اﻻﺳﻢ اﻟﻔﻌﻠﻲ اﻟﺬي ﺳﻮف ﯾﻜﻮن ﺑﺪاﺧﻞ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
Description -2اﻟﻮﺻﻒ ھﻮ وﺻﻒ ﺑﺴﯿﻂ ﻟﻤﻌﺮﻓﺔ اﻟﻤﻘﺼﻮد ﺑﮭﺬا اﻟﺤﻘﻞ
Data Type -3ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﯾﻜﺘﺐ ﺑﮭﺎ ﻧﻮﻋﯿﺔ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﻮف ﺗﺴﺠﻞ داﺧﻞ ھﺬا اﻟﺤﻘﻞ
10
Constraints -٦اﻟﻘﯿﻮد
ﻣ ﻦ أھ ﻢ اﻟﻨﻘ ﺎط ﻗﺒ ﻞ ﺗﻨﻔﯿ ﺬ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت ھ ﻮ ﺗﺤﺪﯾ ﺪ اﻟﻘﯿ ﻮد اﻟﺘ ﻲ ﺗ ﻀﻤﻦ ﻋ ﺪم دﺧ ﻮل أي ﺑﯿﺎﻧ ﺎت ﻏﯿ ﺮ ﺳ ﻠﯿﻤﺔ
ﺑﺎﻟﻘﺎﻋﺪة وﺗﻀﻤﻦ ﺗﻜﺎﻣﻞ اﻟﺒﯿﺎﻧﺎت وﺗﻤﺎﺛﻠﮭﺎ
وھﻨﺎك ﺧﻤﺴﺔ أﻧﻮاع ﻣﻦ اﻟﻘﯿﻮد ﯾﺼﻨﻔﻮا داﺋﻤﺎ اﻟﻲ ﻧﻮﻋﯿﻦ
-١ﻧﻮع ﯾﻔﺮض ﻟﻀﻤﺎن ﺻﺤﺔ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺤﻘﻞ وھﻢ ﺛﻼﺛﺔ أﻧﻮاع
-٢ﻧﻮع ﯾﻔﺮض ﻟﻀﻤﺎن ﺗﻜﺎﻣﻞ اﻟﺒﯿﺎﻧﺎت ﻋﺒﺮ اﻟﺠﺪاول وھﻢ ﻧﻮﻋﺎن
11
-٧اﻟﻌﻼﻗﺎت Relationships
أﻣﺎ اﻟﻌﻼﻗﺎت ﻓﻘﺪ ﺗﻌﻠﻤﻨﺎھﻢ ﻣﻦ ﻗﺒﻞ وھﻢ ﺛﻼﺛﺔ أﻧﻮاع ﻓﻘﻂ ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻌﻼﻗﯿﺔ وھﻢ :
-١اﻟﻌﻼﻗﺔ ١ : ١
وﻣﻌﻨﺎھﺎ أن ﻛﻞ ﺣﻘﻞ ﻓﻲ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻟﮫ ﻗﯿﻤﺔ ﻻﺑﺪ أن ﺗﻜﻮن ﻟﮭﺎ ﻗﯿﻤﺔ أﺧﺮي ﻣﻨﺎﻇﺮة ﻟﮫ ﻓ ﻲ اﻟﻤﻔﺘ ﺎح
اﻟﺮﺋﯿﺴﻲ وﻻ ﯾﺤﺘﻮي ﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻋﻠﻲ ﻧﻔﺲ اﻟﻘﯿﻤﺔ ﻣﺮة أﺧﺮي .
-٢اﻟﻌﻼﻗﺔ N : ١
وﻣﻌﻨﺎھﺎ أن ﻛﻞ ﺣﻘﻞ ﻓﻲ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻟﮫ ﻗﯿﻤﺔ ﻻﺑﺪ أن ﺗﻜﻮن ﻟﮭﺎ ﻗﯿﻤﺔ أﺧﺮي ﻣﻨ ﺎﻇﺮة ﻟ ﮫ ﻓ ﻲ اﻟﻤﻔﺘ ﺎح
اﻟﺮﺋﯿﺴﻲ وﻗﺪ ﯾﺤﺘﻮي ﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻋﻠﻲ ﻧﻔﺲ اﻟﻘﯿﻤﺔ ﻣﺮة أﺧﺮي .
-٣اﻟﻌﻼﻗﺔ N : M
وﻣﻌﻨﺎھﺎ أن ﻛﻞ ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول اﻷول ﻗﺪ ﯾﺘﺒﻊ أﻛﺜﺮ ﻣﻦ ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ وﻛﻞ ﺳ ﺠﻞ ﻓ ﻲ اﻟﺠ ﺪول
اﻟﺜﺎﻧﻲ ﻗﺪ ﯾﺘﺒﻊ أﻛﺜﺮ ﻣﻦ ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول اﻷول وﺗﻤﺜﻞ ھﺬه اﻟﻌﻼﻗﺔ ﻓﻲ ﺟﺪول ﺟﺪﯾﺪ ﯾﺪﻋﻲ اﻟﺠﺪول اﻟﻮﺳﯿﻂ
ﯾﺘﻜﻮن ﻣﻦ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ﻟﻠﺠ ﺪول اﻷول واﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﻟﻠﺠ ﺪول اﻟﺜ ﺎﻧﻲ وﯾﻜﻮﻧ ﺎ اﻟﻤﻔﺘ ﺎﺣﯿﻦ ﻣﻔﺘﺎﺣ ﮫ
اﻟﺮﺋﯿﺴﻲ .
ﺑﻌﺪ ﻛﻞ ھﺬه اﻟﻤﻘﺪﻣﺔ اﻟﺴﺮﯾﻌﺔ ﯾﻤﻜﻨﻨﺎ اﻵن ﺗﻄﺒﯿﻖ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻋﻠﻲ اﻷداة Enterprise Manager
12
ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺧﺼﺎﺋﺺ اﻟﻘﺎﻋﺪة ﻓﻲ اﻟﺘﺒﻮﯾﺒﺔ اﻷوﻟ ﻲ Generalﻓ ﻲ اﻟﺨﺎﻧ ﺔ Nameﻧﻜﺘ ﺐ أﺳ ﻢ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت
اﻟﺠﺪﯾﺪة وﻓﻲ اﻟﺘﺒﻮﯾﺒﺔ Data Filesﯾﻤﻜﻨﻨﺎ رؤﯾﺔ أﺳﻢ ﻣﻠﻒ اﻟﺒﯿﺎﻧﺎت وﻣﻮﻗﻌﺔ وﺣﺠﻤﮫ واﻟﺘﺒﻮﯾﺒﮫ Transaction
Logﺗﺤﺘﻮي ﻋﻠﻲ أﺳﻢ اﻟﻤﻠﻒ اﻟﻤﺴﺌﻮل ﻋﻦ اﻟﻌﻤﻠﯿﺎت اﻟﺤﺎﻟﯿﺔ وﻣﻮﻗﻌﺔ وﺣﺠﻤﮫ ﻧﻀﻐﻂ Okﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ .
13
ﺳﻮف ﺗﻈﮭﺮ اﻟﻘﺎﻋﺪة ﻓﻲ اﻟﺒﻨﺎء اﻟﺸﺠﺮي وﻗﺪ ﺗﺤﺘﺎج ﻟﻠﻀﻐﻂ F5ﻟﻠﺮؤﯾﺔ اﻟﺘﺤﺪﯾﺚ
وﻟﺤﺬف ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﻘﺎﻋﺪة اﻟﻤﺮاد ﺣﺬﻓﮭﺎ وﻧﺨﺘﺎر Delete
ﺳﻮف ﯾﻈﮭﺮ ﻟﻨ ﺎ رﺳ ﺎﻟﺔ ﻟﺘﺄﻛﯿ ﺪ اﻟﺤ ﺬف ﯾﻤﻜﻨ ﻚ اﻟ ﻀﻐﻂ Yesﻟﺘﺄﻛﯿ ﺪ اﻟﺤ ﺬف وﻟﻜﻨﻨ ﺎ ﻣﺎزﻟﻨ ﺎ ﺑﺤﺎﺟ ﺔ ﻹﺗﻤ ﺎم اﻟﻘﺎﻋ ﺪة ﻓ ﻼ
ﺗﺤﺬﻓﮭﺎ
14
ﻹﻧﺸﺎء اﻟﺠﺪاول اﻟﺘﻲ ﺗﺨﺼﻨﺎ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ tablesوﻣﻨﮭﺎ ﻧﺨﺘﺎر New Table
15
ﺗﻈﮭ ﺮ ﻟﻨ ﺎ اﻟ ﺸﺎﺷﺔ اﻟﺘﺎﻟﯿ ﺔ ﻟ ﻨﻤﻸ ﺑﮭ ﺎ ﺑﯿﺎﻧ ﺎت ﻟﻮﺻ ﻒ اﻟﺠ ﺪول ﻛﻤ ﺎ ﻛ ﺎن ﻣﻮﺿ ﺤﺎ ﻣ ﻦ ﻗﺒ ﻞ ﻓﻔ ﻲ اﻟﺨﺎﻧ ﺔ Column
Nameﻧﻀﻊ أﺳﻤﺎء اﻟﺠﺪاول واﻟﺤﻘﻞ Data Typeﻧﺨﺘﺎر ﻧﻮع اﻟﺒﯿﺎﻧ ﺎت واﻟﺤﻘ ﻞ Lengthﻧﺤ ﺪد ﻋ ﺪد اﻟﺨﺎﻧ ﺎت
واﻟﺤﻘﻞ Allow Nullsﻧ ﻀﻊ ﻋﻼﻣ ﺔ ﺻ ﺢ أﻣ ﺎ اﻟﺤﻘ ﻞ اﻟ ﺬي ﻗ ﺪ ﯾﺤﺘ ﻮي ﻋﻠ ﻲ ﻗﯿﻤ ﺔ ﻓﺎرﻏ ﺔ واﻟﺘﺒﻮﯾ ﺐ Column
ﻧﺤﺪد ﺑﮫ ﺑﻌﺾ اﻟﻤﺘﻐﯿﺮات ﻋﻠﻲ ﺣﺴﺐ ﻧ ﻮع اﻟﺤﻘ ﻞ اﻟﺤ ﺎﻟﻲ ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل ﯾﻤﻜ ﻦ وﺿ ﻊ وﺻ ﻒ ﻟﻠﺤﻘ ﻞ ﻓ ﻲ اﻟﺨﺎﻧ ﺔ
Descriptionأو وﺿﻊ ﻗﯿﻤﺔ اﻓﺘﺮاﺿﯿﺔ أن ﻟﻢ ﯾ ﺪﺧﻞ اﻟﻤ ﺴﺘﺨﺪم ﻗﯿﻤ ﺔ ﻓ ﻲ ﺣﻘ ﻞ ﻣ ﺎ وھ ﺬا ﻓ ﻲ اﻟﺨﺎﻧ ﺔ Default
Valueﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ :
و اﻵن ﯾﻤﻜﻨﻨﺎ اﻟﺒﺪاﯾﺔ ﻓ ﻲ اﻟﻌﻤ ﻞ واﻷﻓ ﻀﻞ ﻋﻨ ﺪ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ اﻷداة Enterprise Managerأن ﻧﻨ ﺸﺊ اﻟﺠ ﺪاول
أوﻻ ﺛﻢ ﺑﻌﺪ ذﻟﻚ ﯾﺘﻢ ﻋﻤﻞ اﻟﻌﻼﻗﺎت :
إﻧﺸﺎء ﺟﺪول اﻟﻘﺴﻢ Department
16
اﻟﺤﻘﻞ DNameﻟﮫ ﻗﯿ ﺪ أﻧ ﮫ ﻗﯿ ﺪ Uniqueﻣﻤﯿ ﺰ ﻟﻌﻤ ﻞ ذﻟ ﻚ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ اﻟﺤﻘ ﻞ اﻟﻤ ﺮاد ﺛ ﻢ ﺿ ﻐﻂ ﯾﻤ ﯿﻦ ﺑﺎﻟﻤ ﺎوس
واﺧﺘﯿﺎر Indexes/Keysﻛﻤﺎ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
ﺳﻮف ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﻧﺒﺪأ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻲ اﻟﺰر Newﺛ ﻢ ﻧ ﺬھﺐ ﻟﻠﺨﺎﻧ ﺔ Index nameﻧ ﻀﻊ ﻓﯿﮭ ﺎ أﺳ ﻤﺎ ﻟﻠﻘﯿ ﺪ أو
ﻧﺘ ﺮك اﻻﺧﺘﯿ ﺎر اﻻﻓﺘﺮاﺿ ﻲ وﺑﻌ ﺪھﺎ ﺗﺤ ﺖ اﻟﺨﺎﻧ ﺔ Column Nameﻧﺨﺘ ﺎر أﺳ ﻢ اﻟﺤﻘ ﻞ أو اﻟﺤﻘ ﻮل وﺑﻌ ﺪھﺎ ﻧﺨﺘ ﺎر
Create Uniqueوﺑﻌﺪ ذﻟﻚ ﻧﻀﻐﻂ ﻋﻠﻲ Closeﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺨﻄﻮات اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
وﺑﻘ ﻲ ﻟﻨ ﺎ اﻟﺤﻘ ﻞ Managerوﺑ ﮫ ﻗﯿ ﺪ ﻣﻔﺘ ﺎح ﺧ ﺎرﺟﻲ ﯾﺨ ﺺ ﺟ ﺪول اﻟﻤ ﺪرس وﻟﻜ ﻦ ﺟ ﺪول اﻟﻤ ﺪرس ﻣ ﺎزال ﻏﯿ ﺮ
ﻣﻮﺟﻮد ﻓﯿﺆﺟﻞ ھﺬا اﻟﻘﯿﺪ ﺣﺘﻰ ﯾﻜﻮن ﺟ ﺪول اﻟﻤ ﺪرس ﺑﻤﻔﺘﺎﺣ ﮫ اﻟﺮﺋﯿ ﺴﻲ ﺟ ﺎھﺰﯾﻦ ﻓﻨﺒ ﺪأ اﻵن ﺑﺤﻔ ﻆ ھ ﺬا اﻟﺠ ﺪول أوﻻ
ﻧﻀﻐﻂ ﺑﺄي ﻣﻜﺎن ﺑﺎﻟﺠﺪول ﺛﻢ ﻧﺨﺘﺎر Saveوﺑﻌﺪھﺎ ﺗﻈﮭﺮ ﻟﻨﺎ ﺧﺎﻧﺔ ﻻﺧﺘﯿﺎر أﺳﻢ ﻟﻠﺠﺪول و ﺑﮭﺎ أﺳﻢ اﻓﺘﺮاﺿ ﻲ ﻧﻜﺘ ﺐ
أﺳﻢ اﻟﺠﺪول Departmentﺛﻢ ﻧﻀﻐﻂ OKﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
17
وﻧﻨﺘﻘﻞ اﻵن ﻟﻌﻤ ﻞ ﺟ ﺪول اﻟﻤ ﺪرس Teacherﻛﻤ ﺎ ﺳ ﺒﻖ ﺗﻤﺎﻣ ﺎ ﺣﻘ ﻞ TeacherIdﻧﺨﺘ ﺎر ﻃﺒﻘ ﺎ ﻟﻠﺠ ﺪول وﻧ ﻀﻌﮫ
ﻛﻤﻔﺘﺎح رﺋﯿﺴﻲ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ وﺣﻘ ﻞ Nameﻧﺨﺘ ﺎر ﻃﺒﻘ ﺎ ﻟﺠ ﺪول اﻟﻤ ﺴﺘﻮي اﻟﺜﺎﻟ ﺚ وﻧﺠﻌﻠ ﮫ ﻣﻔﺘﺎﺣ ﮫ ﻣﻤﯿ ﺰ ﻛﻤ ﺎ
ﺗﻌﻠﻤﻨﺎ وﻟﻜﻦ ﺣﻘﻞ اﻟﻨﻮع Genderﻋﻠﯿﮫ ﻗﯿ ﺪ Checkﻓﻜﯿ ﻒ ﯾﻜ ﻮن ذﻟ ﻚ ،ﻧ ﻀﻐﻂ ﻋﻠ ﻲ اﻟﺤﻘ ﻞ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ
ﻧﺨﺘﺎر Check Constraintsﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ
)'Gender In('M','m','F','f
18
ﻓﺤﻘﻞ اﻟﻤﺮﺗﺐ Salaryھﻮ ﺣﻘﻞ ﻧﻮﻋﮫ Numericﯾﺤﻤﻞ ٦ﺧﺎﻧﺎت رﻗﻤﯿﺔ ﻣﻨﮭﻢ ﺧﺎﻧﺘﯿﻦ ﻋﺸﺮﯾﺘﯿﻦ ﻓﻜﯿ ﻒ ﯾ ﺘﻢ ذﻟ ﻚ
ﻧﻀﻐﻂ ﻋﻠﻲ اﻟﺤﻘﻞ وﻣﻦ اﻟﺘﺒﻮﯾﺒﮫ Columnﻓﻲ اﻟﺨﺎﻧﺔ Precisionﻧﻜﺘﺐ ٦وﻓﻲ اﻟﺨﺎﻧﺔ Scaleﻧﻜﺘﺐ ٢ﻛﻤ ﺎ
ھﻮ ﻣﻮﺿﺢ
وﺑﻌﺪ ذﻟﻚ وﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ ﺑﺎﻗﻲ اﻟﺤﻘﻮل Rankاﻟﺮﺗﺒ ﺔ اﻟﺠﺎﻣﻌﯿ ﺔ وﺗ ﺎرﯾﺦ اﻟﺘﻌﯿ ﯿﻦ HireDateواﻟﺒﻠ ﺪ Cityوﻟﻜ ﻦ
اﻟﺤﻘﻞ DeptWorkاﻟﻘﺴﻢ اﻟﺬي ﯾﻌﻤﻞ ﺑﮫ اﻟﻤﺪرس ھ ﻮ ﻣﻔﺘ ﺎح ﺧ ﺎرﺟﻲ ﺟﺪوﻟ ﮫ اﻷﺳﺎﺳ ﻲ اﻟﻘ ﺴﻢ Department
ﻓﯿﻤﻜﻨﻨﺎ ﻋﻤﻞ ذﻟﻚ اﻟﻘﯿﺪ ﻣﻨﮭﺎ أو ﻣﻦ Diagramsﻓﺴﻮف ﻧﺒﻨﻲ ھﺬه اﻟﻌﻼﻗﺔ وﺑﺎﻗﻲ اﻟﻌﻼﻗﺎت ﻣﻦ ھﻨﺎ وﻧﺘﺮك ﻋﻼﻗ ﺔ
ﻧﺒﻨﯿﮭﺎ ﻣﻦ ﺧﻼل ال Diagramsاﻻن ﻟﻌﻤﻞ ھﺬه اﻟﻌﻼﻗ ﺔ ﺑﺎﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ اﻟﺤﻘ ﻞ ﺛ ﻢ
ﻧﺨﺘﺎر Relationshipsﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
19
ﯾﻌﻨﻲ اﻷﺧﺘﯿﺎر
ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت اﻟﺤﺎﻟﯿﺔ ﻣﻊ ﺗﻔﻌﯿﻞ اﻟﻌﻼﻗﺔ Check existing data on creation
ﺗﺄﻛﯿﺪ اﻟﻌﻼﻗﺔ ﻟﻌﻤﻠﯿﺔ اﻟﺠﻮاب أو اﻟﺮد Enforce relationship for replication
ﺗﺄﻛﯿﺪ اﻟﻌﻼﻗﺔ ﻓﻲ ﻋﻤﻠﯿﺎت اﻹدﺧﺎل واﻟﺘﻌﺪﯾﻞ Enforce relationship for Inserts and Updates
ﺗﻌ ﺪﯾﻞ اﻟﺤﻘ ﻮل اﻷﺧ ﺮى ﻓ ﻲ اﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ اﻟﻤﺮﺗﺒﻄ ﺔ Cascade Update Related Fields
ﺑﺤﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ وھﺬه ﺧﺎﺻﯿﺔ ﻋﻤﻠﯿﮫ ﺟﺪا
ﺣ ﺬف اﻟﺤﻘ ﻮل اﻷﺧ ﺮى ﻓ ﻲ اﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ إذا ﺣ ﺬف Cascade Delete Related Record
اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ وھﺬا ﺧﻄﺮ ﺟﺪا ﺑﻤﻌﻨﻲ ﻋﻨﺪ ﺣﺬف ﻋﻠ ﻲ
ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻗ ﺴﻢ ﻣ ﺎ ﯾ ﺘﻢ ﺗﻠﻘﺎﺋﯿ ﺎ ﺣ ﺬف ﺟﻤﯿ ﻊ اﻟﻤﺪرﺳ ﯿﻦ
اﻟﻤﺴﺠﻠﯿﻦ ﺑﮭﺬا اﻟﻘﺴﻢ
وﻣﻨﮭﺎ ﺳﯿﺘﻢ اﻻﺧﺘﯿﺎر ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ وﺑﻌﺪ ﺣﻔﻆ ھﺬا اﻟﺠ ﺪول ﺳ ﻮف ﺗﻈﮭ ﺮ ﺷﺎﺷ ﺔ ﺟﺪﯾ ﺪة ﺧﺎﺻ ﺔ ﺑ ﺎﻟﺤﻔﻆ وھ ﻲ
ﺗﻔﯿﺪ أﻧﻚ ﻗﺪ ﻏﯿﺮ ﻓﻲ اﻟﺠﺪوﻟﯿﻦ ھﻞ ﺗﺮﯾﺪ ﺣﻔﻆ ھﺬه اﻟﻤﺘﻐﯿﺮات أم ﻻ أﺿﻐﻂ ﻋﻠﻲ Yes
أﻣﺎ اﻵن ﻻ ﻧﻨﺴﻲ اﻧﮫ ﻛﺎن ھﻨﺎك ﻓﻲ اﻟﺠﺪول اﻟﻤﺎﺿﻲ ﻗﺒﻞ ذﻟﻚ)اﻟﻘﺴﻢ( ﻛﺎن ھﻨﺎك ﻣﻔﺘﺎح ﺧﺎرﺟﻲ ﻟﻢ ﯾﺮﺑﻂ وﻟﻜﻦ ﺟﺪوﻟ ﮫ
اﻵن ﻣﻮﺟﻮد ﯾﻤﻜﻨﻨﺎ ﻋﻤﻠﮫ اﻵن وھﺬا ﺑﺎﻟﻄﺒﻊ ﯾﻌﺘﺒﺮ ﺗﻌﺪﯾﻞ ﻓﻲ اﻟﺠﺪول اﻟﺤ ﺎﻟﻲ ﻟﻌﻤ ﻞ ذﻟ ﻚ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ اﻟﺠ ﺪول ﺑﯿﻤ ﯿﻦ
اﻟﻤﺎوس ﺛﻢ ﻧﺨﺘﺎر Design Tableﻟﻠﻘﺪرة ﻋﻠﻲ ﺗﻌﺪﯾﻞ اﻟﺠﺪول ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
ﺳ ﻮف ﯾﻈﮭ ﺮ ﻟﻨ ﺎ ﺗ ﺼﻤﯿﻢ اﻟﺠ ﺪول اﻷﺳﺎﺳ ﻲ وﻗﺎﺑ ﻞ ﻟﻠﺘﻌ ﺪﯾﻞ وﻟﻜ ﻦ ﻷن ھ ﺬه اﻟﻌﻼﻗ ﺔ ١ : ١ﻓﻼﺑ ﺪ ﻣ ﻦ ﻋﻤ ﻞ اﻟﻤﻔﺘ ﺎح
اﻟﺨﺎرﺟﻲ ﺣﻘﻞ ﻣﻤﯿﺰ أي ﻻ ﯾﺘﻜﺮر واﻟﻤﻔﺘﺎح اﻟﺮﺋﯿ ﺴﻲ ﻻ ﯾﺘﻜ ﺮر إذا ﻣ ﻦ اﻟﻄﺒﯿﻌ ﻲ أن ﯾﻜ ﻮن ﻛ ﻞ ﺳ ﺠﻞ ھﻨ ﺎ ﯾﻤﺜ ﻞ ﺳ ﺠﻞ
20
واﺣﺪ أﯾﻀﺎ ھﻨﺎك إذا اﻟﻌﻼﻗﺔ ﺳﻠﯿﻤﺔ ١ : ١وﻟﻌﻤﻞ ذﻟﻚ ﻧﻀﯿﻒ ﻗﯿﺪ اﻟﺘﻤﯿﺰ Uniqueﻟﻠﺤﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻧ ﻀﻐﻂ
ﺑﯿﻤﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﺤﻘﻞ Managerوﻧﺨﺘﺎر Indexes/Keysﻛﺎﻟﺘﺎﻟﻲ
وﻻ ﻧﻨﺴﻲ اﺧﺘﯿﺎر اﻟﺠﺪول اﻟﺬي ﯾﺤﻮي اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ أوﻻ ﺛﻢ اﻟﺠﺪول اﻟﺬي ﺑﮫ اﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ ﺛ ﻢ ﺣﻘ ﻞ اﻟﻤﻔﺘ ﺎح
اﻟﺮﺋﯿﺴﻲ وﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ وﺑﻌﺪھﺎ ﻧﺴﻤﻲ اﻟﻌﻼﻗﺔ ﺑﺎﺳﻢ ﻛﻤﺎ ھ ﻮ ﻣﻮﺿ ﺢ ﺑ ﺎﻟﺨﻄﻮات ﺑﺎﻟ ﺸﻜﻞ اﻟﺘ ﺎﻟﻲ وﻻ ﻧﺨﺘ ﺎر
أي Cascade
21
وﻧﻀﺒﻂ اﻹﻋﺪادات ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻛﺎﻟﺘﺎﻟﻲ ﻋﻠﻤﺎ ﺑﺄﻧﮫ أن ﻟﻢ ﯾﻜ ﻦ ﺗ ﻢ اﻟﺤﻔ ﻆ ﺣﺘ ﻰ اﻵن ﻓ ﺴﻮف ﻧ ﺮي أﺳ ﻢ اﻟﺠ ﺪول أي اﺳ ﻢ
اﻓﺘﺮاﺿﻲ ﺣﺘ ﻰ ﯾ ﺘﻢ اﻟﺤﻔ ﻆ وﺗﻐﯿﯿ ﺮ اﻻﺳ ﻢ وﻟﻌﻤ ﻞ ﻣﻔﺘ ﺎح رﺋﯿ ﺴﻲ ﻛﺤﻘﻠ ﯿﻦ ﻣﻌ ﺎ ﻧ ﻀﻐﻂ Ctrlوﻧﻌﻠ ﻢ ﻋﻠ ﻲ اﻟﺤﻘﻠ ﯿﻦ ﺛ ﻢ
ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻧﺨﺘﺎر Set Primary Keyﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻠﯿﻦ اﻵﺗﯿﯿﻦ
22
أﻣﺎ اﻟﻌﻼﻗﺔ اﻟﺨﺎﺻﺔ ﺑﺤﻘﻞ TeacherTaughtﻣﻊ ﺟﺪول اﻟﻤﺪرس ﺳﻨﺘﻨﺎوﻟﮭﺎ ﻣﻦ ﺧﻼل اﻟــ Diagrams
23
ﻟﯿﻜﻮن اﻟﺸﻜﻞ اﻟﻨﮭﺎﺋﻲ ﻟﺘﺼﻤﯿﻢ اﻟﺠﺪول ﻛﺎﻟﺘﺎﻟﻲ وﻻ ﻧﻨﺴﻲ ﺣﻘﻞ اﻟﺪرﺟﺔ Scoreوإﻋﺪاده ﻋﻠﻲ رﻗﻤ ﻲ ٥ﺧﺎﻧ ﺎت ﻣ ﻨﮭﻢ
ﺧ ﺎﻧﺘﯿﻦ ﻋ ﺸﺮي وأﯾ ﻀﺎ ﻧﺤ ﺪد ﻋﻠ ﻲ اﻟﺜﺎﻟﺜ ﺔ ﺣﻘ ﻮل اﻟﺨﺎﺻ ﺔ ﺑﺎﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﺑﺎﻟ ﻀﻐﻂ ﻣ ﻊ ﻣﻔﺘ ﺎح Ctrlﺛ ﻢ ﯾﻤ ﯿﻦ
اﻟﻤﺎوس و اﺧﺘﯿﺎر Set Primary Keyﻛﻤﺎ ﺳﺒﻖ وﻛﺎﻟﺘﺎﻟﻲ :
24
وﯾﻤﻜﻦ ﻋﻨﺪ اﻟﻮﻗﻮف ﻋﻠﻲ أي ﺟﺪول واﻟﻀﻐﻂ ﺑﯿﻤﻦ اﻟﻤﺎوس ﺗﻈﮭﺮ ﻟﻨﺎ ﻗﺎﺋﻤﺔ ﯾﻤﻜﻨﻨﺎ ﻣﻦ ﺧﻼﻟﮭﺎ إﻧﺸﺎء ﺟﺪول ﺟﺪﯾﺪ ﻣﻦ
اﻻﺧﺘﯿﺎر New Tableأو اﻟﺘﻌﺪﯾﻞ ﻓﻲ ﺗﺼﻤﯿﻢ اﻟﺠﺪول ﻣﻦ ﺧﻼل اﻻﺧﺘﯿﺎر Design Tableأو ﻓﺘﺢ اﻟﺠ ﺪول ﻣ ﻦ
ﺧ ﻼل Open Tableﺑ ﺄﻛﺜﺮ ﻣ ﻦ ﻃﺮﯾﻘ ﺔ أو ﻋﻤ ﻞ ﻧ ﺴﺦ أو ﻗ ﺺ أو ﻣ ﺴﺢ Deleteﻟﻠﺠ ﺪول اﻟﺤ ﺎﻟﻲ أو ﻋﻤ ﻞ
Renameﺗﻌﺪﯾﻞ ﻷﺳﻢ اﻟﺠﺪول اﻟﺤﺎﻟﻲ أو رؤﯾﺔ ﺧﺼﺎﺋﺺ وﺗﺼﻤﯿﻢ اﻟﺠﺪول ﻣﻦ ﺧﻼل اﻻﺧﺘﯿﺎر Properties
و اﻵن ﻧﺮﯾﺪ ﻋﻤﻞ ﺷﻜﻞ ﻛﺮﺳﻢ ﺑﯿﺎﻧﻲ ﯾﻤﺜﻞ اﻟﻌﻼﻗﺎت ﻣﺎﺑﯿﻦ اﻟﺠﺪاول ﻣﻦ ﺧﻼل Diagrams
وﻣﻦ ﺧﻼﻟﮫ ﯾﻤﻜﻨﻨﺎ
ﻋﻤﻞ رﺳﻢ ﺑﯿﺎﻧﻲ ﻟﻠﻌﻼﻗﺎت وإﺿﺎﻓﺔ ﺟﺪاول ﻟﻠﺸﻜﻞ
ﻋﻤﻞ اﻟﻌﻼﻗﺔ أﺳﺎﺳﺎ ﻣﻦ ﺧﻼﻟﮫ
ﺗﻨﺴﯿﻖ اﻟﺠﺪاول وأﺷﻜﺎل اﻟﻌﻼﻗﺎت
25
ﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﻤﻌﺎﻟﺞ اﻟﺨﺎص ﺑﺎﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻓﻨﻀﻐﻂ Next
ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺘﯿﺢ ﻟﻨﺎ اﺧﺘﯿﺎر اﻟﺠﺪاول اﻟﺘﻲ ﻧﺮﯾﺪھﺎ ﻹﺿﺎﻓﺔ ﻣﻌﻨﺎ إﻟﻲ اﻟﺸﻜﻞ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻲ ﻣﻔﺘ ﺎح Ctrlﻧﺨﺘ ﺎر ﻛ ﻞ
اﻟﺠﺪاول اﻟﻤﺮادة ﺛﻢ ﻧﻀﻐﻂ Addﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
وﯾﻤﻜ ﻦ اﺧﺘﯿ ﺎر Add related tables automaticallyﻟﻺﺿ ﺎﻓﺔ اﻟﺘﻠﻘﺎﺋﯿ ﺔ ﻟﻠﺠ ﺪاول اﻟﻤﺮﺗﺒﻄ ﺔ ﺑﻌﻼﻗ ﺎت
ﻧﻀﻐﻂ Next
26
ﺗﻢ ﺗﻨﺴﯿﻘﮫ ﺑﻌﺾ اﻟﺸﺊ ﻣﻦ ﺧﻼل اﻟﺴﺤﺐ واﻹﺳﻘﺎط أﻣﺎم اﻟﻤﻔﺎﺗﯿﺢ اﻷﺳﺎﺳﯿﺔ ﻟﺘﻜﻮن أﻛﺜ ﺮ وﺿ ﻮﺣﺎ وﻣ ﻦ ﺧ ﻼل ﺑﻌ ﺾ
ﻟﺘﻤﺜﯿﻞ واﺣ ﺪ وﻋﻼﻣ ﺔ اﻟﺨﯿﺎرات اﻟﺘﻲ ﺗﺴﺎﻋﺪ ﻛﺎﻟﺘﺎﻟﻲ وﻗﺪ ﺗﻼﺣﻆ ﻋﻨﺪ ﻧﮭﺎﯾﺔ ﻃﺮف اﻟﻌﻼﻗﺔ ﯾﻮﺿﻊ ﻋﻼﻣﺔ اﻟﻤﻔﺘﺎح
ﻟﺘﻤﺜﯿ ﻞ اﻟﻜﺜﯿ ﺮ وھ ﺬا ﻟﺒﯿ ﺎن اﻟﻌﻼﻗ ﺎت وأﻧﻮاﻋﮭ ﺎ وھ ﺬا ﺗﻮﺿ ﯿﺢ ﻟﻜﯿﻔﯿ ﺔ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ ھ ﺬه اﻷدوات ﻣ ﺎ ﻻ ﻧﮭﺎﯾ ﺔ
اﻟﻤﺴﺎﻋﺪة
27
و ﯾﺒﻘﻰ ﻟﻨﺎ ﻋﻼﻗﺔ واﺣﺪة وھﻲ ﻋﻼﻗ ﺔ اﻟﻤ ﺪرس اﻟﻤﻠﻘ ﻦ ﺑ ﯿﻦ ﺟ ﺪول اﻟﻤ ﺎدة وﺟ ﺪول اﻟﻤ ﺪرس وﺳ ﯿﺘﻢ أﻧﺘﺎﺟﮭ ﺎ ﻣ ﻦ ھﻨ ﺎ
ﻛﺎﻟﺘ ﺎﻟﻲ ﻣ ﻊ ﺳ ﺤﺐ اﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﻣ ﻦ ﺟ ﺪول اﻟ ﺪرس وإﺳ ﻘﺎﻃﮫ ﻋﻠ ﻲ ﺟ ﺪول اﻟﻤ ﺎدة ﻋﻠ ﻲ ﺣﻘ ﻞ اﻟﻤ ﺪرس اﻟﻤﻠﻘ ﻦ
ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
ﺳﻮف ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ إﺿﺎﻓﺔ ﻋﻼﻗﺎت ﻛﻤﺎ ﺗﻌﻮدﻧﺎ ﻋﻠﯿﮭﺎ ﻣﻦ ﻗﺒﻞ و ﺑﮭﺎ ﻛﻞ اﻻﺧﺘﯿ ﺎرات اﻟ ﺴﺎﺑﻘﺔ ﻣ ﻊ اﺧﺘﻼﻓ ﺎت ﺷ ﻜﻠﯿﮫ
ﻃﻔﯿﻔﺔ ﻧﻀﺒﻂ إﻋﺪاداﺗﮭﺎ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﺛﻢ ﻧﻀﻐﻂ OK
28
وﺑﻌﺪ أﻧﺖ ﺗﻤﺖ اﻹﻋﺪادات ﻛﻤﺎ أردﻧﺎ ﯾﻤﻜﻨﻨﺎ ﺣﻔﻆ ھﺬا اﻟﺸﻜﻞ ﺑﺎﻟﻀﻐﻂ ﻓ ﻲ أي ﻣﻮﺿ ﻊ ﺧ ﺎﻟﻲ ﺑﺎﻟ ﺸﻜﻞ ﺗﻈﮭ ﺮ ﻟﻨ ﺎ اﻟﻘﺎﺋﻤ ﺔ
اﻟﺘﺎﻟﯿﺔ
ﻓﯿﻤﻜﻨﻨﺎ اﻟﻮﺻﻮل ﻟﺨﯿﺎرات ﻋﺪﯾﺪة ﻣﺜﻞ إﻧﺸﺎء ﺟﺪول ﺟﺪﯾﺪ أول إﺿﺎﻓﺔ ﺟﺪول ﻣﻮﺟﻮد ﻣﻦ
ﻗﺒﻞ أو ﺗﺤﺪﯾﺪ ﺣﺠﻢ اﻟﺮؤﯾﺔ أو إﻋﺪادات اﻟﻄﺒﺎﻋﺔ أو اﻟﻜﺜﯿﺮ وﻟﻜﻨﻨﺎ ﻧﻀﻐﻂ ﻋﻠﻲ ﺣﻔـــــــﻆ
وذﻟﻚ ﻟﺤﻔﻆ ھﺬا اﻟﻤﺨﻄﻂ اﻟﺒﯿﺎﻧﻲ ﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﻤﺮﺑﻊ اﻟﺤﻮاري ﺣﻔﻆ ﺑﺎﺳﻢ ﻛﺎﻟﺘﺎﻟﻲ
اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت
وﺟﺎء اﻵن وﻗﺖ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت داﺧﻞ اﻟﺠﺪول وﻟﯿﺴﺖ اﻟﺒﯿﺎﻧﺎت اﻟﻮﺻﻔﯿﺔ ﻟﻠﺠﺪول وھﻢ أرﺑﻌﺔ ﻋﻤﻠﯿﺎت
Inserting Data -١إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت
Modify Data -٢ﺗﻌﺪﯾﻞ ﺑﯿﺎﻧﺎت
Delete Data -٣ﺣﺬف ﺑﯿﺎﻧﺎت
-٤اﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت Selecting Data
Query Analyzerﺳﻮف ﻧﺘﻨ ﺎول اﻟ ﺜﻼث ﻧﻘ ﺎط اﻷوﻟ ﻲ وﺳ ﻮف ﻧﺆﺟ ﻞ اﻟﻨﻘﻄ ﺔ اﻟﺮاﺑﻌ ﺔ ﻟﺤ ﯿﻦ اﻟﺤ ﺪﯾﺚ ﻋ ﻦ اﻟـ ـ
وﻟﻔﺘﺢ اﻟﺠﺪول ﻟﻠﺘﻌﺎﻣﻞ ﻣﻌﮫ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﺠﺪول اﻟﻤﻄﻠﻮب اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺑﯿﺎﻧﺎﺗﮫ ﺑﯿﻤﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر
أي اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ اﻟﺴﺠﻼت ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘ ﺎﻟﻲ وﺑﻌ ﺪھﺎ ﻟﻨ ﺎ Return all rowsوﻣﻨﮭﺎ ﻧﺨﺘﺎر Open Table
اﻟﻘﺪرة ﻋﻠﻲ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺑﯿﺎﻧﺎﺗﮫ :
29
واﺧﺘﯿ ﺎر Insert Intoﻛﻤ ﺎ ﺑﺎﻟ ﺸﻜﻞ اﻟﺘ ﺎﻟﻲ أو أو ﺑﺎﻟﻮﻗﻮف ﻋﻠﻲ اﻷﯾﻘﻮﻧ ﺔ Change Query Type
ﻧﺨﺘﺎر Insert fromﻓﻲ ﺣ ﯿﻦ ﻣﻠ ﺊ اﻟﺠ ﺪول ﻣ ﻦ ﺧ ﻼل ﺟ ﺪول ﺛ ﺎﻧﻲ وھ ﺬا ﻓ ﻲ ﺣﺎﻟ ﺔ ﺗ ﺸﺎﺑﮫ اﻟﺒﯿﺎﻧ ﺎت ﻓ ﻲ اﻟﺠ ﺪاول
ﻧﺨﺘﺎر Insert intoﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ
وﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ ﻧﺴﺘﻌﺪ اﻵن ﻟﻤﻠﺊ ﺑ ﺎﻗﻲ اﻟﺠ ﺪاول ﺑﺎﻟﺒﯿﺎﻧ ﺎت ﻛﻤ ﺎ ﻧﺮﯾ ﺪ وﻧﻼﺣ ﻆ رﻓ ﺾ اﻟﻘﺎﻋ ﺪة ﻷي ﺑﯿﺎﻧ ﺎت ﺗﺎﻟﻔ ﺔ ﺣ ﺎول
ﻣﺜﻼ إدﺧﺎل ﻣﺮﺗﺐ أﻋﻠﻲ ﻣﻦ أرﺑ ﻊ ﺧﺎﻧ ﺎت ﺻ ﺤﯿﺤﺔ ﺳ ﻮف ﯾ ﺮﻓﺾ ﺣ ﺎول إدﺧ ﺎل ﺣ ﺮف Hﻣ ﺜﻼ ﻟﺘﻤﺜﯿ ﻞ اﻟﻨ ﻮع ﺳ ﻮف
ﯾﺮﻓﺾ ﺣﺎول ﻋﺪم إدﺧﺎل أﺳﻢ ﻟﻠﻤﺪرس ﺳﻮف ﯾﺮﻓﺾ ﺣﺎول إدﺧﺎل رﻗﻢ ﻗ ﺴﻢ ﻏﯿ ﺮ ﻣﻮﺟ ﻮد اﻵن ﺳ ﻮف ﯾ ﺮﻓﺾ أﯾ ﻀﺎ
وھﺬا ﯾﻀﻤﻦ ﺗﻜﺎﻣﻞ اﻟﺒﯿﺎﻧﺎت وﺻﺤﺘﮭﺎ ﻛﻞ ھﺬا ﻣﻦ ﺧﻼل اﻟﺪﻗﺔ ﻓﻲ ﻓﺮض اﻟﻘﯿﻮد اﻟﺘﻲ ﺗﺤﻜﻢ اﻟﺒﯿﺎﻧﺎت واﻟﺘﻲ ﺗﺤﻜﻢ ﺗﻜﺎﻣ ﻞ
اﻟﺒﯿﺎﻧﺎت ﺑﯿﻦ اﻟﺠﺪاول
30
31
وﻟﻜﻨﻨﺎ اﻵن ﺳﻮف ﻧﺆﺟﻞ اﻟﺤﺪﯾﺚ ﻋﻦ اﻻﺳﺘﻌﻼﻣﺎت وھﺬا ﻷﻧﮭﺎ ﻣﺮﺗﺒﻄﺔ ﺑﻠﻐﺔ اﻟــ SQLاﻟﺘﻲ ﺳﻮف ﻧﺘﻌﺎﻣ ﻞ ﻣﻌﮭ ﺎ ﻣ ﻦ
Query Analyzerوﻓ ﻲ وﻗﺘﮭ ﺎ ﺳ ﻮف ﻧﻨﻔ ﺬ اﻻﺳ ﺘﻌﻼﻣﺎت ﺑ ﺎﻟﻄﺮﯾﻘﺘﯿﻦ ﺑﮭ ﺬه ﺧ ﻼل اﻷداة اﻟﺘ ﻲ ﺗ ﺪﻋﻲ
اﻟﻄﺮﯾﻘﺔ)اﻟﺸﺒﻜﺔ ( Grid Paneو ﻋﻦ ﻃﺮﯾﻖ اﻟــ Query Analyzer
وﻷﻧﻨ ﺎ ﻧﺮﯾ ﺪ ﻋﻤ ﻞ ﻧ ﺴﺨﺔ اﺣﺘﯿﺎﻃﯿ ﺔ ﻓﻤ ﻦ اﻟﺘﻔ ﺮع اﻟﺮﺋﯿ ﺴﻲ Managementاﻟﺨ ﺎص ﺑ ﺎﻹدارة ﻧﺨﺘ ﺎر Backup
ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ ﻣ ﻦ اﻟﻘﺎﺋﻤ ﺔ ﻧﺨﺘ ﺎر New Backup Deviceﻛﻤ ﺎ ﯾﻮﺿ ﺢ ﻣ ﻦ اﻟ ﺸﻜﻞ ﺗﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ
ﺧﺼﺎﺋﺺ ﻟﻌﻤﻠﯿﺔ اﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ ﻧﺨﺘﺎر ﻣﺴﺎر اﻟﻤﻠﻒ File Nameﻟﻠﻤﻜﺎن اﻟﺬي ﻧﺮﯾﺪه ﻋﻠﻲ اﻟﻘﺮص اﻟﺼﻠﺐ
33
ﺑﻌﺪ اﻟﻀﻐﻂ ﻋﻠﻲ OKﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺧﺼﺎﺋﺺ ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ ﻧﻜﺘﺐ ﻓﻲ اﻟﺨﺎﻧﺔ Nameأﺳﻢ اﻟﻤﻠﻒ اﻟﺬي ﻗ ﺪ ﻛﺘﺒﻨ ﺎه
ﻣﻦ ﻗﺒﻞ ﻓﻲ اﻟﺨﺎﻧﺔ File Nameوﻧﻀﻐﻂ OKو اﻵن أﺻﺒﺢ ﻟﺪﯾﻨﺎ ﻣﻠﻒ ﯾﻤﺜﻞ ﻣﻠﻒ اﻟــ Data Fileﻛﻤ ﺎ ﻻﺣﻈﻨ ﺎ
ﻋﻨﺪ إﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وھﺬا اﻟﻤﻠﻒ ﯾﻤﻜﻦ ﻧﺴﺦ أي ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻓﯿﮫ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ
وﻟﻜﻦ ﻣﺎذا ﻋﻦ اﻟﻤﻠﻒ اﻟﺜﺎﻧﻲ اﻟﺬي ﻛ ﺎن ﯾ ﺴﻤﻲ Transaction Logاﻟﻤﺨ ﺘﺺ ﺑﺤﺮﻛ ﺔ ﺑ ﺎﻷداء اﻟﺨﺎﺻ ﺔ ﺑﺎﻟﻘﺎﻋ ﺪة
ﺳ ﻮف ﻧﺒﻨ ﻲ ﻟ ﮫ ﻣﻠ ﻒ ﺑ ﻨﻔﺲ اﻟﻄﺮﯾﻘ ﺔ اﻟ ﺴﺎﺑﻘﺔ ﻧﻘ ﻒ ﻋﻠ ﻲ Backupوﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ ﻧﺨﺘ ﺎر New
Backupوﻧﻜﺘ ﺐ أﺳ ﻢ اﻟﻤﻠ ﻒ ﻣﺒﺎﺷ ﺮة وﻟﻜ ﻦ ﻋﻠ ﻲ أن ﯾﻜ ﻮن ﻣ ﺜﻼ أﺳ ﻢ اﻟﻤﻠ ﻒ Device
SchoolBackupLogﻓ ﻲ اﻟﺨﺎﻧ ﺔ Nameوﺳ ﯿﻜﺘﺐ ھ ﻮ ﻓ ﻲ اﻟﺨﺎﻧ ﺔ File Nameاﻟﻤ ﺴﺎر اﻟ ﺴﺎﺑﻖ وأﺳ ﻢ
اﻟﻤﻠﻒ اﻟﺠﺪﯾﺪ ﺑﺎﻣﺘﺪاد __.BAKأﺿﻐﻂ ﻋﻠﻲ OKﺳﻮف ﯾﻈﮭﺮ ﻓﻲ اﻟﺨﺎﻧﺔ Backupﻛﻤﺎ ﯾﺘﻀﺢ ھﺬا ﻣﻦ ﺧﻼل
اﻟﺸﻜﻠﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ :
34
ﻛﺎﻧﺖ ھﺬه ھﻲ ﻋﻤﻠﯿﺔ ﺗﺠﮭﯿﺰ ﻣﻠﻔ ﺎن ﻟﯿﻘﻮﻣ ﺎ ﺑﺎﺳﺘ ﻀﺎﻓﺔ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﻧﺮﻏ ﺐ ﻓ ﻲ ﻧ ﺴﺨﮭﺎ اﺣﺘﯿﺎﻃﯿ ﺎ اﻵن ﯾﻤﻜﻨﻨ ﺎ
ﺗﺤﺪﯾﺪ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﺮﯾﺪ ﻧﺴﺨﮭﺎ ﻋﻦ ﻃﺮﯾ ﻖ اﻟ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ اﺧﺘﯿ ﺎر Backup a Database
ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
35
ﻓﺴﻮف ﺗﻨﺘﻈﺮ ﻗﻠﯿﻼ ﺣﺘﻰ ﯾﺘﻢ ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ وﺑﻌﺪھﺎ رﺳﺎﻟﺔ ﺗﻔﯿﺪ ﺑﺈﺗﻤﺎم ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ ﻛﻤﺎ ﺑﺎﻷﺷﻜﺎل اﻟﺘﺎﻟﯿﺔ
وھﻜﺬا أﺻﺒﺢ ﻟﺪﯾﻨﺎ ﻣﻠﻒ ﻧﺴﺦ اﺣﺘﯿﺎﻃﻲ ﺑﮫ اﻟﺒﯿﺎﻧﺎت ﻣﺆﻣﻨﺔ ﻛﻤﺎ ھﻲ اﻵن ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ
ﯾﻤﻜﻨﻨﺎ اﻵن ﺣﺬف أي ﺑﯿﺎﻧﺎت أو أي ﺟﺪول ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻟﻨﺮي ﻛﯿﻔﯿﺔ
اﺳﺘﺮﺟﺎﻋﮫ ﻣﻦ ھﺬا اﻟﻤﻠﻒ اﻟﺨﺎص ﺑﺎﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ
ﻣﻦ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﻟﻤﺪرﺳﺔ ﻧﺨﺘﺎر ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﺟﺪول اﻟﺸﮭﺎدات اﻟﺠﺎﻣﻌﯿﺔ CollegeDegreeوﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ
اﻟﻤﺎوس وﻧﺨﺘﺎر Deleteﻟﺤﺬﻓﮫ ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﻟﺘﺄﻛﯿﺪ اﻟﺤﺬف ﻧﻀﻐﻂ ﻣﻨﮭﺎ Drop Allﻛﻤﺎ ﯾﻠﻲ
ﻓﻤﻦ اﻟﻤﻤﻜﻦ أن ﺗﻈﮭﺮ أﺧﻄﺎء أﺣﯿﺎﻧﺎ ﺑﺴﺒﺐ اﻟﻌﻼﻗﺎت وﻟﻜ ﻦ اﻵن ﻟ ﻢ ﯾﻌ ﺪ ھ ﺬا اﻟﺠ ﺪول ﻣﻮﺟ ﻮدا ﻓﻨﺮﯾ ﺪ اﺳ ﺘﺮﺟﺎﻋﮫ ﻣ ﻦ
ﻣﻠ ﻒ اﻟﻨ ﺴﺦ اﻻﺣﺘﯿ ﺎﻃﻲ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت ﺛ ﻢ All Tasksوﻣﻨﮭ ﺎ Restore
Database
36
ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ اﺳﺘﺮﺟﺎع ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻧﺨﺘﺎر ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤ ﺴﺘﺨﺪﻣﺔ ﻛﻤ ﺎ ﺑﺎﻟ ﺸﻜﻞ ﺛ ﻢ ﻧ ﻀﻐﻂ OKﺳ ﯿﺒﺪأ ﻓ ﻲ
اﻟﺘﺤﻤﯿﻞ ﺣﺘﻰ ﯾﻈﮭﺮ ﻟﻚ ﺷﺎﺷﺔ ﺗﻔﯿﺪ ﺑﺈﺗﻤﺎم اﻟﻌﻤﻠﯿﺔ ﻧﻀﻐﻂ ﻋﻠﯿﮭﺎ OKﻛﻤﺎ ﺗﻮﺿﺢ اﻷﺷﻜﺎل اﻟﺘﺎﻟﯿﺔ
ﺳﻮف ﯾﺘﻢ اﺳﺘﺮﺟﺎع اﻟﺠﺪول ﻗﺪ ﺗﺤﺘﺎج ﻟﻠﻮﻗﻮف ﻋﻠﻲ اﻟﺒﻨﺎء اﻟﺸﺠﺮي واﻟﻀﻐﻂ F5أو ﻏﻠﻖ وﻓﺘﺢ SQL Server
ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
37
وﻣﻨﮭ ﺎ ﺗﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ ﻧﺨﺘ ﺎر ﻣ ﻦ اﻟﺠﺎﻧ ﺐ اﻷﯾ ﺴﺮ ﻣﻨﮭ ﺎ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﻧﺮﯾ ﺪ أن ﻧﺤ ﻮل إﻟﯿﮭ ﺎ وھ ﻲ اﻵن
Accessأو ﻣ ﻦ ﻗﺎﺋﻤ ﺔ Connectionﺛ ﻢ ﻧﺨﺘ ﺎر Microsoft Accessﻓﺘﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ ﺧ ﺼﺎﺋﺺ
اﻻﺗ ﺼﺎل ﻋﻠ ﻲ أن ﻧﻜ ﻮن ﻗ ﺪ إﻧ ﺸﺎءﻧﺎ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ﻓﺎرﻏ ﺔ ﻣ ﻦ ﺧ ﻼل Accessوﻧﺨﺘﺎرھ ﺎ ﻣ ﻦ اﻟﺨﺎﻧ ﺔ File
Nameﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻔﺎرﻏﺔ أو ﻧﻜﺘﺐ اﻟﻤﺴﺎر ﺛﻢ ﻧﻀﻐﻂ OKﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ
ﻓﯿﺼﺒﺢ اﻟﺸﻜﻞ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﺛﻢ ﻧﺨﺘﺎر ﻣﻦ اﻟﺠﺎﻧﺐ اﻷﯾﻤﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻷﺻﻠﯿﺔ اﻟﺘﻲ ﺳﻮف ﯾﺤﻮل ﻣﻨﮭ ﺎ وھ ﻲ اﻵن
ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت SQL Serverأو ﻣ ﻦ ﻗﺎﺋﻤ ﺔ Connectionﺛ ﻢ ﻧﺨﺘ ﺎر Microsoft OLE DB
Provider for SQL Serverﻛﺎﻟﺘﺎﻟﻲ
38
ﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻧﺤﺪد ﻣﻨﮫ أوﻻ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮب اﻟﺘﺤﻮﯾﻞ إﻟﯿﮭﺎ وھﻨﺎ ھﻲ Accessﺛ ﻢ اﻟ ﻀﻐﻂ ﻋﻠ ﻲ
ﻣﻔﺘﺎح Ctrlواﺧﺘﯿﺎر ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮب ﺗﺤﻮﯾﻠﮭﺎ وھﻲ ھﻨﺎ SQL Serverﺛﻢ ﻧﻀﻐﻂ ﻋﻠﯿﮭﻢ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
ﻋﻠﯿﮭﻢ و ﻧﺨﺘﺎر Transform Data Taskﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻣﻊ ﻣﺮاﻋ ﺎة اﻟﺘﺮﺗ ﺐ ﻓ ﻲ اﻻﺧﺘﯿ ﺎر اﻟﻤ ﺬﻛﻮر
ﺳﻮف ﯾﻈﮭ ﺮ ﺧ ﻂ ﺑ ﮫ ﺳ ﮭﻢ ﻣﺘﺠ ﮫ إﻟ ﻲ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﺗﺮﯾ ﺪ اﻟﺘﺤﻮﯾ ﻞ إﻟﯿﮭ ﺎ وان ﻟ ﻢ ﯾﻜ ﻦ ﻓﺘﻜ ﻮن ﻗ ﺪ أﺧﻄ ﺄت ﻓ ﻲ
اﻟﺘﺮﺗﯿﺐ اﻟﺴﺎﺑﻖ ﺷﺮﺣﮫ ﻛﻤﺎ ﺗﻮﺿﺢ اﻷﺷﻜﺎل اﻟﺘﺎﻟﯿﺔ :
ﻧﻀﻐﻂ ﺿﻐﻂ ﻣﺰدوج ﻋﻠﻲ اﻟﺨﻂ اﻟﻮاﺻﻞ ﺑﯿﻦ اﻟﻘﺎﻋﺪﺗﯿﻦ ﻓﯿﻈﮭﺮ ﻣﺎ ﯾﻠﻲ :
ﺷﺎﺷﺔ ﺧﺼﺎﺋﺺ ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﺠﺰء Table/View
ﻧﺨﺘ ﺎر اﻟﺠ ﺪول اﻷول ﺛ ﻢ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ Previewﻟﺮؤﯾ ﺔ ﺑﯿﺎﻧ ﺎت اﻟﺠ ﺪول ﻛﺎﻟ ﺸﻜﻞ اﻟﺘ ﺎﻟﻲ واﻟ ﻀﻐﻂ ﻋﻠ ﻲ
Destination
ﺳﺘﻈﮭﺮ أﻛﻮد إﻧﺸﺎء ﺟﺪول أو أﺿﻐﻂ
ﻋﻠﻲ زر Createﻟﺮؤﯾﺘﮭﺎ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
39
ﻓﺘﻈﮭﺮ ﻟﻨﺎ اﻟﺸﺎﺷﺔ اﻟﺘﺎﻟﯿﺔ ﺑﮭﺎ رﺳﺎﻟﺔ ﺗﻔﯿﺪ ﺑﺎﻧﺘﻘﺎل اﻟﺒﯿﺎﻧﺎت ﺑﻨﺠﺎح ﻧﻀﻐﻂ Okﺛﻢ Doneﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ
اﻻﺧﺘﯿﺎر اﻷول ﻣﻨﮭﺎ Remove invalid transformationأي ﺣﺬف ﻋﻤﻠﯿﺎت اﻟﺘﺤﻮﯾﻞ اﻟﻔﺎﺷﻠﺔ
اﻻﺧﺘﯿﺎر اﻟﺜﺎﻧﻲ Change source/destinationاﺧﺘﯿﺎر اﻟﻤﺼﺪر واﻟﻘﺎﻋﺪة اﻟﻤﻘﺼﻮدة
اﻻﺧﺘﯿ ﺎر اﻟﺜﺎﻟ ﺚ Remove all transformation and redo auto-mappingوﻣﻌﻨ ﺎه إزاﻟ ﺔ ﻛ ﻞ
ﻋﻤﻠﯿ ﺎت اﻟﺘﺤﻮﯾ ﻞ اﻟ ﺴﺎﺑﻘﺔ وإﻋ ﺎدة ﻋﻤ ﻞ ﺧﺮﯾﻄ ﺔ ﺣﻘ ﻮل ﻣ ﻦ ﺟﺪﯾ ﺪ وھ ﺬا ﻣ ﺎ ﺳ ﻮف ﻧﺨﺘ ﺎره ﺣﺘ ﻰ ﯾ ﺘﻢ وﺿ ﻊ اﻟﺤﻘ ﻮل
اﻟﺠﺪﯾ ﺪة ﺛ ﻢ ﻧ ﻀﻐﻂ OKوﺑﻌ ﺪھﺎ ﻣ ﻦ اﻟﺨﺎﻧ ﺔ Nameﻧﺨﺘ ﺎر DTSTransformation__1ﺛ ﻢ ﻧ ﻀﻐﻂ Ok
وﻣﻨﮭﺎ ﻧﻀﻐﻂ Executeﺗﻈﮭﺮ رﺳﺎﻟﺔ ﻧﻘ ﻞ اﻟﺒﯿﺎﻧ ﺎت ﻧ ﻀﻐﻂ Okﺛ ﻢ Doneوﻧﻌﯿ ﺪ اﻟﻜ ﺮة ﻣ ﻦ ﺑﺪاﯾ ﺔ اﻟ ﻀﻐﻂ ﻋﻠ ﻲ
اﻟﺨﻂ اﻟﻮاﺻﻞ ﺑﯿﻦ اﻟﻘﺎﻋﺪﺗﯿﻦ وﻧﺨﺘﺎر اﻟﺠﺪول اﻟﺬي ﯾﻠﯿﮫ ﺣﺘﻰ ﻧﻨﺘﮭﻲ ﻣﻦ ﺟﻤﯿﻊ اﻟﺠﺪاول
وﯾﻤﻜﻨﻨﺎ ﻋﻤﻞ ﻋﻜﺲ ﻛﻞ ھﺬا ﻋ ﻦ ﻃﺮﯾ ﻖ اﻟﻌﻤ ﻞ ﻋﻠ ﻲ ﺗﺤﺪﯾ ﺪ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت أﻛ ﺴﺲ ﺛ ﻢ ﺑﻌ ﺪھﺎ SQL Serverوﻧﻘ ﻞ
اﻟﺒﯿﺎﻧ ﺎت ﻣ ﻦ أﻛ ﺴﺲ إﻟ ﻲ SQL Serverوھ ﺬا أﯾ ﻀﺎ اﻟﻤﺘﺒ ﻊ ﻣ ﻊ ﻛ ﻞ ﻗﻮاﻋ ﺪ اﻟﺒﯿﺎﻧ ﺎت اﻟﻤﺘﺎﺣ ﺔ ﻣ ﻦ ﻗﺎﺋﻤ ﺔ
Connectionﻓﻲ ال DTS Packageأﻓﺘﺢ ﻗﺎﻋﺪة اﻷﻛﺴﺲ اﻵن ﻓﮭﻲ ﻣﻤﺘﻠﺌﺔ ﺑﺎﻟﺠﺪاول واﻟﺒﯿﺎﻧﺎت !!.
40
وﺑﻌﺪ ذﻟﻚ ﻋﻨﺪ ﻏﻠﻖ اﻟـ DTS Packageﺳﻮف ﯾﺴﺄل ﻋ ﻦ رﻏﺒﺘ ﻚ ﻓ ﻲ ﺣﻔ ﻆ ھ ﺬه اﻟﺘﻐﯿ ﺮات أﺿ ﻐﻂ ﻧﻌ ﻢ وﺑﻌ ﺪھﺎ
ﺳ ﻮف ﺗﻈﮭ ﺮ ﻟ ﻚ ﺷﺎﺷ ﺔ ﻛﺎﻟﺘ ﺎﻟﻲ ﻧﻜﺘ ﺐ ﻓ ﻲ اﻟﺨﺎﻧ ﺔ Package Nameأﺳ ﻢ اﻟﻤﻠ ﻒ اﻟﺨﺎﻧ ﺔ Locationﻧﺨﺘ ﺎر
ﻣﻨــــــــــ ـﮭﺎ SQL Serverوﺑﺈﻣﻜﺎﻧﻨ ﺎ اﺧﺘﯿ ﺎر Meta data Servicesأو Visual Basic Fileأﻛﺜ ﺮ
وﻛﻠﮭﺎ ﺧﺪﻣﺎت ﻣﺘﺎﺣﺔ ﻟﻚ ﻋﻠﻲ أﺳﺎس أﻋــــﺎدة ﺗﺸﻐﻠﮭﺎ ﻣﺮة أﺧﺮي ﺑﺴﮭﻮﻟﺔ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
ﻓﺘﺢ اﻟﺒﺮﻧﺎﻣﺞ
42
وﻗﺪ ﻧﺤﺘﺎج ﻛﺜﯿﺮ ﻟﻠﻮﻗﻮف ﻓﻲ ال Object Browserﺛﻢ اﻟﻀﻐﻂ ﻋﻠﻲ F5ﻟﺮؤﯾﺔ اﻟﺘﻐﯿﺮات
-٢ﻟﺤﺬف ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻧﻜﺘﺐ Drop Databaseوﺑﻌﺪھﺎ أﺳﻢ اﻟﻘﺎﻋﺪة اﻟﻤﺮاد ﺣ ﺬﻓﮭﺎ ﺛ ﻢ ﻧﺤ ﺪدھﺎ ﺑﺎﻟﻤ ﺎوس ﺛ ﻢ
اﻟﻀﻐﻂ F5ﻟﺤﺬف اﻟﻘﺎﻋﺪة ﻛﺎﻟﺘﺎﻟﻲ
43
ﺛﺎﻧﯿﺎ :اﻟﺠﺪاول
Creating Tables -١إﺿﺎﻓﺔ اﻟﺠﺪاول
Alter Tables -٢ﺗﻌﺪﯾﻞ اﻟﺠﺪاول
Dropping Tables -٣ﺣﺬف اﻟﺠﺪاول
-٤ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﺠﺪاول Table Information
-١إﺿﺎﻓﺔ اﻟﺠﺪاول Creating Table
ﺗﻌﺮﻓﻨﺎ ﻣﻦ ﻗﺒ ﻞ ﻋﻠ ﻲ أﻧ ﻮاع اﻟﺒﯿﺎﻧ ﺎت وأﻧ ﻮاع اﻟﻘﯿ ﻮد وأﻧ ﻮاع اﻟﻌﻼﻗ ﺎت وﺗ ﻢ ﻋﻤ ﻞ ﺟ ﺪاول ﻣ ﻦ ﺧ ﻼل اﻷداة
Enterprise Managerو اﻵن ﺟﺎء دور Query Analyzerاﻟﻘﻮي وھﺬا ﻷﻧﮫ اﻷﻗﺮب ﻟﻠﻌﻤﻞ ﻋﻠﻲ أي
ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ﻋﻼﻗﯿ ﺔ ﻷﻧ ﮫ ﯾﻌﻤ ﻞ ﻣ ﻦ ﺧ ﻼل أﺷ ﮭﺮ ﻟﻐ ﺎت اﻟﺤﺎﺳ ﺐ ﻟﻐ ﺔ SQL (Structured Query
) Languageﻟﻐﺎت ﺑﻨﺎء اﻻﺳﺘﻔﺴﺎرات
ﺑﻨﺎء اﻟﺠﻤﻠﺔ اﻷﺳﺎﺳﯿﺔ ﻟﻌﻤﻞ ﺟﺪول ﻛﺎﻟﺘﺎﻟﻲ
ﺗﻼﺣ ﻆ اﻷﻗ ﻮاس ] … [ أي ﺷ ﺊ ﻣ ﺎﺑﯿﻦ ھ ﺬه اﻷﻗ ﻮاس ﯾﻌﺘﺒ ﺮ ﺟ ﺰء اﺧﺘﯿ ﺎري ﯾﻤﻜﻨ ﻚ اﻻﺳ ﺘﻐﻨﺎء ﻋﻨ ﮫ اﻟﻤﻼﺣ ﻆ ھﻨ ﺎ
واﻟﻤﮭ ﻢ ھ ﻮ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ اﻟﻘﯿ ﻮد ﻓﺈﻧﮭ ﺎ ﻗ ﺪ ﺗﻮﺿ ﻊ ﺑﻌ ﺪ اﻟﺤﻘ ﻞ وﻗ ﺪ ﺗﻮﺿ ﻊ أﺳ ﻔﻞ اﻟﺠ ﺪول وﻓ ﻲ اﻟﺤ ﺎﻟﺘﯿﻦ ﻛﻠﻤ ﺔ
Constraintوﺑﻌﺪھﺎ أﺳﻢ اﻟﻘﯿﺪ اﺧﺘﯿﺎرﯾﺔ ﻓﯿﻄﻠﻖ ﻋﻠ ﻲ اﻟﺤﺎﻟ ﺔ اﻷوﻟ ﻲ ﻋﻠ ﻲ ﻣ ﺴﺘﻮي اﻟﺤﻘ ﻞ Column Level
واﻟﺤﺎﻟﺔ اﻟﺜﺎﻧﯿﺔ ﻋﻠﻲ ﻣﺴﺘﻮي اﻟﺠﺪول Table Levelوﻟﻜﻦ ﺑﻌﺪ ﻛﻞ ﻗﯿﺪ ھﻨﺎك ﺟﺰء ﻋﻠﻲ ﺣﺴﺐ ﻧ ﻮع اﻟﻘﯿ ﺪ أي أﻧ ﮫ
ﯾﺨﺘﻠﻒ ﻣﻦ ﻗﯿﺪ ﻵﺧﺮ ﻓﺴﻮف ﻧﺒﺪأ ﺑﺎﻟﺘﻤﯿﺰ ﺑﯿﻨﮭﻢ أوﻻ
44
ﯾﻼﺣﻆ أﺳﻢ اﻟﻘﯿﺪ ﺳﻤﻲ ﻣﻦ ﺧﻼل أﺳﻢ اﻟﺠﺪول ﺛﻢ ﺷﺮﻃﺔ ﺳﻔﻠﯿﺔ ﺛﻢ أﺳﻢ اﻟﺤﻘﻞ ﺛﻢ ﺷﺮﻃﺔ ﺳﻔﻠﯿﺔ ﺛﻢ اﺧﺘﺼﺎر اﻟﻘﯿ ﺪ ھ ﺬا
ھﻮ ﻋﺒﺎرة ﻋﻦ ﻣﻌﯿﺎر ﻣﻦ اﻟﻤﻌﺎﯾﯿﺮ اﻟﺸﮭﺮ ﻟﻜﺘﺎﺑﺔ أﺳﻤﺎء اﻟﻘﯿﻮد اﻟﻤﮭﻢ إﺗﺒﺎع ﻃﺮﯾﻘﺔ واﺣﺪة ﻟﺘﺤﻘﯿﻖ اﻟﻐ ﺮض وھ ﻮ ﺗ ﺬﻛﺮ
أو ﺗﻮﻗﻊ ھﺬه اﻷﺳﻤﺎء ﺑﺴﮭﻮﻟﺔ أو ﻋﺪم ﻛﺘﺎﺑﺔ ﻛﻠﻤﺔ Constraintوﻻ أﺳﻢ اﻟﻘﯿﺪ وھﺬا ﻣﺘﺒﻊ ﻣﻊ ﻛﻞ اﻷواﻣﺮ .
Table Level
…
Constraint Dept _PK Primary Key (DeptNo) ,
…
ﯾﻼﺣﻆ أن اﻟﻔﺮق ھﻨﺎ ﻷﻧﻨﺎ ﻧﻜﺘﺐ اﻷواﻣﺮ أﺧﺮ اﻟﺠﺪول ﻓﻼﺑﺪ أن ﻧﺤﺪد ﻣﻦ ھﻮ اﻟﺤﻘﻞ اﻟﺬي ﺳ ﻮف ﯾ ﺘﻢ ﺗﻨﻔﯿ ﺬ اﻟﻘﯿ ﺪ ﻋﻠﯿ ﮫ
أﻣ ﺎ ﻓ ﻲ اﻟﻄﺮﯾﻘ ﺔ اﻷوﻟ ﻲ ﻟ ﻢ ﻧﻜﺘ ﺐ ذﻟ ﻚ وھ ﺬا ﻷن اﻟﻘﯿ ﺪ ﺳ ﻮف ﯾﻨﻔ ﺬ ﻋﻠ ﻲ اﻟﺤﻘ ﻞ اﻟﻤﻜﺘ ﻮب أﻣﺎﻣ ﮫ ﻣﺒﺎﺷ ﺮة وﻗ ﺪ ﺗﻜ ﻮن
ﺗﺴﻤﯿﺔ ﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ھﻜﺬا أﻓﻀﻞ وأﺳﮭﻞ ھﻮ أﺳﻢ اﻟﺠﺪول ﺛﻢ اﻟﻼﺣﻘﺔ . PK
…
DeptًWork int Constraint Work_FK References Dept (DeptNo) ,
…
وﯾﻼﺣﻆ ﻛﺘﺎﺑﺔ أﺳﻢ اﻟﻘﯿﺪ ﻣﺨﺘﻠﻔﺔ ﻗﻠﯿﻼ وھﺬا ﻷﻧﮫ ھﺬه اﻟﻘﯿﺪ داﺋﻤ ﺎ ﯾﻤﺜ ﻞ ﻋﻼﻗ ﺔ وﯾﻔ ﻀﻞ ﻛﺘﺎﺑ ﺔ أﺳ ﻢ اﻟﻌﻼﻗ ﺔ ﻛﻤ ﺎ ﻓ ﻲ ال
ERﺛﻢ اﻟﻼﺣﻘﺔ FKأو أﺳﻢ اﻟﺠﺪول اﻷول ﺛﻢ اﻟﺜﺎﻧﻲ ﺛﻢ FKوﺑﻌﺪة Referencesأي أﻧﮫ ﺣﻘﻞ ﻣﺮﺟﻌﻲ وﻻﺑﺪ أن
ﻧﺤﺪد ﻣﺮﺟﻌﻲ ﻷي ﺣﻘﻞ ﻓﻲ أي ﺟﺪول ﻓﻨﻜﺘﺐ أﺳﻢ اﻟﺠﺪول وﻣﺎﺑﯿﻦ ﻗﻮﺳﯿﻦ أﺳﻢ اﻟﺤﻘ ﻞ وﯾﻤﻜ ﻦ ﺑ ﺎﻟﻄﺒﻊ اﻻﺳ ﺘﻐﻨﺎء ﻋ ﻦ
ﻛﻠﻤﺔ Constraintوأﺳﻢ اﻟﻘﯿﺪ وﻟﻜﻨﮫ ﻏﯿﺮ ﻣﺴﺘﺤﺐ ﻟﻮﺟﻮد أواﻣﺮ ﺗﻘﻮم ﻋﻠﻲ ھﺬه اﻟﺘﺴﻤﯿﺔ
45
Table Level
…
Constraint Work_Fk Foreign Key (DeptWork) References Dept ( DeptNo ) ,
…
وھﺬا ﻟﺘﺤﺪﯾﺪ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻓﻲ ھﺬا اﻟﺠﺪول اﻟﺬيForeign Key ﻓﻲ ھﺬا اﻟﺸﻜﻞ ﯾﺘﻀﺢ ﻟﻨﺎ اﻹﻟﺰام ﺑﻜﺘﺎﺑﺔ ﻛﻠﻤﺔ
ﻧﻜﺘ ﺐ أﺳ ﻢ اﻟﺠ ﺪول اﻷﺧ ﺮ ﺛ ﻢ أﺳ ﻢ اﻟﺤﻘ ﻞReferences ﺳ ﻮف ﯾﻜ ﻮن ﻣ ﺮﺗﺒﻂ ﺑﺤﻘ ﻞ ﻓ ﻲ ﺟ ﺪول أﺧ ﺮ وﺑﻌ ﺪ ﻛﻠﻤ ﺔ
Cascade Delete وCascade Update Related Fields اﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﺑ ﮫ وﻟﻜ ﻦ ﻣ ﺎذا ﻋ ﻦ
ﻟﺘﻤﺜ ﯿﻠﮭﻢ ھﻨ ﺎOn Update Cascade أوOn Delete Cascade ﯾﻤﻜﻨﻨ ﺎ ﻛﺘﺎﺑ ﺔRelated Fields
ﻓﻲ أي اﻟﻤﺴﺘﻮﯾﯿﻦ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل
…
DeptًWork int Constraint Work_FK References Dept (DeptNo)
On Update Cascade ,
…
وﻟﯿﺲ ﻟﮭﺎ ﺑﺎﻟﻄﺒﻊ ﻃﺮﯾﻘﺔ ﻋﻠﻲ ﻣﺴﺘﻮي اﻟﺠﺪول وﯾﻤﻜﻦ أن ﻧﺴﺘﻐﻨﻲ ﻋﻦ اﻟﺘﺴﻤﯿﺔ ﻓﻲ ھﺬا اﻟﻘﯿﺪ ﺣﯿﺚ أﻧﮫ ﻟﯿﺲ ﻣﻔﯿﺪ
Table Level
…
Constraint Dept_DName_UK Unique ( DName ) ,
…
Unique (----- , -----) ﻣﺎﺑﯿﻨﮭﻢ, وإن ﻛﺎن أﻛﺜﺮ ﻣﻦ ﺣﻘﻞ ﻣﻌﺎ ﻻ ﯾﻜﺮروا ﻧﻀﻌﮭﻢ ﻣﺎ ﺑﯿﻦ اﻷﻗﻮاس ﺑﻌﻼﻣﺔ ﻓﺎﺻﻠﺔ
وﻧﻼﺣﻆ أﯾﻀﺎ ﻋﺪم ذﻛﺮ أﺳﻢ اﻟﺤﻘﻞ ﻓﻲ ﻣﻮاﺿﻊ أﺧﺮي وھﺬا ﻷن ھﺬا اﻟﻘﯿﺪ ﯾﻜﻮن ﺑﺪاﺧﻠﺔ داﺋﻤ ﺎ أﺳ ﻢ اﻟﺤﻘ ﻞ اﻟﻤﻔ ﺮوض
ﻋﻠﯿﮫ اﻟﻘﯿﺪ
ﻹﺿﺎﻓﺔ ﻗﯿﻤﺔ اﻓﺘﺮاﺿﯿﺔ ﻟﻠﺤﻘﻞ
…
Gender Char(1) Constraint Teacher_Gender_CK Check
( Gender In('M','m','F','f') Default 'M' ,
…
واﻵن ﯾﻤﻜﻨﻨﺎ ﻋﻤﻞ اﻟﺠﺪاول ﺑﺎﻟﻘﺎﻋﺪة ﻣﻦ ﺧﻼل ﺗﻠﻚ اﻷواﻣﺮ واﻟﯿﻚ اﻷواﻣﺮ
Create Database SchoolQA
Department Table :
use SchoolQA
Create Table Department
(
DeptNo int Constraint Dept_DeptNo_PK Primary Key ,
DName varchar(25) Constraint Dept_DName_UK Unique ,
Manager int
)
اﻷﻣﺮ Useﺛﻢ أﺳﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ھﺬا ﻟﻀﻤﺎن ﺗﻨﻔﯿﺬ اﻷواﻣﺮ اﻟﺘﺎﻟﯿﺔ ﻋﻠﻲ ھﺬه اﻟﻘﺎﻋﺪة أو اﺧﺘﯿﺎر اﻟﻘﺎﻋﺪة ﻣﻦ اﻟﻘﺎﺋﻤ ﺔ
اﻟﻤﻨﺴﺪﻟﺔ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
وﻟﻜﻦ ھﻨﺎك ﻣﺸﻜﻠﺔ ﻛﺒﺮي وھﻲ أن اﻟﺤﻘﻞ Managerھﻮ ﻋﺒﺎرة ﻋﻦ ﻣﻔﺘﺎح ﺧﺎرﺟﻲ ﻣﺮﺟﻌﻲ ﻟﺠﺪول اﻟﻤﺪرس ﻟﺤﻘﻞ
TeacherIdوﻻ ﯾﻤﻜﻨﻨﺎ ﺑﻨﺎءه ﺣﺘﻰ اﻵن أﺑﺪا ﺣﺘﻰ ﺑﻌﺪ ﻋﻤﻞ ﺟﺪول اﻟﻤﺪرس ﺗﺬﻛﺮ ھﺬا اﻟﻘﯿﺪ ﺟﯿﺪا وﺳﻨﺮي ﻓﯿﻤﺎ ﺑﻌﺪ.
47
Teacher Table :
Create Table Teacher
(
TeacherId int Not Null ,
Name varchar(50) Not Null ,
Gender Char(1) Not Null Check ( Gender In('M','m','F','f') ) Default 'M' ,
Salary Numeric(6,2) ,
Rank varchar(30) ,
HireDate DateTime ,
City varchar(30) ,
DeptWork int Constraint Work_FK References Department(DeptNo) ,
Constraint Teacher_TeacherId_PK Primary Key (TeacherId) ,
Constraint Teacher_Name_UK Unique (Name)
)
ﻗﺪﯾﻦ ﺗﻢ اﻟﻔﺼﻞ ﻣﺎ ﺑﯿﻨﮭﻢ ﺑﻤﺴﺎﻓﺔ أو أﻛﺜﺮ وﺗﻢ وﺿﻊ ﻗﯿﻤﺔ اﻓﺘﺮاﺿﯿﺔ أﯾﻀﺎGender ﻻﺣﻆ أﻧﻨﺎ ﻗﺪ وﺿﻌﻨﺎ ﻋﻠﻲ ﺣﻘﻞ
CollegeDegree Table:
Create Table CollegeDegree
(
TeacherId int Not Null ,
CollegeDegree varchar(30) Not Null ,
Constraint CollegeDegree_FK Foreign Key (TeacherId)
References Teacher(TeacherId) ,
Constraint CollegeDegree_PK Primary Key(TeacherId , CollegeDegree)
)
ﻻﺣﻆ ھﻨﺎ أن ﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ﻣﺤﺘﻮي ﻋﻠﻲ ﺟﺪوﻟﯿﻦ ﻟﺬﻟﻚ ﯾﻮﺿﻊ اﻟﻘﯿﺪ ﺑﺎﻷﻣﺮ ﻋﻠﻲ ﻣﺴﺘﻮي اﻟﺠﺪول
Student Table :
Create Table Student
(
StudNo int Constraint Student_StudNo_NN Not Null
Constraint Student_StudNo_PK Primary Key ,
FName varchar(25) Constraint Student_FName_NN Not Null ,
LName varchar(25) Constraint Student_LName_NN Not Null ,
BDate DateTime ,
Address varchar(100) ,
Gender Char(1) Not Null Default 'M' ,
Phone Char(12) ,
Constraint Student_Gender_CK Check ( Gender In('M','m','F','f') )
)
48
Subject Table :
Create Table Subject
(
SubCode int Not Null ,
DeptBelong int Not Null Constraint DeptBelongSub_FK
References Department(DeptNo) ,
TeacherTaught int Constraint Taught_FK References Teacher(TeacherId) ,
Title varchar(20) Not Null ,
Constraint Subject_PK Primary Key(SubCode , DeptBelong)
)
Study Table :
Create Table Study
(
StudNo int Not Null ,
SubCode int Not Null ,
DeptNo int Not Null ,
Score Numeric(5,2) ,
Constraint Student_Study_FK Foreign Key (StudNo)
References Student(StudNo) ,
Constraint Subject_Study_FK Foreign Key (SubCode , DeptNo)
References Subject ( SubCode ,DeptBelong) ,
Constraint Study_PK Primary Key (StudNo , SubCode , DeptNo )
)
وﻻﺣ ﻆ ﺗﺤﺪﯾ ﺪ اﻟﺤﻘﻠ ﯿﻦ اﻟﻤﻮﺟ ﻮدﯾﻦ ﻓ ﻲ اﻟﺠ ﺪولSubject_Study_FK ﻻﺣ ﻆ ﻓ ﻲ ھ ﺬا اﻟﺠ ﺪول ﺟﯿ ﺪا اﻟﻌﻼﻗ ﺔ
اﻟﺤﺎﻟﻲ ﻛﻤﻔﺘﺎح ﺧﺎرﺟﻲ ووﺿ ﻊ اﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﻟﮭ ﻢ ﺑﺄﺳ ﻤﺎﺋﮫ ﻓ ﻲ اﻟﺠ ﺪول اﻵﺧ ﺮ وﺑ ﻨﻔﺲ ﺗﺮﺗﯿ ﺐ اﻟﻨﻮﻋﯿ ﺔ ﻟﻠﺤﻘ ﻮل
وﻻﺣﻆ أﯾﻀﺎ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ﻟﮭﺬا اﻟﺠﺪول ﻓﮭﻮ ﻣﻔﺘﺎح ﯾﻀﻢ ﺛﻼث ﺣﻘﻮل ﻛﻤﻔﺘﺎح رﺋﯿﺴﻲ
ﺑﯿﻦ اﻟﻤﺪرس واﻟﻘﺴﻢ وﻟﻜﻦ ﻣ ﺎ اﻟﺤ ﻞManager وﻟﻜﻦ ﻟﻦ ﻧﻨﺴﻲ أﻧﻨﺎ ﻟﻢ ﯾﻜﻦ ﺑﺎﺳﺘﻄﺎﻋﺘﻨﺎ اﻟﻘﯿﺎم ﺑﻌﻤﻞ ﻋﻼﻗﺔ اﻹدارة
: ﻓﻲ ھﺬه اﻟﻤﺸﻜﻠﺔ اﻟﺤﻞ ھﻮ اﻵﺗﻲ
49
ﻻﺣﻆ ﻣﻌﻲ إﺿﺎﻓﺔ اﻟﻘﯿﻤﺔ اﻻﻓﺘﺮاﺿﯿﺔ ﻛﻘﯿﺪ وﺗﻢ ﺗﺴﻤﯿﺘﮭﺎ وﯾﻤﻜﻦ إﺿﺎﻓﺔ اﻟﻘﯿﻮد أﻵﺧﺮي
ﻻﺣﻆ أﻧﮫ ھﺬا اﻟﻜﻮد ﻻ ﯾﻨﻔﺬ ﺑﺎﻟﻄﺒﻊ إﻻ ﺑﻌﺪ ﺣﺬف اﻟﻘﯿﺪ أوﻻ ﻛﻤﺎ ﺳﻨﺮي ﻻﺣﻘﺎ
وﻻﺣﻆ أﯾﻀﺎ أن اﻷﻣﺮ Alterواﻷﻣﺮ Dropﻟﻠﺤﻘﻮل ﯾﺤﺘﺎﺟﻮا إﻟﻲ اﻟﻜﻠﻤﺔ Columnو Addﻻ ﺗﺤﺘﺎﺟﮭﺎ
ﻻﺣ ﻆ اﻟﻜﻠﻤ ﺔ NoCheckاﻟﺘ ﻲ ﺗﺒﻄ ﻞ ﻣﻔﻌ ﻮل اﻟﻘﯿ ﺪ وﻟﻜﻨﮭ ﺎ ﻻ ﺗﻤ ﺴﺤﮫ ﻓﯿﻤﻜﻨ ﻚ اﻵن إدﺧ ﺎل رﻗ ﻢ ﻣ ﺪﯾﺮ ﻣﻜ ﺮر
ﻓﺴﻮف ﺗﻘﺒﻞ اﻟﻘﺎﻋﺪة ذﻟﻚ وﻻﺣﻆ أﯾﻀﺎ أﻧﻨﺎ ﻧﺤﺘﺎج ﻟﻠﻜﻠﻤﺔ Constraintﺑﻌﺪ NoCheckوﺑﻌﺪھﺎ أﺳﻢ اﻟﻘﯿﺪ اﻟﺬي
ﻻﺑﺪ أن ﻧﺬﻛﺮه ﻟﺬﻟﻚ ﺗﻢ اﻟﺘﺄﻛﯿﺪ ﻋﻠﯿﻚ ﺑﺎﻻﻟﺘﺰام ﺑﺘﺴﻤﯿﺔ اﻟﻘﯿﺪ
Alter Table Department Check Constraint Manager_UK
ھﺬا اﻷﻣﺮ اﻟﺬي ﯾﻌﯿﺪ ﺗﺸﻐﯿﻞ اﻟﻘﯿ ﺪ ﻻﺣ ﻆ أﻧ ﮫ ﻗ ﺪ ﻻ ﯾﻨﻔ ﺬ ﻓ ﻲ ﺣﺎﻟ ﺔ إدﺧ ﺎل ﺑﯿﺎﻧ ﺎت ﻣﻜ ﺮرة ارﺟ ﻊ وأﻣ ﺴﺢ ﺗﻠ ﻚ اﻟﺒﯿﺎﻧ ﺎت
اﻟﻤﻜﺮرة ﺛﻢ ﻧﻔﺬ اﻟﻜﻮد ﺳﻮف ﯾﻨﻔﺬ أرﺟﻊ وﺣﺎول إدﺧﺎل ﺑﯿﺎﻧﺎت ﻣﻜﺮرة ﻣﺮة أﺧﺮي ﺳﻮف ﺗﺮﻓﺾ اﻟﻘﺎﻋﺪة ذﻟﻚ
50
ھﺬا ھﻮ اﻷﻣﺮ اﻟﺬي ﯾﺤﺬف اﻟﻘﯿﺪ وﺑﺎﻟﻄﺒﻊ ﻻﺑﺪ ﻣﻦ ﺗﺬﻛﺮ أﺳﻤﮫ وﻻﺣﻆ أﻧﻨﺎ ﻧﺤﺘﺎج ﻟﻠﻜﻠﻤﺔ Constraint
Modifying Constraint -٤ﺗﻌﺪﯾﻞ ﻗﯿﺪ
أوﻻ ﻣﺎذا ﻧﺮﯾﺪ ﻣﻦ ﺗﻌﺪﯾﻞ ﻗﯿﺪ ﻧﺮﯾﺪ أن ﯾﻜﻮن ﻧﻔ ﺲ اﻻﺳ ﻢ اﻟﻘ ﺪﯾﻢ وﻟﻜ ﻦ ﺑﻨ ﻮع ﺑﻘﯿ ﺪ ﻏﯿ ﺮ اﻟ ﺬي ﻛ ﺎن ﻣﻮﺟ ﻮدا أو
ﺗﻐﯿﺮ اﻟﻘﯿﺪ اﻟﻤﻮﺟﻮد أﺳﺎﺳﺎ وﻟﻜﻦ ھﺬا ﻏﯿﺮ ﻣﻮﺟ ﻮد ﻷﻧ ﻚ ﺗﺮﯾ ﺪ ﻣ ﻦ ھ ﺬه اﻟﻌﻤﻠﯿ ﺔ ﻓﻘ ﻂ اﻻﺣﺘﻔ ﺎظ ﺑﺎﻻﺳ ﻢ ﻋﻠ ﻲ أﯾ ﮫ ﺣ ﺎل
ﻓﺎﻟﺤﻞ ﻓﻲ ھﺬه اﻟﻤﺸﻜﻠﺔ ھﻮ اﻻﻟﺘﺠﺎء ﻟﻌﻤﻞ ﺣﺬف ﻟﻠﻘﯿﺪ اﻟﻘﺪﯾﻢ وﺑﻌﺪ ذﻟﻚ ﺑﻨﺎء ﻗﯿﺪ ﺟﺪﯾﺪ ﯾﺤﻤﻞ ﻧﻔﺲ اﻻﺳ ﻢ وﺑﮭ ﺬا ﻧﻜ ﻮن
ﻗﺪ وﺻﻠﻨﺎ ﻟﮭﺪﻓﻨﺎ
وﻟﯿﻜﻦ أﻧﻨﺎ اﺣﺘﺎﺟﻨﺎ ﻟﻘﯿﺪ ﻟﻤﺴﺢ ﻛﻞ اﻟﻤﺪرﺳﯿﻦ اﻟﻤﻮﺟﻮدﯾﻦ ﺑﺎﻟﻘﺴﻢ إذا ﺣﺬف اﻟﻘﺴﻢ ﻓﺴﻮف ﻧ ﺼﻤﻢ ﻗﯿ ﺪ ﺑﺎﻟﻄﺮﯾﻘ ﺔ اﻟﺘﺎﻟﯿ ﺔ
ﺣﺘﻰ ﯾﺘﻢ إﺿﺎﻓﺘﮫ ﻛﺘﻌﺪﯾﻞ ﻋﻠﻲ ﺟﺪول Teacherﻛﺎﻟﺘﺎﻟﻲ
Alter Table Teacher
)Add Constraint WorkTest_FK Foreign Key(DeptWork
References Department (DeptNo) On Delete Cascade
ﻻﺣ ﻆ أﻧ ﮫ ﻋﺒ ﺎرة ﻋ ﻦ ﻗﯿ ﺪ ﻣﻔﺘ ﺎح ﺧ ﺎرﺟﻲ ﻋ ﺎدي ﺟ ﺪا وﻟﻜﻨ ﮫ ﻣ ﻀﺎف إﻟﯿ ﮫ اﻟﻌﺒ ﺎرة On Delete Cascade
اﻟﻤﺸﺮوﺣﺔ ﺳﺎﺑﻘﺎ ﻓﻤﺎذا ﻧﻔﻌﻞ إذا رﺋﯿﻨﺎ أن ھﺬا ﺧﻄﺮ ﺟﺪا وﻧﺮﯾﺪ ﻋﺪم ﺣﺬف ﻛﻞ ﺳﺠﻼت اﻟﻤﺪرﺳﯿﻦ إذا ﺗ ﻢ ﺣ ﺬف اﻟﻘ ﺴﻢ
اﻟﺬي ﯾﻌﻤﻠﻮن ﺑﮫ وﻓﻲ ﻧﻔ ﺲ اﻟﻮﻗ ﺖ اﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ ﻧﺮﯾ ﺪه أن ﯾﻌﻤ ﻞ ﺑﻄﺮﯾﻘﺘ ﮫ اﻻﻋﺘﯿﺎدﯾ ﺔ وﻻ ﯾﻮﺟ ﺪ أﻣ ﺮ ﺗﻌ ﺪﯾﻞ ﻗﯿ ﺪ
وﻧﺮﯾﺪ اﻟﺤﻔﺎظ ﻋﻠﻲ ﻧﻔﺲ أﺳﻢ اﻟﻘﯿﺪ ﻓﻤﺎذا ﻧﻔﻌﻞ ؟ ﻻﺑﺪ ﻣﻦ ﺣﺬف اﻟﻘﯿﺪ أوﻻ ﻛﺎﻟﺘﺎﻟﻲ
Alter Table Teacher Drop Constraint WorkTest_FK
وﺑﻌﺪ ذﻟﻚ ﯾﻤﻜﻨﻨﺎ اﻵن إﺿﺎﻓﺔ اﻟﻘﯿﺪ وﺗﻮﻗﯿﻒ ﻋﻤﻠﯿﮫ ﻣﺴﺢ اﻟﺴﺠﻼت اﻟﻤﺮﺗﺒﻄﺔ ﻛﻤﺎ ﯾﻠﻲ
Alter Table Teacher
)Add Constraint WorkTest_FK Foreign Key(DeptWork
References Department (DeptNo) On Delete No Action
51
ﻧﻜﺘﺐ ﻛﻠﻤﺔ Execاﺧﺘﺼﺎرا ﻟﻜﻠﻤﺔ Executeﺛﻢ ﻧﻨﺎدي ﻋﻠﻲ اﻹﺟﺮاء sp_renameﯾﺴﺘﻘﺒﻞ أوﻻ اﻻﺳ ﻢ اﻟﻘ ﺪﯾﻢ
وﻓﺎﺻﻠﺔ ﺛﻢ اﻻﺳﻢ اﻟﺠﺪﯾﺪ وﺳﯿﺘﻢ ﻋﻤﻞ Renameﻟﻠﺠﺪول ﻛﻤﺎ ﯾﺘﻀﺢ ﻣﻦ اﻟﺼﻮرة
§ اﻟﻮﺻﻮل ﻟﺠﻤﯿﻊ اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﺑﺎﻟﻘﺎﻋﺪة ﻧﺴﺘﺨﺪم اﻹﺟﺮاء sp_tables
ﻟﻠﻮﺻﻮل إﻟﻲ اﻟﻘﯿﻮد اﻟﻤﻮﺟﻮدة ﺑﺠﺪول ﻧﺴﺘﺨﺪم اﻷﻣﺮ اﻟﺘﺎﻟﻲ ﻟﻺﺟﺮاء sp_helpconstraint §
52
] ) ]… ,أﺳﻢ اﻟﺤﻘﻞ اﻟﺜﺎﻟﺚ ,اﺳﻢ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ [ ,أﺳﻢ اﻟﺤﻘﻞ اﻷول ( [ أﺳﻢ اﻟﺠﺪول Insert Into
) ] … ,اﻟﻘﯿﻤﺔ اﻟﺜﺎﻟﺜﺔ ,اﻟﻘﯿﻤﺔ اﻟﺜﺎﻧﯿﺔ [ ,اﻟﻘﯿﻤﺔ اﻷوﻟﻲ ( Values
54
ﻣﻦ ﺧﻼل اﻟﺸﻜﻞ اﻟ ﺴﺎﺑﻖ ﻧﺤ ﺪد اﻟﺠﻤﻠ ﺔ ﺛ ﻢ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ F5ﺳ ﻮف ﺗﻈﮭ ﺮ اﻟﺮﺳ ﺎﻟﺔ 1 row affectedأي ﺻ ﻒ
ﺑﯿﺎﻧﺎت ﻗﺪ ﺗﺄﺛﺮ ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ
ﻣﻦ ﺧﻼل اﻟﺸﻜﻞ اﻟ ﺴﺎﺑﻖ ﻧﺤ ﺪد اﻟﺠﻤﻠ ﺔ ﺛ ﻢ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ F5ﺳ ﻮف ﺗﻈﮭ ﺮ اﻟﺮﺳ ﺎﻟﺔ 1 row affectedأي ﺻ ﻒ
ﺑﯿﺎﻧﺎت ﻗﺪ ﺗﺄﺛﺮ ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ
وﻟﻜﻦ ھﻨﺎك ﺑﻌﺾ اﻹدﺧﺎﻻت اﻟﻐﺮﯾﺒﺔ ﻣﺜﻞ ﻛﻠﻤﺔ nullوﻻﺑﺪ أن أﻟﺘ ﺰم ﺑﮭ ﺬه اﻟﻜﻠﻤ ﺔ ﻋﻨ ﺪﻣﺎ ﻧﺮﯾ ﺪ ﻋ ﺪم إدﺧ ﺎل ﻗﯿﻤ ﺔ ﻓ ﻲ
ھﺬه اﻟﻄﺮﯾﻘﺔ أﻣ ﺎ )( GetDateﻓ ﻲ ﻋﺒ ﺎرة ﻋ ﻦ داﻟ ﺔ ﺗﻌﯿ ﺪ اﻟﺘ ﺎرﯾﺦ واﻟﻮﻗ ﺖ اﻟﺤ ﺎﻟﻲ ﻟﻠﺤﺎﺳ ﺐ وﻣ ﻦ ﺧﻼﻟﮭ ﺎ ﻣﻤﻜ ﻦ
إدﺧﺎل اﻟﺘﺎرﯾﺦ واﻟﻐﺮض ﻣﻦ ﻋﺮﺿﮭﺎ ھﻨﺎ ھﻮ ﻓﮭﻤﻚ ﻷﻧﮫ ﯾﻤﻜﻦ اﺳ ﺘﺨﺪام دوال ﻓ ﻲ ﺟﻤﻠ ﺔ اﻹﺿ ﺎﻓﺔ وﻟﻜ ﻦ أﺻ ﺒﺢ ﻋﻤ ﺮ
اﻟﻄﺎﻟﺐ اﻵن وﻻ ﯾﻮم ﻷﻧﮫ ﻣﻮﻟﻮد ﻓﻲ اﻟﯿﻮم وھﺬا ﺧﻄﺄ إﻧﻨﺎ ﻧﺮﯾﺪ ﺗﻌﺪﯾﻞ ھﺬه اﻟﻘﯿﻤﺔ ﻓﻤﺎذا ﻧﻔﻌﻞ ؟؟
55
اﻟﺘﺤﺪﯾﺚ ﻋﻠﻲ ﻛﻞ اﻟﺼﻔﻮف اﻟﺘﻲ ﯾﻨﻄﺒﻖ ﻋﻠﯿﮭﺎ اﻟﺸﺮط وھﻨ ﺎك اﻟﻜﺜﯿ ﺮ ﻓ ﻲ اﻟﺤ ﺪﯾﺚ ﻋ ﻦ اﻟﺠ ﺰء Where Clause
اﻟﺬي ﺳﻮف ﻧﺘﺤﺪث ﻋﻨﮫ ﻓﻲ ﺟﺰء اﻻﺳﺘﻌﻼﻣﺎت ﺑﺎﻟﺘﻔﺼﯿﻞ
واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ ﻛﯿﻔﯿﺔ اﻟﻮﺻﻮل إﻟﻲ ﻗﯿﻤﺔ ﻣﺎ ﻓﻲ ﺻﻒ ﺑﯿﺎﻧﺎت ﻣﻌﯿﻦ ﻣﻦ ﺟﺪول ﻣﺎ ﺣﺘﻰ ﯾﺘﻢ ﺗﻌﺪﯾﻠﮭﺎ
وﯾﻄﻠﻖ ﻋﻠﻲ )=( ھﻨﺎ ﻣﻌﺎﻣﻞ اﻟﺘﺨﺼﯿﺺ ﺣﯿﺚ أﻧﮫ ﺧﺼﺺ ﻟﻠﺤﻘﻞ
DeptWorkاﻟﻘﯿﻤﺔ ١
ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﺑﺎﺳﺘﺨﺪام اﻟﺠﺰء Whereوﺑﺪون أﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ
ﻣﻦ ﺧﻼل ھﺬا اﻟﺸﻜﻞ ﻧﺤﺪد اﻟﺠﻤﻠﺔ ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻲ F5
ﺳﻮف ﺗﻈﮭﺮ اﻟﺮﺳﺎﻟﺔ 1 row affectedأي ﺻﻒ
ﺑﯿﺎﻧﺎت واﺣﺪ ﻗﺪ ﺗﺄﺛﺮ ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ وھﻮ اﻟﺼﻒ
اﻟﺨﺎص ﺑﺎﻟﻄﺎﻟﺐ رﻗﻢ ١٢١٢اﻟﻤﺴﻤﻲ ﻣﺤﻤﺪ ﻛﻤﺎ ذﻛﺮ ﻣﻦ
ﻗﺒﻞ
وھﻨﺎ اﻟﻤﻌﺎﻣﻞ = ﻓﻲ ﺟﻤﻠﺔ Whereﻻ ﯾﺨﺼﺺ أو ﯾﻀﻊ اﻟﻘﯿﻤﺔ
١٢١٢داﺧﻞ اﻟﺤﻘﻞ StudNoﻟﺬﻟﻚ ﯾﻄﻠﻖ ﻋﻠﯿﮫ ﻣﻌﺎﻣﻞ ﻣﻘﺎرﻧﺔ
وﯾﺨﺘﻠﻒ ھﺬا اﻟﻤﻌﺎﻣﻞ ﻋﻦ اﻟﺬي ﻓﻮﻗﺔ اﻟﺬي ﯾﺨﺼﺺ ﻗﯿﻤﺔ اﻟﺘﺎرﯾﺦ
ﻟﻠﺤﻘﻞ BDateوھﺬا ﻓﺮق ﺑﯿﻦ اﻟﻤﻌﺎﻣﻠﯿﻦ ﻣﻊ أﻧﮭﻢ ﻧﻔﺲ اﻟﺸﻜﻞ
56
ﻓ ﻲ ھ ﺬا اﻟﻤﺜ ﺎل ﯾﻌ ﺪل اﻟﻤﺮﺗ ﺐ ﺑﺈﺿ ﺎﻓﺔ %١٠وﯾﻌ ﺪل اﻟﻤﺪﯾﻨ ﺔ ﻟﺘﻜ ﻮن اﻟﺠﯿ ﺰة وھ ﺬا ﻟﻜ ﻞ اﻟ ﺼﻔﻮف ﻋﻨ ﺪﻣﺎ ﯾﻜ ﻮن ﺣﻘ ﻞ
اﻟﺮﺗﺒﺔ اﻟﺠﺎﻣﻌﯿﺔ Mrأي أﺳﺘﺎذ ﺗﻼﺣﻆ أن ھﻨﺎك ﺛﻼث ﺻﻔﻮف ﻓﻘﻂ ﻣﻦ اﻟﺠﺪول اﻟﺬي ﺗﻢ ﻋﻠﯿﮭﻢ اﻟﺘﺄﺛﯿﺮ وھﻢ ﻣ ﻦ ﯾﻜ ﻮن
اﻟﺮﺗﺒﺔ اﻟﺠﺎﻣﻌﯿﺔ ﻟﮭﻢ Mr
57
58
ﺗﻢ ﺗﺤﺪﯾﺪ ﻧﻘﻄﺔ ﺗﺴﻤﻲ Point_1وﺑﻌ ﺪھﺎ ﺗ ﻢ إﻧ ﺸﺎء ﺟ ﺪول ﺟﺪﯾ ﺪ ﯾ ﺴﻤﻲ Testوﺑﻌ ﺪھﺎ أﻣ ﺮ ﻃﺒﺎﻋ ﺔ ﻟﯿﻄﺒ ﻊ اﻟﺠﻤﻠ ﺔ
اﻟﺠﺪول ﻗﺪ ﺻﻨﻊ اﻵن ﻟﺘﻜﻮن اﻟﺮﺳﺎﻟﺔ اﻟﻨﺎﺗﺠﺔ
Save Tran Point_2
Drop Table Test
'Print 'Table Dropped
ﺗﻢ ﺗﺤﺪﯾﺪ ﻧﻘﻄﺔ ﺟﺪﯾﺪة ﺗﺴﻤﻲ Point_2وﺑﻌﺪھﺎ أﻣﺮ ﻟﺤﺬف اﻟﺠﺪول وﺑﻌ ﺪھﺎ رﺳ ﺎﻟﺔ اﻟﺠ ﺪول ﺣ ﺬف وﺑﺎﻟﻔﻌ ﻞ اﻟﻘﺎﻋ ﺪة
اﻻن ﻻﺗﺤﺘﻮي ﻋﻠﻲ اﻟﺠﺪول Test
RollBack Tran Point_2
'Print 'Table Test Existing
ﺗﻢ اﻟﺘﺮاﺟﻊ ﺣﺘﻰ اﻟﻨﻘﻄﺔ Point_2أي أﻧﮫ ﺗﻢ اﻟﺘﺮاﺟﻊ ﻋﻦ أﻣﺮ ﺣﺬف اﻟﺠﺪول أي أن اﻟﺠﺪول ﻣﻮﺟﻮد اﻵن وھﺬه ھﻲ
اﻟﺮﺳﺎﻟﺔ اﻟﺘﻲ ﺳﻮف ﯾﻄﺒﻌﮭﺎ ﯾﻤﻜﻨﻚ اﻵن ﺣﻔﻆ ھﺬه اﻟﻌﻤﻠﯿﺎت ﻣﻦ ﺧﻼل اﻷﻣﺮ
Commit Tran
وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻻ ﯾﻤﻜﻨﻨﺎ اﻟﺘﺮاﺟﻊ ﻋﻦ أي ﺷﺊ ﻻن اﻟﺠﻠﺴﺔ اﻧﺘﮭﺖ ﺑﮭﺬا اﻷﻣﺮ وﻋﻨﺪ إﺻ ﺪار أي أﻣ ﺮ ﺗﺮاﺟ ﻊ ﻓ ﺴﻮف
ﺗﻈﮭﺮ رﺳﺎﻟﺔ ﺗﻔﯿﺪ ﺑﺄﻧﮫ ﻻ ﯾﻮﺟﺪ ﺟﻠﺴﺔ ﺣﺘﻰ ﯾﺘﻢ اﻟﺘﺮاﺟ ﻊ ﻋ ﻦ اﻟﻨﻘ ﺎط اﻟﺪاﺧﻠﯿ ﺔ ﺑﮭ ﺎ أو ﺣﺘ ﻰ ﻟ ﻮ ﻛ ﺎن أﻣ ﺮ اﻟﺘﺮاﺟ ﻊ ھ ﻮ
RollBack Workوﺗﻜﻮن اﻟﺮﺳﺎﻟﺔ ﻛﺎﻟﺘﺎﻟﻲ
Server: Msg 3903, Level 16, State 1, Line 1
The ROLLBACK TRANSACTION request has no corresponding BEGIN
TRANSACTION.
أوﻻ :ﻛﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻷﺳﺎﺳﯿﺔ ﻻﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت Writing Basic Select Statement
] ], ….أﺳﻢ ﻣﺴﺘﻌﺎر ﻟﻠﺤﻘﻞ اﻟﺜﺎﻧﻲ [ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ ] [,أﺳﻢ ﻣﺴﺘﻌﺎر ﻟﻠﺤﻘﻞ اﻷول [ اﻟﺤﻘﻞ اﻷول | * Select
From أﺳﻢ اﻟﺠﺪول اﻟﺬي ﺳﯿﺘﻢ اﺳﺘﺮﺟﺎع اﻟﺤﻘﻮل ﻣﻨﮫ
60
Grid Pane
وﻟﻔﺘﺢ ﻃﺮﯾﻘﺔ اﻟﺸﺒﻜﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﺠﺪول اﻟﻤﻄﻠﻮب اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ ﺑﯿﺎﻧﺎﺗ ﮫ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
وﻧﺨﺘﺎر Open Tableوﻣﻨﮭﺎ ﻧﺨﺘﺎر Queryإي اﻻﺳﺘﻌﻼﻣﺎت ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ وﺑﻌﺪھﺎ ﻟﻨﺎ اﻟﻘﺪرة ﻋﻠ ﻲ إﺻ ﺪار
أي أواﻣﺮ اﺳﺘﺮﺟﺎع ﺑﯿﺎﻧﺎت :
61
ﻧﻔﺼﻞ ﺑﯿﻦ ﻛﻞ ﺣﻘﻠﯿﻦ ﺑﻔﺎﺻﻠﺔ وﻓﻲ اﻟﺸﺒﻜﺔ ﻣﻦ اﻟﺤﻘﻞ Columnﻓﻲ اﻟﺼﻒ اﻷول ﻧﺨﺘﺎر اﻟﺤﻘﻞ اﻟﻤﺮاد ﺛﻢ ﻓﻲ
اﻟﺼﻒ اﻟﺬي ﯾﻠﯿﮫ ﻧﺨﺘﺎر اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ وھﻜﺬا
ﻣﺜﺎل
Query Analyzer Grid Pane
Select Name , Salary ,
Salary+100 ,
)12*(Salary+100
From Teacher
Result
ﻓﻲ Grid Paneﻧﻀﻐﻂ ﻋﻠ ﻲ اﻟﺠ ﺪول اﻟﻤﻮﺟ ﻮد ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر Removeﻟﺤﺬﻓ ﮫ ﺛ ﻢ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
وﻧﺨﺘﺎر Add Tableﻹﺿﺎﻓﺔ ﺟﺪول ﺛﻢ ﻧﺨﺘﺎر ﺟﺪول Teacherﺛﻢ ﻧﻀﻐﻂ Addوﻧﻀﺒﻂ اﻹﻋﺪادات ﻛﺎﻟﺴﺎﺑﻖ
62
)ﻗﯿﻤﺔ ﺗﻌﺮض ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﺤﻘﻞ ﻓﺎرغ ,أﺳﻢ اﻟﺤﻘﻞ ﯾﻌﺮض ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻏﯿﺮ ﻓﺎرغ(IsNull
ﺗﻘﯿﻢ ھﺬه اﻟﺪاﻟﺔ اﻟﻤﻌﺎﻣﻞ اﻷول وھﻮ اﻟﺤﻘﻞ وأن ﻛﺎن ﺑﮫ ﺑﯿﺎﻧ ﺎت ﯾﻌ ﺮض أﻣ ﺎ أن ﻛ ﺎن ﻓﺎرﻏ ﺎ ﺗﺄﺧ ﺬ ﻗﯿﻤ ﺔ اﻟﻤﻌﺎﻣ ﻞ اﻟﺜ ﺎﻧﻲ
ﺣﺘﻰ وﻟﻮ ﻛﺎن ﺣﻘﻼ
ﻣﺜﺎل
Query Analyzer Grid Pane
Select FName ,Phone ,
)'IsNull(Phone,'No Phone Yet
from Student
Result
ﻓﻲ Grid Paneﻧﻀﻐﻂ ﻋﻠﻲ اﻟﺠﺪول اﻟﻤﻮﺟﻮد ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﻧﺨﺘﺎر Removeﻟﺤﺬﻓ ﮫ ﺛ ﻢ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
وﻧﺨﺘﺎر Add Tableﻹﺿﺎﻓﺔ ﺟﺪول ﺛﻢ ﻧﺨﺘﺎر ﺟﺪول Studentﺛﻢ ﻧﻀﻐﻂ Addوﻧﻀﺒﻂ اﻹﻋﺪادات ﻛﺎﻟﺴﺎﺑﻖ
ﻓﻲ Grid Paneﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ ﻧﺤﺬف اﻟﺠ ﺪول وﻧﺨﺘ ﺎر ﺟ ﺪول Teacherوﻓ ﻲ اﻟﺨﺎﻧ ﺔ Aliasﻧﻜﺘ ﺐ أﻣ ﺎم ﻛ ﻞ
ﺣﻘﻞ اﻟﻌﻨﻮان اﻟﻤﺴﺘﻌﺎر ﻣﺒﺎﺷﺮة ﺣﺘﻰ وﻟﻮ ﻛﺎن ﺑﮫ ﻣﺴﺎﻓﺔ وھﻮ ﯾﻀﻊ أﻗﻮاس ﺗﻠﻘﺎﺋﯿﺎ ﻓﻲ اﻷﺳﻤﺎء اﻟﺘﻲ ﺑﮭﺎ ﻣﺴﺎﻓﺎت
63
ﻓ ﻲ Grid Paneﺑ ﻨﻔﺲ اﻟﻄﺮﯾﻘ ﺔ ﻧﺤ ﺬف اﻟﺠ ﺪول وﻧﺨﺘ ﺎر ﺟ ﺪول Teacherوﻓ ﻲ اﻟﺨﺎﻧ ﺔ Aliasﻧﻜﺘ ﺐ
أﻣ ﺎم ﻛ ﻞ ﺣﻘ ﻞ اﻟﻌﻨ ﻮان اﻟﻤ ﺴﺘﻌﺎر ﻣﺒﺎﺷ ﺮة وﻧﻼﺣ ﻆ اﻟﻤ ﺴﺎﻓﺔ ﺑﻌ ﺪ ﻛﻠﻤ ﺔ Live Inوان ﻟ ﻢ ﺗﻜ ﻦ ھﻨ ﺎك ﻣ ﺴﺎﻓﺔ
ﺳﻮف ﺗﻠﺼﻖ ﻛﻠﻤﺔ Inوﻣﻌﮭﺎ أﺳﻢ اﻟﻤﺪﯾﻨﺔ
وﻣ ﻦ Grid Paneھ ﻲ اﻟﺠﻤﻠ ﺔ ﻛﻤ ﺎ ھ ﻲ ﺑ ﺪون ﺗﻐﯿ ﺮ وﻟﻜ ﻦ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر Properties
اﻟﺨﺼﺎﺋﺺ وﻣﻨﮭﺎ ﻓﻲ اﻟﺠﺰء Optionsﻧﺨﺘﺎر Distinctﺛﻢ Okﺛﻢ Runﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ
ﻓﺴﻮف ﺗﻜﻮن اﻟﻨﺘﯿﺠﺔ
64
ﻗﺪ ﺗﻢ ﺗﻔﺴﯿﺮ ھﺬا اﻟﺸﻜﻞ ﻣﻦ ﻗﺒﻞ وﻗﺪ ﺗﻢ ﺗﻔﺴﯿﺮ اﻟﺠﺰء اﻟﺠﺪﯾﺪ أﯾﻀﺎ وﻗﺪ ذﻛﺮﻧﺎ أﻧﻨﺎ ﺳ ﻮف ﻧﺘﺤ ﺪث ﻋﻨ ﮫ ﺑﺎﻟﺘﻔ ﺼﯿﻞ وﻗ ﺪ
ﺣﺎن اﻟﻮﻗﺖ
اﺳﺘﺮﺟﺎع ﺻﻔﻮف ﻣﺤﺪدة
اﺳﺘﺮﺟﺎع أﺳﻢ وﻣﺮﺗﺐ وﺑﻠﺪ اﻟﻤﺪرﺳﯿﻦ اﻹﻧﺎث
Query Analyzer Result
Select Name , Salary ,City
From Teacher
'Where Gender = 'F
Grid Pane
ﻻﺣﻆ ﻣﻌﻲ ﻓﻲ Grid Paneأﻧﻨﺎ اﺧﺘﺮﻧﺎ اﻟﺤﻘﻮل اﻟﺘﻲ ﻧﺮﯾﺪ أن ﺗﻈﮭﺮ وﯾﻮﺟﺪ ﻟﺪﯾﻨﺎ ﺣﻘﻞ ﻓﻲ ﺟﻤﻠﺔ SQLﻓﻲ اﻟﺠﺰء
Whereﻟﻢ ﯾﺴﺘﺨﺪم ﻓﻲ اﻷﻋﻠﻰ ﻓﻨﻀﻌﮫ ﻣﻦ ﺿﻤﻦ اﻟﺤﻘﻮل وﻟﻜﻦ ﻋﻨﺪ اﻟﺨﺎﻧﺔ Outputﻧﻠﻐﻲ ﻋﻼﻣﺔ ﺻﺢ ﺣﺘﻰ ﻻ ﯾﺘﻢ
ﻋﺮﺿﮫ وﻷﻧﻨﺎ ﻧﺮﯾﺪ ھﺬا اﻟﺤﻘﻞ أن ﻧﻮﺿﻊ ﻋﻠﯿﮫ ﺷﺮط أن ﯾﻜﻮن ﻣﺴﺎوﯾﺎ ﻟﻠﻘﯿﻤﺔ ' 'Fﻓﻨﺄﺗﻲ ﻓﻲ اﻟﻌﻤﻮد Criteriaأي
اﻟﻤﻌﺎﯾﯿﺮ ﺛﻢ ﻧﻀﻊ ﺷﺮﻃﻨﺎ ھﻨﺎ وھﻮ ﻓﻘﻂ ' ='Fوھﻜﺬا ﺗﻜﻮن اﻟﻨﺘﯿﺠﺔ ﺑﺎﻷﻋﻠﻰ
وﻟﻜﻦ ﻣﺎذا ﻋﻦ = ﻟﻤﺎذا ﻟﻢ ﻧﻀﻊ ﻓﻲ اﻟﺨﺎﻧﺔ Criteriaاﻟﻘﯿﻤﺔ ' 'Fﻓﻘﻂ ؟؟
ھ ﺬا ﻷن ھ ﺬا اﻟﻤﻌﺎﻣ ﻞ)=( ﻟ ﯿﺲ ھ ﻮ اﻟﻤﻌﺎﻣ ﻞ اﻟﻮﺣﯿ ﺪ ھ ﺬا اﻟﻤﻌﺎﻣ ﻞ ﯾﻘ ﺎرن اﻟﻘﯿﻤ ﺔ اﻟﻤﻮﺟ ﻮده ﺑﺎﻟﺤﻘ ﻞ ﺑﺎﻟﻘﯿﻤ ﺔ ' 'Fأن
ﺗﻄﺎﺑﻖ اﻟﺸﺮط ﯾﻌﺮض اﻟﺼﻒ وإن ﻟﻢ ﯾﺘﻄﺎﺑﻖ اﻟﺸﺮط ﻻ ﯾﻌﺮض و اﻵن ﻣﺎ ھﻲ اﻟﻌﻮاﻣﻞ اﻻﺧﺮي.
-١ﻋﻮاﻣﻞ اﻟﻤﻘﺎرﻧﺔ . Comparison Operators
65
ﯾﻘ ﺎرن ﻣ ﺎﺑﯿﻦ ﻗﯿﻤﺘ ﯿﻦ ﻋﻠ ﻲ ﯾﻤﯿﻨ ﮫ وﻋﻠ ﻲ ﯾ ﺴﺎره وﻣﮭﻤﺘ ﮫ أن ﺗﻜ ﻮن اﻟﻘﯿﻤﺘ ﯿﻦ [NOT] LIKE
ﻣﺘ ﺸﺎﺑﮭﺘﯿﻦ أو ﻣﺘﻤ ﺎﺛﻠﺘﯿﻦ و ﻟ ﮫ أﺑﻌ ﺎد ﻛﺒﯿ ﺮة ﻓ ﻲ اﻟﺒﺤ ﺚ وأن وﺿ ﻌﺖ اﻟﻜﻠﻤ ﺔ
Notﺗﻌﻜﺴﮫ ﻟﯿﻜﻮن ﻻ ﯾﺘﺸﺎﺑﮫ ﻣﻊ
ﻣﻌﺎﻣﻞ ﯾﻘﺎرن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ ﯾﺴﺎره ﺑﺎﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠﻲ ﯾﻤﯿﻨﮫ ﻋﻠ ﻲ أﺳ ﺎس أن expr1 [NOT] IN
ﺗﻜﻮن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ ﯾﺴﺎره ﻣﻮﺟﻮدة ﻣﺎ ﺑﯿﻦ أي ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠ ﻲ )(val1, val2, ...| subquery
ﯾﻤﯿﻨﮫ ،اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠﻲ ﯾﻤﯿﻨﮫ ﺗﻜﻮن ﻓﻲ ﺷﻜﻞ ﻗﺎﺋﻤﺔ ﻧﻔ ﺼﻞ ﻣ ﺎﺑﯿﻦ ﻛ ﻞ ﻗﯿﻤﺘ ﺎن
ﻣﻨﮭﻢ ﺑﻔﺎﺻﻠﺔ أو ﯾﻜﻮن ﻗﺪ ﺗﻢ إرﺳﺎﻟﮭﻢ ﻣﻦ ﺧﻼل اﺳﺘﻌﻼم ﺻﻐﯿﺮ ﻓﺮﻋﻲ.
ﺗﻘﺎرن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ ﯾﺴﺎرھﺎ ﺑﻤﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠﻲ ﯾﻤﯿﻨﮭ ﺎ ﺑ ﺸﺮط )ANY (SOME
أن ﺗﻜﻮن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ ﯾﺴﺎرھﺎ )أﺻﻐﺮ أو أﻛﺒﺮ أو أﺻ ﻐﺮ ﻣ ﻦ أو ﺗ ﺴﺎوي
أو أﻛﺒ ﺮ ﻣ ﻦ أو ﺗ ﺴﺎوي أو ﻻ ﺗ ﺴﺎوي ،ﯾﺤ ﺪد ﺑﻤﻌﺎﻣ ﻞ ﺗ ﻀﻌﮫ أﻧ ﺖ( ﻣ ﻦ أي
ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠﻲ ﯾﻤﯿﻨﮭﺎ
ﺗﻘﺎرن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ ﯾﺴﺎرھﺎ ﺑﻤﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠﻲ ﯾﻤﯿﻨﮭ ﺎ ﺑ ﺸﺮط All
أن ﺗﻜﻮن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ ﯾﺴﺎرھﺎ )أﺻﻐﺮ أو أﻛﺒﺮ أو أﺻ ﻐﺮ ﻣ ﻦ أو ﺗ ﺴﺎوي
أو أﻛﺒ ﺮ ﻣ ﻦ أو ﺗ ﺴﺎوي أو ﻻ ﺗ ﺴﺎوي ،ﯾﺤ ﺪد ﺑﻤﻌﺎﻣ ﻞ ﺗ ﻀﻌﮫ أﻧ ﺖ( ﻣ ﻦ ﻛ ﻞ
ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠﻲ ﯾﻤﯿﻨﮭﺎ
ﺗﻌﻤﻞ ﻣﻊ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ ﻓﮭﻲ ﺗﻘﺎرن ﺑﯿﺎﻧ ﺎت اﻻﺳ ﺘﻌﻼم اﻷﺳﺎﺳ ﻲ ﻋﻠ ﻲ [NOT] EXISTS
ﯾ ﺴﺎر اﻟﺠﻤﻠ ﺔ ﺑﺒﯿﺎﻧ ﺎت اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ ﻣﻨ ﮫ ﻋﻠ ﻲ ﯾﻤ ﯿﻦ اﻟﺠﻤﻠ ﺔ وان ﻛ ﺎن
اﻟﺴﺠﻼت ﻣﺘﺸﺎﺑﮭﺎ ﻣﻦ ﺧ ﻼل ﺷ ﺮط ﻣﻜﺘ ﻮب داﺧ ﻞ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ اذا ﯾ ﺘﻢ
اﻟﻌ ﺮض وإن أﺿ ﯿﻔﺖ ﻛﻠﻤ ﺔ Notﯾﺤ ﺪث اﻟﻌﻜ ﺲ ﺗﻤﺎﻣ ﺎ ﻓ ﺈن ﻛﺎﻧ ﺖ اﻟ ﺴﺠﻼت
ﻏﯿﺮ ﻣﺘﺸﺎﺑﮫ ﻓﮭﻮ ﯾﻌﺮض .
= <> , != , > , < , >= , <= , !< , !> ، أوﻻ :اﻟﻤﻌﺎﻣﻼت
وھﻲ اﻟﻤﻌﺎﻣﻼت ﻣﻦ اﻟﻨﻮع اﻟﺒﺴﯿﻂ ﻣﺜﻞ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ أﺧﺬا اﻟﻤﻌﺎﻣﻞ ﯾﺴﺎوي ﻛﻤ ﺎ ﯾﻤﻜﻨﻨ ﺎ أن ﻧ ﺴﺘﺨﺪم اﻟﻤﻌﺎﻣ ﻞ <> ,
=! ﻻ ﯾ ﺴﺎوي ﺣﺘ ﻰ ﻧﻈﮭ ﺮ اﻟ ﺬﻛﻮر أﻣ ﺎ أﻛﺒ ﺮ ﻣ ﻦ وأﺻ ﻐﺮ ﻣ ﻦ وأﻛﺒ ﺮ ﻣ ﻦ أو ﯾ ﺴﺎوي وأﺻ ﻐﺮ ﻣ ﻦ أو ﯾ ﺴﺎوي ﺳ ﻮف
ﯾﻘﻮﻣﻮن ﺑﺎﻟﻌﻤﻞ ﻋﻠﻲ ﻧﻔﺲ اﻟﻮﺗﯿﺮة واﻟﯿﻚ ﻣﺜﺎل أﺧﺮ
اﺳﺘﺮﺟﺎع اﻟﺮﺗﺒﺔ اﻟﺠﺎﻣﻌﯿﺔ وأﺳﻢ وﻣﺮﺗﺐ وﺑﻠﺪ اﻟﻤﺪرﺳﯿﻦ اﻟﺬﯾﻦ ﻻ ﯾﻘﻄﻨﻮا ﻓﻲ اﻟﺠﯿﺰة
Query Analyzer Result
Select Rank ,Name , Salary
,City
From Teacher
'Where City != 'Giza
Grid Pane
ﻻﺣﻆ ﻣﻌﻲ ﻓﻲ Grid Paneأﻧﻨﺎ اﺧﺘﺮﻧﺎ اﻟﺤﻘﻮل اﻟﺘﻲ ﻧﺮﯾﺪ أن ﺗﻈﮭﺮ وﯾﻮﺟﺪ ﻟﺪﯾﻨﺎ ﺣﻘﻞ ﻓﻲ ﺟﻤﻠﺔ SQLﻓﻲ اﻟﺠﺰء
Whereﻣﺴﺘﺨﺪم ﺑﺎﻟﻔﻌﻞ ﻧﺄﺗﻲ أﻣﺎﻣﮫ ﻓﻲ اﻟﻌﻤﻮد Criteriaأي اﻟﻤﻌﺎﯾﯿﺮ ﺛﻢ ﻧﻀﻊ ﺷﺮﻃﻨﺎ ھﻨﺎ وھﻮ ﻓﻘﻂ ﻻ ﯾﺴﺎوي
اﻟﻜﻠﻤﺔ ' 'Gizaدون أن ﻧﻠﻐﻲ ﻋﻼﻣﺔ ﺻﺢ ﻓﻲ اﻟﺠﺰء OutPutوھﻜﺬا ﺗﻜﻮن اﻟﻨﺘﯿﺠﺔ ﺑﺎﻷﻋﻠﻰ
وھﻜﺬا ﻣﻊ ﺑﺎﻗﻲ ﺗﻠﻚ اﻟﻤﻌﺎﻣﻼت وﻟﻜﻦ ھﻞ ﺳ ﻮف ﺗ ﺴﺘﻤﺮ ھ ﺬه اﻟﻤﻌ ﺎﻣﻼت ﺑ ﺴﯿﻄﺔ ﺑ ﺎﻟﻄﺒﻊ ﻻ ﺑ ﻞ ﯾﻤﻜ ﻦ اﺳ ﺘﺨﺪاﻣﮭﺎ ﻓ ﻲ
أﺟﺰاء أﻛﺜﺮ دﻗﺔ وﻟﻠﻮﺻﻮل ﻟﻤﺜﺎل ﯾﻮﺿﺢ ھﺬا اﻟﻤﻌﻨﻲ ﺗﺘﺒﻊ اﻻﺳﺘﻌﻼم اﻟﺘﺎﻟﻲ :
ﻣﻦ اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬي ﻣﺮﺗﺒﮭﻢ أﻛﺒﺮ ﻣﻦ أو ﯾﺴﺎوي ﻣﺮﺗﺐ اﻟﻤﻌﻠﻢ Nagy Ramadan
ﻟﻮ رﻛﺰت ﻓﻲ ھﺬا اﻻﺳﺘﻌﻼم ﻟﻮﺟﺪت أﻧﻚ ﺑﺼﺪد اﺳﺘﻌﻼﻣﯿﻦ اﻷول ﻣﻨﮭﻢ ﻣﺎ ھﻮ ﻣﺮﺗﺐ اﻟﻤﻌﻠﻢ Nagy Ramadan
واﻻﺳﺘﻌﻼم اﻟﺜﺎﻧﻲ ﻣﻦ ﻣﺮﺗﺒﮫ أﻛﺒﺮ ﻣﻦ أو ﯾﺴﺎوي اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺣﺼﻠﻨﺎ ﻋﻠﯿﮭﺎ ﻣﻦ اﻻﺳﺘﻌﻼم اﻷول ؟؟
وھﺬا ﺑﺎﻟﻔﻌﻞ ھﻮ اﻟﺤﻞ اﻟﺬي ﯾﻄﻠﻖ ﻋﻠﯿﮫ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ Sub Queries
66
اﻟﺘﻲ ﺳﻮف ﻧﺘﻨﺎوﻟﮭﺎ ﺗﻔﺼﯿﻠﯿﺎ ﻓﯿﻤﺎ ﺑﻌﺪ وﻟﻜﻦ اﻵن دﻋﻨﺎ ﻧﺤﻞ ھﺬه اﻻﺳﺘﻌﻼم
٣٥٧٧٫٥٥ ﻧﺘﻮﻗﻊ اﻻﺳﺘﻌﻼم اﻷول ﻓﮭﻮ ﺑﺴﯿﻂ ﻟﻠﻐﺎﯾﺔ ﻣﺮﺗﺐ اﻟﻤﻌﻠﻢ ﻧﺎﺟﻲ رﻣﻀﺎن
Select Salary
From Teacher
'Where Name='Nagy Ramadan
أﺻﺒﺢ اﻻﺳﺘﻌﻼم اﻟﺜﺎﻧﻲ ﺳﮭﻼ اﻵن ﻓﯿﻤﻜﻦ أن ﯾﻜﻮن
Select Name ,Salary
From Teacher
Where Salary > = 3577.55
وﻟﻜﻦ ھﻞ ﯾﻤﻜﻨﻨﺎ أن ﻧﺪﻣﺞ اﻻﺳﺘﻌﻼﻣﯿﻦ ﻟﯿﻜﻮﻧﻮا اﺳﺘﻌﻼﻣﺎ واﺣﺪ ﻧﻌﻢ وھﺬا ﻛﺎﻟﺘﺎﻟﻲ
Query Analyzer Result
Select Name ,Salary
From Teacher
= > Where Salary 3577.55
( Select Salary
From Teacher
) 'Where Name='Nagy Ramadan
Grid Pane
ﻻﺣﻆ ﻣﻌﻲ ﻓﻲ Grid Paneأﻧﻨﺎ اﺧﺘﺮﻧﺎ اﻟﺤﻘﻮل اﻟﺘﻲ ﻧﺮﯾﺪ أن ﺗﻈﮭﺮ وأﻣﺎ اﻟﺤﻘﻞ اﻟﺬي ﺳﻮف ﯾﺨﺘﺒﺮ ﻣﻦ ﺧﻼل
اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻧﻀﻊ اﻟﻤﻌﺎﻣﻞ ﺛﻢ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻛﻤﺎ ھﻮ ﻣﺎ ﺑﯿﻦ أﻗﻮاس وھﺬا أﯾﻀﺎ ﻓﻲ اﻟﺠﺰء Query
Analyzerﺣﯿﺚ أﻧﮫ ﺳﻮف ﯾﺘﻢ ﺗﻨﻔﯿﺬ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ أوﻻ وﯾﺮﺟﻊ اﻟﻘﯿﻤﺔ ﺛﻢ ﯾﺨﺘﺒﺮھﺎ اﻻﺳﺘﻌﻼم اﻷﺳﺎﺳﻲ
وﺑﮭﺬا ﯾﻤﻜﻨﻨﺎ اﻟﺘﺤﺪث ﻋﻦ أﻓﺎق أﺧﺮي ﻟﻼﺳﺘﻌﻼﻣﺎت
ﺛﺎﻧﯿﺎ اﻟﻤﻌﺎﻣﻞ )ﻣﺎﺑﯿﻦ ( … Between … And
ﯾﻘ ﺎرن ﻃ ﺮف ﻋﻠ ﻲ ﯾ ﺴﺎره ﺑ ﺄن ﯾﻜ ﻮن واﻗ ﻊ ﻣ ﺎﺑﯿﻦ اﻟﻘﯿﻤﺘ ﯿﻦ اﻟﻤﻮﺟ ﻮدﺗﯿ ﻦ ﻋﻠ ﻲ ﯾﻤﯿﻨ ﮫ وﻣ ﺎ ﺑﯿﻨﮭﻤ ﺎ اﻟﻜﻠﻤ ﺔ Andأي
ﯾﻘﺎرن اﻟﻘﯿﻤﺔ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾ ﺴﺎره ﺑ ﺄن ﺗﻜ ﻮن ﻣﺤ ﺼﻮرة ﺑ ﯿﻦ ﻗﯿﻤﺘ ﯿﻦ ﻣﻮﺟ ﻮدﯾﻦ ﻋﻠ ﻲ ﯾﻤ ﯿﻦ وﺑﯿ ﻨﮭﻢ ﻛﻠﻤ ﺔ Andوان
وﺿﻌﻨﺎ ﻛﻠﻤﺔ NOTﻗﺒﻞ ﻛﻠﻤﺔ Betweenﺳﻮف ﯾﺄﺗﻲ ﺑﺎﻟﻘﯿﻢ اﻟﺘﻲ ﻟﯿﺴﺖ ﻣﺤﺼﻮرة ﺑﯿﻦ اﻟﻘﯿﻤﺘﯿﻦ واﻟﯿﻚ ﻣﺜﺎل .
ﻣﺜﺎل :اﺳﺘﺮﺟﻊ رﺗﺒﺔ وأﺳﻢ وراﺗﺐ اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬي ﯾﻨﺤﺼﺮ راﺗﺒﮭﻢ ﺑﯿﻦ ٤٠٠٠ , ٣٠٠٠
Query Analyzer Result
Select Rank ,Name , Salary
from Teacher
Where Salary
Between 3000 And 40000
Grid Pane
ﻻﺣﻆ أﻧﻨﺎ ﻟﻮ أﺿﻔﻨﺎ اﻟﻜﻠﻤﺔ NOTاﻟﺘﻲ ﺗﻨﻔﻲ اﻟﺸﺮط ﺳﻮف ﺗﺄﺗﻲ ﺑﻜﻞ اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﯾﻦ ﻻ ﯾﻨﺤﺼﺮ راﺗﺒﮭﻢ ﺑﯿﻦ ٣٠٠٠و
٤٠٠٠أي ﺑﺎﻗﻲ اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﯾﻦ ﻟﻢ ﯾﻈﮭﺮوا ﻓﻲ ھﺬه اﻟﻨﺘﯿﺠﺔ
67
Grid Pane
ﻻﺣﻆ أﻧﻨﺎ ﻟﻮ ﺣﺬﻓﻨﺎ ﻛﻠﻤﺔ Notﺳﻮف ﯾﻌﻮد ﺑﺄﺳﻤﺎء اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬي ﻟﻢ ﯾﺤﺪد ﻟﮫ أﻗﺴﺎم ﺣﺘﻰ اﻵن
Grid Pane
ﻻﺣﻆ أﻧﻨﺎ ﻓﻲ Grid Paneﻛﺘﺒﻨﺎ اﻻﺳﻢ اﻷول ﺛﻢ ﻣﻌﺎﻣﻞ اﻟﺪﻣﺞ ﺛﻢ ﻣﺴﺎﻓﺔ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ﺛﻢ ﻣﻌﺎﻣﻞ اﻟﺪﻣﺞ ﺛﻢ
اﻻﺳﻢ اﻷﺧﯿﺮ وھﺬا ﻟﻌﻤﻞ ﻓﺎرق ﻟﻼﺳﻢ ﺣﺘﻰ ﻻ ﯾﻠﺘﺤﻢ وﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ أن ﻛﻞ اﻷﺳﻤﺎء ﺛﺎﻧﻲ ﺣﺮف ﻓﯿﮭﺎ ﺣﺮف aوأول
ﺣﺮف أي ﺷﻲء وﺑﻌﺪ ذﻟﻚ ﺗﺸﻜﯿﻠﮫ ﺣﺮوف ﻻ ﻧﻌﻠﻤﮭﺎ وأن وﺿﻌﻨﺎ اﻟﻤﻌﺎﻣﻞ NOTﻓﺴﻮف ﺗﺄﺗﻲ اﻟﻨﺘﯿﺠﺔ ﺑﻜﻞ اﻟﻄﻠﺒﺔ
اﻟﺬي ﯾﻜﻮن أﺳﻤﮭﻢ اﻷول ﻻ ﯾﻮﺟﺪ ﺑﺜﺎﻧﻲ ﺣﺮف ﻓﯿﮫ ﺣﺮف a
أن ﻛﻨﺎ ﻧﺒﺤﺚ ﻓﻲ اﺳﺘﻌﻼم ﻋﻦ ﺣﺮف _ أو ﺣﺮف %ﻓﻤ ﺎذا ﻧﻔﻌ ﻞ داﺧ ﻞ ﻋﻼﻣ ﺎت اﻟﺘﻨ ﺼﯿﺺ ﺑﻌ ﺪ Likeﻓ ﻲ اﻟﻤﻮﺿ ﻊ
اﻟﺬي ﻧﺮﯾﺪ اﻟﺒﺤﺚ ﻓﯿﮫ ﻋﻦ ھﺬا اﻟﺤﺮف ﻗﺒﻠﮫ ﻧﻀﻊ ﻋﻼﻣﺔ وﻟﯿﻜﻦ ) \ ( وﺑﻌﺪ ﻋﻼﻣﺘﻲ اﻟﺘﻨ ﺼﯿﺺ ﻧﻜﺘ ﺐ '\' Escape
ﻓﺒﺬﻟﻚ ﺳﯿﺘﻢ اﻟﺒﺤﺚ ﻋﻦ اﻟﻘﯿﻤﺔ اﻟﻤﺮداة ﺿﯿﻒ ﻗﺴﻢ ﺑﮫ ﻋﻼﻣﺔ %ﻓﻲ اﻻﺳﻢ
ﺛﻢ ﺟﺮب ھﺬا ﻓﺴﻮف ﯾﺄﺗﻲ ﺑﺎﺳﻢ اﻷﻗﺴﺎم
* SELECT
اﻟﺘﻲ ﺑﮭﺎ ﻋﻼﻣﺔ %وﺟﺮب ﻋﻼﻣﺔ _
FROM Department
'\' WHERE DName LIKE '%\%%' ESCAPE
68
ﻻ ﺗﻨﺴﻲ ﻓﻲ Grid Paneأن ﺗﻘﻒ ﻋﻠﻲ أي ﺟﺪول ﻣﻮﺟﻮد ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﺗﺨﺘﺎر Removeوﺑﻌﺪھﺎ ﺑﯿﻤﯿﻦ
اﻟﻤﺎوس ﺛﻢ ﺗﺨﺘﺎر Addوﺗﻀﯿﻒ اﻟﺠﺪول اﻟﻤﻄﻠﻮب ﺛﻢ ﺗﻀﻐﻂ Addﺛﻢ OKﺣﺘﻰ ﻻ ﺗﻈﮭﺮ ﻧﺘﺎﺋﺞ ﺧﺮاﻓﯿﺔ وھﺬه
اﻟﻨﺘﯿﺠﺔ ھﻲ ﻋﺒﺎرة ﻋﻦ اﻟﻤﻮاد اﻟﺘﻲ ﻻ ﯾﺪرﺳﮭﺎ اﻟﻤﺪرﺳﯿﻦ ٣٣٣٣, ٢٢٢٢ ، ١١١١
ﻣﺜﺎل أﺧﺮ ﻻﺳﺘﺨﺪام اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ
اﺳﺘﺮﺟﻊ أﺳﻤﺎء اﻟﻤﻮاد اﻟﺘﻲ ﺗﺪرس ﻓﻲ ﻗﺴﻢ اﻟﺤﺎﺳﺐ اﻟﻘﺴﻢ رﻗﻢ ١
ﻟﻮ ﻓﻜﺮت ﻓﻲ ھﺬا اﻻﺳﺘﻌﻼم ﺳﻮف ﺗﺮي أﻧﮫ أﻛﺜﺮ ﻣﻦ اﺳﺘﻌﻼم
اﻻﺳﺘﻌﻼم اﻷول ﻧﺄﺗﻲ ﺑﺄرﻗﺎم اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﯾﻦ ﯾﺪرﺳﻮن ﻓﻲ اﻟﻘﺴﻢ رﻗﻢ واﺣﺪ
اﻻﺳﺘﻌﻼم اﻟﺜﺎﻧﻲ ﺗﺄﺗﻲ ﺑﺄﺳﻤﺎء اﻟﻤﻮاد اﻟﺘﻲ ﯾﺪرﺳﮭﺎ ھﺆﻻء اﻟﻤﻌﻠﻤﯿﻦ )ﻧﺘﯿﺠﺔ اﻻﺳﺘﻌﻼم اﻷول (
Query Analyzer Result
Select Title
From Subject
Where TeacherTaught In
(Select TeacherId )… (1111,2222,3333,
From Teacher
) Where DeptWork= 1
Grid Pane
ﻻﺣﻆ أﻧﻨﺎ ﻓﻲ اﻟﺠﺰء diagramﻓﻮق Grid Paneﻻ ﻧﺤﺘﺎج ﻹﻇﮭﺎر اﻟﺠﺪول اﻟﺨﺎص ﺑﺎﻟﻤﺪرﺳﯿﻦ ﺑﻞ اﻟﺠﺪول
اﻟﺨﺎص ﺑﺎﻟﻤﻮاد ﻓﻘﻂ أﻣﺎ اﻟﻤﺪرﺳﯿﻦ ﻓﯿﺄﺗﻲ دورھﻢ ﻣﻦ ﺧﻼل اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ وﻻ ﯾﻈﮭﺮوا ﻣﻊ ال Diagram
69
اﻻﺳﺘﻌﻼم اﻟﻜﺎﻣﻞ
Query Analyzer Result
Select FName , BDate , Gender
From Student
( Where BDate < Any 1984-10-10
1984-05-05
Select BDate
From Student
) 'Where Gender='F
Grid Pane
ﻻﺣﻈﻚ ﻓﻲ اﻟﻨﺘﯿﺠﺔ اﻟﺘﻲ ﻇﮭﺮت أن ھﻨﺎك أﻧﺜﻲ وﻛﺎن اﻻﺳﺘﻌﻼم ﻋﻠﻲ اﻻﺛﻨﺘﯿﻦ ﻓﻤﺎذا ﺗﻢ وﻟﻤﺎذا ﻟﻢ ﯾﺨﺮج اﻟﻨﺎﺗﺞ ﻟﮭﻢ ھﻢ
اﻻﺛﻨﺎن اﻟﻨﺎﺗﺞ ﻣﻦ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻷﻧﺜﺘﯿﻦ ھﻤﺎ ﺗﺎرﯾﺨﯿﻦ ﻣﯿﻼد وﻋﻨﺪ اﻻﺧﺘﺒﺎر ﯾﺄﺗﻲ أي ﻃﺎﻟﺐ ﺗﺎرﯾﺦ ﻣﯿﻼده أﺻﻐﺮ
ﻣﻦ أي ﺗﺎرﯾﺦ ﻣﻦ اﻟﺘﺎرﯾﺨﯿﻦ ھﻨﺎ Sohaﺗﺎرﯾﺦ ﻣﯿﻼدھﺎ أﺻﻐﺮ ﻣﻦ ﺗﺎرﯾﺦ ﻣﯿﻼد اﻟﺜﺎﻧﯿﺔ ﻟﺬﻟﻚ ﺗﻢ ﻋﺮﺿﮭﺎ أﻣﺎ اﻟﺜﺎﻧﯿﺔ
ﻓﺘﺎرﯾﺦ ﻣﯿﻼدھﺎ ﻟﯿﺲ أﺻﻐﺮ ﻣﻦ ﺗﺎرﯾﺨﮭﺎ وﻻ ﺣﺘﻰ أﺻﻐﺮ ﻣﻦ ﺗﺎرﯾﺦ Sohaﻟﺬﻟﻚ ﻟﻢ ﯾﺘﻢ ﻋﺮﺿﮭﺎ
ﻣﻠﺤﻮﻇﺔ ھﺎﻣﺔ :ﯾﻤﻜﻦ اﻹﺳﺘﻐﻨﺎء ﻋﻦ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ Anyوﻧﻜﺘﺐ ﺑﺪﻻ ﻋﻨﮭﺎ Some
ﺳﺎﺑﻌﺎ All :اﻟﻤﻌﺎﻣﻞ ﻛـــــﻞ
ﺗﻘﺎرن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠ ﻲ ﯾ ﺴﺎرھﺎ ﺑﻤﺠﻤﻮﻋ ﺔ ﻣ ﻦ اﻟﻘ ﯿﻢ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾﻤﯿﻨﮭ ﺎ ﺑ ﺸﺮط أن ﺗﻜ ﻮن اﻟﻘﯿﻤ ﺔ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾ ﺴﺎرھﺎ
)أﺻﻐﺮ أو أﻛﺒﺮ أو أﺻﻐﺮ ﻣﻦ أو ﺗﺴﺎوي أو أﻛﺒﺮ ﻣﻦ أو ﺗﺴﺎوي أو ﻻ ﺗ ﺴﺎوي ،ﯾﺤ ﺪد ﺑﻤﻌﺎﻣ ﻞ ﺗ ﻀﻌﮫ أﻧ ﺖ( ﻣ ﻦ ﻛ ﻞ
ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠﻲ ﯾﻤﯿﻨﮭﺎ ﻣﺜﺎل ﺗﻮﺿﯿﺤﻲ ﻟﻠﻤﻌﻨﻲ
. § … …>Allﺗﻌﻨﻲ )أﻛﺒﺮ ﻣﻦ أﻛﺒﺮ ﻗﯿﻤﺔ( اﻟﻘﯿﻤﺔ اﻟﯿﺴﺮي أﻛﺒﺮ ﻣﻦ ﻛﻞ اﻟﻘﯿﻢ اﻟﯿﻤﻨﻲ
§ … …<Allﺗﻌﻨﻲ )أﺻﻐﺮ ﻣﻦ أﺻﻐﺮ ﻗﯿﻤﺔ( اﻟﻘﯿﻤﺔ اﻟﯿﺴﺮي أﺻﻐﺮ ﻣﻦ ﻛﻞ اﻟﻘﯿﻢ اﻟﯿﻤﻨﻲ .
وھﻜﺬا ﺑﺎﻟﻄﺒﻊ ﻣﻊ ﺑﺎﻗﻲ اﻟﻤﻌﺎﻣﻼت اﻟﺒﺴﯿﻄﺔ ﻋﻠﻲ >< <= , >= , !> , !< , = , != ,
وﻟﻜﻦ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ أن ﺗﻢ ﺑﺎﻟﻤﻌﺎﻣﻞ Allﻓﻔﻲ ھﺬه اﻟﺤﺎﻟﺔ Sohaﻟﯿﺴﺖ أﺻﻐﺮ ﻣﻦ ﻛﻞ اﻟﻘﯿﻢ اﻟﯿﻤﻨﻲ
ﻓﯿﻜﻮن اﻻﺳﺘﻌﻼم
اﺳﺘﺮﺟﻊ اﺳﻢ وﺗﺎرﯾﺦ ﻣﯿﻼد وﻧﻮع اﻟﻄﻠﺒﺔ اﻟﺬي ﯾﻜﻮن ﺗﺎرﯾﺦ ﻣﯿﻼدھﻢ أﺻﻐﺮ ﻣﻦ ﻛﻞ ﺗﻮارﯾﺦ ﻣﯿﻼد اﻟﻄﺎﻟﺒﺎت
70
ﻻﺣﻈﻚ ﻓﻲ اﻟﻨﺘﯿﺠﺔ اﻟﺘﻲ ﻇﮭﺮت ﻻ ﺗﻮﺟﺪ اﻟﻄﺎﻟﺒﺔ Sohaوھﺬا ﻷن ﺗﺎرﯾﺦ ﻣﯿﻼدھﺎ ﻟﯿﺲ أﺻﻐﺮ ﻣﻦ ﻛﻞ ﺗﻮارﯾﺦ
اﻟﻤﯿﻼد اﻟﻤﻮﺟﻮدة ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ وھﻮ ﯾﺤﻮي ﺑﺎﻟﻔﻌﻞ ﺗﺎرﯾﺦ ﻣﯿﻼده ﻓﻄﺒﯿﻌﻲ ﺟﺪا أن ﺗﺎرﯾﺦ ﻣﯿﻼدھﺎ ﻟﯿﺲ
أﺻﻐﺮ ﻣﻦ ﻧﻔﺴﮫ ﻟﮭﺬا ﻟﻢ ﺗﻈﮭﺮ ﻓﻲ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم أﻣﺎ اﻟﺒﺎﻗﻲ ﻓﮭﻢ ﻛﻠﮭﻢ أﺻﻐﺮ ﻣﻨﮭﻤﺎ
ﻻﺣﻆ ﻓﻲ Grid Paneأن ﺟﻤﻠﺔ Existsﺗﻜﺘﺐ ﻓﻲ اﻟﺠﺰء Columnوﯾﻜﺘﺐ أﻣﺎﻣﮭﺎ ﻓﻲ (=True) Criteria
71
اﻟﺠﺪﯾﺪ واﻟﻐﺮﯾﺐ ھﻨﺎ ھﻮ اﻟﺠ ﺰء Whereاﻟﻤﻮﺟ ﻮد ﻓ ﻲ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ وھ ﺬا ﻷن ﻛﻠﻤ ﺔ Existsﻻ ﯾ ﺄﺗﻲ ﻗﺒﻠﮭ ﺎ
ﺣﻘﻞ ﻟﻜﻲ ﯾﺘﻢ ﻓﺤﺼﮫ ﻣﻦ ﻗﺒﻞ اﻟﺸﺮط وﻓﻲ ﺟﺰء اﻟ ﺸﺮط ﻧﻨ ﺎدي أوﻻ ﺑﺎﺳ ﻢ اﻟﺠ ﺪول ﺛ ﻢ ﺑﻌ ﺪ ﻧﻘﻄ ﺔ ﺛ ﻢ اﺳ ﻢ اﻟﺤﻘ ﻞ وھﻨ ﺎ
ﻧﻘﺎرن ﺑﯿﻦ ﻗﯿﻤﺔ ﻣﻮﺟﻮدة ﻓﻲ ﺟﺪول وﻗﯿﻤﺔ ﻣﻮﺟﻮدة ﻓﻲ ﺟﺪول أﺧﺮ وﻋﻨﺪ ﺣﺪوث ﺗﻘﺎﻃﻊ ﻟﻠﺴﺠﻼت ﯾﺘﻢ ﻋﺮﺿﮭﺎ وﺑﮭﺬا
ﻧﻜﻮن ﻗﺪ رﺑﻄﻨﺎ ﺟﺪوﻟﯿﻦ وﻟﻜﻦ اﻟﺼﺪﻓﺔ ھﻨﺎ أن ھﺎذﯾﻦ اﻟﺠﺪوﻟﯿﻦ ﻣﺮﺑﻮﻃﯿﻦ ﻓﻌﻼ ﺑﻌﻼﻗﺔ ﻣﻦ ﺧﻼل ھ ﺬﯾﻦ اﻟﺤﻘﻠ ﯿﻦ وﻟﻜ ﻦ
ﻟﯿﺲ ھﺬا ﻓﻘﻂ اﻟﺬي ﺗﻘﻮم ﺑﮫ Existsﺑﻞ ﻓﻲ إﻣﻜﺎﻧﮭﺎ أﯾﻀﺎ رﺑﻂ ﺟﺪوﻟﯿﻦ ﻻ ﯾﻮﺟ ﺪ ﻋﻼﻗ ﺔ ﺑﯿ ﻨﮭﻢ ﻛﻤ ﺎ ﺳ ﻨﺮي ﺑﻌ ﺪ ذﻟ ﻚ
ﻟﻜﻨﮭﺎ ﺗﺘﺸﺎﺑﮫ أﺣﯿﺎﻧﺎ ﻣﻊ INوأﯾﻀﺎ ﻣﻊ Anyﻓﯿﻜﻮﻧﻮا ﻣﺘﻤﺎﺛﻠﯿﻦ ﻓﻲ ﺑﻌﺾ اﻷﺣﯿﺎن ﻣﺜﻞ
ﺗﺘ ﺸﺎﺑﮫ ﺗﻤﺎﻣ ﺎ ﻣ ﻊ … … =Anyﻋﻨ ﺪﻣﺎ ﯾﻜ ﻮن اﻟﺤﻘ ﻞ اﻟ ﺬي ﻋﻠ ﻲ ﯾﻤﯿﻨ ﮫ واﻟﺤﻘ ﻞ ﻓ ﻲ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ §
اﻟﺬي ﻋﻠﻲ ﯾﺴﺎره ھﻢ ﻧﻔﺲ ﺣﻘﻮل اﻟﺸﺮط اﻟﻤﻮﺟﻮد ﻣﻊ Existsﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ
ﺗﺘﺸﺎﺑﮫ ﻣﻊ INﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﺤﻘﻞ اﻟﺬي ﻋﻠﻲ ﯾﻤﯿﻨﮫ واﻟﺤﻘﻞ ﻓ ﻲ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ اﻟ ﺬي ﻋﻠ ﻲ ﯾ ﺴﺎره ھ ﻢ §
ﻧﻔﺲ ﺣﻘﻮل اﻟﺸﺮط اﻟﻤﻮﺟﻮد ﻣﻊ Existsﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ
ﻓﺈذا ﺣﺎوﻟﻨﺎ ﻋﺮض ﻧﻔﺲ اﻟﻨﺘﯿﺠﺔ وﻟﻜﻦ ﻣﻊ INوﻣﻊ =Anyﯾﻜﻮن اﻻﺳﺘﻌﻼﻣﯿﻦ ﻛﺎﻟﺘﺎﻟﻲ
)ﺑﻌﺪ أن زاد ﻋﺪد اﻟﻤﻌﺎﻣﻼت ﯾﻤﻜﻦ أن ﺗﻜﻮن ھﻨﺎك ﺟﻤﻠﺔ ﻣﺮﻛﺒﺔ ﻣﻦ أﻛﺜﺮ ﻣﻦ ﻋﺎﻣﻞ ﻣﻦ اﻟﻌﻮاﻣﻞ ﻓﺎﻟﺴﺆال ھﻨﺎ
ھﻮ ﻣﻦ ﺳﯿﻨﻔﺬ أوﻻ وﻣﻦ اﻟﺬي ﯾﻠﯿﮫ ﻻﺑﺪ ﻣﻦ إدراك ھﺬه اﻷوﻟﻮﯾﺎت وإﻻ ﺳﻮف ﺗﺮي ﻧﺘﺎﺋﺞ ﻛﺜﯿﺮة ﻏﯿﺮ ﻣﺘﻮﻗﻌﺔ (
72
ﻻﺣﻆ أن اﻟﻜﻠﻤﺔ Andاﻷوﻟﻲ ﻣﺎﺑﯿﻦ اﻟﺸﺮوط وھﺬا ﻣﻌﻨﺎه ﻋﻨﺪ اﻟﻤﺮور ﻋﻠﻲ ﻛﻞ ﺻﻒ ﯾﺴﺄل ھﻞ ھﻮ ذﻛﺮ إن ﻛﺎن ﻧﻌﻢ
ﻓﯿﻜﻤﻞ اﻷﺳﺌﻠﺔ وأن ﻛﺎن ﻻ ﻓﯿﻨﮭﻲ وﯾﻨﺰل اﻟﺴﻄﺮ اﻟﺬي ﯾﻠﯿﮫ وﯾﺴﺄل ھﻞ اﻟﻨﻮع ذﻛﺮ إن ﻛﺎن ﻧﻌﻢ ﯾﺴﺄل اﻟﺴﺆال اﻟﺬي
ﯾﻠﯿﮫ ھﻞ ﻣﻦ ﻣﺪﯾﻨﺔ اﻟﻘﺎھﺮة أن ﻛﺎﻧﺖ اﻹﺟﺎﺑﺔ ﻧﻌﻢ ﯾﻜﻤﻞ اﻷﺳﺌﻠﺔ وأن ﻛﺎن ﻻ ﻓﻼ ﯾﻜﻤﻞ وھﻜﺬا إﻟﻲ أن ﯾﺘﻢ ﺗﻮاﻓﺮ ﻛﻞ
اﻟﺸﺮوط ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﯾﻌﺮض اﻟﺼﻒ وﻻﺣﻆ ﻣﻌﻲ ﻓﻲ اﻟﺠﺰء Grid Paneاﻟﺸﺮوط ﺗﻮﺿﻊ ﺗﺤﺖ ﺑﻌﻀﮭﺎ ﻓﻲ
اﻟﺤﻘﻞ Criteriaأﻣﺎ ﻛﻞ ﺻﻒ ﺑﮫ أﺳﻢ اﻟﺤﻘﻞ اﻟﺬي ﻋﻠﯿﮫ اﻟﺸﺮط واﻟﺤﻘﻮل اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺠﺰء Whereوﻏﯿﺮ
ﻣﻮﺟﻮدة ﻓﻲ اﻟﺠﺰء Selectﻻ ﻧﻀﻊ ﻋﻼﻣﺔ ﺻﺢ ﻟﮭﺎ ﻓﻲ اﻟﺤﻘﻞ Output
73
Grid Pane
ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ ﻓﯿﻮﺟﺪ ﻛﺜﯿﺮ ﻣﻦ اﻟﻤﻮﻇﻔﯿﻦ رﺟﺎل ﻟﻜﻦ ﻣﺮﺗﺒﮭﻢ أﻛﺒﺮ ﻣﻦ ٣٥٠٠وھﻨﺎك واﺣﺪة أﻧﺜﻲ وﻟﻜﻦ ﻣﺮﺗﺒﮭﺎ ﻟﯿﺲ
أﻛﺒﺮ ﻣﻦ أو ﯾﺴﺎوي ٣٠٠٠وھﻨﺎك ﻣﻌﻠﻤﺔ أﺧﺮي أﻧﺜﻲ وﻣﺮﺗﺒﮭﺎ أﯾﻀﺎ ﯾﻔﻮق ٣٠٠٠
وﻻﺣﻆ أﯾﻀﺎ ﻓﻲ Grid Paneأﻧﻨﺎ وﺿﻌﻨﺎ ﺷﺮط ﻣﻦ اﻟﺸﺮوط ﻓﻲ اﻟﺨﺎﻧﺔ أو اﻟﺤﻘﻞ Orﺣﺘﻰ ﯾﺘﻢ اﻟﺘﺤﻘﻖ ﻣﻦ
اﻟﺸﺮط اﻷول وأن ﻟﻢ ﯾﻜﻦ ﺳﻮف ﯾﺘﻢ اﻟﺘﺤﻘﻖ ﻣﻦ اﻟﺸﺮط اﻟﺜﺎﻧﻲ واﻷﻓﻀﻞ وﺿﻊ اﻟﺸﺮط اﻷﻗﻞ اﺣﺘﻤﺎﻻ ﻓﻲ اﻟﺨﺎﻧﺔ Or
وھﺬا ﯾﺰﯾﺪ ﻣﻦ ﺳﺮﻋﺔ اﻟﺘﻨﻔﯿﺬ ﻷﻧﮫ ﯾﻔﺤﺺ اﻟﺸﺮط أوﻻ وأن ﻟﻢ ﯾﻜﻦ ﻣﺤﻘﻖ ﯾﺮﺟﻊ اﻟﻲ اﻟﺠﺰء Orوھﺬا ﻓﻲ اﻟﻄﺮﯾﻘﺘﯿﻦ
ﺛﺎﻟﺜﺎ اﻟﻤﻌﺎﻣﻞ … Notﻣﻌﺎﻣﻞ اﻟﻨﻔﻲ
ﻓﺈن ﻛﺎن اﻟ ﺸﺮط ﺻ ﺤﯿﺤﺎ ﯾﺠﻌﻠ ﮫ ﺧﺎﻃﺌ ﺎ وإن ﻛ ﺎن اﻟ ﺸﺮط ﺧ ﺎﻃﺊ ﯾﺠﻌﻠ ﮫ ﺻ ﺤﯿﺢ وھﻜ ﺬا وﻗ ﺪ ﺗﻌﺮﺿ ﻨﺎ ﻟﮭ ﻮ ﻛﺜﯿ ﺮا ﻣﻌ ﺎ
اﻟﻤﻌﺎﻣﻼت وﻟﻜﻨﻨﺎ ﺳﻮف ﻧﺘﻌﺮض اﻵن ﻟﮫ ﻣﻨﻔﺼﻼ إﻟﯿﻚ ﺑﻤﺜﺎل
أﻋﺮض أﺳﻢ وﻣﺮﺗﺐ اﻟﻤﻌﻠﻤﯿﻦ إذا ﻛﺎن ﻣﺮﺗﺒﮭﻢ ﻻ ﯾﻜﻮن أﺻﻐﺮ ﻣﻦ أو ﯾﺴﺎوي ٣٥٠٠
Query Analyzer Result
Select Name , Salary
From Teacher
Where Not Salary <=3500
Grid Pane
ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ اﻟﻤﻔﺮوض أن ﯾﻜﻮن اﻟﻤﺮﺗﺐ أﺻﻐﺮ ﻣﻦ أو ﯾﺴﺎوي ٣٥٠٠وﻟﻜﻦ اﻟﻜﻠﻤﺔ NOTﻋﻜﺴﺖ اﻟﻤﻀﻤﻮن
ﺟﺎءت ﺑﻜﻞ اﻟﻘﯿﻢ اﻟﺘﻲ ھﻲ أﻛﺒﺮ ﻣﻦ ﻓﻘﻂ
أﻋﺮض أﺳﻢ وﻣﺮﺗﺐ ورﺗﺒﮫ اﻟﻤﻌﻠﻤﯿﻦ ﺳﻮاء ﻛﺎﻧﺖ رﺗﺒﺘﮭﻢ دﻛﺘﻮر أو أﺳﺘﺎذ وﯾﻜﻮن ﻣﺮﺗﺒﮭﻢ أﻗﻞ ﻣﻦ ١٢٠٠ﺟﻨﯿﺔ
ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ أﻧﮭﺎ ﻧﺘﯿﺠﺔ ﺧﺮاﻓﯿﺔ ﻓﺈﻧﮫ ﯾﻮﺟﺪ أﻛﺜﺮ ﻣﻦ أﺳﺘﺎذ وﻟﻜﻦ ﻣﺮﺗﺒﮭﻢ أﻛﺒﺮ ﻣﻦ ١٢٠٠ﻓﻤﺎذا ﺣﺪث
74
ﻣﺎذا ﺣﺪث ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ أﻧﮫ ﻛﺎن ﻣﻦ اﻟﻤﻔﺘﺮض أﻧﮫ ﺳﻮف ﯾﺨﺮج ﻧﺘﺎﺋﺞ ﺻﺤﯿﺤﺔ
أوﻟﻮﯾﺎت اﻟﺘﻨﻔﯿﺬ ﻟﻮ رﺟﻌﺖ اﻟﻲ اﻷوﻟﻮﯾﺎت ﺳﻮف ﺗﺮي أن اﻟﻌﺎﻣﻞ Andﻟﮫ أﺳﺒﻘﯿﺔ اﻟﺘﻨﻔﯿﺬ ﻋ ﻦ اﻟﻌﺎﻣ ﻞ Orﻟ ﺬﻟﻚ ﺗ ﻢ
إﺧﺘﺒﺎر اﻟﺸﺮﻃﯿﻦ اﻟﺨﺎﺻﯿﻦ ب Andأوﻻ وھﻢ أن ﯾﻜﻮن دﻛﺘﻮر وﻣﺮﺗﺒﮫ أﺻﻐﺮ ﻣ ﻦ ١٢٠٠أو ﯾﻜ ﻮن أﺳ ﺘﺎذ ﻓﺒﺎﻟﻔﻌ ﻞ
ﻟﻢ ﯾﻜﻦ ھﻨﺎك أي دﻛﺘﻮ ﯾﺄﺧﺬ أﻗﻞ ﻣﻦ ١٢٠٠وﻟﻜﻦ ﻋﻨﺪﻣﺎ ﯾﺼﺎدف ﺻﻒ ﺑﯿﺎﻧﺎت ﺑﮫ أﺳ ﺘﺎذ ﻓﯿﻨﻄﺒ ﻖ إﺣ ﺪي ﺷ ﺮﻃﻲ Or
ﻓﯿﻌﺮض وﻟﺘﻔﺴﯿﺮ اﻟﺬي ﺣﺪث ﺗﺘﺒﻊ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻷوﻟﻮﯾﺔ اﻟﺸﺮط وﻣﻌﺎﻣﻼﺗﮫ
وﻟﻜﻦ ﻣﺎ ھﻮ اﻟﺤﻞ اﻵن )اﻟﺤﻞ أن ﻧﺠﻌﻞ Orأﻗﻮي ﻣﻦ Andﻣﻦ ﺧﻼل اﻷﻗﻮاس ﻷن ﻟﻸﻗ ﻮاس اﻷوﻟﻮﯾ ﺔ اﻷوﻟ ﻲ ﻓ ﻲ
اﻟﺘﻨﻔﯿﺬ ﻓﯿﻨﻔﺬ ﻣﺎ ﺑﯿﻦ اﻷﻗ ﻮاس أوﻻ ﺛ ﻢ اﻻﻧﺘﻘ ﺎل إﻟ ﻲ ﺑ ﺎﻗﻲ اﻟﺠﻤﻠ ﺔ وإن ﻛ ﺎن ھﻨ ﺎك أﻛﺜ ﺮ ﻣ ﻦ ﻗ ﻮس ﻓﺘﻨﻔ ﺬ اﻷوﻟﻮﯾ ﺔ ﻣ ﻦ
اﻟﯿﺴﺎر إﻟﻲ اﻟﯿﻤﯿﻦ وأن ﻛﻨﺖ ﺗﺮﯾﺪ ﻏﯿ ﺮ ذﻟ ﻚ ﻓﻌﻠﯿ ﻚ ﺑﻔ ﺘﺢ ﻗ ﻮس ﯾﺤ ﻮي أﻗ ﻮاس ﺑﺪاﺧﻠ ﺔ ﻓﺎﻷوﻟﻮﯾ ﺔ ﻟﻸﻗ ﻮاس اﻟ ﺼﻐﺮى
اﻟﺘﻲ ھﻲ داﺧﻞ اﻷﻗﻮاس اﻟﻜﺒﺮى وھﺬا ﺑﺎﻟﻄﺒﻊ ﻓﻲ اﻻﺳﺘﻔﺴﺎرات اﻟﻤﻌﻘﺪة ( إﻟﯿﻚ اﻟﺤﻞ
Query Analyzer Result
Select Name , Salary, Rank
From Teacher
'Where ( Rank='Mr
Or ) 'Rank='Dr
And Salary<1200
Grid Pane
ﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ ﻓﺈﻧﮫ ﺑﺎﻟﻔﻌﻞ اﻟﻮﺣﯿﺪ ﻣﻦ ﺑﯿﻦ اﻟﺮﺗﺐ )أﺳﺘﺎذ ودﻛﺘﻮر( اﻟﺬي ﻣﺮﺗﺒﮫ أﻗﻞ ﻣﻦ ١٢٠٠
وﻻﺣﻆ ﻓﻲ ﺷﺒﻜﺔ Grid Paneﻟﻮﺿﻊ اﻷوﻟﻮﯾﺔ اﻷوﻟﻲ Orﺗﻢ وﺿﻌﮭﺎ ﻓﻲ ﻧﻔﺲ ﺧﺎﻧﺔ اﻟﻤﻌﺎﯾﯿﺮ ﺣﺘﻰ ﯾﺘﻢ اﺧﺘﺒﺎرھﺎ
ﻋﻠﻲ أﺳﺎس أﻧﮭﺎ ﺷﺮط واﺣﺪ وﻻ ﻧﻀﻌﮭﺎ ﻓﻲ اﻟﺨﺎﻧﺔ Orاﻟﺘﻲ ﻟﮭﺎ أوﻟﻮﯾﺔ أﻗﻞ
اﻟﺘﺪاﺧﻞ ﻣﻊ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ
اﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ ورﺗﺒﮫ اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﯾﻦ رﺗﺒﺘﮭﻢ اﻟﺠﺎﻣﻌﯿﺔ ﻣﺜﻞ رﺗﺒﺔ Awad Khalilوﻣﺮﺗﺒﮭﻢ أﻛﺒﺮ ﻣ ﻦ ﻣﺮﺗ ﺐ
Nagy Ramadan
إذا ﻧﻈﺮﻧﺎ ﺑﺪﻗﺔ إﻟﻲ ھﺬا اﻻﺳﺘﻌﻼم ﺑﺪﻗﺔ ﻓﺈﻧﮫ ﻣﻘﺴﻢ إﻟﻲ ﻋﺪة اﺳﺘﻌﻼﻣﺎت ﻋﻠﻲ اﻟﺘﺮﺗﯿﺐ
Awad Khalil .١ﻣﺎ ھﻲ رﺗﺒﺔ
.٢ﻣﺎ ھﻮ ﻣﺮﺗﺐ Nagy Ramadan
.٣اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﯾﻦ رﺗﺒﺘﮭﻢ ﻣﺴﺎوﯾﺔ ﻟﺮﺗﺒﺔ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم ١وﻣﺮﺗﺒﮭﻢ أﻛﺒﺮ ﻣﻦ ﻧﺎﺗﺞ اﺳﺘﻌﻼم ٢
3577.55 Dr
Select Salary Select Rank
From Teacher From Teacher
'Where Name='Nagy Ramadan 'Where Name='Awad Khalil
75
ﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ ﻓﺄﻧﮫ ﺑﺎﻟﻔﻌﻞ رﺗﺒﺘﮫ ﻣﺜﻞ رﺗﺒﺔ دﻛﺘﻮر ﻋﻮض ﺧﻠﯿﻞ وﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ﻣﺮﺗﺒﮫ أﻛﺒﺮ ﻣﻦ راﺗﺐ
دﻛﺘﻮر ﻧﺎﺟﻲ رﻣﻀﺎن
أﺳﺘﺮﺟﻊ اﻻﺳﻢ اﻷول واﻻﺳﻢ اﻷﺧﯿﺮ وﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﻟﻠﻄﻠﺒﺔ ورﺗﺒﮭﻢ ﺗﺼﺎﻋﺪﯾﺎ ﺣﺴﺐ اﻻﺳﻢ اﻷول
Grid Pane
ﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ أن اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺣﺴﺐ اﻻﺳﻢ اﻷول ﺗﺮﺗﯿﺒﺎ ﺗﺼﺎﻋﺪﯾﺎ ﺑﺎﻟﻔﻌﻞ
وﻻﺣﻆ ﻓﻲ Grid Paneاﻟﺨﺎﻧﺔ Sort Typeوھ ﻮ ﻧ ﻮع اﻟﺘﺮﺗﯿ ﺐ و ﺑﮭ ﺎ ﺛ ﻼث ﺧﯿ ﺎرات ﺗ ﺼﺎﻋﺪي
وﺗﻨ ﺎزﻟﻲ وﻋ ﺪم ﻓ ﺮز واﻟﺨﺎﻧ ﺔ Sort Orderﺗﻠﻘﺎﺋﯿ ﺎ ﺗﺄﺧ ﺬ اﻟﻘﯿﻤ ﺔ واﺣ ﺪ وﯾﻤﻜﻨ ﻚ ﻣ ﻦ ﺧﻼﻟﮭ ﺎ إﻟﻐ ﺎء
اﻟﻔ ﺮز ﻛﻤ ﺎ اﻧ ﮫ ﻓ ﻲ SQLﻛ ﺎن ﯾﻤﻜﻨﻨ ﺎ ﺑﻌ ﺪ ﻛﻠﻤ ﺔ Order Byأن ﻧﻜﺘ ﺐ رﻗ ﻢ ١ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل
ﻟﻠﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي ﺣﺴﺐ اﻟﺤﻘﻞ اﻷول ﺑﻌﺪ ﻛﻠﻤﺔ Selectوھﻜﺬا وﯾﻤﻜﻨﻨ ﺎ أﯾ ﻀﺎ اﻟﺘﺮﺗﯿ ﺐ ﻋﻠ ﻲ ﺣ ﺴﺐ
ﺣﻘﻞ ﻏﯿﺮ ﻣﻮﺟﻮد ﻓﻲ اﻟﺠﺰء Select
76
أﺳﺘﺮﺟﻊ اﻻﺳﻢ اﻷول واﻻﺳﻢ اﻷﺧﯿﺮ وﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﻟﻠﻄﻠﺒﺔ ورﺗﺒﮭﻢ ﺗﻨﺎزﻟﯿﺎ ﺣﺴﺐ اﻻﺳﻢ اﻷول
Grid Pane
ﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ أن اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺣﺴﺐ اﻻﺳﻢ اﻷول ﺗﺮﺗﯿﺒﺎ ﺗﻨﺎزﻟﯿﺎ ﺑﺎﻟﻔﻌﻞ
أﺳﺘﺮﺟﻊ اﻻﺳﻢ ﻛﺎﻣﻞ وﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﻟﻠﻄﻠﺒﺔ ورﺗﺒﮭﻢ ﺗﺼﺎﻋﺪﯾﺎ ﺣﺴﺐ اﻻﺳﻢ ﺑﺎﻟﻜﺎﻣﻞ وﺗﻨﺎزﻟﯿﺎ ﺣﺴﺐ ﺗﺎرﯾﺦ اﻟﻤﯿﻼد
Grid Pane
ﯾﺴﺘﺨﺪم اﻟﺮﺑﻂ ﻓﻲ اﻻﺳﺘﻌﻼم ﻋﻦ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺨﺮج ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ أﻧﻨﺎ ﻻ ﻧﺮﯾﺪ ﻋﺮض رﻗﻢ
اﻟﻄﺎﻟﺐ وﻟﻜﻨﻨﺎ ﻧﺮﯾﺪ ﻋﺮض أﺳﻤﮫ ﻣﻦ ﺟﺪول اﻟﻄﺎﻟﺐ وﻻ ﻧﺮﯾﺪ ﻋﺮض رﻗﻢ اﻟﻤ ﺎدة وﻟﻜﻨﻨ ﺎ ﻧﺮﯾ ﺪ ﻋ ﺮض أﺳ ﻢ اﻟﻤ ﺎدة ﻣ ﻦ
ﺟﺪول اﻟﻤﺎدة وﻻ ﻧﺮﯾﺪ ﻋﺮض رﻗﻢ اﻟﻘﺴﻢ وﻟﻜﻦ ﻧﺮﯾﺪ ﻋﺮض أﺳﻢ اﻟﻘﺴﻢ وھﺬا ﻣ ﻦ ﺟ ﺪول اﻟﻘ ﺴﻢ وﻓ ﻲ اﻟﻨﮭﺎﯾ ﺔ ﻧﻌ ﺮض
اﻟﺪرﺟﺔ ﺣﺘﻰ ﺗﻜﻮن ﺳﮭﻠﺔ اﻟﻔﮭﻢ ﻣﻦ ﻧﻈﺮة اﻟﻤﺴﺘﺨﺪم وﺑﮭﺬا ھﻨﺎك ﺑﯿﺎﻧﺎت ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول ﻛﯿ ﻒ ﻧ ﺼﻞ إﻟ ﻲ ﺣﻘ ﻞ ﻣ ﺎ
ﻓﯿﺲ ﺟﺪول ﻣﺎ وﺣﻘﻞ أﺧﺮ ﻓﻲ ﺟﺪول أﺧﺮ وأن ﺣﺪث ھﺬا ﻻﺑﺪ أن ﻧﻀﻤﻦ ﻋﺮض اﻟﺒﯿﺎن اﻟﻤﻘﺼﻮد وﻟﯿﺲ أي ﺑﯿ ﺎن ﻣ ﻦ
اﻟﺠﺪول اﻵﺧﺮ ﺑﮭﺬا ﺗﻜﻮن ﺷﻜﻞ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﻛﺎﻟﺘﺎﻟﻲ
اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ Syntax
… ,اﻟﺤﻘﻞ اﻷول .اﻟﺠﺪول اﻟﺜﺎﻧﻲ … اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ .اﻟﺠﺪول اﻷول ,اﻟﺤﻘﻞ اﻷول .اﻟﺠﺪول اﻷول Select
From اﻟﺠﺪول اﻟﺜﺎﻧﻲ ,اﻟﺠﺪول اﻷول
ﺣﻘﻞ اﻟﻌﻼﻗﺔ.اﻟﺠﺪول اﻟﺜﺎﻧﻲ = ﺣﻘﻞ اﻟﻌﻼﻗﺔ .اﻟﺠﺪول اﻷول Where
ﻓﻲ اﻟﺠﺰء Selectﻟﻜﯿﻔﯿﺔ اﻟﻮﺻﻮل ﻷي ﺣﻘﻞ ﻣﻦ اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﻧﺘﺒﻊ أوﻻ ﻛﺘﺎﺑﺔ أﺳﻢ اﻟﺠﺪول ﺛﻢ ﻧﻘﻄ ﺔ ﺛ ﻢ أﺳ ﻢ
اﻟﺤﻘﻞ اﻟﻤﺮاد ) ﻻﺣﻆ أﻧﻨﺎ ﯾﻤﻜﻨﻨﺎ ﻛﺘﺎﺑﺔ أﺳﻤﺎء اﻟﺤﻘﻮل ﻣﺒﺎﺷﺮة إذا ﻛﺎن ﻛﻞ اﻟﺤﻘﻮل ﻓﻲ اﻟﺠﺪاول ﻏﯿﺮ ﻣﺘﺸﺎﺑﮭﺔ اﻻﺳﻢ؟(
وﻓﻲ اﻟﺠﺰء Fromﻧﺤﺪد ﺟﻤﯿﻊ أﺳﻤﺎء اﻟﺠﺪاول اﻟﺘﻲ اﺳﺘﺨﺪﻣﻨﺎ ﺣﻘﻮﻟﮭﺎ ﻓﻲ أي ﺟﺰء ﻣﻦ اﻟﺠﻤﻠﺔ
وﻓﻲ اﻟﺠﺰء Whereﻧﻠﺘﺰم ﺑﻜﺘﺎﺑﺔ ﺷﺮط رﺑﻂ اﻟﺒﯿﺎﻧﺎت ﺑﯿﻦ ﻛﻞ ﺟﺪول واﻵﺧﺮ )أي ﺣﻘﻞ اﻟﻌﻼﻗﺔ ﺑﯿﻦ اﻟﺠﺪوﻟﯿﻦ( ﺑﻨﻔﺲ
اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ أﺗﺒﻌﻨﺎھﺎ ﻓﻲ اﻟﺠﺰء Selectﺣﺘﻰ ﺗﻔﺎدي أﺳﻤﺎء اﻟﺤﻘﻮل اﻟﻤﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺠﺪاول
ﻟﺮﺑﻂ اﻟﺠﺪول ﻣﻊ ﺑﻌﻀﮭﺎ ﻗﺪ ﻧﺤﺘﺎج أﻗﻞ ﺷﺊ ﺷﺮط رﺑﻂ وﻗﺪ ﯾﻜﻮن أﻛﺜﺮ ﻣﻦ ﺷﺮط
أﻧﻮاع اﻟﺮﺑﻂ . Types Of Joins
اﻟﺮﺑﻂ أو اﻟﻨﺎﺗﺞ اﻟﻜﺮﺗﯿﺰي ).Cartesian Product (CROSS JOIN (١
اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي . Equal Join (٢
اﻟﺮﺑﻂ اﻟﻐﯿﺮ ﻣﺘﺴﺎوي . Non-equal join (٣
اﻟﺮﺑﻂ اﻟﺪاﺧﻠﻲ . Inner Join (٤
اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ . Outer join (٥
. اﻟﺮﺑﻂ اﻟﺬاﺗﻲ Self Join (٦
78
وﻓﻲ ھﺬا اﻟﺒﺎب ﺳﻮف ﯾﺘﻢ ﻋﺮض ﺟﻤﻞ SQLﻣﺒﺎﺷﺮة ﻋﻠﻲ أن ﯾﺘﻢ ﻛﺘﺎﺑﺘﮭﺎ ﻓﻲ Query Analyzer
أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ Grid Paneﺳﻮف ﯾﺘﻢ ﻋﺮﺿﮭﺎ أﯾ ﻀﺎ وﻣﻌﮭ ﺎ ﺳ ﯿﺘﻢ ﻋ ﺮض Diagram Paneوھ ﺬا ﻷﻧﮭ ﺎ ﺗﻠﻌ ﺐ
دور ھﺎم ﻓﻲ اﻟﺮﺑﻂ واﻟﯿﻚ ﻣﻘﺪﻣﺔ ﺑﺴﯿﻄﺔ ﻋﻦ . Diagram Pane
ﻟﻘﺪ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ ﻛﯿﻔﯿﺔ إﺿﺎﻓﺔ وﺣﺬف اﻟﺠﺪاول داﺧﻞ Diagram Pane
اﺣﺬف أي ﺟﺪاول ﻣﻮﺟﻮدة ﺛﻢ أﺿﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وأﺧﺘﺎر Add Tableﺛﻢ أﺧﺘﺮ ﺟﺪول اﻟﻄﺎﻟﺐ وﺟﺪول اﻟﺪراﺳﺔ
وﺳﻮف ﺗﺮي اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
ﻻﺣﻆ ﻣﻌﻲ ﻓﻲ ھﺬا اﻟﺸﻜﻞ ﯾﻮﺟﺪ ﻋﻠﻲ ﻃﺮف ﻋﻼﻣﺔ اﻟﻤﻔﺘﺎح وﻋﻠﻲ اﻟﻄﺮف اﻵﺧﺮ ﻋﻼﻣﺔ ﻣﺎﻻ ﻧﮭﺎﯾﺔ ﻓﻤﺎذا ﯾﻌﻨﻲ ھﺬا :
اﻟﺮﻣﺰ ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﻌﻼﻗﺔ ﻣﺎذا ﯾﻌﻨﻲ
ﺗﻤﺜﻞ ﻋﻼﻗﺔ واﺣﺪ إﻟﻲ واﺣﺪ
وھﻨﺎك أﯾﻀﺎ رﻣﺰ ﻋﻠﻲ ﺧﻂ اﻟﻌﻼﻗﺔ وﻟﻌﻠﻲ ھﺬا اﻟﺮﻣﺰ ھ ﻮ أھ ﻢ ﻣ ﺎ ﯾﮭﻤﻨ ﺎ ﻓ ﻲ ھ ﺬا اﻟﻤﻮﺿ ﻮع ﺣﯿ ﺚ أﻧ ﮫ ﯾﻤﺜ ﻞ ﺑ ﮫ ﻧ ﻮع
اﻟﻌﻼﻗﺔ اﻟﻤﻮﺟﻮدة ﻣﺎﺑﯿﻦ اﻟﺠﺪاول اﻟﺤﺎﻟﯿﺔ وھﺬا ﻣﻠﺨﺺ ﻟﺬﻟﻚ
79
وﺑﻌﺪ ھﺬه اﻟﻤﻘﺪﻣﺔ ﻋﻦ Diagram Paneﻧﻨﺘﻘﻞ إﻟﻲ ﺑﺎﻗﻲ أﻧﻮاع اﻟﺮﺑﻂ .
ﺛﺎﻧﯿﺎ :اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي . Equal Join
اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ﯾﻜﻮن داﺋﻤﺎ ﻣﺎﺑﯿﻦ ﺣﻘﻠﯿﻦ ﻓﻲ ﺟﺪوﻟﯿﻦ أﺣﺪھﻢ ﻣﻔﺘﺎح رﺋﯿﺴﻲ واﻵﺧﺮ ﻣﻔﺘﺎح ﺧﺎرﺟﻲ
ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل إذا أردﻧﺎ اﺳﺘﺮﺟﺎع أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ اﻟﺬي ﯾﻌﻤﻞ ﺑﮫ ﻛﻞ ﻣﻌﻠﻢ
ﻧﻼﺣﻆ أن ھﺬا اﻻﺳﺘﻌﻼم ﯾﺨﺺ ﺟﺪوﻟﯿﻦ ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ ﻣﻦ ﺟﻮل اﻟﻤﻌﻠ ﻢ وﺑﯿﺎﻧ ﺎت ﺗﺨ ﺺ اﻟﻘ ﺴﻢ ﻣ ﻦ ﺟ ﺪول اﻟﻘ ﺴﻢ
وﻧﺮﯾ ﺪ ان ﻧﻌ ﺮض ﺑﯿﺎﻧ ﺎت اﻟﻤﻮﻇ ﻒ اﻷول وﻣﻌﮭ ﺎ أﺳ ﻢ اﻟﻘ ﺴﻢ ﺑﺎﻟﺘﻔ ﺼﯿﻞ ) ﻋ ﺮض أﺳ ﻢ اﻟﻘ ﺴﻢ اﻟ ﺬي ﯾﻜ ﻮن رﻗﻤ ﮫ ﻓ ﻲ
ﺟﺪول اﻟﻘﺴﻢ ﻧﻔﺲ اﻟﺮﻗﻢ اﻟﻤﻮﺟﻮد ﻋﻠﻲ ﺣﻘﻞ WorkDeptﻓﻲ ﺟﺪول اﻟﻤﻌﻠ ﻢ ( أﻗ ﺮأ ھ ﺬه اﻟﻌﺒ ﺎرة ﻣ ﻊ اﻟﻨﻈ ﺮ ﻟﻠ ﺸﻜﻞ
اﻟﺘﺎﻟﻲ
ﺑﻌ ﺪ إﺿ ﺎﻓﺔ اﻟﺠ ﺪوﻟﯿﻦ ﺳ ﻮف ﯾﻈﮭ ﺮ ﻟ ﻚ ﻣ ﺎﺑﯿﻦ ھ ﺬﯾﻦ اﻟﺠ ﺪوﻟﯿﻦ ﻋﻼﻗﺘ ﯿﻦ ﻗ ﻒ ﻋﻠ ﻲ ﻋﻼﻗ ﺔ اﻹدارة ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
واﺧﺘﺎر Removeﻟﺤﺬﻓﮭﺎ ﻷﻧﻨﺎ ﻻ ﻧﺮﯾﺪھﺎ وﻧﻨﻘﺮ ﺑﺎﻟﻤﺎوس ﻋﻠ ﻲ اﻟﺤﻘ ﻮل اﻟﻤ ﺮاده ﻟﺘﺤ ﻮل ﻟﺮﻣ ﺰ ﺻ ﺢ وﻻﺣ ﻆ ﻋﻨ ﺪ
اﻟﻮﻗﻮف ﺑﺎﻟﻤﺎوس ﻋﻠﻲ اﻟﻌﻼﻗﺔ ﻟﻘﺪ ﻇﮭﺮ ﻛﻠﻤﺔ Inner joinأﺗﺮﻛﮭﺎ اﻵن وﻟﻜﻦ ﺑﻌﺪھﺎ ﻧﻔﺲ ﺷﺮط SQL
80
وﻟﻜﻦ ﻟﻮ ﻻﺣﻈﺖ إن ﺟﻤﻠﺔ ال SQLأﺻﺒﺤﺖ ﺟﻤﻠﺔ ﻃﻮﯾﻠﺔ ھﺬا ﺑﺴﺒﺐ ذﻛﺮ أﺳﻢ اﻟﺠﺪول ﻣ ﻊ ﻛ ﻞ ﺣﻘ ﻞ ﯾﺨ ﺼﮫ وﯾﻤﻜﻨﻨ ﺎ
ﺗﻘﻠﯿﻞ ھﺬا اﻟﻄﻮل ﻣﻦ ﺧﻼل وﺿﻊ أﺳﻤﺎء ﻣﺴﺘﻌﺎرة ﻟﻠﺠ ﺪاول Aliasesوﻧ ﺴﺘﺨﺪﻣﮭﺎ ﺑ ﺪﻻ ﻣ ﻦ أﺳ ﻢ اﻟﺠ ﺪول ﺑﺎﻟﻜﺎﻣ ﻞ
وﻧﻀﯿﻒ أﺳﻤﺎ ﻣﺴﺘﻌﺎرا ﻟﻠﺠﺪول ﺑﻌﺪ ﻛﻠﻤﺔ Fromوﺑﻌﺪ أﺳﻢ اﻟﺠﺪول اﻟﻜﺎﻣﻞ وھﻜﺬا ﻣ ﻊ ﺑ ﺎﻗﻲ اﻟﺠ ﺪاول وﻧ ﺴﺘﺨﺪم ھ ﺬا
اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر ﻓﻲ أي ﻣﻜﺎن ﺑﺎﻟﺠﻤﻠﺔ ﻟﺘﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ :
ﻟﻌﻤﻞ اﻟﻤﺜﺎل اﻟﻤﻌﺮوض ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺎب ﺗﺤﺖ ﻋﻨﻮان ﻣﺎ ھﻮ اﻟﺮﺑﻂ ؟)راﺟﻊ اﻟﺼﻮرة(
ﺳﻮف ﺗﻼﺣﻆ أن اﻟﺮﺑﻂ ھﻨﺎ ﯾﻘﻮم ﻋﻠﻲ أرﺑﻌﺔ ﺟﺪاول
ﻻﺳﺘﺮﺟﺎع أﺳﻢ اﻟﻄﺎﻟﺐ وأﺳﻢ اﻟﻘﺴﻢ وأﺳﻢ اﻟﻤﺎدة ودرﺟﺔ اﻟﻄﺎﻟﺐ ھﻨﺎك ﺛ ﻼث ﻋﻼﻗ ﺎت ﻣ ﺎﺑﯿﻦ أرﺑﻌ ﺔ ﺟ ﺪاول ﺑﺎﻟﺘﻔ ﺼﯿﻞ
ﻛﺎﻟﺘﺎﻟﻲ :
§ ﺟﺪول اﻟﻄﺎﻟﺐ ﺣﻘﻞ رﻗﻢ اﻟﻄﺎﻟﺐ ﻣﻊ ﺟﺪول اﻟﺪراﺳﺔ ﺣﻘﻞ رﻗﻢ اﻟﻄﺎﻟﺐ .
§ ﺟﺪول اﻟﺪراﺳﺔ ﺣﻘﻞ رﻗﻢ اﻟﻤﺎدة ورﻗﻢ اﻟﻘﺴﻢ ﻣﻊ ﺟﺪول اﻟﻤﺎدة ﺣﻘﻞ رﻗﻢ اﻟﻤﺎدة ورﻗﻢ اﻟﻘﺴﻢ .
§ ﺟﺪول اﻟﻘﺴﻢ ﺣﻘﻞ رﻗﻢ اﻟﻘﺴﻢ ﻣﻊ ﺟﺪول اﻟﻤﺎدة ﺣﻘﻞ رﻗﻢ اﻟﻘﺴﻢ .
وﻟﻌﻤﻞ رﺑﻂ أﻛﺜﺮ ﻣﻦ ﺷﺮط ﯾﺘﻢ اﺳﺘﺨﺪام اﻟﻤﻌﺎﻣﻞ Andﻟﯿﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ:
Query Analyzer
Use School
Select S.FName ,D.DName , B.Title , T.Score
From Student S , Department D , Subject B , Study T
Where S.StudNo = T.StudNo
And )( T.SubCode = B.SubCode And T.DeptNo = B.DeptBelong
And D.DeptNo=B.DeptBelong
Diagram Pane
Result
81
ﻻ ﺗﻮﺟﺪ ﻋﻼﻗﺔ أﺳﺎﺳﺎ ﺑﯿﻦ ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ وﺟﺪول ﻓﺌﺔ اﻟﻤﺮﺗﺐ وﻟﻜﻦ ھﻨﺎك ﻋﻼﻗﺔ ﻏﯿﺮ ﺻ ﺮﯾﺤﺔ وھ ﻲ أن ﻣﺮﺗ ﺐ أي
ﻣﻌﻠﻢ ﻣﺤﺼﻮر ﺑﯿﻦ ﺣﺪ أدﻧﻲ وﺣﺪ أﻗﺼﻲ ﻓﻲ ھﺬا ﺟﺪول SalGrade
اﺳﺘﺮﺟﻊ اﻟﺮﺗﺒﺔ و اﻻﺳﻢ واﻟﻤﺮﺗﺐ وﻓﺌﺔ اﻟﺮاﺗﺐ ﻟﻜﻞ اﻟﻤﻌﻠﻤﯿﻦ
Query Analyzer
Select T.Rank , T.Name , T.Salary , S.Grade
From Teacher T , SalGrade S
Where T.Salary Between S.LowSal And S.HiSal
Grid Pane
ﻻﺣﻆ أﻧ ﮫ ﻓ ﻲ Diagram Paneﻻ ﯾﻮﺟ ﺪ أي ﻋﻼﻗ ﺔ ﺣﻘﯿﻘﯿ ﺔ و ﻻ ﺣ ﻆ أﯾ ﻀﺎ Grid Paneاﻟ ﺸﺮط ﯾﻜﺘ ﺐ أﻣ ﺎم
ﺣﻘ ﻞ اﻟﻤﺮﺗ ﺐ و ﻧﻜﺘ ﺐ ﻗﺒ ﻞ ﻛ ﻞ ﺣﻘ ﻞ ﻓ ﻲ اﻟ ﺸﺮط أﺳ ﻢ اﻟﺠ ﺪول )ﯾﻤﻜﻨﻨ ﺎ اﻟﻜﺘﺎﺑ ﺔ ﺑ ﺪون أﺳ ﻢ اﻟﺠ ﺪول ﻟ ﻮ اﻟﺤﻘ ﻮل ﻏﯿ ﺮ
ﻣﺘﺸﺎﺑﮭﺔ اﻷﺳﻤﺎء ﻓﻲ اﻟﺠﺪوﻟﯿﻦ ﺟﺮب اﻵن ﺟﻤﻠﺔ SQLاﻟﺴﺎﺑﻘﺔ ﺑﺪون ﻛﺘﺎﺑﺔ أﺳﻢ اﻟﺠﺪول ﻗﺒﻞ اﻟﺤﻘﻞ وﺳﻮف ﺗﻨﻔﺬ (
82
ﻟﻘﺪ ﻻﺣﻈﺖ ﻣﻦ ﻗﺒﻞ ﻓﻲ Diagram Paneﻋﻨﺪﻣﺎ ﻧﻘﻒ ﻋﻠﻲ اﻟﻌﻼﻗﺔ ﺗﻈﮭﺮ ﻛﻠﻤﺔ Inner Joinﻗﺒﻞ ﺷﺮط اﻟﻌﻼﻗﺔ
ﻓﻲ اﻟﺤﻘﯿﻘﺔ أن اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ھﻮ ﻋﺒﺎرة ﻋﻦ رﺑﻂ داﺧﻠﻲ وﻛﺎن ھﻨﺎك ﻗﺪﯾﻤﺎ اﻟﻌﺪﯾﺪ ﻣ ﻦ اﻟﻄ ﺮق اﻷﺧ ﺮى اﻟﺘ ﻲ ﺑ ﺪأت
ﺗﻠﻐﻲ اﻟﻤﮭﻢ أن ﺗﺤﺎول داﺋﻤﺎ ﻋﻨﺪ رﺑﻂ اﻟﺠﺪاول ﻓﯿﻤﺎ ﺑﯿﻨﮭﻢ ﻣﻦ ﺧﻼل ﺣﻘﻮل ﻣﺘﺸﺎﺑﮭﺔ وﺑﯿﻨﮭﻢ ﻋﻼﻗﺔ ﺑﺎﻟﻔﻌﻞ أن ﺗ ﺴﺘﺨﺪم
Inner Joinﻟﻜﻦ اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ﯾﻤﮭﺪك ﻟﻠﻮﺻﻮل ﻟﻠﺮﺑﻂ اﻟﺪاﺧﻠﻲ وأﯾﻀﺎ ﻗﺪ ﺗﺤﺘﺎﺟﮫ ﻓﻲ رﺑﻂ ﺟﺪوﻟﯿﻦ ﻟﯿﺲ ﺑﯿﻨﮭﻢ
ﻋﻼﻗﺔ ؟؟
ﺳﻮف ﻧﻨﻔﺬ ﻧﻔﺲ اﺳﺘﻌﻼم اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي --أﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ ﻟﻜﻞ اﻟﻤﻌﻠﻤﯿﻦ
Query Analyzer Result
Diagram Pane
ﻻﺣ ﻆ أﻧﻨ ﺎ ﻟ ﻢ ﻧﻐﯿ ﺮ أي ﺷ ﺊ ﻓ ﻲ Diagram Paneوﻟﻜ ﻦ ﻓ ﻲ اﻟﺠ ﺰء Fromﻣ ﻦ ﺟﻤﻠ ﺔ اﻻﺳ ﺘﻌﻼم ﻣ ﺎ ﺑ ﯿﻦ
اﻟﺠﺪوﻟﯿﻦ ﻧﻜﺘﺐ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ Inner Joinوﯾﻔﻀﻞ أن ﯾﻜﻮن اﻟﺠ ﺪول ﺻ ﺎﺣﺐ اﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ھ ﻮ اﻷﯾ ﺴﺮ
ﻗﺪر اﻹﻣﻜﺎن ﻓﻲ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم وﺑﻌﺪ ذﻟﻚ ﻧﻜﺘﺐ اﻟﻜﻠﻤﺔ onﻟﻨﺤﺪد ﺑﮭﺎ ﺷﺮط اﻟﻌﻼﻗﺔ وﻟﻨﻔﺼﻠﮭﺎ ﻋ ﻦ ﺑ ﺎﻗﻲ اﻟ ﺸﺮوط
اﻟﻌﺎدﯾﺔ أن وﺟﺪت )ﻛﻤﺎ ﯾﻤﻜﻨﻨﺎ ﻛﺘﺒﺔ ﻛﻠﻤﺔ Joinﺑﺪﻻ ﻣﻦ Inner Joinوﺳﺘﻜﻮن ﻧﻔﺲ اﻟﻨﺘﯿﺠﺔ (
وﻟﻜﻦ ﻣﺎذا ﯾﻜﻮن ﺷﻜﻞ ھﺬه اﻟﻄﺮﯾﻘﺔ إذا رﺑﻄﻨﺎ ﺑﺄﻛﺜﺮ ﻣﻦ ﺟﺪول ﺳﻮف ﻧﺄﺧ ﺬ ﻧﻔ ﺲ ﻣﺜ ﺎل اﻟ ﺮﺑﻂ اﻟﻤﺘ ﺴﺎوي أﯾ ﻀﺎ وھ ﺬا
ﻟﻔﮭﻢ ﻛﯿﻔﯿﺔ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ﺗﺮﺑﻂ أﻛﺜﺮ ﻣﻦ ﺟﺪول ﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ
ﺗﻔﺼﯿﻞ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﯿﺔ ﻓﻲ اﻟﻤﺜﺎل اﻟﺜﺎﻧﻲ ﻣﻦ اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي
اﺳﺘﺮﺟﺎع أﺳﻢ اﻟﻄﺎﻟﺐ وأﺳﻢ اﻟﻘﺴﻢ وأﺳﻢ اﻟﻤﺎدة ودرﺟﺔ اﻟﻄﺎﻟﺐ )ھﻨﺎك ﺛﻼث ﻋﻼﻗﺎت ﻣﺎﺑﯿﻦ أرﺑﻌﺔ ﺟﺪاول(
Query Analyzer
Select FName , DName ,Title , Score
From Student S
Inner Join Study T
On S.StudNo = T.StudNo
Inner Join Subject B
On B.SubCode = T.SubCode And B.DeptBelong = T.DeptNo
Inner Join Department D
On D.Deptno = B.DeptBelong
Diagram Pane
83
Result
ﻻﺣﻆ أﻧﻨﺎ ﺑﻌﺪ أول رﺑ ﻂ وﻗﺒ ﻞ أن ﻧ ﺪﺧﻞ ﻋﻠ ﻲ اﻟ ﺮﺑﻂ اﻟﺜ ﺎﻧﻲ ﻧﻜﺘ ﺐ اﻟﻜﻠﻤ ﺔ Inner Joinوﺑﻌ ﺪھﺎ أﺳ ﻢ اﻟﺠ ﺪول اﻟ ﺬي
ﺳﻮف ﯾﺮﺑﻂ ﻓﻘﻂ وﻻ ﻧﺬﻛﺮ أﺳﻢ أي ﺟﺪول ﻗﺪ ﺗ ﻢ ذﻛ ﺮه وﺑﻌ ﺪھﺎ ﻛﻠﻤ ﺔ onﺛ ﻢ ﺷ ﺮط اﻟ ﺮﺑﻂ ﺑﯿﻨ ﮫ وﺑ ﯿﻦ اﻟﺠ ﺪول اﻟﻤ ﺮاد
وھﻜﺬا ﻛﻠﻤﺔ inner Joinوﺑﻌﺪھﺎ اﻟﺠﺪول وﺑﻌﺪھﺎ onﺛﻢ ﺷﺮط اﻟﺮﺑﻂ ﺣﺘﻰ اﻟﻨﮭﺎﯾﺔ
وﻻﺣﻆ أﯾﻀﺎ اﺳﺘﺨﺪاﻣﻨﺎ أﺳﻤﺎء اﻟﺤﻘﻮل ﻣﺒﺎﺷﺮة ﻃﺎﻟﻤﺎ أن أﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺬﻛﻮر ﻏﯿﺮ ﻣﻮﺟﻮد ﻓﻲ أي ﺟﺪول ﻏﯿﺮ ﺟ ﺪول
واﺣﺪ وﻟﻜﻦ ﻣﻦ اﻟﻤﻔﻀﻞ اﻻﻟﺘﺰام ﺑﺬﻛﺮ أﺳﻢ اﻟﺠﺪول ﺛﻢ أﺳﻢ اﻟﺤﻘﻞ ﺑﻌﺪ ﻛﻠﻤﺔ on
وﻣﻦ اﻟﻤﻔﻀﻞ أﯾﻀﺎ ﻛﻤﺎ ھﻮ ﻣﻮﺟﻮد ﻋﻨﺪ ﻛﻞ ﺷﺮط ﻧﺒﺪأ ﺑﺤﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ
ﻣﺒﺪﺋﯿﺎ ﻟﻤﻼﺣﻈﺔ اﻟﻔﺮق ﺑﯿﻦ ﻛﻞ ھﺬه اﻷﻧﻮاع ﻓﻠﺪﯾﻨﺎ ﻓﻲ ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ ﻣﻌﻠﻤﯿﻦ ﻏﯿﺮ ﻣﺤﺪد ﻟﮭﻢ أﻗ ﺴﺎم وﺳ ﻮف ﻧ ﻀﯿﻒ
ﻓﻲ ﺟﺪول اﻟﻘﺴﻢ ﻗﺴﻢ أﺧﺮ )اﻟﮭﻨﺪﺳﺔ ( Geometryﻋﻠﻲ أﺳﺎس أﻧﮫ ﻻ ﯾﻌﻤﻞ ﺑﮫ أي ﻣﻌﻠﻤﯿﻦ ﺣﺘﻰ اﻵن وھﺬا ﻟﯿﻜﻮن
ﻟﺪﯾﻨﺎ ﺳﺠﻼت ﻓﻲ اﻟﺠﺪول اﻷول ﻟﯿﺲ ﻟﮭﺎ ﺳﺠﻼت ﻣﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ واﻟﻌﻜﺲ ﺣﺘﻰ ﯾﺴﮭﻞ ﺗﺘﺒﻊ اﻟﻔﺮوق
84
ﻣﺜﺎل :
ﻻﺣﻆ ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﺨﺎص ﺑﺄﺳﻤﺎء اﻟﻤﻌﻤﻠﯿﻦ وﻣﺮﺗﺒﺘﮭﻢ وأﺳﻤﺎء اﻷﻗﺴﺎم
أن اﻟﻨﺘﯿﺠﺔ اﻟﻈﺎھﺮة ﻟﺪﯾﻚ ھﻲ ﻋﺒﺎرة ﻋﻦ ﺛﻤﺎﻧﯿﺔ ﺳﺠﻼت ﻓﻘﻂ وﻣﻮﺟﻮد داﺧﻞ ﺟﺪول اﻟﻤﻌﻠﻢ ﻋﺸﺮة ﺳﺠﻼت وﻣﻮﺟ ﻮد
داﺧﻞ ﺟﺪول اﻟﻘﺴﻢ ﺛﻼﺛﺔ أﻗﺴﺎم ﻓﯿﻮﺟﺪ ﻋﺪد ٢ﻣﻌﻠﻤﯿﻦ ﻏﯿﺮ ﻣﻮﺟﻮدﯾﻦ ﻣﻦ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم وھ ﺬا ﺑ ﺴﺒﺐ أﻧ ﮫ ﯾﻮﺟ ﺪ ٢
ﻣﻌﻠﻢ ﻟﯿﺲ ﻣﺤﺪد ﻟﮭﻢ أﻗﺴﺎم ﺣﺘﻰ اﻵن وﯾﻮﺟﺪ ﻋﺪد ١ﻗﺴﻢ ﻏﯿﺮ ﻇﺎھﺮ ﺑﺎﻟﻨﺘﯿﺠﺔ أﯾﻀﺎ ﻓﮭﻨﺎك ﺑﯿﺎﻧﺎت ﻏﯿ ﺮ ﻛﺎﻣﻠ ﺔ وﻟﻜﻨﻨ ﺎ
ﻧﺮﯾﺪ اأوﻻ ﻇﮭﻮر اﻟﻤﻌﻠﻤﯿﻦ ﺳﻮاء ﻛﺎﻧﻮا ﯾﻌﻤﻠﻮا ﺑﺄﻗﺴﺎم أم ﻻ
ﻻﺣﻆ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
أﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ ﻟﻠﻤﻌﻠﻤﯿﻦ ﻣﻊ ﻇﮭﻮر ﻛﻞ اﻷﻗﺴﺎم ﺣﺘﻰ إذا ﻛﺎﻧﺖ ﺑﺪون ﻣﻌﻠﻤﯿﻦ ﺣﺘﻰ اﻵن
Query Analyzer Result
Diagram Pane
ﻓﻲ اﻟﺠﺰء Diagram Paneﻟﻌﻤﻞ ﻋﻼﻗﺔ ﺧﺎرﺟﯿﺔ ﯾﺴﺮي ﺗﺴﺘﺮﺟﻊ ﺟﻤﯿ ﻊ ﺳ ﺠﻼت اﻷﻗ ﺴﺎم ﻧﻘ ﻒ ﻋﻠ ﻲ اﻟﻌﻼﻗ ﺔ
ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ ﻧﺨﺘ ﺎر Select All rows from departmentأو ﻧﺨﺘ ﺎر propertiesﺛ ﻢ All
rows from departmentوﻻﺣ ﻆ ﻓ ﻲ اﻟﺠ ﺰء اﻟﺨ ﺎص SQLﺣﯿ ﺚ أﻧﻨ ﺎ ﻟ ﻢ ﻧﻠﺘ ﺰم ﺑﺎﻟﻨ ﺪاء ﻋﻠ ﻲ اﻟﺤﻘ ﻮل
ﺑﺎﺳﻢ اﻟﺠﺪول أوﻻ وھﺬا ﻷﻧﮫ ﻻ ﯾﻮﺟﺪ ﺣﻘﻮل أﺳﻤﺎءھﺎ ﻣﺸﺘﺮﻛﺔ ﻣﺎﺑﯿﻦ اﻟﺠﺪوﻟﯿﻦ وﻻﺣﻆ أﻧﻨﺎ ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ اﻟ ﺴﺎﺑﻘﺔ
ذﻛﺮﻧﺎ أﺳﻢ اﻟﺠﺪوﻟﯿﻦ وﻣﺎ ﺑﯿﻨﮭﻢ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ Left Outer Joinﻻﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ ﺳﺠﻼت اﻷﻗ ﺴﺎم ﺣﺘ ﻰ ﻟ ﻮ
ﻛﺎﻧﺖ ﻏﯿﺮ ﻣﺘﺸﺎﺑﮭﺔ وﺷﺮط اﻟﻌﻼﻗﺔ ﺑﻌﺪ اﻟﻜﻠﻤﺔ Onﻛﻤﺎ ﯾﻤﻜﻦ أن ﯾﻜﻮن اﻟﺸﺮط ﺑﺄﻛﺒﺮ ﻣﻦ أو أﺻﻐﺮ وھﻜﺬا
ﻣﻠﺤﻮﻇﺔ :ﻛﺎن ﯾﺴﺘﺨﺪم ﻗﺪﯾﻤﺎ ﺑ ﺪﻻ ﻣ ﻦ Left Outer Joinاﻟﺮﻣ ﺰ ) =* ( وﻣ ﻊ أﻛﺜ ﺮ ﻣ ﻦ ﻧ ﻮع ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت
ﻣﺜﻞ أوراﻛﻞ وﻟﻜﻦ ﯾﺘﻢ اﻵن إﻟﻐﺎﺋﮭﻢ ﺣﺘﻰ ﯾﺘﻮاﻓﻘﻮا ﻣﻊ ﻣﻌﺎﯾﯿﺮ ANSI SQLﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ .
85
Diagram Pane
ﻓﻲ اﻟﺠﺰء Diagram Paneﻟﻌﻤﻞ ﻋﻼﻗﺔ ﺧﺎرﺟﯿﺔ ﯾﻤﻨﻲ ﺗﺴﺘﺮﺟﻊ ﺟﻤﯿﻊ ﺳﺠﻼت اﻟﻤﻌﻠﻤﯿﻦ ﻧﻘﻒ ﻋﻠﻲ اﻟﻌﻼﻗﺔ
ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺛﻢ ﻧﺨﺘﺎر Select All rows from Teacherأو ﻧﺨﺘﺎر propertiesﺛﻢ All rows
from Teacherو ﺑ ﻨﻔﺲ اﻟﻄﺮﯾﻘ ﺔ اﻟ ﺴﺎﺑﻘﺔ ذﻛﺮﻧ ﺎ أﺳ ﻢ اﻟﺠ ﺪوﻟﯿﻦ وﻣ ﺎ ﺑﯿ ﻨﮭﻢ اﻟﻜﻠﻤ ﺔ اﻷﺳﺎﺳ ﯿﺔ Right
Outer Joinﻻﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ ﺳﺠﻼت اﻷﻗﺴﺎم ﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﻏﯿﺮ ﻣﺘﺸﺎﺑﮭﺔ وﺷﺮط اﻟﻌﻼﻗﺔ ﺑﻌﺪ اﻟﻜﻠﻤﺔ On
ﺛﺎﻧﯿﺎ :اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ اﻟﻜﺎﻣﻞ Full Outer Join
أﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ ﻟﻠﻤﻌﻠﻤﯿﻦ ﻣﻊ إﻇﮭﺎر ﻛﺎﻓﺔ اﻟﻤﻌﻠﻤﯿﻦ وﻛﺎﻓﺔ اﻷﻗﺴﺎم
Query Analyzer Result
Diagram Pane
ﻻﺣﻆ ﻋﺪد اﻟﺼﻔﻮف ١١ﻛﺎﻧﻮا ٩وﻋﺪد ٢ﻣﻌﻠﻢ ﻟﯿﺲ ﻟﮫ ﻗﺴﻢ وواﺣﺪ ﻗﺴﻢ ﻟﯿﺲ ﺑﮫ ﻣﻌﻠﻤﯿﻦ إذا اﻹﺟﻤﺎﻟﻲ ١١
86
ﻻﺣ ﻆ ﻓ ﻲ SQlأﻧﻨ ﺎ ﻗ ﺪ رﺑﻄﻨ ﺎ ﺑ ﯿﻦ اﻟﺠ ﺪول وﻧﻔ ﺴﮫ ﻋ ﻦ ﻃﺮﯾ ﻖ إﻋﻄ ﺎء أﺳ ﻤﯿﻦ ﻣ ﺴﺘﻌﺎرﯾﻦ ﻟﻠﺠ ﺪول اﻟﻮاﺣ ﺪ )أي ﻧ ﺴﺨﺘﯿﻦ
وھﻤﯿﻦ( وﺑﻌﺪ ذﻟﻚ ﻗﺪ ﺗﻌﺎﻣﻠﻨﺎ ﻣﻊ ھﺬﯾﻦ اﻟﺠﺪوﻟﯿﻦ ﺑﺎﻟﺼﻮرة اﻟﻄﺒﯿﻌﯿﺔ )ﯾﻤﻜﻨﻨﺎ أﯾﻀﺎ ﻋﻤﻞ أﺳﻢ ﻣ ﺴﺘﻌﺎر ﻣ ﺮة واﺣ ﺪة واﻟﺠ ﺪول
اﻟﺜﺎﻧﻲ ﯾﻜﻮن ﺑﺎﻻﺳﻢ اﻷﺳﺎﺳﻲ وﻧﻌﻤﻞ ﻋﻠﻲ ذﻟﻚ( وﻻﺣﻆ اﻟﺸﺮط ﻻﺑﺪ أن ﺗﻈﮭﺮ اﻟﺴﺠﻼت ﻋﻨﺪﻣﺎ ﯾﻜﻮن رﻗﻢ اﻟﻤﺸﺮف ﻣﺜﻞ رﻗﻢ
اﻟﻤﺪرس أو اﻟﻌﻜ ﺲ ﻛﻤ ﺎ ﻧ ﺮي اﻟﻔﻜ ﺮة ﻛﻠﮭ ﺎ ﺗﻘ ﻮم ﻋﻠ ﻲ اﻷﺳ ﻤﺎء اﻟﺒﺪﯾﻠ ﺔ أو اﻟﻤ ﺴﺘﻌﺎرة ﻓﻜﯿ ﻒ ﻧﻘ ﻮم ﺑ ﺬﻟﻚ ﻓ ﻲ Diagram
Paneﻧﻘ ﻒ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ اﻟﺠ ﺪول اﻟﻤﻄﻠ ﻮب ﺛ ﻢ ﻧﺨﺘ ﺎر اﻟﺨ ﺼﺎﺋﺺ Propertiesوﻣﻨﮭ ﺎ أﻣ ﺎ اﻟﺨﺎﻧ ﺔ اﻟﻌﻨ ﻮان
Aliasﻧﻜﺘﺐ اﻻﺳﻢ وﻟﯿﻜﻦ Tﺛﻢ ﻧﻀﻐﻂ ﻓﻲ أي ﻣﻜ ﺎن ﺧ ﺎﻟﻲ وﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر Add Tableﺛ ﻢ ﻧﺨﺘ ﺎر
Teacherﻣﺮة أﺧﺮي وﻋﻠﯿﮫ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺛ ﻢ ﻧﺨﺘ ﺎر Propertiesﺛ ﻢ ﻧﻌ ﺪل ﻓ ﻲ اﻟﺨﺎﻧ ﺔ Aliasﻟﻨﻜﺘ ﺐ Super
وﺑﻌﺪ ذﻟﻚ ﻧﺴﺤﺐ ﻣﻦ ﺣﻘﻞ Superviseeوﻧﺴﻘﻂ ﻋﻠﻲ ﺣﻘﻞ TeacherIdﻓﻲ اﻟﺠﺪول اﻵﺧﺮ ﻟﺘﻜﻮن ھﺬه اﻟﻌﻼﻗﺔ اﻟﻐﯿﺮ
ﻣﻌﺮوﻓﺔ ﻟﮫ وﻧﻀﺒﻂ إﻋﺪادات Grid Paneﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ ﺛﻢ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺛﻢ Runوﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ اﻟﻈﺎھﺮة
ﺣﺎول إﻇﮭﺎر ﺑﺎﻗﻲ اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﯾﻦ ﻟﯿﺴﻮا ﻟﮭﻢ ﻣﺸﺮﻓﯿﻦ
Functions اﻟــــــــــــــﺪوال
String Functions -١دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻨﺼﻮص
-٢دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﻮارﯾﺦ واﻷوﻗﺎت Date and Time Functions
Mathematical Functions -٣اﻟﺪوال اﻟﺮﻗﻤﯿﺔ
Conversion Functions -٤دوال اﻟﺘﺤﻮﯾﻞ
Aggregating Functions -٥دوال اﻟﺘﺠﻤﯿﻊ
String Functions أوﻻ :دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻨﺼﻮص
اﻟﺴﻠﺴﻠﺔ اﻟﻨﺼﯿﺔ :ھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷرﻗﺎم أو اﻟﺤﺮوف أو اﻟﺮﻣﻮز أو ﺧﻠﯿﻂ ﻣﺎ ﺑﯿﻨﮭﻢ وﯾﻨﺘﺞ ﺟﻤﻠﺔ .
اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﺪوال اﻟﻨﺼﻮص
] ﺧﻮاص ﺣﺴﺐ اﻟﺪاﻟﺔ [ ,اﻟﺴﻠﺴﻠﺔ اﻟﻨﺼﯿﺔ ( اﻟﺪاﻟﺔ )
88
89
Result
ھﺬه اﻟﺨﺎﻧﺔ رﻗﻢ أول ﺣﺮف ﻓﻲ اﻟﻜﻠﻤﺔ ﯾﺸﺎﺑﮭﮭﺎ وﻻﺣﻆ ﻋﻨﺪﻣﺎ ﻟﻢ ﺗﺤﺼﻞ ﻋﻠﻲ اﻟﺮﻣﺰ أﺻﺪرت ٠ Kh
ﺗﻢ اﻟﻘﺺ ﻣﻦ اﻟﺠﺎﻧﺐ اﻷﯾﺴﺮ ﻟﻠﻮﺻﻮل ﻟﺤﺮف واﺣﺪ وھﻮ أول ﺣﺮف First
ﺗﻢ اﻟﻘﺺ ﻣﻦ اﻟﺠﺎﻧﺐ اﻷﯾﻤﻦ ﻟﻠﻮﺻﻮل ﻟﺤﺮف واﺣﺪ وھﻮ أﺧﺮ ﺣﺮف Last
Like_2ﺗﻢ اﻟﺒﺤﺚ ﻋﻦ ﺣﺮف aﻓﻲ اﻟﻜﻠﻤﺔ وﺗﻢ إﻋﺎدة رﻗﻢ أول ﺣﺮف ﻣﻦ اﻟﯿﺴﺎر ﯾﺸﺎﺑﮭﮫ
WhereAﺗﻢ ﻋﻤﻞ ﺗﺒﺪﯾﻞ ﻟﺤﺮف Aﺑﺎﻟﺮﻣﺰ ؟
To_Stuffﺗﻢ ﻗﺺ اﻟﺤﺮوف ﻣﻦ ١ﺣﺘﻰ ٤ووﺿﻊ ﻛﻠﻤﺔ kokoﻣﻜﺎن اﻟﻨﺺ اﻟﻤﺤﺬوف
)ﻟﯿﺲ ﺷﺮط أن ﺗﻜﻮن ﻋﺪد اﻟﺤﺮوف اﻟﻤﺤﺬوﻓﺔ ﻣﺴﺎوﯾﺔ ﻟﻌﺪد اﻟﺤﺮوف اﻟﻤﻀﺎﻓﺔ (
ﺗﻢ ﺳﺤﺐ ﺟﺰء ﻣﻦ اﻟﻨﺺ ﻣﻦ ﺑﺪاﯾﺔ اﻟﺤﺮف اﻷول وﺣﺘﻰ اﻟﺮاﺑﻊ Sub
SPACE , RTRIM , LTRIM , STR اﻟﺪوال
SQL
Select Name ,
SPACE(2)+Name+SPACE(2) as NewName ,
RTRIM(SPACE(2)+Name+SPACE(2)) as RightTrim ,
LTRIM(SPACE(2)+Name+SPACE(2)) as LeftTrim ,
Salary ,
'Sal : ' + STR(Salary,4) as Sal
90
From teacher
Where Supervisee Is Null
Result
91
وإذا أردﻧﺎ ﺗﻨﺴﯿﻖ اﻟﺸﻜﻞ ﺑﻀﺒﻂ اﻻﺳﻢ ﻟﯿﻜﻮن ﻋﻨﺪ اﻟﻜﻞ ٢٠ﺧﺎﻧ ﺔ ﻓﯿﻤﻜﻨﻨ ﺎ ﻋﻤ ﻞ ذﻟ ﻚ ﻣ ﻦ ﺧ ﻼل ﻋ ﺪ اﻟﺤ ﺮوف اﻟﻔﻌﻠﯿ ﺔ
اﻵن ﻣ ﻦ ﺧ ﻼل اﻟﺪاﻟ ﺔ LENﺛ ﻢ ﻧﻄ ﺮح ٢٠ﻣ ﻦ ھ ﺬا اﻟ ﺮﻗﻢ ﯾﻌﻄﯿﻨ ﺎ ﻋ ﺪد اﻟﺨﺎﻧ ﺎت اﻟﺘ ﻲ ﻻﺑ ﺪ أن ﺗﻤ ﻼ ﻧﻌﻄﯿﮭ ﺎ ﻟﻠﺪاﻟ ﺔ
Spaceﻟﺘﻤﻠﺌﮭﺎ ﺑﺎﻟﻤﺴﺎﻓﺎت
SQL
Select Left(FName,1)+','+Upper(LName)+
) ))Space(20-Len(Left(FName,1)+','+Upper(LName
as Name , Right(phone,8) as Phone
from student
Where PatIndex('___-528%',Phone)=1
Result
وﻟﺰﯾﺎدة اﻟﺘﻨﺴﯿﻖ ﻧﺮﯾﺪ وﺿﻊ ﻧﻘﺎط ﻟﺘﺴﮭﯿﻞ اﻟﺮؤﯾﺔ ﺗﻤﺘﺪ ﻣﻦ اﻻﺳﻢ إﻟﻲ اﻟﺮﻗﻢ ﻓﯿﻤﻜﻨﻨﺎ ذﻟﻚ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ Replace
ﻟﺘﺤﻮﯾﻞ ھﺬه اﻟﻤﺴﺎﻓﺎت إﻟﻲ ﻧﻘﺎط ﻛﺎﻟﺘﺎﻟﻲ
SQL
Select Left(FName,1)+','+Upper(LName)+
)'Replace(Space(20 - Len( Left(FName,1)+' , '+ Upper(LName)) ),' ','.
as Name , Right(phone,8) as Phone
from student
Where PatIndex('___-528%',Phone)=1
Result
92
وﺑﮭﺬا ﻧﻜﻮن ﻗﺪ وﺿﺤﻨﺎ أن ﻻ ﻧﺴﺘﻘﻞ ﺑﮭﺬه اﻟﺪوال اﻟﺒﺴﯿﻄﺔ وﻟﻜﻦ ﻧﻔﻜﺮ ﻓﻲ ﻛﯿﻔﯿﺔ اﻻﺳﺘﻔﺎدة ﻣﻨﮭﺎ ﻋﻨﺪﻣﺎ ﺗﻌﻤﻼ ﻣﻌﺎ
اﻵن ﯾﻤﻜﻨﻨﺎ ﻋﺮض دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﻮارﯾﺦ واﻷوﻗﺎت ﻣﺴﺘﺨﺪﻣﯿﻦ اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ
93
اﺳﺘﺮﺟﻊ أﺳﻤﺎء اﻟﻤﻌﻠﻤﯿﻦ وﺗﺎرﯾﺦ ﺗﻌﯿﻨﮭﻢ ﻣﻜﺘﻮب ﯾﻮم ﺷﮭﺮ ﺳﻨﺔ وذﻟﻚ ﻟﻠﻤﻌﯿﯿﺘﯿﻦ اﻟﺠﺪد ﺧﻼل ھﺬه اﻟﺴﻨﺔ
Query Analyzer Result
Select Name ,DateName (dw,HireDate)+
' - '+DateName(mm,Hiredate)+' Year '+
DateName(yyyy,HireDate) as HireDate
from Teacher
Where DateDiff(yy,HireDate,GetDate())=0
Grid Pane
ﻻﺣﻆ ﻓﻲ ﺟﻤﻠﺔ SQLأﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ اﻟﺪاﻟﺔ DateNameﻟﻠﻮﺻﻮل ﻟﻠﻘﯿﻢ اﻟﻨ ﺼﯿﺔ وﻓ ﻲ اﻟ ﺸﺮط أن ﯾﻜ ﻮن اﻻﺧ ﺘﻼف ﺑ ﯿﻦ ﺗ ﺎرﯾﺦ
اﻟﺘﻌﯿﻦ وﺗﺎرﯾﺦ اﻟﯿﻮم ﻣﻦ ﻣﻨﻄﻖ اﻟﺴﻨﻮات ﯾﺴﺎوي ﺻﻔﺮ ﻟﺬﻟﻚ ﻟﻢ ﺗﺄﺗﻲ إﻻ ﺳﻠﻮى اﻟﻤﻌﯿﻨﺔ اﻟﺠﺪﯾﺪة ھﺬه اﻟﺴﻨﺔ إن ﻛﺎن اﻟﻔﺎرق ١ﺳﻨﺔ
إذن ھﻢ اﻟﻤﻌﯿﻨﯿﻦ اﻟﺴﻨﺔ اﻟﺴﺎﺑﻘﺔ وإن ﻛﺎن أﺻﻐﺮ ﻣﻦ أو ﯾ ﺴﺎوي ١ھ ﻢ اﻟﻤﻌﯿﻨ ﻮن ﻣ ﻦ ﺳ ﻨﺔ ﻓﺄﻗ ﻞ وھﻜ ﺬا وﻻﺣ ﻆ ﻣ ﻊ ﻓ ﻲ Grid
Paneأﻧﻨﺎ ﻧﻜﺘﺐ ﺑﺪﻻ ﻋﻦ اﻟﻔﺎﺻﻠﺔ ) ( ,ﻧﻜﺘﺐ ); ( وﻻﺣﻆ اﻟﺸﺮط ھﻨﺎ ﻗﺎﺋﻢ ﻋﻠﻲ ﺣﻘﻞ ﻣﺤ ﺴﻮب ﻋﻠ ﻲ أن ﯾﻜ ﻮن ﻧﺘﯿﺠﺘ ﮫ ﻣ ﺴﺎوﯾﺔ
ﻟﻠﺼﻔﺮ و ﻻ ﻧﻈﮭﺮه ﻓﻲ اﻟﺨﺎﻧﺔ Outputﻟﻜﻨﮫ ﯾﻈﮭﺮ ﻣﻌﻨﺎ ﻓﻲ اﻟﺸﺮط ﻓﻘﻂ
اﺳﺘﺨﺮج أﺳﻢ اﻟﻄﺎﻟﺐ وﻋﻤﺮه اﻟﺬي ﻋﻤﺮھﻢ أﻛﺒﺮ ﻣﻦ أو ﯾﺴﺎوي ٢١ﻟﺘﺴﻮﯾﺔ أوراق اﻟﺠﯿﺶ
ﻓﯿﻤﻜﻨﻨﺎ ﺣﺴﺎب اﻟﻌﻤﺮ ﻣﻦ ﺧﻼل اﺳﺘﺨﻼص اﻟ ﺴﻨﺔ ﻣ ﻦ اﻟﺘ ﺎرﯾﺦ اﻟﺤ ﺎﻟﻲ ﻣ ﻦ ﺧ ﻼل اﻟﺪاﻟ ﺔ DatePartﺛ ﻢ اﺳ ﺘﺨﻼص
اﻟﺴﻨﺔ ﻣﻦ ﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﺛﻢ ﻃﺮح ﺳﻨﺔ اﻟﯿﻮم ﻣﻦ ﺳﻨﺔ اﻟﻤﯿﻼد ﻟﯿﻜﻮن اﻟﻌﻤﺮ ﺑﺎﻟﺴﻨﻮات
94
ﻻ ﺣﻆ ﻓﻲ اﻟﺸﺮط أﻧﻨﺎ ﺷﺮﻃﻨﺎ أﯾﻀﺎ أن ﯾﻜﻮن اﻟﻨﻮع ذﻛﺮ وھﺬا ﻷﻧﮫ ورق ﺟﯿﺶ وﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ
أﻋﺮض ﺗﺎرﯾﺦ اﻟﯿﻮم وﺗﺎرﯾﺦ اﻟﯿﻮم ﻣﻀﺎف إﻟﯿﮫ ﺷﮭﺮﯾﻦ واﺳﺘﺮﺟﻊ رﻗﻢ اﻟﯿ ﻮم ورﻗ ﻢ اﻟ ﺸﮭﺮ ورﻗ ﻢ اﻟ ﺴﻨﺔ وأﻃ ﺮح ﻣ ﻦ
ﻛﻞ ﻣﻨﮭﻢ واﺣﺪ ووﺿﺢ اﻟﺘﺸﺎﺑﮫ ﺑﯿﻦ اﻟﺪاﻟﺔ DatePartواﻟﺪوال Day , Month , Year
Query Analyzer Result
Select GetDate() as Now ,
DateAdd(mm,2,GetDate()) as Now_2 ,
Day(GetDate() ) as myDay ,
Month(GetDate()) as myMonth,
Year(GetDate()) as myYear ,
DatePart(dd,GetDate()) as myDay
Grid Pane
95
96
ھﺬه ھﻲ ﻃﺮﯾﻘ ﺔ اﻟﺘﺤﻮﯾ ﻞ ﺑﻜ ﻼ ﻣ ﻦ اﻟﻨ ﻮﻋﯿﻦ وﻗ ﺪ ﺗﺤﺘ ﺎج إﻟ ﻲ ذﻟ ﻚ ﻓ ﻲ أﺣﯿ ﺎن ﻗﻠﯿﻠ ﺔ ﻟﻜﻨ ﻚ ﺗﺤﺘﺎﺟﮭ ﺎ ﻓﮭ ﺎ ھ ﻲ اﻟﻄﺮﯾﻘ ﺔ
( Like اﻟﺒﺴﯿﻄﺔ ﻟﻠﺘﺤﻮﯾﻞ ﺑﯿﻦ اﻷﻧﻮاع ﻛﯿﻔﻤﺎ ﺗﺸﺎء ) ﻓﻘﺪ ﺗﺤﺘﺎج اﻟﻲ ﺗﺤﻮﯾﻞ اﻷرﻗﺎم اﻟﻲ ﻧﺼﻮص ﻻﺳﺘﺨﺪام داﻟﺔ ﻣﺜﻼ
ﻃﺮﯾﻘﺔ ﺟﻤﯿﻠﺔ ﻟﺘﺘﺒﻊ اﻟﺘﻮارﯾﺦ أﻧﻈﺮ اﻟﺘﺎﻟﻲConvert وﺗﻮﻓﺮ اﻟﺪاﻟﺔ
SQL ٌResult
SELECT CONVERT(char(12), GETDATE(), 0) Feb 5 2006
SELECT CONVERT(char(12), GETDATE(), 1) 02/05/06
SELECT CONVERT(char(12), GETDATE(), 8) 06:37:02
CHAR وھﺬا ﻣﻦ ﺧﻼل ﻋﺪد اﻟﺨﺎﻧﺎت اﻟﻤﻮﺟ ﻮدة ﻓ ﻲConvert ﯾﻤﻜﻨﻚ ﻋﺮض ﺗﻨﺴﯿﻘﺎت ﻟﻠﺘﻮارﯾﺦ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ
ﺣﺎول زﯾﺎدة ھﺬا اﻟﻌ ﺪد ﻟﺮؤﯾ ﺔ اﻟﺘ ﺎرﯾﺦ ﻛﺎﻣ ﻞ وﺑﻌ ﺪ ذﻟ ﻚ ﻟ ﻚ أن ﺗﺠ ﺮب ﻓ ﻲ اﻟﻤﻌﺎﻣ ﻞ اﻷﺧﯿ ﺮ ﻓﻜ ﻞ رﻗ ﻢVarchar أو
ﯾﺤﻤﻞ ﺗﻨﺴﯿﻖ ﻟﻠﺘﺎرﯾﺦ ﻣﻌﺪ ﻣﺴﺒﻘﺎ
97
Function Use
§ AVG ﺗﺤﺴﺐ ﻣﺘﻮﺳﻂ اﻟﻘﯿﻢ ﻓﻲ ﺣﻘﻞ ﻋﺪدي )ﺗﮭﻤﻞ اﻟﻘﯿﻤﺔ (null
§ COUNT ﺗﺤﺴﺐ ﻋﺪد اﻟﺴﺠﻼت ﻓﻲ اﻟﺤﻘﻞ وأن وﺿﻌﻨﺎ * ﺗﺤﺴﺐ ﻋ ﺪد
اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول )ﺗﮭﻤﻞ اﻟﻘﯿﻤﺔ (null
§ MAX ﺗﺤﺪد أﻛﺒﺮ ﻗﯿﻤﺔ ﻓﻲ اﻟﺤﻘﻞ
§ MIN ﺗﺤﺪد أﺻﻐﺮ ﻗﯿﻤﺔ ﻓﻲ اﻟﺤﻘﻞ
§ SUM ﺗﺤﺴﺐ ﻣﺠﻤﻮع اﻟﻘﯿﻢ ﻓﻲ ﺣﻘﻞ ﻋﺪدي
§ STDEV ﺗﺤﺴﺐ اﻻﻧﺤﺮاف اﻟﻤﻌﯿﺎري ﻟﺘﻌﺒﯿﺮ أو ﺣﻘﻞ رﻗﻤﻲ
§ STDEVP ﺗﺤﺴﺐ ﻛﺜﺎﻓﺔ اﻻﻧﺤﺮاف اﻟﻤﻌﯿﺎري ﻟﻤﺠﻤﻮﻋﺔ ﻗﯿﻢ أو ﺣﻘﻞ
§ VAR ﺗﺤﺴﺐ اﻟﺘﺒﺎﯾﻦ
§ VARP ﺗﺤﺴﺐ ﻛﺜﺎﻓﺔ اﻟﺘﺒﺎﯾﻦ
Grouping ,Cube, Case , Rollup , Compute , Case
ﺷﻜﻞ ﯾﻮﺿﺢ ﻣﻌﻨﻲ ﺗﻠﻚ اﻟﻌﻤﻠﯿﺎت
ﻻﺣﻆ ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ أﻧﻨﺎ اﺳ ﺘﻄﻌﻨﺎ ﺟﻤ ﻊ اﻟﻤﺮﺗﺒ ﺎت واﻟﺤ ﺼﻮل ﻋﻠ ﻲ ﻣﺘﻮﺳ ﻄﮭﺎ وﻋ ﺪد اﻟﻤ ﻮﻇﻔﯿﻦ إذا ﻋ ﺪدﻧﺎ اﻟﺤﻘ ﻞ
)اﻟﻤﺮﺗﺐ ( وإذا ﻋﺪدﻧﺎ اﻟﺤﻘﻞ اﻟﺨﺎص ﺑﻘﺴﻢ اﻟﻌﻤﻞ ﺳﻨﻼﺣﻆ أﻧﮫ ﺗﻢ إﯾﺠﺎد ﻋﺪد اﻟﻘ ﯿﻢ وﻟﻜ ﻦ ﺑ ﺪون اﻟﻘﯿﻤ ﺔ Nullوﻻﺣ ﻆ
أﻧﻨﺎ ﻓﻲ اﺳﺘﻄﺎﻋﺘﻨﺎ أﯾﻀﺎ اﻟﻮﺻﻮل ﻷﻋﻠﻲ ﻣﺮﺗﺐ و أﻗﻞ ﻣﺮﺗﺐ دﻋﻨﺎ ﻧﻔﻌﻞ ذﻟﻚ ﻣﻦ ﺧﻼل ھﺬه اﻟﺪوال
ﻓﻲ اﻟﺸﻜﻞ اﻟﻌﺎم ﻷي داﻟﺔ ﺗﺠﻤﻌﯿﮫ ﻟﻮ ﻻﺣﻈﻨﺎ أﻧﮫ ﺑﺈﻣﻜﺎﻧﻨﺎ ﻛﺘﺎﺑﺔ ﻛﻠﻤﺔ Allأي اﻟﻜﻞ أو ﻛﻠﻤﺔ Distinctﺑﻤﻌﻨﻲ ﺑ ﺪون
ﺗﻜﺮار وھﺬا اﺧﺘﯿﺎري وﺗﻌﻨﻲ ﻣﺎ ﯾﻠﻲ :
§ Distinctﺗﺠﻌﻞ اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻲ اﻟﻘﯿﻢ ﻓﻲ اﻟﺤﻘﻞ وﻟﻜﻦ أن ﻟﻢ ﺗﺘﻜﺮر
ﺗﺠﻌﻞ اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻲ ﻛﻞ اﻟﻘﯿﻢ وﻣﻦ ﺿﻤﻨﮭﺎ اﻟﻘﯿﻢ اﻟﻤﻜﺮرة وھﻲ اﻟﺤﺎﻟﺔ اﻻﻓﺘﺮاﺿﯿﺔ . § All
§ ﻛﻞ اﻟﺪوال ﺗﺘﻼﺷﻲ اﻟﻘﯿﻤﺔ nullإﻻ اﻟﺤﺎﻟﺔ اﻟﻮﺣﯿﺪة )*(.COUNT
§ ﻋﻨﺪ اﺳﺘﺨﺪام اﻷﻣﺮ Group Byﯾﺘﻢ ﻋﻤﻞ ﻓﺮز ﺗﻠﻘﺎﺋﻲ ﺗﺼﺎﻋﺪي ﻟﻘﯿﻢ اﻟﺤﻘﻞ اﻟﻤﺴﺘﺨﺪم
98
أﺳﺘﺮﺟﻊ أﻛﺒﺮ ﻣﺮﺗﺐ وأﻗﻞ ﻣﺮﺗﺐ وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت وﻣﺘﻮﺳﻂ اﻟﻤﺮﺗﺒﺎت وأول ﺗ ﺎرﯾﺦ ﺗﻌﯿ ﯿﻦ وآﺧ ﺮ ﺗ ﺎرﯾﺦ ﺗﻌﯿ ﯿﻦ ﻣ ﻦ
ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ.
SQL
Select Max(Salary) as Max ,Min(Salary) as Min ,
Sum(Salary) as Sum, Avg(Salary) as Avg,
Max(HireDate) as MaxDate , Min(HireDate) as MinDate
From Teacher
ﻟﻼﺳﺘﺨﺪام اﻷواﻣﺮ اﻟﺘﺠﻤﯿﻌﯿﺔ ( Grid Pane ) أﺧﺘﺮ اﻷﯾﻘﻮﻧﺔ
Result
ﻻﺣﻆ ﻓﻲ اﻟﺠﺰء Grid Paneأﻧﮫ ﻗﺪ ﻇﮭﺮ ﻋﻤﻮد ﺟﺪﯾﺪ ﯾﺤﻤﻞ أﺳﻢ Group Byوﯾﻈﮭﺮ ھﺬا اﻟﺤﻘﻞ ﺑﻨﺎء ﻋﻠ ﻲ
ﺿﻐﻂ ﻋﻠﻲ أﯾﻘﻮﻧﺔ اﻷواﻣﺮ اﻟﺘﺠﻤﯿﻌﯿﺔ اﻟﻤﺬﻛﻮرة أو ﺑﺎﻟﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺛﻢ اﺧﺘﯿﺎر Group Byوﻻﺣﻆ أﯾ ﻀﺎ
أﻧﻨﺎ ﺗﻌﺎﻣﻠﻨﺎ ﻣﻊ اﻟﺘﺎرﯾﺦ ﻓﺎﻟﺪاﻟﺔ Maxأﻋﻄﺖ أﺣﺪث ﺗﺎرﯾﺦ واﻟﺪاﻟﺔ Minأﻋﻄﺖ أﻗﺪم ﺗﺎرﯾﺦ
ﻣﺜﺎل
أﺳﺘﺮﺟﻊ ﻋﺪد اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬي ﯾﻌﻤﻠﻮا ﺑﺄﻗﺴﺎم وﻋﺪد اﻟﻤﻌﻠﻤﯿﻦ وﻋﺪد اﻷﻗﺴﺎم اﻟﺘﻲ ﯾﻌﻤﻞ ﺑﮭﺎ ﻣﻌﻠﻤﯿﻦ ﻣﻦ ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ
وأرﺟﻊ ﻋﺪد اﻟﻘﯿﻢ اﻟﻤﺨﺘﻠﻔﺔ ﻓﻲ ﺣﻘﻞ ﻗﺴﻢ اﻟﻌﻤﻞ ﺣﺘﻲ وﻟﻮ ﻛﺎﻧﺖ . Null
SQL Result
Select Count(DeptWork) as TeacherWork ,
Count(*) as Teacher ,
Count(Distinct DeptWork) as DeptWork,
Count(Distinct IsNull( DeptWork,0)) as AllValue
From Teacher
Grid Pane
راﺟﻊ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ﻟﻤﻼﺣﻈﺔ اﻷرﻗﺎم ﻋﻨﺪ ﻋﺪ ﺣﻘﻞ ﻗﺴﻢ اﻟﻌﻤﻞ أﻋﻄﻲ ٨ﻷن ھﻨﺎك ٢ﻣﻌﻠﻤﯿﻦ ﻟﻢ ﯾﺘﻢ ﺗﺜﺒﯿﺘﮭﻢ ﻓﻲ ﻗﺴﻢ ﺣﺘ ﻰ
اﻵن ﻓﻘﺪ ﺗﻼﺷﺖ Countاﻟﻘﯿﻤﺔ Nullواﻟﻘﯿﻤﺔ ١٠ھﻲ ﻧﺎﺗﺞ ﻋﺪد اﻟﺼﻔﻮف وھﻢ ﻋﺪد اﻟﻤﻌﻠﻤﯿﻦ ﺑﺪون اﻷﺧﺬ ﻓﻲ اﻻﻋﺘﺒ ﺎر
اﻟﻘﯿﻤﺔ nullوﻋﻨﺪ اﺳﺘﺨﺪام اﻟﺪاﻟﺔ Distinctﻟﻌﺪ اﻟﻘﯿﻢ اﻟﻐﯿﺮ ﻣﻜﺮرة ﻓﺴﻮف ﺗﻼﺣﻆ آن اﻟﻘﯿﻢ اﻟﻤﻮﺟﻮدة ﻓﻲ ھﺬا اﻟﺤﻘﻞ ھﻲ
١و ٢و اﻟﻘﯿﻤﺔ Nullﻻ ﺗﺄﺧﺬ ﻓﻲ اﻻﻋﺘﺒﺎر ﻟﺬﻟﻚ ﺗﻢ إﻧﺘﺎج ٢وھﻢ اﻟﻘﺴﻤﯿﻦ اﻟﺬﯾﻦ ﯾﻌﻤﻠﻮا ﺑﮭﻢ ﻣﻮﻇﻔﯿﻦ وﻟﻌﺪ اﻟﻘﯿﻢ ﻓﻲ ﺣﻘ ﻞ
ﺣﺘﻰ وﻟﻮ ﻛﺎﻧﺖ ﻗﯿﻤﺔ ﻓﺎرﻏﺔ اﺳ ﺘﺨﺪﻣﻨﺎ اﻟﺪاﻟ ﺔ IsNullﻹﻋﻄ ﺎء ﻗﯿﻤ ﺔ ﻟﻠﺤﻘ ﻞ اﻟﻔ ﺎرغ وﺑﮭ ﺬه اﻟﻄﺮﯾﻘ ﺔ ﺳ ﯿﺘﻢ ﻋ ﺪه ﻷﻧ ﮫ ﯾﺄﺧ ﺬ
ﻗﯿﻤﮫ ﻟﺬﻟﻚ ﻛﺎن اﻟﻨﺎﺗﺞ ٣وھﻢ ١و ٢و nullاﻟﺘﻲ ﺗﻢ ﺗﺤﻮﯾﻠﮭﺎ إﻟﻲ ٠
ھﺬه ﻣﻌﻠﻮﻣﺎت ﻓﻌﻼ ﻗﯿﻤﺔ وﻣﻔﯿﺪة وﻟﻜﻦ ﻣﺎذا ﯾﺤﺪث إذا أردﻧﺎ ﻋﺮض ﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت وﻟﻜﻦ ﻟﻜﻞ ﻗﺴﻢ ﻋﻠﻲ ﺣ ﺪه أﻧﻈ ﺮ
ﻟﻠﺸﻜﻞ اﻟﺘﺎﻟﻲ ﺳﻮف ﺗﻼﺣﻆ أﻧﻨﺎ اﺳﺘﻄﻌﻨﺎ اﻟﻮﺻﻮل ﻟﻤﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻓﻲ اﻟﻘﺴﻢ رﻗﻢ ١وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻟﻠﻘﺴﻢ رﻗﻢ
٢وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻟﻠﻐﯿﺮ ﻣﺤﺪد ﻟﮭﻢ أﻗﺴﺎم ﻋﻤﻞ ﺣﺘﻰ اﻵن أن ﻓﻜﺮت ﻟﻠﺤﻈﺔ ﻓﺴﻮف ﺗﻘﻮل ﻟﺤﺴﺎب اﻟﻤﺠﻤﻮع ﯾﻤﻜﻨﻨﺎ
اﺳﺘﺨﺪام اﻟﺪاﻟﺔ Sumوﻟﻜﻨﻨﺎ ﻧﺮﯾﺪ إﺻﺪار أﻣﺮ ﺑﺤﯿﺚ أن ﯾﺘﻢ اﻟﺘﺠﻤﯿﻊ ﻋﻠﻲ ﺣﺴﺐ ﻛﻞ ﻗﯿﻤﺔ ﻣﻔﺮدة ﻣﻦ ﻗﺴﻢ اﻟﻌﻤﻞ.
99
ﻹﺻﺪار أﻣﺮ ﺣﺘﻰ ﯾﺘﻢ اﻟﺘﺠﻤﯿﻊ ﺑﻌﺪ ﺗﻘﺴﯿﻢ ﺣﻘﻞ ﻣﺎ ﻓﺌﺎت ھﻮ ﻣﻦ ﺧﻼل اﻷﻣﺮ Group Byﺑﻤﻌﻨﻲ ﺟﻤﻊ ﻋﻠﻲ ﺣﺴﺐ
ﻟﯿﺼﺒﺢ اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﺠﻤﻠﺔ SELECT
)اﻟﺤﻘﻞ (اﻟﺪاﻟﺔ اﻟﺘﺠﻤﯿﻌﯿﺔ ,اﻟﺤﻘﻮل Select
اﺳﻢ اﻟﺠﺪول From
] اﻟﺸﺮط [ Where
] اﻟﺤﻘﻮل اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﺠﻤﯿﻊ ﻋﻠﻲ أﺳﺎﺳﮭﺎ [ Group By
] اﻟﺤﻘﻮل اﻟﻤﺮاد ﻓﺮزھﺎ وﻃﺮﯾﻘﺔ اﻟﻔﺮز [ Order By
ﻻﺣﻆ ﻣﻮﻗﻊ اﻷﻣﺮ Group Byوﻻﺣﻆ أﻧﻨﺎ ﯾﻤﻜﻨﻨﺎ اﻟﺘﺠﻤﯿﻊ ﻋﻠﻲ ﺣﺴﺐ ﺣﻘﻞ ﻣﺎ أو ﺣﺘﻰ اﻟﺘﺠﻤﯿ ﻊ ﻋﻠ ﻲ ﺣ ﺴﺐ أﻛﺜ ﺮ
ﻣﻦ ﺣﻘﻞ ﻛﻤﺎ ﺳﻨﺮي وﻣ ﻦ أھﻢ ﺧﺼﺎﺋﺺ Group By
§ ﺗﻘﺴﻢ اﻟﺼﻔﻮف ﻓﻲ اﻟﺠﺪول ﻟﻤﺠﻤﻮﻋﺎت ﺻﻐﯿﺮة
§ ﯾﻮﺟﺪ ﺧﻄﺄ ﻋﻨﺪ اﺳﺘﺨﺪام ﺣﻘﻞ ﻻ ﯾﺄﺗﻲ ﺑﻨﺘﺎﺋﺞ ﻣﺠﻤﻌﺔ ) ﻛﻞ ﺣﻘﻞ ﻟﯿﺲ ﻟ ﮫ داﻟ ﺔ ﻣﺠﻤﻌ ﮫ ﻓ ﻲ اﻟﺠ ﺰء Select
ﻻﺑﺪ أن ﯾﻜﻮن ﻣﻮﺿﻮع ﻓﻲ اﻟﺠﺰء Group Byﺣﺘ ﻰ ﯾ ﺘﻢ اﻟﺘﺠﻤﯿ ﻊ ﻋﻠ ﻲ أﺳﺎﺳ ﮫ أو ﯾﻤﻜ ﻦ اﻟﺘﺠﻤﯿ ﻊ ﻋﻠ ﻲ
أﺳﺎس ﺣﻘﻞ ﻏﯿﺮ ﻣﻮﺟﻮد ﻓﻲ اﻟﺠﺰء (Select
§ اﻟﺸﺮوط ﻓﻲ ﺟﻤﻠﺔ Whereﺗﻨﻔﺬ ﻋﻠﻲ اﻟﻘﯿﻢ ﺑﻌﺪ اﻟﺘﺠﻤﯿﻊ
SQL Result
)Select DeptWork, Sum(Salary
From Teacher
Group By DeptWork
Grid Pane
ﻻﺣﻆ أﻧﻨﺎ ﻟﻢ ﻧﺴﺘﺨﺪم ﻣﻊ اﻟﺤﻘﻞ DeptWorkأي داﻟﺔ ﺗﺠﻤﯿﻌﯿﺔ وﻟﻜﻨﻨﺎ إﺳﺘﺨﺪﻣﻨﺎه ﻣﻊ
اﻟﺠﺰء Group Byأن ﻇﮭﺮ ﺣﻘﻞ ﻣﺜﻞ ھﺬا ﻓﻲ اﻟﺠﺰء Selectوﻟﻢ ﯾﻈﮭﺮ ﻓﻲ اﻟﺠﺰء
Group Byﻓﺴﻮف ﯾﺤﺪث ﺧﻄﺄ وﯾﻤﻜﻨﻨﺎ أﯾﻀﺎ ﻋﺪم إﻇﮭﺎر اﻟﺤﻘﻞ DeptWorkﻓﻲ
اﻟﺠﺰء Selectوﻧﺴﺘﺨﺪﻣﮫ ﻓﻲ اﻟﺠﺰء Group Byﻛﻤﺎ ﻧﺮﯾﺪ
100
ﻣﺎذا ﻟﻮ أردﻧﺎ ﻋﺮض رﻗﻢ اﻟﻘﺴﻢ وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻟﻜﻞ ﻗﺴﻢ ﻟﻜﻞ ﺑﻠﺪ ؟؟ ﻟﻮ ﻓﻜﺮﻧﺎ ﻟﻠﺤﻈﺔ ﺳﻨﺮي أﻧﻨ ﺎ ﻧﺮﯾ ﺪ أن ﻧﺤ ﺴﺐ
ﻣﺠﻤ ﻮع اﻟﻤﺮﺗﺒ ﺎت ﻋﻠ ﻲ ﺣ ﺴﺐ رﻗ ﻢ اﻟﻘ ﺴﻢ وأﯾ ﻀﺎ ﻋﻠ ﻲ ﺣ ﺴﺐ اﻟﺒﻠ ﺪ وﯾﻤﻜﻨﻨ ﺎ ھ ﺬا ﻣ ﻦ ﺧ ﻼل اﻟﺠﻤﻠ ﺔ Group By
ﻟﻠﺘﺠﻤﯿﻊ ﻋﻠﻲ ﺣﺴﺐ أﻛﺜﺮ ﻣﻦ ﺣﻘﻞ أﻧﻈﺮ ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ وﺳﯿﺘﻢ ﻓ ﺮز ﺗﻠﻘ ﺎﺋﻲ ﺗ ﺼﺎﻋﺪي ﻻﺧ ﺮ ﺣﻘ ﻞ ﯾ ﺬﻛﺮ ﻓ ﻲ اﻟﺠ ﺰء
. Group By
اﺳﺘﺮﺟﻊ رﻗﻢ اﻟﻘﺴﻢ واﻟﺒﻠﺪ وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻟﻜﻞ ﻗﺴﻢ ﻟﻜﻞ ﺑﻠﺪ ﻣﺮﺗﺒﺎ ﺣﺴﺐ اﻟﻘﺴﻢ
Query Analyzer Result
Select DeptWork,City,
)Sum(Salary
From Teacher
Group By City ,DeptWork
Grid Pane
ﻻﺣﻆ اﻟﻤﺠﺎﻣﯿﻊ أﻧﮭﺎ ﻛﻤﺎ ﻧﺘﻮﻗﻊ وﻻﺣﻆ أﻧﮫ ﺗﻢ اﻟﻔﺮز ﻋﻠﻲ ﺣﺴﺐ اﻟﺤﻘﻞ ﻗﺴﻢ اﻟﻌﻤﻞ ﻷﻧﮫ ﻓﻲ أﺧﺮ اﻟﺠﺰء Group By
وﻟﯿﺲ ﻷﻧﮫ ﺟﺎء ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﺠﺰء Selectوﻟﻜﻦ ﻛﯿﻒ ﻧﻔﻌﻞ ھﺬا ﻓﻲ Grid Paneﺣﯿ ﺚ أﻧﻨ ﺎ ﯾﻤﻜﻨﻨ ﺎ ﺗﺮﺗﯿ ﺐ اﻟﺤﻘ ﻞ
ﻓﻲ ﺟﻤﻠﺔ Selectوﻟﯿﺲ ﺗﺮﺗﯿﺒﮫ ﻓﻲ ﺟﻤﻠﺔ Group Byﻷﻧﮭﺎ ﺗﺄﺧﺬ ﻧﻔﺲ اﻟﺘﺮﺗﯿ ﺐ اﻟ ﺬي ﯾﺮﺗ ﺐ ﺑ ﮫ Selectﻟﻌﻤ ﻞ
ذﻟﻚ أﻓﺘﺢ اﻟﻘﯿﻤﺔ Group Byﻟﻠﺤﻘﻞ اﻷول ﺛﻢ اﺧﺘﺎر أي ﺷﻲ ﻓﺒﮭﺬا ﯾﻜﻮن Group Byﻋﻠﻲ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ ﻓﻘ ﻂ ﺛ ﻢ
ﺑﻌﺪ ذﻟﻚ أرﺟﻊ واﺧﺘﺎر Group Byﻟﻠﺤﻘ ﻞ اﻷول ﺑﮭ ﺬا اﻟﺤﻘ ﻞ اﻟ ﺬي ﺗ ﻢ ﻋﻠﯿ ﮫ ﺟﻤﻠ ﺔ Group Byﻣ ﺆﺧﺮا ھ ﻲ ﻣ ﺎ
ﺳﯿﺘﻢ ﻋﻠﯿﮫ اﻟﻔﺮز
اﺳﺘﺮﺟﻊ رﻗﻢ اﻟﻘﺴﻢ واﻟﺒﻠﺪ وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻟﻜﻞ ﻗﺴﻢ ﻟﻜﻞ ﺑﻠﺪ ﻣﺮﺗﺒﺎ ﺣﺴﺐ اﻟﻘﺴﻢ ﺑﺸﺮط أن ﯾﻜﻮن ﻣﺠﻤ ﻮع اﻟﻤﺮﺗ ﺐ
أﻛﺒﺮ ﻣﻦ ٢٠٠٠
SQL Result
Select DeptWork,City,
)Sum(Salary
From Teacher
Where Sum(Salary) > 2000 ﺧﻄﺄ
Group By City ,DeptWork
ھﺬا اﻟﺨﻄﺄ ﻷﻧﻨﺎ ﻏﯿﺮ ﻣﺴﻤﻮح ﻟﻨﺎ وﺿﻊ ﺷﺮط ﻋﻠﻲ ﺣﻘﻞ ﺑﺪاﻟﺔ ﺗﺠﻤﯿﻌﯿﺔ داﺧﻞ اﻟﺠﺰء Whereﯾﻮﺟﺪ ﻣﻜ ﺎن ﻣﺨ ﺼﺺ
ﻟﻔﺮض اﻟﺸﺮوط ﻋﻠﻲ اﻟﺤﻘﻮل ذات اﻟﺪوال اﻟﺘﺠﻤﯿﻌﯿﺔ وھﻮ اﻟﺠﺰء HAVING
101
اﺳﺘﺮﺟﻊ رﻗﻢ اﻟﻘﺴﻢ واﻟﺒﻠﺪ وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻟﻜﻞ ﻗﺴﻢ ﻟﻜﻞ ﺑﻠﺪ ﻣﺮﺗﺒﺎ ﺣﺴﺐ اﻟﻘﺴﻢ ﺑﺸﺮط أن ﯾﻜﻮن ﻣﺠﻤ ﻮع اﻟﻤﺮﺗ ﺐ
أﻛﺒﺮ ﻣﻦ ٢٠٠٠و ﯾﻜﻮﻧﻮا ﻣﻦ اﻟﺮﺟﺎل
SQL Result
Select DeptWork,City,
)Sum(Salary
From Teacher
'Where Gender='M
Group By City ,DeptWork
Having Sum(Salary)>2000
Grid Pane
ﻻﺣﻆ ﻓﻲ Grid Paneإذا أردﻧﺎ ﻋﻤﻞ ﺷﺮط ﻓﻲ ﺟﻤﻠﺔ Havingﻧﻜﺘﺐ اﻟﺸﺮط ﻓﻲ Criteriaﻣﺒﺎﺷﺮة وھﺬا ﻷﻧﻨﺎ
ﻣﺨﺘﺎرﯾﯿﻦ دوال اﻟﺘﺠﻤﯿﻊ وھﺬا اﻻﻓﺘﺮاﺿﻲ وإن أردﻧﺎ ﻋﻤﻞ ﺷﺮط ﻋﺎدي ﻟﻠﺠ ﺰء Whereﻧﺨﺘ ﺎر ﻛﻠﻤ ﺔ Whereﻣ ﻦ
ﻗﺎﺋﻤﺔ Group By
اﻟﺠﺰء Comput
ﯾﺨﺘﺺ ﺑﺎل Query Analyzerوھﻮ ﯾﻘﻮم ﺑﺘﺠﻤﯿﻌﺎت ﻓﺮﻋﯿﺔ وإﺟﻤﺎﻟﯿﺔ
ﻣﺒ ﺪأﯾﺎ إذا ﺗ ﻢ ﻃﻠ ﺐ ﻣﻨ ﻚ أن ﺗﻈﮭ ﺮ أﺳ ﻢ اﻟﻤﻌﻠ ﻢ وﻣﺮﺗﺒ ﮫ وﻓ ﻲ اﻟﻨﮭﺎﯾ ﺔ إﺟﻤ ﺎﻟﻲ اﻟﻤﺮﺗﺒ ﺎت ﻓ ﺴﻮف ﯾﻘ ﻮم ﺑﮭ ﺬا اﻟﺠ ﺰء
Computﻛﺎﻟﺘﺎﻟﻲ
Select name , salary
from teacher
)Compute sum(salary
ﻓﺘﺼﺒﺢ اﻟﻨﺘﯿﺠﺔ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
102
103
ﻻﺣﻆ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ With Rollupﺑﻌﺪ اﻟﺤﻘﻞ DeptWorkﻓﻲ اﻟﺠﺰء Group Byوھﻲ
ﺗﻌﻨ ﻲ إﻇﮭ ﺎر اﻹﺟﻤﺎﻟﯿ ﺎت واﻹﺟﻤﺎﻟﯿ ﺎت اﻟﻔﺮﻋﯿ ﺔ ﻋﻠ ﻲ ﺣ ﺴﺐ ﺣﻘ ﻞ DeptWorkوھ ﻮ ﻣ ﺎ ﺗ ﻢ ﻓ ﻲ
اﻟﻨﺘﯿﺠ ﺔ ﺑﺎﻟﻨ ﺴﺒﺔ ﻟﻠﻤﻌﻠﻤ ﯿﻦ اﻟ ﺬﯾﻦ ﻟﯿ ﺴﻮا ﻟﮭ ﻢ أﻗ ﺴﺎم ) ﻓﻘ ﺪ ﺗ ﻢ ﻧﻘ ﻞ اﻟﻤﻌﻠ ﻢ Hakimاﻟ ﻲ ﻗ ﺴﻢ ٢
ﻟﻤﻼﺣﻈﺔ ﺑﻌﺾ اﻟﻨﺘﺎﺋﺞ اﻟﺘﻲ ﺳﻮف ﺗﻈﮭﺮ ﻣﻌﻨﺎ ﻓﯿﻤﺎ ﺑﻌﺪ ( ﻓﻘ ﺪ أﻇﮭ ﺮ إﺟﻤ ﺎﻟﻲ اﻟﻤﺮﺗﺒ ﺎت ﺑ ﮫ وﺑﻌ ﺪ ذﻟ ﻚ
اﻟﻘﺴﻢ رﻗﻢ ١وﺑﻌﺪه اﻟﻘﺴﻢ رﻗﻢ ٢وﺑﻌﺪ ذﻟﻚ اﻟﺨﺎﻧﺔ Nullوھ ﻲ ﺗﻨﺘﺠﮭ ﺎ اﻟﺪاﻟ ﺔ Rollupﺣﺘ ﻲ ﺗﻨ ﺘﺞ
أﻣﺎﻣﮭﺎ اﻹﺟﻤﺎﻟﯿﺎت اﻟﻜﻠﯿﺔ ﻛﻤﺎ ھﻮ ﻇﺎھﺮ أﻣﺎﻣﻨﺎ إﺟﻤﺎﻟﻲ ﻣﺮﺗﺒ ﺎت اﻷﻗ ﺴﺎم ﺟﻤﯿﻌ ﺎ وﻻﺣ ﻆ ﻟﻌﻤ ﻞ ذﻟ ﻚ ﻓ ﻲ
ال Grid Paneﻓﻈ ﺎھﺮ أﻣﺎﻣﻨ ﺎ اﻟﺠ ﺰء اﻟﻘ ﺪﯾﻢ ﻟ ﯿﺲ ﺑ ﮫ ﻣ ﺸﺎﻛﻞ وﻟﻜ ﻦ ﻛﯿ ﻒ ﻧ ﻀﯿﻒ اﻟﺠ ﺰء اﻟﺠﺪﯾ ﺪ
With Rollupﻓﯿﻤﻜﻨﻨﺎ اﻟﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺛﻢ اﺧﺘﯿﺎر Propertiesوﻣﻨﮭﺎ ﻛﻤﺎ ھﻮ ﻣﻮﺿ ﺢ
ﺑﺎﻟ ﺸﻜﻞ ﻧﺨﺘ ﺎر Group By Extensionوﻣﻨﮭ ﺎ ﻧﺨﺘ ﺎر With Rollupﺛ ﻢ ﻧ ﻀﻐﻂ Close
أﻣﺎ اﻻﺧﺘﯿﺎر Allﻓﮭﻮ اﻻﻓﺘﺮاﺿﻲ اﻟﻌﺎم اﻟﺬي ﺗﻢ ﺷﺮﺣﮫ ﺳﺎﺑﻘﺎ أﻣﺎ اﻻﺧﺘﯿﺎر With Cubeﺳﻮف ﯾﺘﻢ
ﺷﺮﺣﮫ ﻻﺣﻘﺎ .
وﻟﻜﻦ ﻣﺎذا إذا أرﻧﺎ ﻋﻤﻞ ﻣﺎ ذﻛﺮﻧﺎه ﺳﺎﺑﻘﺎ وھﻮ أن ﯾﻌﺮض إﺟﻤﺎﻟﻲ اﻟﻤﺮﺗﺒﺎت ﻓﻲ ﻛﻞ ﻗﺴﻢ ﻟﺬﻛﻮر ﻣ ﺮة وﻟﻺﻧ ﺎث ﻣ ﺮة ﺛ ﻢ
إﺟﻤﺎﻟﻲ ﻣﺮﺗﺒﺎت اﻟﻘﺴﻢ وھﻜﺬا ﻓﻲ اﻟﻨﮭﺎﯾﺔ اﻹﺟﻤﺎﻟﻲ اﻟﻜﻠﻲ
)إذا ﻛﻨ ﺖ ﺗﺮﯾ ﺪ ﻋﻤ ﻞ إﺟﻤﺎﻟﯿ ﺎت ﻓﺮﻋﯿ ﺔ IIوإﺟﻤﺎﻟﯿ ﺎت ﻓﺮﻋﯿ ﺔ Iوإﺟﻤﺎﻟﯿ ﺎت ﻛﻠﯿ ﮫ Iﻓ ﺴﻮف ﺗﻜ ﻮن اﻟﻜﻠﻤ ﺔ اﻷﺳﺎﺳ ﯿﺔ
With Rollupھﻲ أﺳﮭﻞ وأھﻢ ﻃﺮﯾﻖ(
ﻟﻌﻤﻞ ذﻟﻚ ﺳﻮف ﻧﺠﻤﻊ ﻋﻠﻲ ﺣﺴﺐ اﻟﻨﻮع أي أﻧﻨﺎ ﺳﻮف ﻧ ﻀﻌﮫ ﻓ ﻲ اﻟﺠ ﺰء Group Byوﻷﻧﻨ ﺎ ﻧﺮﯾ ﺪ اﻟﺘﺮﺗﯿ ﺐ أوﻻ
ﻟﻠﻘﺴﻢ ﺛﻢ ﻣﻦ داﺧﻠﺔ اﻟﻨﻮع ﻧﻀﻊ اﻟﻘﺴﻢ ﻓﻲ ﺑﺪاﯾﺔ Group Byوﺑﻌﺪه اﻟﻨﻮع وﺑﻌﺪھﻢ اﻟﻜﻠﻤﺔ With Rollup
Query Analyzer Result
Select DeptWork ,Gender,
Sum(Salary) as Salary
From Teacher
Group By
DeptWork ,Gender with Rollup
Grid Pane
ﻻﺣﻆ أﻧﮫ ﻗﺪ ﺗﻢ إﻇﮭﺎر ﻣﺮﺗﺒﺎت اﻟﻤﻌﻠﻤﯿﻦ اﻟﻐﯿﺮ ﻣﺤﺪد ﻟﮭﻢ ﻗﺴﻢ) ١ﻣﻌﻠﻢ( ﺛﻢ إﺟﻤﺎﻟﻲ ﻣﺎﻓﻲ اﻟﻘﺴﻢ ﻛﻠﮫ ﺛ ﻢ
اﻟﻘﺴﻢ اﻟﺬي ﯾﻠﯿﮫ وﻻﺣﻆ ﺑﺎﻟﻘﺴﻢ ٢أﻧﮫ أﻇﮭﺮ ﻣﺮﺗﺒﺎت اﻹﻧﺎث ﺛﻢ ﻣﺮﺗﺒﺎت اﻟﺬﻛﻮر ﺛﻢ إﺟﻤ ﺎﻟﻲ ﻣ ﺎﻓﻲ اﻟﻘ ﺴﻢ
وﻓﻲ اﻟﻨﮭﺎﯾﺔ اﻹﺟﻤﺎﻟﻲ اﻟﻜﻠﻲ .
ﻻﺣﻆ أﻧﮫ أﻣﺎم ﻛﻞ إﺟﻤﺎﻟﯿﮫ ﻓﺮﻋﯿ ﺔ ﻟﻺﻧ ﺎث واﻟ ﺬﻛﻮر ﻓ ﻲ اﻟﻘ ﺴﻢ اﻟﻮاﺣ ﺪ ﯾﻮﺿ ﻊ أﻣ ﺎم ﺧﺎﻧ ﺔ اﻟﻨ ﻮع Null
وأﻣ ﺎم إﺟﻤ ﺎﻟﻲ اﻻﻗ ﺴﺎم ﺑﻤ ﺎ ﻓﯿ ﮫ ﻣ ﻦ إﻧ ﺎث وذﻛ ﻮر ﯾﻮﺿ ﻊ ﻓ ﻲ اﻟﺤﻘﻠ ﯿﻦ DeptWorkو Gender
اﻟﻘﯿﻤ ﺔ Nullوﻻﺣ ﻆ اﻟﺘﺮﺗﯿ ﺐ ﻓ ﻲ ﺟﻤﻠ ﺔ Group Byﺣﯿ ﺚ أﻧ ﮫ ﻟ ﻮ ﺗ ﻢ ﻋﻜ ﺲ اﻟﺘﺮﺗﯿ ﺐ ﺳ ﻮف ﯾ ﺘﻢ
ﺗﺮﺗﯿ ﺐ اﻟﻌ ﺮض ﻋﻠ ﻲ أن ﯾﻈﮭ ﺮ ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل ﻛ ﻞ اﻹﺟﻤﺎﻟﯿ ﺎت اﻟﻔﺮﻋﯿ ﺔ اﻟﺨﺎﺻ ﺔ ﺑﺎﻹﻧ ﺎث ﺛ ﻢ
اﻹﺟﻤﺎﻟﯿﺎت اﻟﻔﺮﻋﯿﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺬﻛﻮر ﻣﺮﺗﺒﮫ ﺣﺴﺐ اﻟﻘﺴﻢ
104
Grid Pane
اﻟﺪاﻟﺔ Grouping
ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﺈﻧﺘﺎج ١إذا ﻛ ﺎن ھ ﺬا اﻟ ﺼﻒ ﻧ ﺎﺗﺞ ﻣ ﻦ ﺗﺠﻤﯿﻌ ﮫ ﺧﺎﺻ ﺔ ب With Rollup , With Cube
وﺗﻨﺘﺞ ﺻﻔﺮ إذا ﻛﺎن ھﺬا ﺻﻒ ﺑﯿﺎﻧﺎت ﻋﺎدي ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل
ﻻﺳ ﺘﺨﺪام اﻟﻤﺜ ﺎل اﻟﺨ ﺎص ﺑﺎﺳ ﺘﺮﺟﺎع أﺟﻤ ﺎﻟﻲ ﻣﺮﺗﺒ ﺎت اﻟ ﺬﻛﻮر واﻹﻧ ﺎث داﺧ ﻞ ﻛ ﻞ ﻗ ﺴﻢ وإﺟﻤ ﺎﻟﻲ اﻟﻤﺮﺗﺒ ﺎت ﺑﺎﻟﻘ ﺴﻢ
وإﺟﻤﺎﻟﻲ اﻟﻤﺮﺗﺒﺎت ﻋﻤﻮﻣﺎ ﺑﺎﺳﺘﺨﺪام اﻟﻜﻠﻤﺔ With Rollupوﻟﻜﻦ ﻣﻊ اﻟﺪاﻟﺔ Groupingﺳﯿﺤﺪث اﻟﺘﺎﻟﻲ.
Query Analyzer Result
Select DeptWork ,Gender,
Sum(Salary) as Salary ,
Grouping(Gender) as Grp
From Teacher
Group By
DeptWork ,Gender with Rollup
Grid Pane
105
اﻷھﻤﯿﺔ ﻣﻦ ھﺬه اﻟﺪاﻟﺔ ھﻲ ﺗﺤﺴﯿﻦ اﻟﺸﻜﻞ اﻟﻲ ﺣﺪ ﻣﺎ ﺑﺪﻻ ﻣﻦ ﻛﺘﺎﺑﺔ Nullوﻟﻜﻦ ﻛﯿﻒ ؟
أذا إﺳﺘﻄﻌﻨﺎ أن ﻧﺄﻣﺮ اﻟﺠﻤﻠﺔ أن ﻛﺎن اﻟﺼﻒ ﻓﻲ ﺣﻘﻞ اﻟﺪاﻟﺔ Groupingوﻗﯿﻤﺘﮫ واﺣﺪ ﻓﺄﻛﺘﺐ ﻣﺜﻼ أﻧﮭﺎ إﺟﻤﺎﻟﯿﮫ ﺑﺪﻻ
ﻣﻦ Nullﻓﺴﯿﻜﻮن اﻟﺸﻜﻞ ﻣﺤﺴﻦ ﺟﺪا وﻟﻜﻦ ﻛﯿﻒ ﻧﺸﺮط ﻋﻠﻲ اﻟﺠﻤﻠﺔ أو ﻧﺼﻤﻢ إﺧﺘﯿﺎر ؟.
اﻟﺪاﻟﺔ Case
ھﻲ اﻟﺪاﻟﺔ اﻟﺨﺎﺻﺔ ﺑﺘﺼﻤﯿﻢ اﻹﺧﺘﯿﺎر واﻟﺸﺮوط اﻟﺘﻲ ﻋﻠﻲ أﺳﺎﺳﮭﺎ ﯾﺘﻢ اﻟﺘﻨﻔﯿﺬ .
اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺪاﻟﺔ Syntax
] ﻣﺪﺧﻞ ﯾﺮاد اﺧﺘﺒﺎره [ Case
Thenﺷﺮط When ١
إﺟﺮاء ﯾﺘﻢ ﺗﻨﻔﯿﺬه
Thenﺷﺮط When ٢
إﺟﺮاء أﺧﺮ ﯾﺘﻢ ﺗﻨﻔﯿﺬه
…
[Else ] ﻟﻮ ﻟﻢ ﯾﻜﻦ وﻻ ﺷﺮ ط ﺻﯿﺢ ﯾﻨﻔﺬ ھﺬا اﻹﺟﺮاء
End
ﺗﻔﺴﯿﺮ اﻟﺸﻜﻞ اﻟﻌﺎم :
اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ Caseﺑﻤﻌﻨﻲ ﻟﻐﻮي اﻟﺤﺎﻟﺔ )ﺑﻤﻌﻨ ﻲ ﻣﻨﻄﻘ ﻲ أي أﺧﺘﺒ ﺮ اﻟﺤﺎﻟ ﺔ( ﺛ ﻢ ﺑﻌ ﺪھﺎ ﺟ ﺰء إﺧﺘﯿ ﺎري أن ﺗ ﺬﻛﺮ
ﻣﺎﺗﺮﯾﺪ إﺧﺘﺒﺎره وأن ذﻛﺮﺗﮫ ﻓﺄن ﻛﻞ اﻟﺸﺮوط ﺑﻌﺪ ﻛﻠﻤﺔ Whenﺳﻮف ﺗﻨﻔ ﺬ ﻋﻠﯿ ﮫ إﻣ ﺎ إذا ﺗﻐﺎﺿ ﯿﺖ ﻋ ﻦ ذﻛ ﺮ ﻣ ﺎ ﺗﺮﯾ ﺪ
إﺧﺘﺒﺎره ﻓﺴﯿﻜﻮن ﻋﻠﻲ ﺣﺴﺐ ﻛﻞ ﺷﺮط ﯾﺬﻛﺮ ،ﺑﻌﺪ ﻛﻠﻤﺔ Whenﯾﺄﺗﻲ اﻟﺸﺮط )وھﻲ ﺑﻤﻌﻨﺎ ﻋﻨﺪﻣﺎ ﯾﻜﻮن( وھﻲ ﺗﺨﺘﺒﺮ
اﻟﺸﺮط أن ﻛﺎن ﺻﺤﯿﺤﺎ ﯾﻨﻔﺬ ﻣﺎﺑﻌﺪ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ Thenﻣﻦ أواﻣﺮ وإن ﻟﻢ ﯾﻜﻦ اﻟﺸﺮط ﺻﺤﯿﺤﺎ ﻓﺴﻮف ﯾﻨﻘﻞ إﻟ ﻲ
اﻟﺸﺮط اﻟﺬي ﯾﻠﯿﮫ ﺣﺘﻲ اﻟﻨﮭﺎﯾﺔ وأن ﻟﻢ ﯾﺘﺤﻘﻖ أي ﺷﺮط ﻓﺴﻮف ﯾﺘﺠ ﮫ ﻟﻠﻜﻠﻤ ﺔ اﻷﺳﺎﺳ ﯿﺔ ) Elseوھ ﻲ ﺑﻤﻌﻨ ﻲ أن ﻟ ﻢ
ﯾﻜﻦ وﻻ ﺷﺮط ﺳﺎﺑﻖ ﺻﺤﯿﺤﺎ ( ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳﯿﻨﻔﺬ ﻣﺎﯾﻠﯿﮭﺎ ﻣﻦ أواﻣﺮ وﺑﻌﺪھﺎ ﯾﺨﺮج أن ﻟﻢ ﯾﻜﻦ اﻟﺠﺰء Elseﻏﯿﺮ
ﻣﻮﺟ ﻮد وﻟ ﻢ ﯾﻨﻔ ﺬ أي ﺷ ﺮط ﻓ ﺴﻮف ﯾ ﺘﻢ اﻟﺨ ﺮوج )إن ھ ﺬه اﻟﺪاﻟ ﺔ ﺗﻔ ﺘﺢ زراﻋﯿﮭ ﺎ ﻟﻮﺟ ﻮد أﻓ ﺎق ﺟﺪﯾ ﺪة ﻟﺠﻤ ﻞ SQL
ﻋﻤﻮﻣﺎ( دﻋﻨﺎ ﻧﺮي ﻣﺜﻼ ﺑﺴﯿﻄﺎ ﺗﻮﺿﯿﺤﯿﺎ أوﻻ
إذا أردﻧ ﺎ زﯾ ﺎدة ﻣﺮﺗﺒ ﺎت اﻟﻤﻌﻠﻤ ﯿﻦ ﻓ ﻲ ﻗ ﺴﻢ ١ﺑﻨ ﺴﺒﺔ %٥وﺑﻘ ﺴﻢ ٢ﺑﻨ ﺴﺒﺔ %١٠واﻟﻐﯿ ﺮ ﻣﺤ ﺪد ﻟﮭ ﻢ ﻗ ﺴﻢ ﺑﻨ ﺴﺒﺔ
%١٥ﻓﻜﯿﻒ ﻧﺼﻤﻢ ﻣﺜﻞ ھﺬا اﻹﺧﺘﯿﺎر
Query Analyzer Result
Update Teacher
Set Salary = Case DeptWork
When 1 then Salary*1.05
When 2 then Salary*1.10
Else Salary*1.15
End
اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ اﻟﺘﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﺑﻌﺪ اﻟﺘﻌﺪﯾﻞ
ﻻﺣﻆ أن Grid Paneﻻﺗﺪﻋﻢ ھﺬا اﻹﺧﺘﯿﺎر وﻻﺣﻆ أﻧﻨﺎ إﺧﺘﺒﺮﻧﺎ ﺣﻘﻞ اﻟﻘﺴﻢ ﺑﻌﺪ اﻟﻜﻠﻤﺔ اﻻﺳﺎﺳﯿﺔ Caseواﻟﺸﺮط
ھﻮ ﻟﻮ ﻛﺎن= ١إذا ﺳﯿﻨﻔﺬ اﻟﺰﯾﺎدة اﻷوﻟﻲ وﺑﻌﺪھﺎ أن ﻛﺎن اﻟﻘﺴﻢ ٢ﺳﯿﻨﻔﺬ اﻟﺰﯾﺎدة اﻟﺜﺎﻧﯿﺔ وإن ﻟﻢ ﯾﻜﻦ ﺑﺎﻟﻘﺴﻢ ١وﻻ ٢
ﺳﯿﻨﻔﺬ اﻟﺰﯾﺎدة اﻟﺜﺎﻟﺜﺔ وھﺬا ﻣﺎ أردﻧﺎه ﺑﺎﻟﻔﻌﻞ .
106
Case
'When (Grouping(Gender) =1) THEN 'Total
)'Else ISNULL(Gender,'0
End as Gender,
Sum(Salary) as Salary
ﻻﺣﻆ أن اﻟﺠﻤﻠﺔ ﺑﮭﺎ ﻗﻄﻌﺘﯿﻦ Caseاﻷول ﺗﺨﺘﺒﺮ أﺳ ﻢ اﻟﻘ ﺴﻢ ﺑﺎﻟﺪاﻟ ﺔ Groupingأن أﻧﺘﺠ ﺖ ١ﻓﻔ ﻲ ھ ﺬه اﻟﺤﺎﻟ ﺔ
ﻧﺤﻦ ﻓﻲ ﺣﺎﻟﺔ ﺗﺠﻤﯿﻊ ﻟﻸﻗﺴﺎم وﺳﻮف ﻧﻜﺘ ﺐ All Departmentsﻛﻤ ﺎ ﻇﮭ ﺮ ﻣﻌﻨ ﺎ ﻓ ﻲ أﺳ ﻔﻞ اﻟﺠ ﺪول أﻣ ﺎ اﻟﺠ ﺰء
Elseﻓﻤﻌﻨﺎه ﻟﻮ ﻟﻢ ﯾﻜﻦ اﻟﻨﺎﺗﺞ ﻣﻦ اﻟﺪاﻟﺔ ١ Groupingﻓﻔﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻧﺤﻦ ﻓﻲ ﺣﺎﻟﺔ ﻋﺎدﯾ ﺔ )ﻟﯿ ﺴﺖ ﺗﺠﻤﯿﻌﯿ ﺔ(
ﻓﺄﺧﺘﺮت أن أﺧﺘﺒﺮ اﻟﻘﯿﻤﺔ Nullﻓﺈن ﻛﺎن اﻟﻘﺴﻢ ﻣﺤﺘﻮي ﻋﻠﻲ اﻟﻘﯿﻤﺔ Nullﻓﻤﻌﻨﺎھﺎ أﻧﮫ ﻏﯿﺮ ﻣﺤﺪد ﻓﺨﺼ ﺼﻨﺎ اﻟﻜﻠﻤ ﺔ
Unknownﻟﻸﻗﺴﺎم اﻟﻐﯿﺮ ﻣﻌﺮوﻓﺔ
ﻻﺣﻆ ﺟﻤﻠﺔ Caseاﻟﺜﺎﻧﯿﺔ ﻓﮭﻲ ﺗﻌﻤﻞ ﻋﻠﻲ ﻧﻔﺲ ﻓﻜﺮ اﻷوﻟ ﻲ ﻓﻨﺨﺘﺒ ﺮ اﻟﺪاﻟ ﺔ Groupingﻋﻠ ﻲ اﻟﺤﻘ ﻞ Gender
ﻓﺈن ﻛﺎن ١ﻓﻤﻌﻨﺎه أﻧﮫ ﺣﻘﻞ ﺗﺠﻤﯿﻌﻲ ﻟﻠﻨﻮع )ذﻛﻮر وأﻧﺎث( ﻓﻔﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳ ﻮف ﻧﻜﺘ ﺐ اﻟﻜﻠﻤ ﺔ Totalوإن ﻟ ﻢ ﯾﻜ ﻦ
Elseﻓﻔ ﻲ ھ ﺬه اﻟﺤﺎﻟ ﺔ ﻧﺨﺘﺒ ﺮ ﻗﯿﻤ ﺔ ﺣﻘ ﻞ Genderﻋﻠ ﻲ اﻟﻘﯿﻤ ﺔ Nullإن ﻛﺎﻧ ﺖ ﻛ ﺬﻟﻚ ﯾ ﻀﻊ اﻟﻘﯿﻤ ﺔ ٠وﺑ ﺎﻟﻄﺒﻊ
ھﻨﺎك ﻗﯿﺪ ﯾﺆﻛﺪ أﻧﮫ ﻻﺑﺪ ﻣﻦ إدﺧﺎل ﻗﯿﻤﺔ ﻟﺤﻘﻞ اﻟﻨﻮع وﻟﻜﻦ أن ﻟﻢ ﺗﻜﺘﺐ ھﺬا اﻟﺤﻘﻞ ﺳﻮف ﺗﺨﺮج Null
وﺑﻌﺪ اﻟﻘﻄﻌﺘﯿﻦ Caseﻧﻀﻊ ﻋﻨﻮان ﻣﺴﺘﻌﺎر ﻟﻤﺨﺮﺟﺎت اﻟﻘﻄﻌﺔ Caseوﻻﺑﺪ أن ﯾﻜﻮن ھﺬا اﻷﺳﻢ اﻟﻤﺴﺘﻌﺎر ھﻮ أﺳﻢ
ﺣﻘﻞ ﻣﻮﺟﻮد ﻓﻲ أﺣﺪ اﻟﺠﺪوﻟﯿﻦ وأﯾﻀﺎ ﯾﺠﻤﻊ ﻓﻲ اﻟﺠﺰء Group byأي ﯾﺘﻢ ﻋﻠﯿﮫ ﻋﻤﻠﯿﺎت ﺗﺠﻤﯿﻌﯿﺔ أي أﻧﻨﺎ ﺳ ﺤﺒﻨﺎ
ﺟﺰء أﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺒﺎﺷﺮ ووﺿﻌﻨﺎ ﻋﻨﮫ ﻗﻄﻌﺔ Caseوھﻜﺬا
أﻣﺎ ﺑﺎﻗﻲ اﻟﺠﻤﻠﺔ وﻛﯿﻔﯿﺔ اﺳ ﺘﺮﺟﺎع ﻣ ﻦ أﻛﺜ ﺮ ﻣ ﻦ ﺟ ﺪول ﺑﻄﺮﯾﻘ ﺔ اﻟ ﺮﺑﻂ اﻟﺨ ﺎرﺟﻲ اﻷﯾ ﺴﺮ واﻟﺠ ﺰء Rollupﻓﻘ ﺪ ﺗ ﻢ
ﺷﺮﺣﮫ ﺳﺎﺑﻘﺎ .
ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ أﻧﮫ ﻗﺪ ﺗﻢ إﻧﺘﺎج ﺟ ﺪول ﺟﺪﯾ ﺪ ﺑﺎﻷﺳ ﻢ NewTeacherوﻗ ﺪ ﺗ ﻢ ﺗ ﻀﻤﯿﻦ ١٠ﺻ ﻔﻮف
ﺑﺪاﺧﻠﮫ وﻻﺣ ﻆ ﻓ ﻲ Grid Paneﻟﻌﻤ ﻞ ذﻟ ﻚ ﺑﻌ ﺪ إﺧﺘﯿ ﺎر اﻟﺤﻘ ﻮل ﻛﻤ ﺎ ﺗﺮﯾ ﺪ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
وﻣ ﻦ اﻟﻘﺎﺋﻤ ﺔ ﻧﺨﺘ ﺎر Change Typeوﻣﻨﮭ ﺎ Make Tableﺳ ﻮف ﯾﻈﮭ ﺮ ﻟﻨ ﺎ ﻣﺮﺑ ﻊ ﺣ ﻮاري
ﯾﺴﺄل ﻋﻦ أﺳﻢ اﻟﺠﺪول اﻟﺬي ﺗﺮﯾﺪ إﻧﺸﺎﺋﮫ ﻧﻜﺘﺐ أﺳﻢ اﻟﺠ ﺪول ﺛ ﻢ ﻧ ﻀﻐﻂ Okﻻﺣ ﻆ أﻧﻨ ﺎ وﺿ ﻌﻨﺎ أﺳ ﻢ
ﻣ ﺴﺘﻌﺎر ﻟﻠﺤﻘ ﻞ Deptworkﺳ ﯿﻜﻮن ھ ﺬا اﻟﺤﻘ ﻞ ﻓ ﻲ اﻟﺠ ﺪول اﻟﺠﺪﯾ ﺪ Departmentﻛﻤﺜ ﻞ
ﻣﺎﺳﺘﻨﺘﺠﮫ ﺟﻤﻠﺔ اﻹﺳﺘﺮﺟﺎع ﺗﻤﺎﻣﺎ
إذا أردﻧﺎ ﻋﻤﻞ ﺟﺪول ﺟﺪﯾ ﺪ وﻟﻜ ﻦ ﺑ ﺪون وﺿ ﻊ ﺑﯿﺎﻧ ﺎت ﺟﺪﯾ ﺪة ﺑﺪاﺧﻠ ﮫ ﯾﻤﻜﻨﻨ ﺎ وﺿ ﻊ ﺷ ﺮط ﻻﯾﻨﻔ ﺬ ﻓ ﻲ
اﻟﺠﺰء Whereوﻟﯿﻜﻦ ' Gender='NOوھﺬا ﻻﯾﺤﺪث أﺑﺪا ﻓﯿﻨﺸﺄ اﻟﺠﺪول وﻟﻜﻦ ﺑﺪون ﺻﻔﻮف.
وﯾﻤﻜﻨﻨﺎ ﻋﻤﻞ أي ﺟﻤﻠﺔ إﺳ ﺘﺮﺟﺎع ﻛﺠ ﺪول ﺣﺘ ﻲ وﻟ ﻮ ﻛﺎﻧ ﺖ ﻣ ﻦ أﻛﺜ ﺮ ﻣ ﻦ ﺟ ﺪول أو أي ﺟﻤﻠ ﺔ ﻗ ﺪ ﺗ ﻢ
ﺷﺮﺣﮭﺎ أو ﺟﻤﻠﺔ ﻣﺜﻠﮭﺎ .
وﻻﺣﻆ اﻧﻚ ﻟﻮ أﺳﺘﺮﺟﻌﺖ ﻓﻲ ﺟﻤﻠﺔ اﻹﺳﺘﺮﺟﺎع ﻣﺜﻼ ﺣﻘﻞ ﻋﻠﯿﮫ ﻗﯿﺪ ﺳ ﻮف ﯾ ﻮﻓﻲ ﺑ ﮫ وﯾﻜ ﻮن ﻣﻮﺟ ﻮد
ﻋﻠﻲ اﻟﺠﺪول اﻟﺠﺪﯾﺪ .
108
ﻣﺜﺎل :إدﺧﺎل ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ اﻹﻧﺎث ﻓﻲ ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ اﻟﺠﺪد اﻟﻤﻨﺸﺄ ﺣﺪﯾﺜﺎ )(NewTeacher
Query Analyzer Result
Insert Into NewTeacher
)(Rank , Name, Salary , Department
Select Rank , Name , Salary , DeptWork
From Teacher
'Where Gender='F
Diagram Pane
Grid Pane
ﻻﺣﻆ أﻧﻨﺎ ﻟﻺﺿﺎﻓﺔ ﻓﻲ ﺟﺪول NewTeacherﻛﺘﺒﻨﺎ ﺟﻤﻠﺔ Insertﻣﻊ ﺗﺤﺪﯾﺪ اﻟﺤﻘﻮل اﻟﺘﻲ ﺳﻮف ﻧﺪﺧﻞ ﺑﮭﺎ ﻋﻠ ﻲ
أﺳﺎس أﻧﻨﺎ ﯾﻤﻜﻨﻨﺎ ﻋﺪم ﺗﺤﺪﯾﺪ اﻟﺤﻘﻮل اﻟﺘﻲ ﺳﻮف ﻧﺪﺧﻞ ﻓﯿﮭﺎ ﻃﺎﻟﻤﺎ أﻧﻨﺎ ﺳﻮف ﻧﺪﺧﻞ ﻓﻲ اﻟﺠﺪول ﺑﺎﻟﻜﺎﻣﻞ اﻟﻤﮭﻢ ھﻮ ﻣﺎ
ﺳﻨﺪﺧﻠﮫ ﺳﻮف ﯾﺪﺧﻞ ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ إﺳﺘﺮﺟﺎع ﺗﺴﺘﺮﺟﻊ ﻧﻔﺲ اﻟﺤﻘﻮل ﺑ ﻨﻔﺲ اﻟﺘﺮﺗﯿ ﺐ ﻣ ﻦ ﻧﻔ ﺲ اﻷﻧ ﻮاع وﻟﻜ ﻦ ﻣ ﻦ
ﺟﺪول Teacherاﻷﺳﺎﺳﻲ ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻧﻮﻋﮭﻢ إﻧﺎث
ﻻﺣﻆ ﻓﻲ اﻟﺠﺰء Diagram Paneأﻧﻨﺎ ﻧﻀﯿﻒ اﻟﺠﺪول اﻷﺳﺎﺳﻲ اﻟﺬي ﺳﻮف ﻧ ﻀﯿﻒ ﻣﻨ ﮫ أوﻻ ﺛ ﻢ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ
اﻟﻤﺎوس وﻧﺨﺘﺎر Change Typeوﻣﻨﮭﺎ Insert Fromوﻣﻨﮭﺎ ﺳﻮف ﯾﻈﮭﺮ ﻟﻨﺎ ﻣﺮﺑﻊ ﺣﻮاري ﻧﺨﺘﺎر ﻣﻨﮫ أﺳﻢ
اﻟﺠﺪول اﻟﺬي ﻧﺮﯾﺪ اﻹﺿﺎﻓﺔ ﻓﯿﮫ وھﻮ NewTeacher
وﻻﺣ ﻆ ﻓ ﻲ اﻟﺠ ﺰء Grid Paneأﻧﻨ ﺎ ﻧﺤ ﺪد ﻓ ﻲ اﻟﺤﻘ ﻞ Columnاﻟﺤﻘ ﻮل اﻟﺘ ﻲ ﺳ ﻮف ﺗ ﺴﺘﺮﺟﻊ ﻣ ﻦ اﻟﺠ ﺪول
اﻷﺳﺎﺳﻲ Teacherوﻧﺤﺪد اﺳﻢ ھﺬا اﻟﺠﺪول ﻓﻲ اﻟﻌﻤﻮد Teacherوﻻﺣﻆ أﻧﮫ ﺳﻮف ﯾﺤﺪد ﺗﻠﻘﺎﺋﯿﺎ ﻷﻧﻚ ﻗﺪ ﻗﻤ ﺖ
ﺑﺘﺤﺪﯾﺪ اﻟﺠﺪول اﻷﺳﺎﺳﻲ أوﻻ وﻻﻧﻈﮭﺮ اﻟﺤﻘﻞ Genderﻷﻧﻨﺎ ﻧﺮﯾﺪ ﻓﻘﻂ وﺿﻊ ﺷﺮط ﻋﻠﯿﮫ ﻓﻲ اﻟﺠﺰء Criteria
وﻻﺣﻆ اﻟﺠﺰء اﻟﺠﺪﯾﺪ Appendﺑﻤﻌﻨﻲ اﻟﻤﻀﺎف اﻟﯿﮫ وھﻮﻓﻲ ﺣﺎﻟﺘﻨﺎ ھﺬه ھ ﻲ اﻟﺠ ﺪول اﻟﻤﺤ ﺪد NewTeacher
ﻓﺘﺤﺪد أﻣﺎم ﻛﻞ ﺣﻘﻞ ﻣ ﻦ اﻟﺠ ﺪول)أو اﻟﺠ ﺪاول( اﻟ ﺬي ﺳ ﻮف ﻧﺄﺧ ﺬ ﻣ ﻦ اﻟﺒﯿﺎﻧ ﺎت ﻓ ﻲ اﻟﺠ ﺰء Appendاﻟﺤﻘ ﻞ اﻟ ﺬي
ﺳ ﻮف ﻧﻠﺤ ﻖ ﺑ ﮫ ھ ﺬه اﻟﺒﯿﺎﻧ ﺎت ﻣ ﻦ ﺟ ﺪول NewTeacherوﻻﺣ ﻆ إﺿ ﺎﻓﺘﮭﺎ ﺗﻠﻘﺎﺋﯿ ﺎ ھ ﺬا ﻓ ﻲ ﺣﺎﻟ ﺔ ﺗﻄ ﺎﺑﻖ أﺳ ﻤﺎء
اﻟﺤﻘﻮل ﺑﯿﻦ اﻟﺠﺪول اﻟﻤﻀﺎف واﻟﺠﺪول اﻟﻤ ﻀﺎف اﻟﯿ ﮫ وﺑﻌ ﺪھﺎ ﻧ ﻀﻐﻂ Runﺗﻈﮭ ﺮ ﻟﻨ ﺎ رﺳ ﺎﻟﺔ إدراج ﺻ ﻔﯿﻦ ﺑﯿﺎﻧ ﺎت
ﻓﻲ ﺟﺪول NewTeacher
وﯾﻤﻜﻨﻨﺎ اﻹﺿﺎﻓﺔ اﻟﻌﺎدﯾﺔ ﺑﻄﺮﯾﻘﺔ أﺧﺮي ﻣﺒﺎﺷﺮة ﻟﻢ ﻧﺬﻛﺮھﺎ ﻣﻦ ﺧﻼل Diagram Pane , Grid Paneﻛﺎﻟﺘﺎﻟﻲ
Diagram Pane Grid Pane
ﻻﺣﻆ أﻧﻨﺎ ﻧﺮﯾﺪ إﺿﺎﻓﺔ ﻃﺎﻟﺐ ﺟﺪﯾﺪ ﻓﻨﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﻧﺨﺘﺎر Change Typeوﻣﻨﮭﺎ Insert Into
وﻧﺤﺪد اﻟﺤﻘﻮل اﻟﻤﺮاد اﻹدﺧﺎل)ﻻﺣﻆ ﺗﻐﯿﺮ اﻷﯾﻘﻮﻧﺔ ﻛﻤﺎ ذﻛﺮ( ﻓﯿﮭﺎ ﺛﻢ ﻧﻀﯿﻒ ﻣﺎﻧﺮﯾﺪ ﻓﻲ اﻟﺠﺰء Grid Pane
109
Grid Pane
ﻻﺣﻆ أن ﺳﻮف ﺗﺠﻌ ﻞ ھ ﺬه اﻟﺠﻤﻠ ﺔ اﻟﻤﺮﺗ ﺐ ﻣﺜ ﻞ اﻟﻤﺮﺗ ﺐ اﻟ ﺬي ﺗ ﻢ إﺳ ﺘﺮﺟﺎﻋﮫ ﻣ ﻦ اﻹﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ ﻋﻨ ﺪﻣﺎ ﯾﻜ ﻮن
اﻟﻤﻌﻠﻢ ﻏﯿﺮ ﻣﺤﺪد ﻟﮫ ﻗﺴﻢ وﻻﺣﻆ ﻓﻲ Diagram Paneﺑﻌﺪ ﺗﺤﺪﯾ ﺪ اﻟﺠ ﺪول Teacherﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
وﻧﺨﺘﺎر Change Typeﺛﻢ Update
وﻻﺣﻆ ﻓﻲ اﻟﺠﺰء Grid Paneﻧﺨﺘﺎر اﻟﺤﻘﻮل اﻟﺘﻲ ﻧﺮﯾﺪ ان ﻧﻌﺪﻟﮭﺎ واﻟﺤﻘﻮل اﻟﺘﻲ ﻧﺮﯾﺪ ان ﻧ ﻀﻊ ﻋﻠﯿﮭ ﺎ ﺷ ﺮط ﻓ ﻲ
اﻟﻌﻤﻮد Columnأﻣﺎ ﻓﻲ اﻟﻌﻤﻮد New Valueﻧﻜﺘﺐ اﻹﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ وﻧﻜﺘﺐ ﻓﻲ criteriaاﻟﺸﺮط
ﻻﺣﻆ أﻧﻨﺎ ﻟﻮ أردﻧﺎ ﻋﻤﻞ ﺟﻤﻠﺔ ﺗﻌﺪﯾﻞ ﻣﺒﺎﺷﺮة ﻣﻦ ھﻨﺎ ﻓﻲ اﻟﺠﺰء Grid Paneﻻﻧﻀﻊ اﺳ ﺘﻌﻼم ﻓﺮﻋ ﻲ وإﻧﻤ ﺎ ﻧ ﻀﻊ
اﻟﻘﯿﻢ اﻟﺤﺪﯾﺚ ﻣﺒﺎﺷﺮة ﺛﻢ Run
–٣ﺟﻤﻠﺔ اﻟﺤﺬف Delete Statement
اﺣﺬف ﻛﻞ اﻟﻤﻌﻠﻤﯿﻦ ﻣﻦ ﺟﺪول NewTeacherﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻗﺴﻤﮭﻢ ﻣﺜﻞ ﻗﺴﻢ Salwa
Query Analyzer Diagram Pane
Grid Pane
ﻻﺣﻆ ﻓﻲ اﻹﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻗﺪ إﺳﺘﺨﺪﻣﻨﺎ اﻟﻜﻠﻤﺔ Distinctﻷن ھﺬا اﻟﺠﺪول ﻟﯿﺲ ﻟﮫ ﻣﻔﺘﺎح رﺋﯿﺴﻲ وﻗﺪ أدﺧﻠﻨﺎ ﻓﯿ ﮫ
ﻣﻦ ﻗﻞ ﺑﯿﺎﻧﺎت ﻣﻜﺮرة وﻻﺣﻆ ﻓﻲ Diagram Paneأﻧﻨﺎ إﺧﺘﺮﻧﺎ Deleteوﻗﺪ وﺿﻌﺔ أﯾﻘﻮﻧ ﺔ اﻟﻤ ﺴﺢ ﻋﻠ ﻲ All
Columnsوھﺬا ﻷن اﻹﺳ ﺘﻌﻼم ﯾﺤ ﺬف اﻟ ﺼﻒ ﺑﺄﻛﻤﻠ ﮫ وﻟ ﯿﺲ ﺟ ﺰء ﻣﻨ ﮫ وﻓ ﻲ اﻟﺠ ﺰء Grid Paneﻓ ﻲ اﻟﺤﻘ ﻞ
Columnﻧﺨﺘ ﺎر اﻟﺤﻘ ﻞ اﻟ ﺬي ﺳ ﻮف ﻧ ﻀﻊ ﻋﻠﯿ ﮫ اﻟ ﺸﺮط وﻓ ﻲ اﻟﺨﺎﻧ ﺔ Criteriaﻧ ﻀﻊ ﺷ ﺮﻃﻨﺎ وھ ﻮ اﻹﺳ ﺘﻌﻼم
اﻟﻔﺮﻋ ﻲ وﻻﺣ ﻆ أﻧﻨ ﺎ ﯾﻤﻜﻨﻨ ﺎ إﺳ ﺘﺨﺪام ھ ﺬه اﻟﻄﺮﯾﻘ ﺔ ﻓ ﻲ اﻟﻤ ﺴﺢ اﻟﻤﺒﺎﺷ ﺮ ﻓﯿﻤﻜﻨﻨ ﺎ وﺿ ﻊ ﺷ ﺮط ﺑ ﺴﯿﻂ ﻓ ﻲ
اﻟﺠﺰء Criteriaﻟﯿﺼﺒﺢ ﻣﺴﺢ ﻣﺒﺎﺷﺮ
110
ﻻﺣﻆ أﻧﮫ إﺳﺘﻌﻼم ﻗﺪ ﺗﻌﻮدﻧﺎ ﻋﻠﯿﮫ ﻣﻦ ﻗﺒﻞ وﻟﻜﻨﻨﺎ إﺳﺘﺨﺪﻣﻨﺎ ﻣﻌﮫ داﻟﺔ ﺗﺠﻤﯿﻌﯿﮫ ﻓﻘﻂ
ﻣﺜﺎل ﻋﻠﻲ اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﯾﺮﺟﻊ ﻋﻤﻮد ﺑﯿﺎﻧﺎت .
ﯾﺴﺘﺨﺪم ﻣﻌﮫ ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ ﻷﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ IN , ANY | SOME , ALL
ﻛﻤﺜﺎل إﺳﺘﺮﺟﻊ رﻗﻢ اﻟﻘﺴﻢ وأﻋﻠﻲ وأﻗﻞ وﻣﺘﻮﺳﻂ رواﺗﺒﮫ ﻋﻨﺪﻣﺎ ﯾﻜ ﻮن ﻣﺘﻮﺳ ﻂ ﻣﺮﺗﺒﺎﺗ ﮫ أﻛﺒ ﺮ ﻣ ﻦ أﻗ ﻞ ﻣﺮﺗ ﺐ ﻓ ﻲ أي
ﻗﺴﻢ .
Query Analyzer Result
ﻻﺣﻆ أﻧﮫ اﺳﺘﻌﻼم ﻗﺪ ﺗﻌﻮدﻧﺎ ﻋﻠﯿﮫ ﻣ ﻦ ﻗﺒ ﻞ وﻟﻜ ﻦ اﻟﺠﺪﯾ ﺪ أﻧﻨ ﺎ اﺳ ﺘﺨﺪﻣﻨﺎ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ ﻓ ﻲ اﻟﺠ ﺰء Having
وھﺬا ﻷن اﻟﺸﺮط ھﻨﺎ ﻋﻠﻲ داﻟﺔ ﺗﺠﻤﯿﻌﯿﺔ واﺳﺘﺨﺪﻣﻨﺎ ﻋﻮاﻣﻞ اﻟﻤﻘﺎرﻧﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ أﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ واﻻﺳﺘﻌﻼم
اﻟﻔﺮﻋﻲ ھﻨﺎ ﯾﺮﺟﻊ أﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ ﻛﻤﺎ ھ ﻮ ﻣﻮﺿ ﺢ ﻓ ﻲ اﻟ ﺸﻜﻞ وﻓ ﻲ اﻟﺠ ﺰء Grid Paneﻻ ﻧﻨ ﺴﻲ ﺑﺎﻟ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ
اﻟﻤﺎوس واﺧﺘﯿﺎر Group Byوﺿﺒﻂ ﺧﺼﺎﺋﺼﮭﺎ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ ووﺿﻊ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻓﻲ اﻟﺠﺰء Criteria
111
112
ﻻﺣ ﻆ أﻧﻨ ﺎ ﻓ ﻲ اﻟﺠ ﺰء اﻟﺨ ﺎص Query Analyzerأﻧﻨ ﺎ إﻧ ﺸﺎﺋﻨﺎ اﺳ ﺘﻌﻼم ﻣﺤﻔ ﻮظ أﺳ ﻤﮫ Teacher_1وھ ﻮ
ﯾﻄ ﺎﺑﻖ ﺟ ﺪول اﻟﻤﺪرﺳ ﯿﻦ ﺑﺎﻟﻜﺎﻣ ﻞ وﻟﻜ ﻦ اﻟﺠ ﺰء Top 50 Percentھ ﺬا اﻟﺠ ﺰء ﯾﻤﻜ ﻦ أن ﯾ ﻀﺎف ﺑﻌ ﺪ ﻛﻠﻤ ﺔ
Selectﻹﻇﮭﺎر ٥٠ﺑﺎﻟﻤﺎﺋﺔ ﻣﻦ اﻟﺤﻘﻮل اﻟﻤﺴﺘﺮﺟﻌﺔ ﻣﻦ اﻟﺠﻤﻠﺔ اﻷﺳﺎﺳﯿﺔ وﻟﻮ ﻟﻐﯿﻨﺎ ﻛﻠﻤﺔ Percentوﻛﺘﺒﻨﺎ ﻋﻠ ﻲ
ﺳﺒﯿﻞ اﻟﻤﺜﺎل Top 2ﺳﻮف ﯾﺮﺟﻊ أول ﺻﻔﯿﻦ ﺑﯿﺎﻧﺎت وھﻜﺬا وﻟﻘﺪ أﺿﻔﻨﺎ ھﺬا اﻷﻣﺮ ﻷﻧﻨﺎ ﻟﻢ ﻧﻀﯿﻔﮫ ﻣﻦ ﻗﺒﻞ وﻷن ھﺬا
اﻷﻣﺮ ﯾﺠﻌﻞ ھ ﺬا اﻻﺳ ﺘﻌ ﻼم ﻏﯿ ﺮ ﺧﺎﺿ ﻊ ﻟﻌﻤﻠﯿ ﺎت DMLوﻻ ﯾﻤﻜﻨﻨ ﺎ إدراج اﻟﻜﻠﻤ ﺔ With Check Optionﻛﻤ ﺎ
ذﻛﺮ ﻣﻦ ﻗﺒﻞ
ﻻﺣ ﻆ ﻓ ﻲ Enterprise Managerأﻧﻨ ﺎ ﻧﺨﺘ ﺎر اﻷﯾﻘﻮﻧ ﺔ اﻟﺨﺎﺻ ﺔ ﺑﺎﻻﺳ ﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇ ﺔ Viewﺛ ﻢ ﻧ ﻀﻐﻂ
ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﻧﺨﺘﺎر New Viewﻓﺴﻮف ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷ ﺔ وھ ﻲ ﻧﻔ ﺲ ﺷﺎﺷ ﺔ اﻻﺳ ﺘﻌﻼﻣﺎت اﻟﺘ ﻲ ﺗﻌﻮدﻧ ﺎ ﻋﻠﯿﮭ ﺎ
ﻧﻜﺘﺐ اﻻﺳﺘﻌﻼم اﻟﺬي ﻧﺮﯾﺪه ﻛﻤ ﺎ ﺗﻌﻠﻤﻨ ﺎ وﻹﺿ ﺎﻓﺔ اﻟﺠ ﺰء اﻟﺨ ﺎص ب TOP 50 Percentﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
وﻧﺨﺘ ﺎر Propertiesوﻣ ﻦ اﻟ ﺸﺎﺷﺔ ﻧﺨﺘ ﺎر اﻟﺠ ﺰء اﻟﻤﻮﺿ ﺢ ﺑﺎﻟ ﺸﻜﻞ ﻓﻨﺨﺘ ﺎر Topوﺗﺤﺘﮭ ﺎ ﻧﻜﺘ ﺐ ٥٠وﻧﺨﺘ ﺎر
Percentﻟﺘﻜﻮن ﺑﺎﻟﻤﺎﺋﺔ وإن ﻟﻢ ﻧﺨﺘﺎرھ ﺎ ﺳ ﻮف ﯾﺮﺟ ﻊ ٥٠ﺻ ﻒ ﺑﺤ ﺪ أﻗ ﺼﻲ ﺛ ﻢ Closeﺛ ﻢ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ
ﻧﺨﺘﺎر Saveﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﻤﺮﺑﻊ اﻟﺤﻮار Save asﻧﻜﺘﺐ أﺳﻢ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ﺛﻢ ﻧﻀﻐﻂ Ok
113
ﻻﺣﻆ أﻧﻨﺎ وﺿﻌﻨﺎ أﺳﻤﺎء ﺟﺪﯾﺪة ﺑﻌﺪ أﺳﻢ اﻻﺳ ﺘﻌﻼم اﻟﻤﺤﻔ ﻮظ وﻗﺒ ﻞ ﻛﻠﻤ ﺔ ASوﯾﻤﻜﻨﻨ ﺎ ﻋﻤ ﻞ ذﻟ ﻚ ﺑﻄﺮﯾﻘ ﺔ أﺧ ﺮي أﻻ
وھﻲ أن ﻧﻜﺘﺐ ﻓﻲ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻟﻜﻞ ﺣﻘﻞ أﺳﻤﺎ ﻣﺴﺘﻌﺎر ﻛﻤﺎ ﻧﺮﯾﺪ ﻟﺘﻜﻮن ﻧﻔﺲ اﻟﻨﺘﯿﺠﺔ
وﻻﺣ ﻆ ﻓ ﻲ Enterprise Managerﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ Viewﺛ ﻢ New Viewوﻣﻨﮭ ﺎ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
وﻧﺨﺘ ﺎر ADD Tableﻛﻤ ﺎ ﺗﻌﻮدﻧ ﺎ وﻧﺨﺘ ﺎر ﺟ ﺪول اﻟﻤﻌﻠﻤ ﯿﻦ وﻧﻜﺘ ﺐ ﺟﻤﻠ ﺔ اﺳ ﺘﻌﻼم ﻋﺎدﯾ ﺔ ﻛﻤ ﺎ ھ ﻲ ﻣﻮﺿ ﺤﺔ ﻓ ﻲ
اﻟﺸﻜﻞ اﻟﺨﺎص Grid Paneوﻻﺣﻆ أن أﺳﻤﺎء اﻟﺤﻘﻮل وﺿﻌﻨﺎھﺎ ﻓﻲ اﻟﺤﻘﻞ Aliasesوﻟﻌﻤﻞ With Check
Optionﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﻧﺨﺘﺎر Propertiesوﻣﻦ اﻟﺸﺎﺷﺔ ﻧﺨﺘﺎر Check Optionﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ
ﺛﺎﻧﯿﺎ :ﻛﯿﻔﯿﺔ اﺳﺘﺮﺟﺎع ﺑﯿﺎﻧﺎت ﻣﻦ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ . Retrieve data through a view
ﯾﻤﻜﻨﻨﺎ اﻟﺘﻌﺎﻣﻞ ﻓﻲ ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع ﻣﻦ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇﺔ ﻛﻤﺎ ﻧﺸﺎء وﺑﻜﻞ إﻣﻜﺎﻧﯿﺎت اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺠﺪاول ﺗﻤﺎﻣﺎ
ﻛﻤﺜﺎل ﺳﻮف ﻧﺴﺘﺮﺟﻊ ﻣﻦ Teacher_1اﻟﺮﺗﺒﺔ واﻻﺳﻢ واﻟﻘﺴﻢ ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﻤﻌﻠﻢ ﻣﻦ ﻗﺴﻢ ١
Query Analyzer Result
Select Rank , Name,DeptWork
from Teacher_1
Where DeptWork =1
Enterprise Manager
ﻻﺣ ﻆ أﻧﻨ ﺎ ﺗﻌﺎﻣﻠﻨ ﺎ ﻓ ﻲ ﺟﻤﻠ ﺔ اﻻﺳ ﺘﺮﺟﺎع ﻣ ﻊ ال Viewﻛﺄﻧ ﮫ ﺟ ﺪول ﺗﻤﺎﻣ ﺎ ﺑ ﺪون ﺗﻔﺮﯾ ﻖ وﻻﺣ ﻆ ﻟﻌﻤ ﻞ ذﻟ ﻚ ﻓ ﻲ
Enterprise Managerﻧﺨﺘﺎر Viewوﻣﻨﮭﺎ ﻧﻘﻒ ﻋﻠﻲ اﻷﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ اﻟﻤﻄﻠﻮب وﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻧﺨﺘ ﺎر
Open Viewوﻣﻨﮭﺎ Queryوﯾﻤﻜﻨﻨﺎ إﺿﺎﻓﺔ ﻣﺎﻧﺮﯾﺪ ﻣﻦ إﺳﺘﻌﻼﻣﺎت ﻣﺤﻔﻮﻇﺔ أو ﺟﺪاول أﺧﺮي ﻣﻦ ﺧﻼل اﻟﻀﻐﻂ
114
ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وأﻧﺖ ﻓﻲ اﻟﺠﺰء Diagramوﻧﺨﺘﺎر Add Tableوﻟﻜ ﻦ ﺑ ﺪﻻ ﻣ ﻦ أن ﻧﺨﺘ ﺎر اﻟﺘﺒﻮﯾﺒ ﺔ Tables
ﻧﺨﺘ ﺎر Viewsوﻧﺨﺘ ﺎر اﻻﺳ ﺘﻌﻼم اﻟﻤﺤﻔ ﻮظ اﻟ ﺬي ﻧﺮﯾ ﺪه أﻣ ﺎ اﻻن ﻓ ﻨﺤﻦ ﻻ ﻧﺮﯾ ﺪ إﺿ ﺎﻓﺔ ﺷ ﻲء ﻏﯿ ﺮ اﻟﺠ ﺪول اﻟ ﺬي
ﺣﺪدﻧﺎه ﻓﻨﻀﺒﻂ اﻹﻋﺪادات ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻓﻲ Grid Paneأﻣﺎ اﻟﻘﺎﺋﻤﺔ ﻋﻨﺪ اﻟﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ الView
NewViewﺷﺮﺣﻨﺎھﺎ ﻣﻦ ﻗﺒﻞ وھﻲ ﺗﻘﻮم ﺑﺈﻧﺸﺎء اﺳﺘﻌﻼم ﻣﺤﻔﻮظ ﺟﺪﯾﺪ
Design Viewﺳﻮف ﺗﻔﺘﺢ ﻟﻚ اﻻﺳﺘﻌﻼم ﻓﻲ ﻃﺮﯾﻘﺔ اﻟﺘﺼﻤﯿﻢ وﻟﻚ أن ﺗﻌﺪل ﻓﯿﮫ
اﻻﺧﺘﯿﺎر Open Viewﻟﻮ اﺧﺘﺮت Return all rowsﺳﻮف ﯾﻨﻔﺬ اﻻﺳﺘﻌﻼم وﺗﺮﺟﻊ ﺑﯿﺎﻧﺎﺗﮫ ﻛﺎﻣﻠﺔ
ﻟﻮ اﺧﺘﺮت Return Topﺳﻮف ﯾﺴﺄﻟﻚ ﻋﻦ ﻋﺪد اﻟﺼﻔﻮف اﻷوﻟﻲ اﻟﺘﻲ ﺗﺮﯾﺪ أن ﺗﺴﺘﺮﺟﻌﮭﺎ ﺑﺤﺪ أﻗﺼﻲ
ﻟﻮ اﺧﺘﺮت Queryﺳﻮف ﯾﺘﺎح ﻟﻚ اﻻﺳﺘﻌﻼم ﻋﻦ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ﻛﺄﻧﮫ ﺟﺪول ﺗﻤﺎﻣﺎ
Deleteﻟﺤﺬف اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ
Renameﻹﻋﺎدة ﺗﺴﻤﯿﺔ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ
Propertiesﺳﻮف ﺗﻌﺮض ﻟﻚ اﻟﺠﻤﻠﺔ اﻷﺳﺎﺳﯿﺔ اﻟﻤﻜﻮﻧﺔ ﻟﻼﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ وﺑﺎﻗﻲ اﻷواﻣﺮ أواﻣﺮ ﻋﺎﻣﮫ ﻋﺎدﯾﺔ
ﺑﮭﺬا ﯾﻜﻮن ﺑﺈﻣﻜﺎﻧﻚ اﻟﺘﻌﺪﯾﻞ واﻟﺤﺬف وﺗﻐﯿ ﺮ اﻻﺳ ﻢ وﺑ ﻨﻔﺲ اﻟﻘﻮاﻋ ﺪ اﻟﻘﺪﯾﻤ ﺔ اﻹﺿ ﺎﻓﺔ وﻟﻜ ﻦ ﺑﺎﻻﻋﺘﻤ ﺎد ﻋﻠ ﻲ اﻟ ﺸﺮوط
اﻟﻤﺬﻛﻮرة ﺳﺎﺑﻘﺎ وھﺬا ﻣﻦ ﺧﻼل Enterprise Manager
ﺛﺎﻟﺜﺎ :ﻛﯿﻔﯿﺔ اﻟﻮﺻﻮل ﻟﻮﺻﻒ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ . Describe a View
ﺗﻌﻠﻤﻨﺎھﺎ ﻓﻲ Enterprise Managerﺣﯿﺚ أﻧﻨﺎ ﯾﻤﻜﻨﻨﺎ اﻟﺮﺟﻮع ﻟﻜﻞ ﺗﻔﺎﺻﯿﻠﮫ وﻟﻜﻦ ﻓﻲ Query Analyzer
ﺑﺎﻷﻣﺮ اﻟﺘﺎﻟﻲ :
Exec Sp_help Teacher_1
ھﺬا اﻷﻣﺮ اﺳﺘﺨﺪﻣﻨﺎه ﺳﺎﺑﻘﺎ ﻣﻊ اﻟﺠﺪاول وھﻮ اﻟﺬي ﻧﺴﺘﺨﺪﻣﮫ أﯾﻀﺎ ﻣﻊ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇﺔ وﺳﻮف ﻧﺮي ﺗﻔﺼﯿﻼ
دﻗﯿﻘﺎ ﻋﻨﮫ
راﺑﻌﺎ :ﻛﯿﻔﯿﺔ ﺗﻐﯿﺮ أﺳﻢ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ . Rename Views
ﻓﻲ Enterprise Managerﻗﺪ ﺗﻌﻠﻤﻨﺎھﺎ ﺑﺎﻟﻮﻗﻮف ﻋﻠ ﻲ اﻻﺳ ﺘﻌﻼم اﻟﻤ ﺮاد ﺗﻐﯿ ﺮ أﺳ ﻤﮫ وﻧﺨﺘ ﺎر ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
Renameوﻧﻌﺪل اﻷﺳﻢ وﻓﻲ Query Analyzerأﺳﺘﺨﺪﻣﻨﺎ أﻣﺮ ﺗﻌﺪﯾﻞ أﺳﻤﺎء اﻟﺠﺪاول وھﻮ ﻛﻤﺎ ھﻮ ﻛﺎﻟﺘﺎﻟﻲ
'Exec Sp_Rename 'Teacher_1' ,'Teacher1
Insert , Update and ﺳﺎدﺳﺎ :ﻛﯿﻔﯿﺔ اﻹدراج واﻟﺤﺬف واﻟﺘﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺧﻼل اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ
. Delete data through a view
ﯾﻤﻜﻨﻨﺎ اﻟﻌﻤﻞ ﻣﻊ DMLوﻟﻜﻦ ﺑﺎﻟﺸﺮوط اﻟﺘﻲ ذﻛﺮت ﻓ ﻲ ھ ﺬا اﻟﺒ ﺎب ﻓ ﻲ اﻟﺠ ﺰء اﻟﺮاﺑ ﻊ ﺣﻔ ﻆ ﺟﻤ ﻞ اﻻﺳ ﺘﺮﺟﺎع ﻓ ﻲ
اﻟﻜﺎﺋﻦ Viewﻓﯿﻤﻜﻨﻚ ﻣﺮاﺟﻌﺘﺎھﺎ وﯾﻤﻜ ﻦ ﻋﻤ ﻞ أي ﺟﻤ ﻞ إﺿ ﺎﻓﺔ أو ﺗﻌ ﺪﯾﻞ أو ﺣ ﺬف ﻛﻤ ﺎ ﺗﺮﯾ ﺪ ﻣ ﺎدام أﻧ ﮫ ﻻ ﯾﻮﺟ ﺪ
ﺷﺮط ﯾﻤﻨﻊ ذﻟﻚ ﻓﻲ Enterprise Managerﺳﻮف ﻧﺘﻌﺎﻣﻞ ﻣ ﻊ ھ ﺬه اﻟﻌﻤﻠﯿ ﺎت ﻓ ﻲ ال Viewﻛﻤ ﺎ ﺗﻌﻠﻤﻨ ﺎ ﻓ ﻲ
Tableوﺑﺪون إﺧﺘﻼف وأﯾﻀﺎ ﻓﻲ Query Analyzerﺑﻨﻔﺲ اﻟﻔﻜﺮ اﻟﺴﺎﺑﻖ ﻣﻊ اﻟﺠﺪاول وان ﺗﻢ أي ﻋﻤﻠﯿﺎت
إﺿﺎﻓﺔ أو ﺗﻌﺪﯾﻞ أو ﺣﺬف ﺳﻮف ﺗﻨﻌﻜﺲ ﻋﻠﻲ اﻟﺠﺪول اﻷﺳﺎﺳﻲ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل
Update Teacher_2 ﻟﻮ اﺳﺘﺮﺟﻌﺖ ﺑﯿﺎﻧﺎت ﺟﺪول Teacherﺳﻮف ﺗﺠﺪ أﻧﮭﺎ ﻣﻌﺪﻟﺔ ﺑﺎﻟﻔﻌﻞ
'Set Name='Ayman
'Where Code='8888
115
116
ﺗﻌﺘﻤ ﺪ ﻧﻤ ﺎذج Webﻋﻠ ﻲ اﻟﺘﻘﻨﯿ ﺔ ASP.NETوھ ﻲ اﺧﺘ ﺼﺎر ) ( Active Server Pages .Netأي
ﺻﻔﺤﺎت اﻟﺨﺎدم اﻟﻨﺸﻄﺔ وﻓﻲ اﻟﺤﻘﯿﻘﺔ أﻧﮭﺎ ﻋﺒﺎرة ﻋﻦ ﺗﻘﻨﯿﺔ وﻟﯿﺴﺖ ﻟﻐﺔ وﻟﻜﻨﮭﺎ ﺗﻜﺘﺐ ﻣﻦ ﺧﻼل أي ﻟﻐﺔ ﻣﺘﻮاﻓﻘ ﺔ
ﻣﻊ .Net Frame Workوﺳﻮف ﻧﺘﻨﺎوﻟﮭﺎ ﻣﻦ ﺧﻼل Visual Basic.Netوﺗﻘﻮم VBﺑﻤﻌﺎﻟﺠﺔ ﺗﻔﺎﺻﯿﻞ
اﻟﻌﻤﻞ ﻣﻊ ASP.NETﺑﺪﻻ ﻋﻨﺎ ﻟﯿﺼﺒﺢ ﻓﻲ اﻟﻨﮭﺎﯾﺔ أﻧﻨﺎ ﻧﻌﻤﻞ ﻓﻲ ﺑﯿﺌ ﺔ ﻗﺮﯾﺒ ﺔ ﺟ ﺪا ﻣ ﻦ ﻣ ﺸﺎرﯾﻊ Windows
اﻟﻘﯿﺎﺳﯿﺔ ﻟﻜﻨﻨﺎ ﺑﺎﻟﻔﻌﻞ ﻧﻨﺸﺊ ﺻﻔﺤﺔ وﯾ ﺐ ﯾﻤﻜ ﻦ اﻟﻮﺻ ﻮل إﻟﯿﮭ ﺎ ﻋ ﻦ ﻃﺮﯾ ﻖ أي ﻣ ﺴﺘﻌﺮض اﻧﺘﺮﻧ ﺖ وﺗﻌﻄ ﻲ ھ ﺬه
اﻟﺼﻔﺤﺔ اﻻﻣﺘﺪاد .aspx
وﻹﻧﺸﺎء ﺗﻄﺒﯿﻘﺎت Webﺳﺘﺤﺘﺎج إﻟ ﻲ ﺣﺎﺳ ﺐ ﻣ ﺰود ﺑﺨ ﺪﻣﺎت ﻣﻌﻠﻮﻣ ﺎت اﻻﻧﺘﺮﻧ ﺖ Microsoft Internet
) Information Services(IISاﻹﺻﺪار ٥أو أﺣﺪث ﻣﻨﮫ .
وﺗﻨﻘﺴﻢ اﻟﺒﺮﻣﺠﺔ ﻓﻲ ﻧﻤﺎذج اﻟﻮﯾﺐ إﻟﻲ ﻗﺴﻤﯿﻦ ھﻤﺎ :
.١اﻟ ﺸﻜﻞ اﻟﻨﮭ ﺎﺋﻲ ﻋﻠ ﻲ ﻣﺘ ﺼﻔﺢ اﻟﻌﻤﯿ ﻞ )وھ ﻮ ﻣ ﻦ اﻟﻤﻤﻜ ﻦ أن ﯾﺤﺘ ﻮي ﻋﻠ ﻲ ﺷ ﻔﺮة ﻟﻐ ﺔ HTMLوﻟﻐ ﺔ
ﻣﺨﻄﻮﻃﺎت Scripting Languageﻣﺜﻞ JavaScriptأو ﻏﯿﺮھﺎ ( .
.٢ﺷﻔﺮة VBوراء ﺗﻠﻚ اﻟﺼﻔﺤﺔ وﻟﻜﻨﮭﺎ ﺗﻨﻔﺬ ﻋﻠﻲ اﻟﺨﺎدم وﻧﻮاﺗﺠﮭﺎ ﯾﻌﺮض ﻋﻠﻲ ﻣﺴﺘﻌﺮض اﻟﻌﻤﯿﻞ ﻓﻘ ﻂ
) وﯾﻤﻜﻦ أن ﺗﺠﻌ ﻞ اﻟ ﺸﻔﺮة اﻟﺨﺎﺻ ﺔ VBﻋﻠ ﻲ اﻣﺘ ﺪاد .aspx.vbوﺗﻌﻤ ﻞ ﻓ ﻲ اﻟﺨﻠﻔﯿ ﺔ ﻣ ﻊ اﻟ ﺼﻔﺤﺔ
اﻷﺳﺎﺳﯿﺔ (
وﻟﻜﻦ ﻣﺎ ھﺬا أن اﻷﻣﺮ ﯾﻔﺮض ﻋﻠﯿﻨﺎ أن ﻧﻜﻮن ﻋﻠﻲ واﺟﮭﺘﯿﻦ اﻷول اﻟﺨﺎدم واﻟﺜﺎﻧﻲ اﻟﻌﻤﯿﻞ ﻓﻜﯿﻒ ﺗﻜﻮن اﻟﺒﯿﺌﺔ ﺑﯿﻦ
اﻟﺨﺎدم واﻟﻌﻤﯿﻞ ؟
Client / Server Architecture ﺗﻮﺻ ﯿﻒ ﺑﯿﺌ ﺔ اﻟﺘ ﺸﻐﯿﻞ ﺑ ﯿﻦ اﻟﺨ ﺎدم واﻟﻌﻤﯿ ﻞ
ﯾﻮﺿﺢ اﻟﺸﻜﻞ ﻛﯿﻔﯿﺔ اﻻﺗﺼﺎل ﺑﯿﻦ اﻟﻌﻤﯿ ﻞ واﻟﺨ ﺎدم ﻓ ﻲ ﺣﺎﻟ ﺔ ﻃﻠ ﺐ ﺻ ﻔﺤﺔ MyFile.htmوھ ﻲ ﻋﻤﻠﯿ ﺔ ﯾﻄﻠ ﻖ
ﻋﻠﯿﮭ ﺎ Requestأي ﻃﻠ ﺐ وﯾ ﺬھﺐ ھ ﺬا اﻟﻄﻠ ﺐ ﻟﻠﺨ ﺎدم وﺑﻌ ﺪ ذﻟ ﻚ ﯾ ﺮد اﻟﺨ ﺎدم ﻋ ﻦ ﻃﺮﯾ ﻖ ﻣ ﺎ ﯾ ﺴﻤﻲ ب
Responseأي رد وﺗﻮﺿ ﺢ اﻻﻛ ﻮاد أﻧ ﮫ ﺗ ﻢ ﻋ ﺮض اﻻﻛ ﻮاد ﻛﻤ ﺎ ھ ﻲ ﻷﻧﮭ ﺎ ﻋﺒ ﺎرة ﻋ ﻦ ﺻ ﻔﺤﺎت HTML
ﺛﺎﺑﺘﺔ وﺗﻮﺿﺢ اﻟﻨﺘﯿﺠﺔ ﻓﻲ اﻟﺠﺎﻧﺐ اﻷﯾﻤﻦ اﻟﺘﻲ ﺳﻮف ﺗﻌﺮض ﻋﻠﻲ اﻟﻤﺴﺘﻌﺮض Browser
ﯾﻮﺿ ﺢ اﻟ ﺸﻜﻞ ﻛﯿﻔﯿ ﺔ ﻋ ﺮض ﺻ ﻔﺤﺔ ﻧ ﺸﻄﺔ ﻣﻜﺘﻮﺑ ﺔ ﺑﺘﻘﻨﯿ ﺔ الِ ASP.Netﻋﻨ ﺪﻣﺎ ﯾﻄﻠ ﺐ اﻟﻌﻤﯿ ﻞ ﺻ ﻔﺤﺔ
MyFile.aspxﯾﺬھﺐ اﻟﻄﻠﺐ ﻛﻤﺎ وﺿﺢ ﻣ ﻦ ﻗﺒ ﻞ إﻟ ﻲ اﻟﺨ ﺎدم ﻗﺒ ﻞ أن ﯾﻤ ﺮره ﻟﻠﻌﻤﯿ ﻞ clientﺛ ﻢ ﯾﺒﺤ ﺚ ﻋ ﻦ
اﻟﻤﻠﻒ وﯾﺠﮭﺰ اﻟﺮد Responseوﻟﻜﻦ ﻻ ﯾﺪﻓﻌﮫ ﻣﺒﺎﺷﺮة وإﻧﻤﺎ ﯾﻤﺮره إﻟﻲ ASP Engineوھﻮ اﻟﻤﺴﺌﻮل
ﻋﻦ ﻣﻌﺎﻟﺠﺔ ﺻﻔﺤﺎت ASP Processorوﺗﺤﻮﯾﻠﮭﺎ ﻟﺼﻔﺤﺎت HTMLﻋﻠﻲ ﺣﺴﺐ اﻟﻄﻠﺐ ﺛﻢ ﯾﺮﺳ ﻠﮭﺎ ﻋﻠ ﻲ
ھﯿﺌﺔ HTMLإﻟﻲ اﻟﻌﻤﯿﻞ ﻟﺘﻌﺮض ﻛﺼﻔﺤﺔ ﺛﺎﺑﺘﺔ ﻋﺎدﯾﺔ ﻣﻦ وﺟﮭ ﺔ ﻧﻈ ﺮ اﻟﻌﻤﯿ ﻞ وﻟﻜﻨﮭ ﺎ ﺻ ﻔﺤﺎت ﺗﻔﺎﻋﻠﯿ ﺔ ﻣ ﻦ
وﺟﮭﺔ ﻧﻈﺮ اﻟﺨﺎدم ﻷﻧﮭﺎ ﻋﻨﺪﻣﺎ ﺗﻄﻠﺐ ﻣﺮة أﺧﺮي ﺗﺄﺗﻲ ﺑﺒﯿﺎﻧﺎت ﺟﺪﯾﺪة ﻣﻦ ﻧﻔﺲ اﻟﻤﻠﻒ ذاﺗﮫ .
١١٧
١١٨
راﺑﻌﺎ :اﻹﻃﺎر اﻟﻌﺎم ﻟﺘﻮﺻﯿﻒ اﻟﺒﻨﺎء اﻷﺳﺎﺳﻲ ﻟﺒﯿﺌﺔ اﻟﺘﺸﻐﯿﻞ اﻟﺤﺎﺳﺐ واﻟﻌﻤﯿﻞ.
ﻻﺣ ﻆ ﻣﻌ ﻲ ﻓ ﻲ اﻟﺠ ﺰء اﻷﯾ ﺴﺮ ﻣ ﻦ اﻟ ﺸﻜﻞ وھ ﻮ اﻟﺠﺎﻧ ﺐ اﻟﻤﺨ ﺘﺺ ﺑﺎﻟﻌﻤﯿ ﻞ Client Sideوھ ﻮ ﺣﺎﺳ ﺐ ﻟﺪﯾ ﮫ
ﻣﺘﺼﻔﺢ Browserﻣﻦ أي ﻧﻮع ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜ ﺎل Internet Explorerأو Netscapeﯾ ﺼﺪر ھ ﺬا
اﻟﺤﺎﺳﺐ ﻃﻠﺐ ﯾﺪﻋﻲ Requestوﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ أن ھ ﺬا اﻟﻄﻠ ﺐ ﻣﺤﺘ ﻮي ﻋﻠ ﻲ أﺳ ﻢ اﻟﻤﻮﻗ ﻊ وأﺳ ﻢ اﻟﺒﺮﻧ ﺎﻣﺞ
اﻟﻤﻄﻠﻮب )ﺻﻔﺤﺔ اﻟﻮﯾﺐ اﻟﻤﻌﺎﻟﺠﺔ ﻟﻠﺒﯿﺎﻧﺎت( وﺑﻌﺾ اﻟﻤﺘﻐﯿ ﺮات اﻟﺘ ﻲ ﺗﺤﻤ ﻞ اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ أدﺧﻠﮭ ﺎ اﻟﻤ ﺴﺘﺨﺪم أو
اﻟﺘﻲ ﺗﻌﺎﻣﻞ ﻣﻌﮭﺎ .
وﻟﻮﺻﻮل ھﺬا اﻟﻄﻠﺐ إﻟﻲ ﺟﺎﻧﺐ اﻟﺨﺎدم Server Sideﯾﻜﻮن ھ ﺬا ﻣ ﻦ ﺧ ﻼل ﺷ ﺒﻜﺔ Networkﺳ ﻮاء ﻛﺎﻧ ﺖ
ھ ﺬه اﻟ ﺸﺒﻜﺔ ھ ﻲ Internetأو Intranetأو ﻣ ﻦ ﺧ ﻼل اﻟﺒﺮﺗﻮﻛ ﻮل TCP/IPأو أي ﺷ ﺒﻜﮫ ﺗﻜ ﺎﻓﺌﮭﻢ وﻣ ﻦ
ﺧﻼل ھﺬه اﻟﺸﺒﻜﺔ ﯾﺘﻢ اﻻﺗﺼﺎل ﺑﺎﻟﺨﺎدم ﻣﺮﺳﻼ إﻟﯿﮫ اﻟﺒﯿﺎﻧﺎت اﻟﺴﺎﺑﻖ ﺷﺮﺣﮭﺎ ﻋﻠﻲ اﻟﻄﻠﺐ .
ﯾﻮﺟﺪ ﻋﻠﻲ اﻟﺨﺎدم ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﻠﻔ ﺎت ﯾﻨﻔ ﺬ اﻟﻤﻠ ﻒ اﻟﻤﻄﻠ ﻮب ﻣ ﻦ اﻟﻌﻤﯿ ﻞ وھ ﺬا اﻟﻤﻠ ﻒ اﻟ ﺬي ﯾﻨﺘﮭ ﻲ ﺑﺎﻻﻣﺘ ﺪاد
.aspxﻗﺪ ﯾﻜﻮن ﻣﺨﺘﺺ ﺑﺎﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة ﺑﯿﺎﻧ ﺎت وأن ﻛ ﺎن ﻓﯿﺘ ﺼﻞ ﻣ ﻦ ﺧ ﻼل ﻛ ﺎﺋﻦ ﯾ ﺪﻋﻲ Connection
Objectﻟﯿﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻘﺎﻋﺪة ﺑﻜﻞ ﺗﻔﺎﺻﯿﻠﮭﺎ وﻓ ﻲ اﻟﻨﮭﺎﯾ ﺔ ﯾ ﺘﻢ اﻟﻌﻤ ﻞ ﻋﻠ ﻲ ﺣ ﺴﺐ اﻻﻛ ﻮاد اﻟﻤﻮﺟ ﻮدة وﻟﻜﻨﮭ ﺎ ﻻ
ﺗﺮﺳﻞ ﻣﺒﺎﺷﺮة إﻟ ﻲ اﻟﻌﻤﯿ ﻞ ﻷن اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﺑﮭ ﺎ ﻻ ﯾ ﺴﺘﻄﯿﻊ ﺗﻔ ﺴﯿﺮھﺎ اﻟﻤﺘ ﺼﻔﺢ اﻟﺨ ﺎص ﺑﺎﻟﻌﻤﯿ ﻞ ﻓﺘﺮﺳ ﻞ إﻟ ﻲ
ﻣﺘ ﺮﺟﻢ ﺧ ﺎص ﺑﺘﺤﻮﯾ ﻞ ھ ﺬا اﻷﻛ ﻮاد إﻟ ﻲ ﻟﻐ ﺔ HTMLوﻗ ﺪ ﯾﻜ ﻮن ﻣﻌﮭ ﺎ ﻟﻐ ﺎت ﻣﺨﻄﻮﻃ ﺎت Scripting
Languageوﯾﺮﺳﻠﮭﺎ ﻟﻠﻌﻤﯿﻞ ﻋﻠﻲ ھﯿﺌﺔ رد . Response
١١٩
١٢٠
ﺳﻮف ﺗﻨﺘﻈﺮ ﻗﻠﯿﻼ ﻓﺄﻧﮫ ﯾﺤﺎول ﻣﻌﺮﻓﺔ ھﻞ اﻟﺤﺎﺳﺐ ﻟﺪﯾﻚ ﻣﺠﮭﺰ ﺑﻜﻞ اﻹﻣﻜﺎﻧﯿ ﺎت ﻟﻜ ﻲ ﯾ ﺘﻢ ﺗﺤﻤﯿ ﻞ .NET 2003
أم ﻻ وأن ﻛ ﺎن ھﻨ ﺎك ﺑﻌ ﺾ اﻹﻣﻜﺎﻧﯿ ﺎت اﻟﻐﯿ ﺮ ﺟ ﺎھﺰة ﻓ ﺴﻮف ﯾﺘﻄﻠ ﺐ ﻣﻨ ﻚ إدﺧ ﺎل اﻻﺳ ﻄﻮاﻧﺔ اﻟﺨﺎﺻ ﺔ ﺑﮭ ﺬا أو
اﻻﺳﺘﻜﻤﺎل إن ﻛﺎن اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻲ DVDﻟﯿﻜﻮن اﻟﺸﻜﻞ ﻛﺎﻟﺘﺎﻟﻲ
١٢١
ﺳﻮف ﯾﻈﮭﺮ إﻟﯿﻚ اﻻﺣﺘﯿﺎﺟﺎت اﻟﺨﺎﺻﺔ ﺑﻌﻤﻠﯿﺔ اﻟﺘﺤﻤﯿﻞ أﺿﻐﻂ Install Nowﻟﺒﺪأ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻤﯿﻞ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ
اﻟﺴﺎﺑﻖ وأﻧﺘﻈﺮ ﺣﺘﻰ ﯾﺤﻤﻞ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
أﻧﺘﻈﺮ ﻗﻠﯿﻼ ﺣﺘﻰ ﯾﻨﺘﮭﻲ ﻣﻦ ﻋﻤﻠﯿﺔ اﻹﻋﺪاد ﺛﻢ أﺿﻐﻂ Doneﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
وﺑﻌﺪھﺎ أﺧﺘﺎر اﻟﺠﺰء اﻟﺜﺎﻧﻲ ﻣﻦ ﻋﻤﻠﯿﺔ اﻟﺘﺠﮭﯿﺰ Visual Studio .NETﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
١٢٢
أﻧﺘﻈﺮ ﻟﻠﺘﺤﻤﯿﻞ وأن ﻛﻨﺖ ﺗﺴﺘﺨﺪم أﻛﺜﺮ ﻣﻦ أﺳﻄﻮاﻧﺔ ﻓﻘﺪ ﯾﻄﻠﺐ ﻣﻨﻚ إدﺧﺎل اﻻﺳ ﻄﻮاﻧﺔ اﻟﺘ ﻲ ﺗﻠﯿﮭ ﺎ ﻛﺎﻟﺘ ﺎﻟﻲ أدﺧ ﻞ
اﻻﺳﻄﻮاﻧﺔ اﻟﺘﻲ ﺗﻠﯿﮭﺎ ﺛﻢ أﺿﻐﻂ OKﻟﺒﺪأ اﻟﺘﺤﻤﯿﻞ
ﺛﻢ ﯾﺒﺪأ ﻓﻲ اﻟﺘﺤﻤﯿﻞ
ﻓﺴﻮف ﺗﻈﮭﺮ ﻟﻚ ﺷﺎﺷ ﺔ اﺗﻔﺎﻗﯿ ﮫ ﺗﺜﺒﯿ ﺖ Visual Studio 2003أﺧﺘ ﺮ I Agreeوأﻛﺘ ﺐ أﺳ ﻤﻚ ﺛ ﻢ أﺿ ﻐﻂ
Continueﻟﻼﺳﺘﻤﺮار ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
ﻓﯿﻈﮭﺮ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻟﺘﺤﺪﯾﺪ أي اﻟﻠﻐﺎت اﻟﺘ ﻲ ﺳ ﻮف ﯾ ﺘﻢ ﺗﺤﻤﯿﻠﮭ ﺎ وﺑﻌ ﺾ اﻹﻣﻜﺎﻧﯿ ﺎت اﻷﺧ ﺮى ﯾﻤﻜﻨ ﻚ اﺧﺘﯿ ﺎر ﻣ ﺎ
ﺗ ﺸﺎء وﻟﻜﻨﻨ ﺎ ﻟ ﻦ ﻧﺨﺘ ﺎر إﻻ Visual Basic.NETﻣ ﻦ اﻟﻠﻐ ﺎت ﻛﻤ ﺎ ﯾﻤﻜﻨﻨ ﺎ اﺧﺘﯿ ﺎر ﻣﻜ ﺎن اﻟﺘﺤﻤﯿ ﻞ أذا أردﻧ ﺎ
وﯾﻤﻜﻨﻨﺎ رؤﯾﺔ ﺷﻜﻞ رﺳﻮﻣﻲ ﯾﺴﺎﻋﺪﻧﺎ ﻓﻲ ﻣﻌﺮﻓﺔ ھﻞ ﯾﻤﻜﻦ اﻟﺘﺤﻤﯿﻞ داﺧﻞ ال Partitionأم ﻻ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
١٢٣
وﻗﺪ ﯾﻄﻠﺐ ﻣﻨﻚ ﺧﻼل ھﺬه اﻟﻌﻤﻠﯿﺔ ﺗﻐﯿﺮ اﻷﺳﻄﻮاﻧﺔ وھﻜﺬا ﺣﺘﻰ ﯾﻨﺘﮭﻲ ﻣﻦ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻤﯿﻞ وﯾﻈﮭﺮ ﻟﻚ أﻧﮫ ﻻ ﯾﻮﺟﺪ
أﺧﻄﺄ أو ﯾﻌﺮض اﻷﺧﻄﺎء ﻟﯿﻜﻮن اﻟﺸﻜﻞ اﻟﻌﺎم اﻟﻨﮭﺎﺋﻲ ﻛﺎﻟﺘﺎﻟﻲ
وﻟﻔﺘﺢ اﻟﺒﺮﻧﺎﻣﺞ Start>>Microsoft Visual Studio .NET 2003 >> Microsoft Visual
Studio .NET 2003ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
١٢٤
وﻓ ﻲASP.NET Web Application وﻧﺨﺘﺎرVisual Basic ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﻧﺨﺘﺎر ﻣﻨﮭﺎ ﻣﺸﺎرﯾﻊ
ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲOk ﻧﺤﺪد ﻓﻮﻟﺪر اﻟﻤﺸﺮوع ﺛﻢ ﻧﻀﻐﻂLocation اﻟﺨﺎﻧﺔ
١٢٥
ﺛﻢ ﯾﻈﮭﺮ اﻹﻃﺎر اﻟﻌﺎم ﻟﻤﺸﺮوع اﻟﻮﯾﺐ اﻟﺨﺎص ﺑﺘﻘﻨﯿﺔ ASP.NETوھﻲ ﻣﻨﺴﻘﺔ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ
وﻓﻲ اﻟﺤﻘﯿﻘﺔ اﻟﺸﺎﺷﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ ﻣﻘﺴﻤﺔ ﺑﻄﺮﯾﻘﺔ ﻣﺤﻜﻤﺔ ﻓﯿﻤﻜﻨﻚ اﺳ ﺘﺨﺪام اﻟ ﺰر Auto Hideﻟﻠ ﺘﺤﻜﻢ
ﻓﻲ إﻇﮭﺎر وإﺧﻔﺎء أي اﻟﺸﺎﺷﺔ أو ﻣﻦ ﻗﺎﺋﻤﺔ Viewوﻧﺨﺘﺎر ﻣ ﺎ ﻧﺮﯾ ﺪ أن ﻧﻈﮭ ﺮه ﻣ ﻦ ﺷﺎﺷ ﺔ ﺣ ﺴﺐ أﺳ ﻤﮭﺎ ﻛﻤ ﺎ
ﺳﻨﺮي وﻟﻜﻦ ﻟﻌﻞ ﻣﻦ أھﻢ اﻟﺸﺎﺷﺎت
Solution Explorer
وﯾﻮﺟﺪ ﺑﮭﺎ ﻣﻠﻔﺎت اﻟﻤﺸﺮوع اﻟﺤﺎﻟﻲ
Properties
وﯾﻮﺟﺪ ﺑﮭﺎ ﺧﻮاص اﻟﻜﺎﺋﻦ اﻟﻤﻨﺸﻂ اﻟﺤﺎﻟﻲ أن وﺟﺪ
Toolbox
وﯾﻮﺟﺪ ﺑﮭﺎ اﻷدوات اﻟﻤﺘﺎح اﺳﺘﺨﺪاﻣﮭﺎ ﻣﻘﺴﻤﺔ ﻟﻌﺪة ﻓﺌﺎت
Server Explorer
وﺑﮭﺎ ﯾﺘﻢ اﻻﺗﺼﺎل ﺑﺨﺎدم اﻟﻮﯾﺐ وﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت
وﻓ ﻲ ﻣﻨﺘ ﺼﻒ اﻟ ﺸﺎﺷﺔ ﺗﻮﺟ ﺪ ﺻ ﻔﺤﺔ اﻓﺘﺮاﺿ ﯿﮫ أﻧ ﺸﺄھﺎ اﻟﺒﺮﻧ ﺎﻣﺞ وھ ﻲ WebForm1.aspxوﺑﺄﺳ ﻔﻠﮭﺎ
ﺗﺒﻮﯾﺒﺘﺎن HTMLﻓﮭﻲ ﺗﻔﺘﺢ ﻣﻜﺎن اﻷﻛ ﻮاد واﻟﺠﺎﻧ ﺐ اﻵﺧ ﺮ Designﻓﮭ ﻲ ﺗﻔ ﺘﺢ ﺟﺎﻧ ﺐ اﻟﺘ ﺼﻤﯿﻢ ﻟﻠﻤﻠ ﻒ ﻛﻤ ﺎ
ﻧﺮي
١٢٦
Working with Web Form Controls اﻟﻌﻤﻞ ﻣﻊ ﻋﻨﺎﺻﺮ ﺗﺤﻜﻢ ﻧﻤﻮذج Web
ﻧﻌﻤﻞ ﻣﻦ ﺧﻼل اﻟﺸﺎﺷﺔ Toolboxوﺑﺎﻟﻄﺒﻊ ھﻨﺎك أﻛﺜﺮ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ ﻓﻲ ﻧﻤﻮذج Web
ﻣﻦ ھﺬه اﻟﻤﺠﻤﻮﻋﺎت اﻟﻤﺠﻤﻮﻋﺔ
Web Forms
وھﻲ اﻟﻤﺠﻤﻮﻋﺔ اﻟﻘﯿﺎﺳﯿﺔ و ﺑﮭﺎ ﻋﻨﺎﺻﺮ ﺗﺤﻜﻢ اﻟﺨﺎدم )أي أﻧﮭ ﺎ ﺗﻨﻔ ﺬ ﻋﻠ ﻲ اﻟﺨ ﺎدم وﻟ ﯿﺲ اﻟﻌﻤﯿ ﻞ ( وﻧﻈ ﺮا ﻟﮭ ﺬا
ﻓﯿﻤﻜﻨﻨﺎ أن ﻧﺮﺑﻂ ﻛﻮد VB.NETﺑﮭﺎ ﻷﻧﮭﺎ ﺗﻨﻔﺬ ﻋﻠﻲ اﻟﺨﺎدم وأھﻢ ﻣﺎ ﯾﻠﻲ :
١٢٧
وھﻲ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ اﻟﻘﯿﺎﺳﯿﺔ اﻟﺨﺎﺻﺔ ﺑﻠﻐﺔ HTMLاﻟﺘﻲ ﺗﻨﻔﺬ ﻓﻲ ﺟﺎﻧﺐ اﻟﻌﻤﯿﻞ وﯾﻤﻜﻨﻨﺎ أن ﻧﺠﻌﻠﮭ ﺎ ﺗﻨﻔ ﺬ ﻋﻠ ﻲ
ﺟﺎﻧﺐ اﻟﺨﺎدم ﺑﺈﺿﺎﻓﺔ اﻟﻌﺒﺎرة " runat="serverداﺧﻞ اﻟﻜﻮد وھﺬا ﻟﺮﺑﻂ ﺷﻔﺮة VB.NETﺑﮭﺎ .
وﻣﻦ اﻟﻤﺠﻤﻮﻋﺎت اﻟﺘﻲ ﻻﻏﻨﻲ ﻋﻨﮭﺎ أﯾﻀﺎ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻘﻖ ﻣﻦ اﻟﺼﺤﺔ ﻣﻦ اﻟﺠﺰء Web Formsأﯾﻀﺎ
Validation Controls
ﯾﻤﻜﻨﻚ ﻣﻦ ﺧﻼل ھﺬه اﻟﻌﻨﺎﺻﺮ اﻟﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ اﻟﺒﯿﺎﻧﺎت ﻋﻨﺪ اﻟﻌﻤﯿﻞ وﻗﺒﻞ وﺻ ﻮل اﻟﺒﯿﺎﻧ ﺎت إﻟ ﻲ وﺣ ﺪة اﻟﺨﺪﻣ ﺔ
وھﺬا ﯾﻮﻓﺮ ﻛﺜﯿﺮا ﻋﻠﻲ اﻻﻧﺘﺮﻧﺖ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل أن ﻛﺎن ھﻨﺎك ﻣﺮﺑﻊ ﻧﺺ ﻻﺑﺪ ﻣﻦ إدﺧﺎل ﺑﯿﺎﻧﺎت ﻓﯿﮫ وﻟﯿﺲ ھﺬا
ﻓﻘﻂ وﻟﻜﻦ ﺗﺼﻞ أﻟﻲ أﻋﻘﺪ ﻣﻦ ذﻟﻚ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل اﻟﺘﺄﻛﺪ ﻣ ﻦ أن اﻟﻤ ﺴﺘﺨﺪم أدﺧ ﻞ ﻋﻨ ﻮان أﯾﻤﯿ ﻞ ﺻ ﺤﯿﺢ دون
أﺧﻄﺄ وﻏﯿﺮ ذﻟﻚ اﻟﻜﺜﯿﺮ
وﺻﻒ ﻣﺒﺴﻂ ﻋﻨﺼﺮ اﻟﺘﺤﻘﻖ
RequiredFieldValidatorﯾﺘﺄﻛ ﺪ ﻣ ﻦ أن اﻟﻤ ﺴﺘﺨﺪم ﻗ ﺪ أدﺧ ﻞ ﺑﯿﺎﻧ ﺎت ﻓ ﻲ اﻟﺤﻘ ﻞ اﻟﻤﻮﺿ ﻮع
ﻋﻠﯿﮫ ھﺬا اﻟﻌﻨﺼﺮ
CompareValidatorﯾﺘﺄﻛﺪ ﻣﻦ ﺧﻼل اﻟﻤﻘﺎرﻧﺔ ﺑﻘﯿﻤﺔ ﺛﺎﺑﺘﺔ أو ﻣﻦ ﺧﻼل اﻟﻤﻘﺎرﻧﺔ ﺑﺤﻘﻞ
أﺧ ﺮ أن اﻟﺤﻘ ﻞ اﻟﻤﻮﺿ ﻮع ﻋﻠﯿ ﮫ ﻋﻨ ﺼﺮ اﻟﺘﺤﻘ ﻖ ﯾﻨﻔ ﺬ ﺷ ﺮط
اﻟﻤﻘﺎرﻧﺔ ﻗﺒﻞ اﻻﻧﺘﻘﺎل إﻟﻲ وﺣﺪة اﻟﺨﺪﻣﺔ
RangeValidatorﯾﺘﺄﻛ ﺪ ﻣ ﻦ أن اﻟﻤ ﺴﺘﺨﺪم أدﺧ ﻞ ﻗﯿﻤ ﺔ ﻣﺤ ﺼﻮرة ﻣ ﺎ ﺑ ﯿﻦ ﻗﯿﻤﺘ ﯿﻦ
ﺗﺤﺪدھﻢ أﻧﺖ ﻛﺤﺪ أﻋﻠﻲ وأدﻧﻲ
RegularExpressionValidatorﯾﺘﺄﻛﺪ ﻣﻦ أن اﻟﻤﺴﺘﺨﺪم ﻗﺪ أدﺧﻞ ﻗﯿﻤﺔ ﺗﻮاﻓﻖ ﺗﻨﻈ ﯿﻢ ﻣﻌ ﯿﻦ )ﻣ ﺜﻼ
إدﺧﺎل ﻋﻨﻮان ﺑﺮﯾﺪ إﻟﻜﺘﺮوﻧﻲ ،أو رﻗﻢ ﺗﻠﯿﻔﻮن ..اﻟﺦ (
CustomValidatorﯾﺘﺄﻛﺪ ﻣﻦ أن اﻟﻤﺴﺘﺨﺪم ﻗﺪ أدﺧﻞ ﻗﯿﻤﺔ ﺗﻮاﻓﻖ ﺗﻌﺒﯿﺮ أن ﺗﺤﺪده ﻟﮫ
ValidationSummaryﻋﻨﺼﺮ ﻣﻦ ﺧﻼﻟﮫ ﯾﻤﻜﻨﻨﺎ ﺗﻨﺴﯿﻖ اﻷﺧﻄﺎء اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺼﻔﺤﺔ
ﺣﺘﻰ ﺗﻈﮭﺮ ﻟﻠﻤﺴﺘﺨﺪم ﺑﺸﻜﻞ ﻣﻨﺴﻖ
١٢٨
ﻛﻤﺎ ذﻛﺮﻧﺎ ﻣﻦ ﻗﺒﻞ أن ADO.NETھﻮ اﻟﺒﺮﺗﻮﻛﻮل اﻷﺳﺎﺳﻲ ﻟﻠﻮﺻﻮل ﻟﻠﺒﯿﺎﻧﺎت ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت
ﻛﺎﺋﻨﺎت ADO.NET
§ ﻛﺎﺋﻦ اﻻﺗﺼﺎل ﺑﺎﻟﺒﯿﺎﻧﺎت Data Connection Objects
ﻧﺤﺘﺎج ﻟﺮﺑﻂ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﻤﻠﻔﺎت اﻟﻮﯾﺐ ﺷﺊ ﯾﺨﺺ اﻻﺗﺼﺎل اﻟﺬي ﻣﻦ ﺧﻼﻟﮫ ﺳﻮف ﻧﻘﻮم ﺑﺎﻟﻌﻤﻠﯿﺎت ﻋﻠﻲ ھ ﺬه
اﻟﻘﺎﻋ ﺪة وﯾ ﺴﺘﺨﺪم ﻟ ﺬﻟﻚ اﻟﻜ ﺎﺋﻦ sqlConnectionﻟﻼﺗ ﺼﺎل ﺑﻘﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت SQL Serverأو اﻟﻜ ﺎﺋﻦ
OleDbConnectionﻟﻼﺗﺼﺎل ﺑﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻷﺧﺮى .
§ ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت Data Adapter
ھﻲ ﻣﻦ أھﻢ اﻟﻜﺎﺋﻨﺎت ﻓﻲ ADO.Netوھﻮ ﯾﻘﻮم ﺑﺎﻻﺗﺼﺎل ﺑﯿﻦ ﻗﻮاﻋ ﺪه اﻟﺒﯿﺎﻧ ﺎت اﻷﺻ ﻠﯿﺔ وﻣﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت
اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻌﺎﻣﻞ وﯾﺴﺘﺨﺪم ھﺬا اﻟﻜﺎﺋﻦ أواﻣﺮ SQLﻟﺘﻨﻔﯿﺬ اﻟﺘﻐﯿﺮات ﻋﻠﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻷﺻﻠﯿﺔ وھﻨﺎك ﻛﺎﺋﻨﯿﻦ
ﯾﻘﻮﻣ ﻮا ﺑ ﺬﻟﻚ sqlDataAdapterو OleDbDataAdapterوﻛﻤ ﺎ ﺗﻼﺣ ﻆ ﯾﻮﺿ ﻊ اﻟﻼﺣﻘ ﺔ sqlﻗﺒ ﻞ
اﻟﻜﺎﺋﻦ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ SQL Serverأو ﺗﻮﺿﻊ اﻟﻼﺣﻘﺔ OLEDBﻗﺒﻞ اﻟﻜﺎﺋﻦ ﻟﺘﻮﺿﯿﺢ أن ھﺬا اﻟﻜﺎﺋﻦ ﯾﺘﻌﺎﻣ ﻞ
ﻣﻊ ﺑﺎﻗﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وھﺬا ﻋﻠﻲ ﺟﻤﯿﻊ ﻛﺎﺋﻨﺎت ADO.NETﺗﻘﺮﯾﺒﺎ
§ ﻛﺎﺋﻦ اﻷواﻣﺮ Command Objects
ﯾ ﺴﺘﻄﯿﻊ ﻣﻼﺋ ﻢ اﻟﺒﯿﺎﻧ ﺎت Data Adapterﻗ ﺮاءة وﻹﺿ ﺎﻓﺔ وﺗﻌ ﺪﯾﻞ وﺣ ﺬف اﻟﺒﯿﺎﻧ ﺎت ﻓ ﻲ اﻟﻘﺎﻋ ﺪة وھ ﺬا ﻷﻧ ﮫ
ﯾﺘﻀﻤﻦ اﻟﻜﺎﺋﻦ اﻟﺨﺎص ﺑﺎﻷواﻣﺮ Command Objectاﻟﺬي ﯾﺤﺘﻮي ﻋﻠﻲ أرﺑﻊ ﺧ ﺼﺎﺋﺺ ﻣ ﻦ ﺧﻼﻟﮭ ﻢ ﯾ ﺘﻢ
ﺗﻮﻟﯿ ﺪ أواﻣ ﺮ SQLاﻟﺨﺎﺻ ﺔ ﺑﻜ ﻞ ﻣ ﻨﮭﻢ وھ ﻢ DeleteCommand , UpdateCommand ,
InsetCommand , SelectCommand
§ ﻛﺎﺋﻦ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت DataSets
ﯾﻘ ﻮم ھ ﺬا اﻟﻜ ﺎﺋﻦ ﺑﺘﺨ ﺰﯾﻦ اﻟﺒﯿﺎﻧ ﺎت ﻓ ﻲ ﻣﻜ ﺎن ﺗﺨ ﺰﯾﻦ ﻏﯿ ﺮ ﻣﺘ ﺼﻞ ﺑﻘﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت وھ ﺬا اﻟﻤﻜ ﺎن ﯾ ﺸﺒﮫ ﻗﻮاﻋ ﺪ
اﻟﺒﯿﺎﻧ ﺎت اﻟﻌﻼﻗﯿ ﺔ اﻟﻄﺒﯿﻌﯿ ﺔ وﯾﺤﺘ ﻮي ﻋﻠ ﻲ ﺗﺤﻜﻤ ﺎت ﺗﺨ ﺺ اﻟﺠ ﺪاول واﻟ ﺼﻔﻮف واﻷﻋﻤ ﺪة واﻟﻘﯿ ﻮد واﻟﻌﻼﻗ ﺎت
واﻟﻜﺎﺋﻦ اﻟﻤﺴﺌﻮل ﻋﻦ ذﻟﻚ ھﻮ DataSet
§ ﻛﺎﺋﻦ ﺟﺪاول اﻟﺒﯿﺎﻧﺎت DataTable Objects
ﯾﺤﺘﻮي اﻟﻜﺎﺋﻦ DataTableﻋﻠﻲ ﺑﯿﺎﻧﺎت ﻋﻠﻲ ﺷﻜﻞ ﺟﺪول ﻣﻦ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت وﻟ ﮫ ﺧﺎﺻ ﯿﺘﺎن ﻣﮭﻤﺘ ﺎن وھ ﻢ
Columnsوﯾﺘﻌﺎﻣ ﻞ ﻣﻌﮭ ﺎ اﻟﻜ ﺎﺋﻦ DataColumnوﯾﺨ ﺘﺺ ﺑﺎﻷﻋﻤ ﺪة ﻓ ﻲ اﻟﺠ ﺪول وﻛ ﻞ ﻋﻤ ﻮد ﻣ ﻨﮭﻢ
ﯾﺤﺘﻮي ﻋﻠﻲ اﻟﺨﺎﺻﯿﺔ DataTypeاﻟﺘﻲ ﺗﺤﺪد ﻧﻮع اﻟﺒﯿﺎﻧﺎت واﻟﺨﺎﺻﯿﺔ اﻟﺜﺎﻧﯿﺔ ھﻲ Rowاﻟﺘﻲ ﯾﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ
أﯾﻀﺎ اﻟﻜﺎﺋﻦ DataRowوﯾﺨﺘﺺ ﺑﺎﻟﺼﻔﻮف ﻓﻲ اﻟﺠﺪول وﯾﺴﺘﺨﺪم اﻟﺨﺎﺻﯿﺔ Itemﻟﻘﺮاءة وﻛﺘﺎﺑ ﺔ اﻟﻘ ﯿﻢ ﻓ ﻲ
ﺣﻘﻞ ﻣﻌﯿﻦ .
§ اﻟﻜﺎﺋﻦ اﻟﺨﺎص ﺑﺎﻟﻘﯿﻮد Constraint Objects
ﯾﻘﺪم ﻟﻨﺎ اﻟﻜﺎﺋﻦ اﻟﺨﺎﺻﺔ ﺑﻤﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻗﯿﻮدا ﻟﻠﺘﺤﻘ ﻖ ﻣ ﻦ ﺻ ﺤﺔ ﺗﻜﺎﻣ ﻞ اﻟﺒﯿﺎﻧ ﺎت وھ ﺬا ﻣ ﻦ ﺧ ﻼل اﻟﺨﺎﺻ ﯿﺔ
Constraintوھﻲ ﻋﺒﺎرة ﻋ ﻦ ﻗﺎﻋ ﺪة ﯾﻤﻜ ﻦ ﺗﻨﻔﯿ ﺬھﺎ ﻋ ﻦ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ اﻟﺒﯿﺎﻧ ﺎت ﻟﻠﺘﺤﻘ ﻖ ﻣ ﻦ اﻟﺠ ﺪول اﻟﻤﺘ ﺄﺛﺮ
ﺑﺎﻟﻌﻤﻠﯿﺔ وھﻢ ﻧﻮﻋﺎن أوﻻ Unique Constraintsوھﻮ ﺑﺎﻟﻄﺒﻊ ﻋﺪم ﺗﻜﺮار اﻟﻘﯿﻢ و ﺛﺎﻧﯿﺎ ForeignKey
Constraintsاﻟﺬي ﯾﺤﺪد ﻛﯿﻔﯿﮫ ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﺗﺒﻄﺔ ﻣﺎﺑﯿﻦ ﺟﺪوﻟﯿﻦ .
§ اﻟﻜﺎﺋﻦ اﻟﺨﺎص ﺑﺎﻟﻌﻼﻗﺎت DataRelation Objects
ﯾﻘﻮم ﺑﮭﺎ اﻟﻜﺎﺋﻦ DataRelationوھﻮ ﯾﺤﺪد اﻟﻌﻼﻗﺔ ﺑﯿﻦ اﻟﺠﺪول اﻷﺳﺎﺳﻲ واﻟﺠﺪول اﻟﻔﺮﻋﻲ وھﺬا ﺑﺎﻻﻋﺘﻤﺎد
ﻋﻠﻲ ﺣﻘﻞ ﻣﻔﺘﺎح ﯾﺘﺸﺎرك ﻓﯿﮫ اﻟﺠﺪوﻟﯿﻦ وﯾﻄﻠﻖ ﻋﻠﻲ ھﺬه اﻟﻌﻼﻗﺔ Master/Detail
§ اﻟﻜﺎﺋﻦ اﻟﺨﺎص ﺑﻘﺮاءة اﻟﺒﯿﺎﻧﺎت Data Readers
وﯾﻘﻮم ﺑﮭﺬا اﻟﻜﺎﺋﻦ DataReaderوھﻮ ﯾﺤﺘﻮي ﻋﻠﻲ ﻣﺠﻤﻮﻋﺔ ﺑﯿﺎﻧﺎت ﻟﻠﻘﺮاءة ﻓﻘﻂ ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﯾﻨﻘﻞ
ﺧﻼﻟﮭﺎ ﻟﻸﻣﺎم ﻓﻘﻂ وﻧﻈﺮا ﻟﺼﻐﺮ ﺣﺠﻢ ﺑﯿﺎﻧﺎﺗﮫ)ﺻﻒ ﺑﯿﺎﻧﺎت( ﻓﮭﻮ ﺳﺮﯾﻊ وﻣﻔﯿﺪ ﺟﺪا ﻓﻲ اﻟﻮﯾﺐ.
§ اﻟﻜﺎﺋﻦ ﻣﺸﺎھﺪ اﻟﺒﯿﺎﻧﺎت Data Views
وﯾﻘﻮم ھﺬا اﻟﻜﺎﺋﻦ ﺑﻌﺮض اﻟﺒﯿﺎﻧﺎت ﻟﺠﺪول واﺣﺪ ﯾﻤﻜﻦ اﻟﻘﯿﺎم ﺑﻌﻤﻠﯿﺎت ﻋﻠﯿﮫ ﻣﺜﻞ اﻟﺒﺤﺚ ﻓﯿﮫ وﻓﺮزه ..اﻟﺦ وﯾﻤﻜﻦ
اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻟﻘﻄﺔ ﻟﺒﯿﺎﻧﺎت ﻣﻦ ھﺬا اﻟﻜﺎﺋﻦ ﻣﻦ ﺧﻼل اﻟﺨﺎﺻﯿﺔ DataView
١٢٩
وﻻﺣﻆ أﻧﮫ ﻗﺪ ﺗ ﻢ اﻻﺗ ﺼﺎل ﺑﺠﮭ ﺎزك ﻣﺒﺎﺷ ﺮة اﻓﺘﺮاﺿ ﯿﺎ وھﻨ ﺎ أﺳ ﻤﮫ Completeوأن أردت اﻻﺗ ﺼﺎل ﺑﺤﺎﺳ ﺐ
أﺧ ﺮ ﻋﻠ ﻲ اﻟ ﺸﺒﻜﺔ ﯾﻤﻜﻨ ﻚ ذﻟ ﻚ ﻣ ﻦ ﺧ ﻼل اﻟﻘﺎﺋﻤ ﺔ Tools>>Connect To Serverأو ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
ﻋﻠﻲ Serverوﻧﺨﺘﺎر Add Serverوﻟﻜﻦ اﻵن ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻣﻮﺟﻮدة ﻋﻠﻲ ﻧﻔﺲ اﻟﺤﺎﺳ ﺐ ﻓﻨ ﻀﻐﻂ ﻋﻠ ﻲ
Add Connectionﻓﯿﻈﮭﺮ ﻟﻚ اﻟﻤﺮﺑﻊ اﻟﺤﻮاري Data Link Properties
ﻓﻲ اﻟﺘﺒﻮﯾﺒﮫ Connectionﻓﻲ اﻟﺨﺎﻧﺔ اﻷوﻟﻲ ﻧﻜﺘﺐ
أﺳﻢ اﻟﺤﺎﺳﺐ وﻓﻲ اﻟﺨﺎﻧﺔ رﻗﻢ ٢ﻧﺨﺘﺎر ﻧﻈﺎم اﻟﺪﺧﻮل
ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎت وھﻮ Use Windows NT
Integrated Security
وﻓﻲ اﻟﺨﺎﻧﺔ رﻗﻢ ٣ﻧﺨﺘﺎر أﺳﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻲ Test Connectionﻟﺘﻈﮭﺮ ﻟﻨﺎ
ﺷﺎﺷﺔ ﺗﻔﯿﺪ ﺑﺄن اﻻﺗﺼﺎل ﻗﺪ ﺗﻢ ﻧﻀﻐﻂ ﻋﻠﻲ OK
ﺛﻢ ﻋﻠﻲ OKوﻻ ﻧﻨﺴﻲ وﻗﺒﻞ أن ﺗﻈﮭﺮ ﻟﻨﺎ
ھﺬه اﻟﺸﺎﺷﺔ اﻟﺘﺎﻟﯿﺔ ﻧﺬھﺐ ﻣﻦ ﻗﺎﺋﻤﺔ >>Start
>>All Programs>>Microsoft SQL Server
Service Managerﻟﻨﺘﺄﻛﺪ أﻧﻨﺎ ﻣﺘﺼﻠﯿﻦ ﺑﺎﻟﻔﻌﻞ
ﻋﻠﻲ اﻟﺨﺎدم ﻓﻨﻀﻐﻂ ﻋﻠﻲ Startﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
١٣٠
SqlConnection وﺑﻌ ﺪ إﺳ ﻘﺎﻃﮫ ﻋﻠ ﻲ اﻟﻨﻤ ﻮذج ﺳ ﯿﻘﻮم VB.NETﺑﺈﻧ ﺸﺎء اﻟﻜ ﺎﺋﻨﯿﻦ
,SqlDataAdapterﺗﻠﻘﺎﺋﯿﺎ وﻗﺪ ﻗﺪ ﺗﻢ أﻧ ﺸﺎء ﻧ ﺴﺦ ﻣ ﻦ ھ ﺬﯾﻦ اﻟﻜ ﺎﺋﻨﯿﻦ وﺳ ﻤﯿﺎ sqlConnection1 ,
sqlDataAdapter1ﻛﻤﺎ ﯾﻈﮭﺮان ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ أﺿﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ sqlDataAdapterﻣﻼﺋﻢ
اﻟﺒﯿﺎﻧﺎت وأﺧﺘﺎر Generate Datasetﻟﻺﻧﺸﺎء ﻛﺎﺋﻦ ﻣﺠﻤﻮﻋﺔ ﺑﯿﺎﻧﺎت ﻓﯿﻈﮭﺮ ﻟﻜﻞ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
١٣١
وﯾﻤﻜﻨﻚ اﻟﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﻜﺎﺋﻦ DataSet1واﺧﺘﯿﺎر View Schemaﻟﺮؤﯾﺔ ﺗﺼﻤﯿﻢ اﻟﺠﺪول
اﻟﻤﻮﺟﻮد ﺣﺎﻟﯿﺎ ﺑﮭﺎ وﯾﻤﻜﻨﻚ رؤﯾﺔ ﻛﻮد XMLاﻟﻤﻜﻮن ﻟﮭﺬه اﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ ﺑﺎﻟ ﺸﻜﻞ وﯾﻤﻜﻨ ﻚ أﯾ ﻀﺎ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس
ﻋﻠﻲ DataAdapter1وﻻﺧﺘﯿﺎر Preview Dataﻟﺮؤﯾﺔ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺤﺘﻮي ﻋﻠﯿﮭﺎ ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧ ﺎت أﺿ ﻐﻂ
ﻋﻠﻲ Fill DataSetﻟﺮؤﯾﺔ اﻟﺒﯿﺎﻧﺎت أن ﻃﺒﻘﺖ ﻋﻠﯿﮭﺎ اﻷﺳﻠﻮب Fillﻣﻦ DataAdapterإﻟﻲ DataSet
أﻣﺎ اﻵن ﻓﻨﺮﯾﺪ إﻇﮭﺎر اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺷﺒﻜﺔ اﻟﺒﯿﺎﻧﺎت DataGridﻟﻌﺮض ﺑﯿﺎﻧﺎت اﻟﺠﺪول ﻓﯿﻤﻜﻨﻨ ﺎ ذﻟ ﻚ ﻋ ﻦ ﻃﺮﯾ ﻖ
ﺳ ﺤﺐ اﻟﻌﻨ ﺼﺮ DataGridﻣ ﻦ Toolbox >>Web Formsﻓﺘﻈﮭ ﺮ ﻟﻨ ﺎ ﺷ ﺒﻜﺔ ﺟﺪوﻟﯿ ﮫ ﻋﻠ ﻲ اﻟﻤﻠ ﻒ
WebForm1.aspxﻧﻀﻐﻂ ﻋﻠﯿﮭﺎ ﺑﺎﻟﻤﺎوس وﻧﻔﺘﺢ اﻟﺨﺼﺎﺋﺺ Propertiesﺑﺎﻟﻀﻐﻂ F4وﻓ ﻲ اﻟﺠ ﺰء
DataSourceﻧﺨﺘ ﺎر ﻣﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﺳ ﺘﻨﺘﻤﻲ إﻟﯿﮭ ﺎ اﻟ ﺸﺒﻜﺔ أﻟﺠﺪوﻟﯿ ﮫ وھ ﻲ DataSet1وﻣ ﻦ
اﻟﺨﺎﺻﯿﺔ DataMemberﻧﺨﺘﺎر أﺳﻢ اﻟﺠﺪول اﻟﺬي ﺳﻮف ﺗﻘﻮم ﺑﻌﺮﺿ ﮫ وھ ﻮ Teacherﻛﻤ ﺎ ﯾﻮﺿ ﺢ ﺗﻠ ﻚ
اﻟﺨﻄﻮات اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
وﯾﻌﻨﻲ )( DataSet11.Clearھﻮ ﻣ ﺴﺢ ﻣﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت اﻟﺤﺎﻟﯿ ﺔ أﻣ ﺎ اﻟ ﺴﻄﺮ اﻟ ﺬي ﯾﻠﯿ ﮫ ﻓ ﻨﻤﻸ ﻣﺠﻤﻮﻋ ﺔ
اﻟﺒﯿﺎﻧ ﺎت DataSetﻣ ﻦ ﺧ ﻼل ﻣﻼﺋ ﻢ ﺑﯿﺎﻧ ﺎت ﺟ ﺪول Teacherوھ ﺬا ﻣ ﻦ ﺧ ﻼل اﻟﺨﺎﺻ ﯿﺔ Fillأﻣ ﺎ اﻟﺠ ﺰء
)( Page.DataBindﻓﮭﻮ ﺧﺎص ﺑﺮﺑﻂ اﻟﻌﻨﺎﺻﺮ اﻟﻤﻮﺟﻮدة ﻋﻠﻲ اﻟ ﺸﺎﺷﺔ ﺑﺎﻟﺒﯿﺎﻧ ﺎت ﻟﺘﺤ ﺪﯾﺜﮭﺎ وﻛ ﺎن ﺑﺈﻣﻜﺎﻧﻨ ﺎ
رﺑ ﻂ ﻛ ﻞ ﻋﻨ ﺼﺮ ﻋﻠ ﻲ ﺣ ﺪه وﻟﻜ ﻦ ھ ﺬا ﻗ ﺪ ﯾﻜ ﻮن ﻃ ﻮﯾﻼ ﻓ ﻲ ﺑﻌ ﺾ اﻷﺣﯿ ﺎن ﻓﯿﻤﻜﻨﻨ ﺎ ﻛﺘﺎﺑ ﺔ
)( DataGrid1.DataBindوھﻜﺬا ﻣﻊ ﺑﺎﻗﻲ اﻟﻌﻨﺎﺻﺮ وﻟﻜﻦ ﻋﻨﺪ رﺑﻂ اﻟﺼﻔﺤﺔ ﯾﺘﻢ رﺑﻂ ﺟﻤﯿﻊ اﻟﻌﻨﺎﺻﺮ اﻟﺘﻲ
ﻋﻠﯿﮫ وﻻ ﺗﻘﻠﻞ ﻣﻦ اﻟﺴﺮﻋﺔ ﺷﺊ ﻓﺴﻮف ﻧﺴﺘﺨﺪﻣﮭﺎ داﺋﻤﺎ
١٣٢
وﻟﻀﺒﻂ ﺷ ﻜﻞ اﻟ ﺸﺒﻜﺔ ﯾﻤﻜﻨﻨ ﺎ اﺧﺘﯿ ﺎر Property Builderأو Auto Formatأﺳ ﻔﻞ ﺷﺎﺷ ﺔ اﻟﺨ ﺼﺎﺋﺺ
ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
ﺗﻼﺣﻆ أن اﻟﺠﺰء اﻷﯾﺴﺮ ﻣﻦ اﻟﺸﺎﺷﺔ ﻣﻘﺴﻢ إﻟﻲ أﻛﺜ ﺮ ﻣ ﻦ ﻓﺌ ﺔ واﻟﺠ ﺰء اﻷﯾﻤ ﻦ ﯾﻤﻜﻨ ﻚ ﺗﻐﯿ ﺮ ﺧﻮاﺻ ﮫ ﻟﻌﻤ ﻞ ﺷ ﻜﻞ
أﻓﻀﻞ وﻟﻌﻞ ﻣﻦ أھﻢ اﻟﺨﻮاص ﻓﻲ اﻟﺠ ﺰء DataSource , DataMember Generalوﻗ ﺪ ﺗ ﻢ ﺷ ﺮﺣﮭﻢ
ﺳﺎﺑﻘﺎ واﻟﺠﺰء اﻟﺴﻔﻠﻲ Allow Sortingﻓﮭﻲ ﺗﺠﻌ ﻞ أﺳ ﻢ ﻛ ﻞ ﺣﻘ ﻞ ارﺗﺒ ﺎط ﺗ ﺸﻌﺒﻲ ﻋﻨ ﺪ اﻟ ﻀﻐﻂ ﻋﻠﯿ ﮫ ﯾﺮﺗ ﺐ
اﻟﺠ ﺪول ﻋﻠ ﻲ أﺳ ﺎس اﻟﺤﻘ ﻞ اﻟ ﺬي ﺗ ﻢ اﻟ ﻀﻐﻂ ﻋﻠﯿ ﮫ أم أھ ﻢ اﻟﺨ ﻮاص ﻓ ﻲ Columnsھ ﻲ ﻓ ﻲ اﻟﺠ ﺰء
Available Columnsﻧﺨﺘﺎر ﻣﻨﮭﺎ Data Fieldsﺛﻢ اﻟﺠﺰء Button Columnﺳﯿﻈﮭﺮ اﻟﺨﯿﺎرات
Selectوھﻲ ﺗﻠﻮن ﺻﻒ اﻟﺒﯿﺎﻧ ﺎت ﻋﻨ ﺪ اﻟ ﻀﻐﻂ ﻋﻠﯿ ﮫ و Deleteﺗ ﻀﯿﻒ ارﺗﺒ ﺎط ﺗ ﺸﻌﺒﻲ ﻋﻨ ﺪ اﻟ ﻀﻐﻂ ﻋﻠﯿ ﮫ
ﯾﻤﺴﺢ ھﺬا اﻟﺼﻒ و Edit , Update , Cancelﺗ ﻀﯿﻒ ارﺗﺒ ﺎط ﺗ ﺸﻌﺒﻲ ﯾ ﺴﻤﻲ Editﻋﻨ ﺪ اﻟ ﻀﻐﻂ ﻋﻠﯿ ﮫ
ﻓﻲ ﺻﻒ ﺑﯿﺎﻧﺎت ﻣﻌﯿﻦ ﯾﻤﻜﻨﻨﺎ ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﻓﯿﮫ وﻣﻨﮭﻢ أھﻢ ﺧﻮاص اﻟﺠﺰء Pagingھﻲ اﻟﺨﺎﺻ ﯿﺔ Allow
Pagingﻋﻨﺪ اﺧﺘﯿﺎرھ ﺎ ﯾﻤﻜﻨ ﻚ ﺗﺤﺪﯾ ﺪ ﻋ ﺪد اﻟ ﺼﻔﻮف اﻟﺘ ﻲ ﺳ ﺘﻈﮭﺮ ﻓ ﻲ اﻟﻤ ﺮة اﻟﻮﺣ ﺪة وﺗﺤﺪﯾ ﺪ وﺟ ﻮد ارﺗﺒ ﺎط
ﺗﺸﻌﺒﻲ ﻓﻲ أﺳﻔﻞ اﻟﺸﺒﻜﺔ ﻟﻌﻤﻞ اﻟﺘﺎﻟﻲ Nextﻟﺮؤﯾﺔ ﺑﺎﻗﻲ اﻟﺒﯿﺎﻧﺎت وﺑﺎﻗﻲ اﻟﺨﻮاص ﺗﻌﺘﺒﺮ ﺧﻮاص ﺗﺨﺘﺺ ﺑﺎﻟﺸﻜﻞ
ﻓﯿﻤﻜﻨﻚ ﺗﺘﺒﻌﮭﺎ ﻟﺮؤﯾﺔ اﻟﺘﻐﯿﯿﺮات ﻓﻲ اﻟﺸﻜﻞ
أن اﺧﺘﺮﻧﺎ Auto Format
ﻓﯿﻤﻜﻨﻨﺎ اﺧﺘﯿﺎر ﺗﻨﺴﯿﻖ ﻣﻌﺪ ﻣﺴﺒﻘﺎ ﻟﯿﻄﺒﻖ ﻋﻠﻲ ﺷﻜﻞ
اﻟﺸﺒﻜﺔ أﺧﺮ ﻣﻨﮭﻢ ﻣﺎ ﺗﺸﺎء ﺛﻢ أﺿﻐﻂ OK
١٣٣
وﻣﻦ اﻟﺸﺎﺷﺔ Solution Explorerﺳﻮف ﺗﺮي ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﻠﻔﺎت اﻟﺘﻲ ﺗﻢ إﻧﺸﺎءھﺎ ﻣﺜﻞ
§ AssemplyInfo.vbھﻮ ﻣﻠﻒ ﯾﺤﺘﻮي ﻋﻠﻲ ﺟﻤﯿﻊ اﻟﻤﻌﻠﻮﻣﺎت ﻋﻦ اﻟﺒﺮﻧﺎﻣﺞ ﻣﺜﻞ اﻻرﺗﺒﺎﻃﺎت واﻟﺤﺼﻮل
ﻋﻠﻲ ﺗﻔﺮﻋﺎت اﻷﺳﻤﺎء وﻏﯿﺮھﺎ
§ Global.asaxﯾﻌﺎﻟﺞ ﻃﻠﺒﺎت ASPﻋﻠﻲ ﻣﺴﺘﻮي اﻟﺘﻄﺒﯿﻖ
§ Style.cssﯾﺴﺘﺨﺪم ﻟﺘﻌﺮﯾﻒ إﻋﺪادات ﻧﻤﻄﯿﮫ ﺷﻜﻠﯿﮫ ﻓﻲ HTML
§ Web.configﯾﺤﺘﻮي ﻋﻠﻲ إﻋﺪادات اﻟﺘﻄﺒﯿﻖ ﻣﻦ أﺟﻞ ﺗﻄﺒﯿﻘﺎت ASP.NET
§ WebForm.aspxھﻮ اﻟﻨﻤﻮذج اﻟﺤﺎﻟﻲ اﻟﺬي ﻧﻌﻤﻞ ﻋﻠﯿﮫ
ﯾﻤﻜﻨﻚ اﻟﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ WebForm.aspxﺛﻢ اﺧﺘﯿﺎر View In
Browserﻟﺮؤﯾﺔ اﻟﻨﺘﯿﺠﺔ داﺧﻞ اﻟﺒﺮﻧﺎﻣﺞ وھﻲ أﻓﻀﻞ ﻓﻲ ﺣﺎﻻت اﻟﺘﺠﺮﯾﺐ
أو ﻟﺘﺸﻐﯿﻞ اﻟﻤﻮﻗﻊ ﻣﻦ ﻗﺎﺋﻤﺔ Debug >> Run Or F5
أو ﻣﻦ ﻗﺎﺋﻤﺔ Debug >> Run Without Debugging Or Ctrl+F5
ﻟﯿﻜﻮن اﻟﺸﻜﻞ ﻋﻠﻲ اﻟﻤﺘﺼﻔﺢ ﻛﺎﻟﺘﺎﻟﻲ
١٣٤
اﻟﺸﺎﺷﺔ Data Link Propertiesاﻟﺘﻲ ﺳﺒﻖ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﯾﻤﻜﻨﻨﺎ اﻵن اﺳﺘﺨﺪام ﻧﻔﺲ اﻻﺗﺼﺎل ﺛﻢ اﻟﻀﻐﻂ
Next
وﻣﻨﮭﺎ ﺳﻮف ﺗﻈﮭﺮ اﻟﺸﺎﺷﺔ Choose a Query Typeﻻﺧﺘﯿﺎر ﻧﻤﻂ أو ﻧ ﻮع اﻻﺳ ﺘﻌﻼم وﯾﻮﺟ ﺪ أﻛﺜ ﺮ ﻣ ﻦ
ﻧ ﻮع أوﻟﮭ ﻢ ھ ﻮ ﺟﻤﻠ ﺔ SQLواﻻﺧﺘﯿ ﺎر اﻟﺜ ﺎﻧﻲ واﻟﺜﺎﻟ ﺚ ﺧﺎﺻ ﯿﻦ ب Proceduresوھ ﻲ ﻋﺒ ﺎرة ﻋ ﻦ ﺟﻤ ﻞ
ﻣﺨﺰﻧﺔ داﺧﻞ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﯾﻤﻜﻨﻨﺎ ﺗﻨﻔﯿﺬھﺎ ﻣﻦ أي ﻣﻜﺎن ﻋﻠﻲ اﻟﻘﺎﻋﺪة وﻟﻜﻨﻨﺎ ﻟﻢ ﻧﺘﻜﻠﻢ ﺣﺘﻰ اﻵن ﻋﻠﻲ ھﺬا اﻟﺠﺰء
ﺳﻮف ﻧﺨﺘﺎر Use SQL Statementﺛﻢ ﻧﻀﻐﻂ Next
١٣٥
ﺳ ﻮف ﺗﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ Generate the SQL Statementsﯾﻤﻜﻨ ﻚ ﻛﺘﺎﺑ ﺔ ﺟﻤﻠ ﺔ اﻻﺳ ﺘﻌﻼم ﻛﻤ ﺎ
ﺗﻌﻠﻤﻨﺎھﺎ ﻣﻦ ﻗﺒ ﻞ ﻓ ﻲ ﻣﺮﺑ ﻊ اﻟ ﻨﺺ اﻟﻤﻮﺟ ﻮد ﻓ ﻲ ﻣﻨﺘ ﺼﻒ اﻟ ﺸﺎﺷﺔ أو اﻟ ﻀﻐﻂ ﻋﻠ ﻲ اﻟ ﺰر Query Builder
ﻹﻇﮭﺎر ﻣﺴﺎﻋﺪ ﻟﺒﻨﺎء ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﻓﺄﺿﻐﻂ ﻋﻠﯿﮫ
ﺳﻮف ﯾﻈﮭﺮ ﻟﻨﺎ اﻟﺸﻜﻞ اﻟﺘ ﺎﻟﻲ وھ ﻮ Add Tableوھ ﻮ ﯾ ﺸﺒﮫ ﻣ ﺎ ﺗﻌﻠﻤﻨ ﺎه ﻓ ﻲ SQL Serverﻓﻨﺨﺘ ﺎر أﺳ ﻢ
اﻟﺠﺪول Teacherﺛﻢ ﻧﻀﻐﻂ Add
وﻣﺒﻌﺪھﺎ ﻧﺨﺘﺎر Close
ﺳﻮف ﯾﻈﮭﺮ ﻟﻨﺎ ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
ھﻮ ﺑﻨﺎء اﻻﺳﺘﻌﻼﻣﺎت اﻟﺬي ﺗﻌﻠﻤﻨﺎه ﻣﻦ ﻗﺒﻞ ﻓﻲ
SQL Serverﻣﻊ اﻷﺷﻜﺎل Pansﻧﻌﻢ
ﺣﺘﻰ اﻟﻘﺎﺋﻤﺔ ﻓﻠﻨﺎ أن ﻧﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ
ﻣﻦ ﻗﺒﻞ ﺑﻜﻞ ﺗﻔﺎﺻﯿﻞ ﻣﺎ ذﻛﺮﻧﺎ
ﻧﻜﻮن ﺑﮫ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم اﻟﻤﻄﻠﻮﺑﺔ ﻛﺎﻟﺘﺎﻟﻲ
وﯾﻤﻜﻨﻨﺎ رؤﯾﺔ ﺟﻤﻠﺔ SQLﻣﻜﺘﻮﺑﺔ ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ وﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻞ اﻟﺰر Advanced Optionsﺳﯿﻈﮭﺮ
ﻟﻨﺎ ﻋﺪة اﺧﺘﯿﺎرات اﻻﺧﺘﯿﺎر اﻷول ﯾﻔﯿﺪ ﺑﺄﻧﮫ ﺳﻮف ﯾﺘﻢ أﻧﺘ ﺎج أﻣ ﺮ اﻹﺿ ﺎﻓﺔ واﻟﺘﻌ ﺪﯾﻞ واﻟﺤ ﺬف ﺗﻠﻘﺎﺋﯿ ﺎ ﺑﻨ ﺎءا ﻋﻠ ﻲ
ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع اﻟﺘﻲ ﺗﻢ ﻋﻤﻠﮭﺎ اﻵن ) ﺗﺬﻛﺮ أﻧﮫ ﻟﻮ ﻛﺎﻧﺖ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﺟﻤﻠ ﺔ ﻣﻌﻘ ﺪة وﻣ ﻦ أﻛﺜ ﺮ ﻣ ﻦ ﺟ ﺪول
ﻣﺜﻼ وﻻ ﯾﻨﻄﺒﻖ ﻋﻠﯿﮭﺎ اﻟ ﺸﺮوط اﻟﻤﻮﺿ ﺤﺔ ﻓ ﻲ اﻟﺠ ﺰء اﻟﺨ ﺎص ﺑﺎﻻﺳ ﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇ ﺔ وأﻧﻮاﻋﮭ ﺎ ﻓ ﻲ SQL
Serverﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻟﻦ ﯾﻜﻮن ھﺬا اﻻﺧﺘﯿﺎر ﻣﺘ ﺎح ( وأن اﻻﺧﺘﯿ ﺎر اﻟﺜ ﺎﻧﻲ ﯾﻔﯿ ﺪ ﺑﺘﻌ ﺪﯾﻞ ﺟﻤﻠ ﺔ Update ,
Deleteﻟﻜﻲ ﯾﻜﺘﺸﻔﻮا ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻣﻨ ﺬ ﺗﺤﻤﯿ ﻞ اﻟﺒﯿﺎﻧ ﺎت داﺧ ﻞ اﻟﻜ ﺎﺋﻦ DataSetﻣ ﺎ اﻟ ﺬي ﺗﻐﯿ ﺮ وھ ﺬا
اﻻﺧﺘﯿﺎر ﯾﺴﺎﻋﺪ ﺑﺎﻟﻄﺒﻊ ﺣﯿﻨﻤﺎ ﯾﻜﻮن اﻟﺘﻌﺪﯾﻞ أو اﻟﻤﺴﺢ ﻛﺜﯿﺮ ﻓﻲ ھﺬه اﻟﺼﻔﺤﺔ وﻟﺪي أﻛﺜ ﺮ ﻣ ﻦ ﻣ ﺴﺘﺨﺪم وﻻ أرﯾ ﺪ
أن ﯾﺤﺪث أﺧﻄﺎ ﻓﻤﻦ اﻟﻤﻤﻜﻦ أن ﯾﻌﺪل اﺛﻨﺎن ﻗﯿﻤﮫ ﻣﺮة واﺣﺪة واﻻﺧﺘﯿﺎر اﻷﺧﯿﺮ ﺧ ﺎص ﺑﻨ ﺸﯿﻂ ﻣﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت
داﺋﻤﺎ ﺑﺎﻟﺒﯿﺎﻧﺎت اﻟﺤﺪﯾﺜﺔ ﻋﻨﺪ ﺣﺪوث أي ﺗﻐﯿﯿﺮ وﺑﻌﺪھﺎ أﺿﻐﻂ Okﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
١٣٦
وﺑﻌﺪ اﻟﻀﻐﻂ ﻋﻠﻲ OKواﻻﺧﺘﯿﺎرات ﻛﻤﺎ ھ ﻲ ﯾﻤﻜﻨ ﻚ اﻟ ﻀﻐﻂ ﻋﻠ ﻲ Nextﻓﺘﻈﮭ ﺮ ﻟ ﻚ اﻟ ﺸﺎﺷﺔ اﻟﺘﺎﻟﯿ ﺔ وﺗﻌﻄﯿ ﻚ
ﺗﻘﺮﯾﺮ ﻋﻦ ﻧﺘﺎﺋﺞ اﻻﺳﺘﻌﻼم وﻗﺪراﺗﮫ ﻛﺎﻟﺘﺎﻟﻲ
وﻣﻦ ﺷﺎﺷ ﺔ Solution Explorerﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ MyForm.aspxوﻧﺨﺘ ﺎر Set AS
Start Pageﻟﺘﻜﻮن ھﻲ ﺻﻔﺤﺔ اﻟﺒﺪء ﻋﻦ اﻟﺘﺸﻐﯿﻞ ﺛﻢ أﺿ ﻐﻂ Ctrl+F5ﻟﯿﻈﮭ ﺮ اﻟ ﺸﻜﻞ اﻟﺘ ﺎﻟﻲ ﻋﻨ ﺪ اﻟ ﻀﻐﻂ
ﻋﻠﻲ زر Load
١٣٧
وﺑﻌﺪھﺎ أﺿﻐﻂ ﻋﻠﻲ Ctrl+F5ﻟﺘﺤﺼﻞ ﻋﻠﻲ ﺟﺪوﻟﯿﻦ ﯾﻌﻤﻼن ﻋﻠﻲ ﻧﻔﺲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻛﺎﻟﺘﺎﻟﻲ
ﻧﺨﺘﺎر ﻣﻦ Bindable Propertiesاﻟﺨﺎﺻﯿﺔ اﻟﺘﻲ ﻧﺮﯾﺪ رﺑﻄﮭﺎ وھﻲ اﻵن Textوﻟﺪﯾﻨﺎ ﺧﯿﺎران ﻓﻲ اﻟﺠﺰء
اﻷﯾﻤ ﻦ simple bindingو custom binding expressionاﻷول ﻟﻼﺧﺘﯿ ﺎر ﻟﻌﻤ ﻞ اﻻرﺗﺒ ﺎط
واﻟﺜﺎﻧﻲ ﻟﻜﺘﺎﺑﺔ اﻟﺘﻌﺒﯿﺮ اﻟﻨﺎﺗﺞ ﻋﻨﮫ اﻻرﺗﺒ ﺎط ﻧﺨﺘ ﺎر اﻻﺧﺘﯿ ﺎر اﻷول وﻣﻨ ﮫ ﻧﺨﺘ ﺎر Dataset11وﻣﻨﮭ ﺎ اﻟﺠ ﺪول
Teacherوﻣﻨﮭ ﺎ ] DefaultView>>DefaultView.[0ﻟﻠﻮﺻ ﻮل ﻟﺤﻘ ﻮل اﻟﺠ ﺪول ﺛ ﻢ ﻧﺨﺘ ﺎر اﻟﺤﻘ ﻞ
اﻟﻤﺮاد ﺛﻢ ﻧﻀﻐﻂ okوﺑﮭﺬا ﻧﻜﻮن رﺑﻄﻨﺎ اﻟﺨﺎﺻﯿﺔ Textﺑﺤﻘﻞ رﻗﻢ اﻟﻤﻌﻠﻢ ﺑﺠ ﺪول اﻟﻤﻌﻠ ﻢ ﻧﻜ ﺮر ھ ﺬه اﻟﺨﻄ ﻮات
ﻣﻊ ﺑﺎﻗﻲ اﻟﺤﻘﻮل ﻋﻠﻲ أن ﻧﺨﺘﺎر ﻋﻨﺎﺻﺮ ﺗﺤﻜﻢ Labelﻟﺘﻮﺿﯿﺢ ﻣﺎ ﯾﻘﻮم ﺑﮫ اﻟﺤﻘﻞ
١٣٩
.DataBindings.Addاﻟﻌﻨﺼﺮ
)"أﺳﻢ اﻟﺤﻘﻞ أو اﻟﺨﺎﺻﯿﺔ اﻟﻤﻮﺟﻮدة ﺑﺎﻟﻌﻨﺼﺮ " ,أو ﻋﻨﺼﺮ ﻣﺎ Datasetﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت " ,اﻟﺨﺎﺻﯿﺔ اﻟﻤﺮاد رﺑﻄﮭﺎ"(
ﻧﻜﺘﺐ أوﻻ أﺳﻢ اﻟﻌﻨﺼﺮ اﻟﻤﺮاد رﺑﻄﮫ ﺗﺘﺒﻌﮫ اﻟﺨﺎﺻﯿﺔ DataBindings.Addﻟﻺﺿﺎﻓﺔ ارﺗﺒﺎط ﺑﯿﺎﻧﺎت وﺑﻌﺪھﺎ
ﻧﺬﻛﺮ أﺳﻢ اﻟﺨﺎﺻﯿﺔ اﻟﺘﻲ ﻧﺮﯾﺪ رﺑﻄﮭﺎ ﻓﻲ ھﺬا اﻟﻌﻨﺼﺮ وﺑﻌﺪ ذﻟﻚ ﻧﺬﻛﺮ اﻟﻤﻜﺎن اﻟﺬي ﺳ ﻮف ﺗ ﺄﺗﻲ ﻣﻨ ﮫ اﻟﺒﯿﺎﻧ ﺎت أن
ﻛ ﺎن ﻋﻨ ﺼﺮ ﻋﻠ ﻲ اﻟ ﺸﺎﺷﺔ أو أي ﻋﻨ ﺼﺮ أﺧ ﺮ أو أن ﻛ ﺎن ﻣﺠﻤﻮﻋ ﺔ ﺑﯿﺎﻧ ﺎت Datasetوﺑﻌ ﺪ ذﻟ ﻚ إذا ﻛﻨ ﺖ ﻗ ﺪ
اﺧﺘﺮت ﻋﻨﺼﺮا ﻓﻼﺑﺪ ﻣﻦ ذﻛﺮ اﻟﺨﺎﺻﯿﺔ اﻟﺘﻲ ﺑﮫ وﺗﺮﯾﺪ أن ﺗﺮﺑﻄﮭﺎ ﺑﻌﻨﺼﺮك أﻣﺎ إن اﺧﺘﺮت ﻣﺠﻤﻮﻋﺔ ﺑﯿﺎﻧﺎت ﻓﻼﺑﺪ
ﻣ ﻦ ذﻛ ﺮ أﺳ ﻢ اﻟﺠ ﺪول ﻧﻘﻄ ﺔ أﺳ ﻢ اﻟﺤﻘ ﻞ ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل ﻟ ﺮﺑﻂ TextBoxاﻟﻤ ﺴﻤﻲ TxtTeacherId
ﺑﺨﺎﺻﯿﺔ Textﺑﻤﺠﻤﻮﻋﺔ ﺑﯿﺎﻧﺎت ﻓﻲ ﺟﺪول اﻟﻤﺪرس ﻓﻲ ﺣﻘﻞ رﻗﻢ اﻟﻤﺪرس ﯾﻜﻮن اﻟﻜﻮد ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
)"TxtTeacher.DataBindings.Add("Text",Dataset11,"Teacher.TeacherId
وھﺬا ﻣﻊ ﺑﺎﻗﻲ اﻟﻌﻨﺎﺻﺮ اﻻﺧﺮي ﻟﻠﺮﺑﻂ ﺑﺎﻟﻜﻮد أﻣﺎ ﻟﺮﺑﻂ ﻋﻨﺼﺮ ﻣﺴﻤﻲ TextBox1ﻓﻲ ﺧﺎﺻﯿﺔ Textﺑﻌﻨﺼﺮ
آﺧﺮ ﻣﺴﻤﻲ Textbox2ﺑﺎﻟﺨﺎﺻﯿﺔ Textأﯾﻀﺎ ﯾﻜﻮن اﻟﺸﻜﻞ ﻛﺎﻟﺘﺎﻟﻲ
)"TextBox1.DataBindings.Add("Text",TextBox2 ,"Text
١٤٠
DataGrid1.DataSource = DataSet11
"DataGrid1.DataMember = "Teacher
)(DataSet11.Clear
)SqlDataAdapter1.Fill(DataSet11
)(Page.DataBind
ﻛﻤﺎ ﻓﻌﻠﻨﺎ ﻣﻦ ﻗﺒﻞ ﻓﻲ اﻟﺤ ﺪث Form_Loadﻧﻜﺘ ﺐ ھ ﺬا اﻟﻜ ﻮد ﻓﮭ ﻮ ﯾ ﻀﺒﻂ اﻟﺨﺎﺻ ﯿﺔ DataSourceﻋﻠ ﻲ
ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﺛﻢ ﻧﻀﺒﻂ اﻟﺨﺎﺻﯿﺔ DataMemberﻋﻠﻲ اﻟﺠ ﺪول اﻟ ﺬي ﺳ ﻮف ﺗ ﺄﺗﻲ ﻣﻨ ﮫ اﻟﺒﯿﺎﻧ ﺎت وﺑ ﺎﻗﻲ
اﻟﻜﻮد ﻛﻤﺎ ﺳﺒﻖ وﺷﺮﺣﻨﺎه
وﻟﻌﻤﻞ ﻣﺜﺎل ﺗﻮﺿﯿﺤﻲ ﻟﻄﺮﯾﻘﺘﻲ اﻟﺮﺑﻂ اﻟﺒﺴﯿﻄﺔ واﻟﻤﺮﻛﺒﺔ ﻧﺘﺒﻊ اﻵﺗﻲ
١٤١
واﻵن ﻧﺒﺪأ اﻟﻌﻤﻞ ﻟﺤﻔ ﻆ ﻣﻮﻗﻌﻨ ﺎ ﻣ ﻦ ﺿ ﻤﻦ اﻟ ﺴﺠﻼت وﻟﮭ ﺬا ﺳ ﻮف ﻧﻨ ﺸﺊ ﻣﺘﻐﯿ ﺮ وﻧ ﺴﻤﯿﮫ Indexﻟﯿﺤﻤ ﻞ رﻗ ﻢ
اﻟﺴﺠﻞ اﻟﺤﺎﻟﻲ وﻟﻜ ﻦ ھﻨ ﺎك ﻣ ﺸﻜﻠﺔ ﻓ ﻲ ھ ﺬا ﻷﻧﻨ ﺎ ﻧ ﺬھﺐ ﻓ ﻲ ﻛ ﻞ ﻣ ﺮة ﻋ ﻦ اﻟ ﻀﻐﻂ ﻋﻠ ﻲ اﻟ ﺰر ﻟﻠﺨ ﺎدم Server
وﺑﻌﺪھﺎ ﯾﻌﺎد ﺗﺤﻤﯿﻞ اﻟﺼﻔﺤﺔ وﺧﻼل ھﺬه اﻟﻌﻤﻠﯿﺔ ﺳﻮف ﺗﻨﻔﺬ اﻟﺼﻔﺤﺔ ﻟﺜﺎﻧﻲ ﻣﺮة وﺧﻼل ھﺬا ﺳﻮف ﯾﺘﻢ ﺿﺒﻂ ﻛ ﻞ
ﺷﺊ ﻓﻲ اﻟﺼﻔﺤﺔ ﻛﯿﻔﻤﺎ ﻛﺎن أول ﻣﺮة ﻛﺄﻧﮭﺎ ﻷول ﻣﺮة ﺗﺤﻤﻞ وﺑﮭﺬا ﺗﻀﯿﻊ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ وﺗﻀﺒﻂ ﻣ ﻦ أول ﻓ ﻲ ﻛ ﻞ
ﻣﺮة وﻟﻜﻨﻨﺎ ﻻ ﻧﺮﯾﺪ ھﺬا وإﻧﻤﺎ ﻧﺮﯾﺪ ھﺬا اﻟﻤﺘﻐﯿ ﺮ أن ﯾﺤ ﺘﻔﻆ ﺑﻘﯿﻤﺘ ﮫ ﺧ ﻼل ﻋﻤﻠﯿ ﮫ اﻟﺘﻨﻘ ﻞ ﻣ ﻦ واﻟ ﻲ وﺣ ﺪة اﻟﺨﺪﻣ ﺔ
Serverﻧﻌ ﻢ أﻧﻨ ﺎ ﻧﺤﺘ ﺎج إﻟ ﻲ ﻣﺘﻐﯿ ﺮ ﯾﺤ ﺘﻔﻆ ﺑﻘﯿﻤﺘ ﮫ ﻃ ﻮال رﺣﻠ ﺔ اﻟﻮﺻ ﻮل واﻟﻌ ﻮدة ﻣ ﻦ واﻟ ﻲ وﺣ ﺪة اﻟﺨﺪﻣ ﺔ
وﻧﺴﺘﺨﺪم ﻟﮭﺬا ﻛﺎﺋﻦ ﯾﺪﻋﻲ ViewStateوﻧﻌﻄﻲ ﻟﮫ أﺳﻢ وﻧﺴﻨﺪ إﻟﯿﮫ اﻟﻘﯿﻤﺔ اﻟﻤﺮداة
اﻟﻘﯿﻤﺔ اﻟﻤﺴﻨﺪة إﻟﯿﮫ =)" أﺳﻤﮫ "(ViewState
وﻋﻨﺪ اﻻﺣﺘﯿﺎج إﻟﻲ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﯾﺤﻤﻠﮫ ھﺬا اﻟﻜﺎﺋﻦ ﯾﻤﻜﻨﻨﺎ اﻟﻮﺻﻮل إﻟﯿﮭﺎ ووﺿﻌﮭﺎ داﺧﻞ ﻣﺘﻐﯿﺮ ﻣﺜﻼ ﻛﺎﻟﺘﺎﻟﻲ
)" اﺳﻤﮫ "( = ViewStateاﻟﻤﺘﻐﯿﺮ اﻟﻤﺮاد وﺿﻊ اﻟﻘﯿﻤﺔ ﻓﯿﮫ
واﻵن ﻧﺮﯾﺪ ﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﻲ اﻟﺰر << اﻻﻧﺘﻘﺎل إﻟﻲ أول ﺳﺠﻞ وھﻮ رﻗﻢ ﺻﻔﺮ ﻓﻨﻀﺒﻂ ﻗﯿﻤﺔ اﻟﻤﺘﻐﯿﺮ Index=0
وﻧ ﻀﻌﮫ داﺧ ﻞ اﻟﻜ ﺎﺋﻦ ViewStateﻟﻠﺤﻔ ﺎظ ﻋﻠﯿ ﮫ ،وﻧ ﺴﺘﺨﺪم اﻟﺨﺎﺻ ﯿﺔ RowFilterﻟﻠﻮﺻ ﻮل ﻟ ﺼﻒ ﻣ ﺎ
وﯾﻜﻮن ﺑﻨﺎءھﺎ ﻛﺎﻟﺘﺎﻟﻲ
اﻟﻘﯿﻤﺔ & " = أﺳﻢ اﻟﺤﻘﻞ "= DataView1.RowFilter
ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳﻮف ﻧﺼﻞ ﻟﻠﺤﻘﻞ اﻟﻤﺮاد وﻟﻜﻨﻨﺎ ﻻ ﻧﻌﺮف ﻗﯿﻤﺔ ھﺬا اﻟﺤﻘﻞ وﻟﻜﻨﻨﺎ ﻧﻌ ﺮف ﻓﻘ ﻂ رﻗﻤ ﮫ ﻓﻜﯿ ﻒ ﻧ ﺼﻞ
ﻣﻦ ﺧﻼل رﻗﻤﮫ إﻟﻲ ﻗﯿﻤﺘﮫ وﺑﻌﺪ ذﻟﻚ ﻧﺴﻨﺪ ھﺬه اﻟﻘﯿﻤﺔ إﻟﻲ اﻟﺨﺎﺻﯿﺔ RowFilterھﺬه ھﻲ اﻟﻔﻜﺮة
ﻟﻠﻮﺻﻮل إﻟﻲ ﻗﯿﻤﺔ ﻓﻲ ﺣﻘﻞ وﻧﻌﺮف رﻗﻢ اﻟﺼﻒ اﻟﺬي ھﻲ ﻓﯿﮫ ﻓﻘﻂ ﻧﺘﺒﻊ اﻷﺗﻲ
)"أﺳﻢ اﻟﺤﻘﻞ "().Itemرﻗﻢ اﻟﺼﻒ ().Rowsأﺳﻢ اﻟﺠﺪول(Dataset11.Tables
ﻓﻲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت Datasetﻣﺮﺗﺒﮫ اﻟﺠﺪاول اﻟﺘﻲ ﺑﮭﺎ ﻣﻦ ٠إﻟﻲ ﻋﺪد اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﯾﻤﻜﻨﻨ ﺎ ذﻛ ﺮ رﻗ ﻢ
اﻟﺠﺪول أو أﺳﻤﮫ وھﻜﺬا أﯾﻀﺎ اﻟﺼﻔﻮف ﻓﺄول ﺻﻒ ﻟﮫ اﻟ ﺮﻗﻢ ٠إﻟ ﻲ آﺧ ﺮ ﺻ ﻒ ﺑﯿﺎﻧ ﺎت ﻓﻨﺤ ﺪد اﻟﺠ ﺪول اﻷول ﺛ ﻢ
ﻧﺮﺳﻞ رﻗﻢ اﻟﺼﻒ ﺑﻌﺪ اﻟﺨﺎﺻﯿﺔ Rowsوﺑﻌﺪھﺎ Itemأي ﻟﻠﻌﻨﺼﺮ )أو ﻟﻠﺤﻘﻞ( وﺑﻌﺪھﺎ ﻧ ﺬﻛﺮ أﺳ ﻢ ھ ﺬا اﻟﺤﻘ ﻞ
وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺗﺮﺟﻊ ھ ﺬه اﻟﺠﻤﻠ ﺔ ﻗﯿﻤ ﺔ ھ ﺬا اﻟﺤﻘ ﻞ ﻋﻨ ﺪ اﻟ ﺼﻒ اﻟﻤﺤ ﺪد رﻗﻤ ﮫ ﯾﻤﻜﻨﻨ ﺎ ﺑﻌ ﺪ ذﻟ ﻚ وﺿ ﻌﮭﺎ داﺧ ﻞ
ﻣﺘﻐﯿﺮ ﺛﻢ إﺳﻨﺎدھﺎ ﻟﻠﺨﺎﺻﯿﺔ RowFilterﻟﯿﻜﻮن اﻟﻜﻮد ﻛﺎﻣﻼ ﻛﺎﻟﺘﺎﻟﻲ
ﻟﻘﺪ ﻋﺮﻓﻨﺎ ﻣﺘﻐﯿﺮﯾﻦ وأﺳﻨﺪﻧﺎ ﻟﻠﻤﺘﻐﯿﺮ Indexاﻟﻘﯿﻤﺔ ٠ووﺿﻌﻨﺎ ﻗﯿﻤﺘﮫ داﺧﻞ ViewStateأﺳﻤﮫ VSIndex
وﻟﻠﻮﺻﻮل ﻟﻘﯿﻤ ﺔ ﺣﻘ ﻞ DeptNoﻓ ﻲ اﻟ ﺼﻒ اﻷول أﺗﺒﻌﻨ ﺎ اﻟﻄﺮﯾﻘ ﺔ اﻟ ﺴﺎﺑﻖ ﺷ ﺮﺣﮭﺎ واﻟﺘ ﻲ ﺳ ﻮف ﺗﻨ ﺘﺞ ﻗﯿﻤ ﺔ
اﻟﺤﻘﻞ ووﺿﻌﻨﺎھﺎ داﺧﻞ اﻟﻤﺘﻐﯿﺮ IntDeptNoوﻻﺣﻆ أن ﻧﻮﻋﮫ Integerوھﺬا ﻋﻠﻲ ﺣﺴﺐ ﻧﻮع اﻟﺤﻘﻞ وﻧﻮع
اﻟﺤﻘﻞ ھﻨﺎ ﯾﻤﻜﻦ أن ﯾﻜﻮن Integerﻷﻧ ﮫ ﻓ ﻲ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت Intوان ﻛ ﺎن ﻧ ﺼﻲ ﻓ ﻼ ﻧﻨ ﺴﻲ وﺿ ﻊ ) ' ( أول
اﻟﻨﺺ وآﺧﺮه
واﻵن زر اﻟﺘﻘﺪم ﻟﻸﻣﺎم ﺧﻄﻮة وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳﻮف ﻧﺄﺧﺬ ﻣﻦ اﻟﻜﺎﺋﻦ ViewStateاﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺑﮫ اﻵن وﺑﻌﺪ
ذﻟﻚ ﻧﺰﯾﺪ ﻋﻠﯿﮭﺎ اﻟﻘﯿﻤﺔ واﺣﺪ ﺣﺘﻰ ﯾﻜﻮن اﻟﺼﻒ اﻟﺬي ﯾﻠﯿﮫ وﻟﻜﻦ ھﻨﺎك ﻣﺸﻜﻠﺔ ﻣﺎذا ﻟﻮ ﻛﺎن ھﺬا آﺧﺮ ﺣﻘﻞ وﻃﻠﺒﻨ ﺎ
ﻣﻦ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻨﺰول ﻟﻠﺼﻒ اﻟﺬي ﯾﻠﯿﮫ ﺳﻮف ﯾﺤﺪث ﺧﻄﺄ ﻓﻼﺑﺪ ﻣﻦ اﻟﺘﺤﻘﻖ أن ھ ﺬا اﻟ ﺼﻒ ﻟ ﯿﺲ آﺧ ﺮ ﺣﻘ ﻞ وأن
ﻛﺎن آﺧﺮ ﺣﻘﻞ ﻧﻀﺒﻂ ﻗﯿﻤﺔ Indexﻋﻠﻲ آﺧﺮ ﺣﻘﻞ وﻟﻜ ﻦ ﻛﯿ ﻒ ﻧﻌ ﺮف إن ھ ﺬا آﺧ ﺮ ﺣﻘ ﻞ ﯾﻤﻜﻨﻨ ﺎ ذﻟ ﻚ ﻣ ﻦ ﺧ ﻼل
اﺳﺘﺨﺪام اﻟﺨﺎﺻﯿﺔ Countﻟﻠﺼﻔﻮف ﻓﻲ اﻟﺠﺪول اﻟﻤﻄﻠﻮب ﻣﻦ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻛﺎﻟﺘﺎﻟﻲ
ﻓﮭﺬه اﻟﺨﺎﺻﯿﺔ ﺗﻌﯿﺪ ﻋﺪد اﻟﺼﻔﻮف ﺑﺪاﯾﺔ ﻣﻦ واﺣﺪ وﻧﺤﻦ ﻧﺘﺒﻊ ﺗﺮﻗﯿﻢ اﻟﺼﻔﻮف ﻣﻦ ﺻﻔﺮ ﻓﻼﺑﺪ ﻣﻦ إﻧﻘﺎص اﻟﻘﯿﻤﺔ
واﺣﺪ ﺣﺘﻰ ﺗﻜﻮن ﻣﺘﻜﺎﻓﺌﺔ
").Rows.Countأﺳﻢ اﻟﺠﺪول"(Dataset11.Tables
١٤٢
اﻟﻜ ﻮد اﻟﻤﺤ ﺪد ھ ﻮ اﻟﺠﺪﯾ ﺪ اﻟ ﺬي ﺗ ﻢ إﺿ ﺎﻓﺘﮫ ﻓﻠﻘ ﺪ اﺳ ﺘﻠﻤﻨﺎ أوﻻ ﻓ ﻲ اﻟﻤﺘﻐﯿ ﺮ Indexاﻟﻘﯿﻤ ﺔ اﻟﻤﻮﺟ ﻮدة ﻓ ﻲ
ViewStateوزودﻧ ﺎ ﻋﻠﯿﮭ ﺎ واﺣ ﺪ ﻷﻧﻨ ﺎ ﻧﺮﯾ ﺪ اﻟﺘﻘ ﺪم ﻟﻸﻣ ﺎم واﻟ ﺸﺮط اﻟ ﺬي ﯾﻠﯿﮭ ﺎ اﻟﺨ ﺎص ﺑﺎﺧﺘﺒ ﺎر ھ ﻞ ﻗﯿﻤ ﺔ
Indexأﻛﺒﺮ ﻣﻦ ﻋﺪد اﻟﺼﻔﻮف ) أﻧﻘﺼﻨﺎ واﺣﺪ ﻷن اﻷﺳﻠﻮب Countﯾﻌﺪ اﻟﺤﻘﻮل ﺑﺪاﯾﺔ ﻣﻦ ١وﻧﻌﻤﻞ ﻧﺤﻦ ﻣﻊ
اﻷﺳﻠﻮب ) ? ( Rowsﺑﺪاﯾﺔ ﻣﻦ اﻟﺼﻒ ﺻﻔﺮ ( ﻓ ﺈن ﻛ ﺎن اﻛﺒ ﺮ ﻧ ﻀﺒﻄﮫ ﻋﻠ ﻲ رﻗ ﻢ آﺧ ﺮ ﺻ ﻒ وﺑﮭ ﺬا ﻻ ﯾﺤ ﺪث
ﺧﻄﺄ
وﻟﻼﻧﺘﻘﺎل ﻟﻠﺨﻠﻒ ﺧﻄﻮة ﻧﺘﺒﻊ ﻧﻔﺲ اﻟﻜﻮد وﻟﻜﻦ ﻧﺨﺘﺒﺮ ﻟ ﻮ ﻛ ﺎن Indexأﻗ ﻞ ﻣ ﻦ اﻟ ﺼﻔﺮ ﻷﻧﻨ ﺎ ﻧﺮﺟ ﻊ وﻧﻘ ﻞ ﺣﺘ ﻰ
اﻟﺼﻔﺮ ﻟﯿﻜﻮن اﻟﻜﻮد ﻛﺎﻣﻼ ﻛﺎﻟﺘﺎﻟﻲ
وﻟﻠﻮﺻﻮل إﻟﻲ آﺧﺮ ﺣﻘﻞ ﻧﻌﺘﻤﺪ ﻓﻲ ھﺬا ﻋﻠﻲ اﻟﺨﺎﺻﯿﺔ Countﻓﮭ ﻲ ﺗﻌﯿ ﺪ ﺑﻌ ﺪ ﻃ ﺮح واﺣ ﺪ ﻣﻨﮭ ﺎ ﻓﮭﺮﺳ ﺖ آﺧ ﺮ
ﺻﻒ ﺑﯿﺎﻧﺎت وﺑﺬﻟﻚ ﯾﻤﻜﻨﻨﺎ اﻟﻮﺻﻮل وﺑﺪون ﺗﺤﻘﻖ ﻛﺎﻟﺘﺎﻟﻲ
وﺑﻌﺪ ذﻟﻚ ﻧﻀﯿﻒ إﻟﻲ ھﺬا اﻟﺼﻒ ﻛﻞ ﺣﻘﻞ ﻣﻮﺟﻮد ﻓﻲ اﻟﺠﺪول وﻗﯿﻤﺔ اﻟﺠﺪﯾﺪة ﻛﺎﻟﺘﺎﻟﻲ
اﻟﻘﯿﻤﺔ اﻟﺠﺪﯾﺪة = )"أﺳﻢ اﻟﺤﻘﻞ "(myrow.Add
١٤٣
myrow.Item("DeptNo") = txtDeptNo.Text
myrow.Item("DName") = txtDName.Text
myrow.Item("Manager") = txtManager.Text
)DataSet11.Tables("Department").Rows.Add(myrow
)"SqlDataAdapter1.Update(DataSet11, "Department
ﻓ ﻲ اﻟ ﺴﻄﺮ اﻷول ﻋﺮﻓﻨ ﺎ ﻣﺘﻐﯿ ﺮ ﻣ ﻦ اﻟﻨ ﻮع ﺻ ﻒ ﺑﯿﺎﻧ ﺎت واﻟ ﺴﻄﺮﯾﻦ اﻟﺜ ﺎﻧﻲ واﻟﺜﺎﻟ ﺚ ﻧﻤ ﺴﺢ ﻣﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت
اﻟﻘﺪﯾﻤﺔ وﻧﻤﻸھﺎ ﺑﻌﺪھﺎ ﻣﻦ ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﻄﺮﯾﻘﺔ Fill
اﻟﺴﻄﺮ اﻟﺮاﺑﻊ ﻧﺒﻨﻲ اﻟﺼﻒ ﺑﺎﻟﺨﻮاص ﻣﺜﻞ ﺻﻒ ﻓﺎرغ ﻣﻦ ﺟﺪول Department
اﻟ ﺴﻄﻮر ٧-٦-٥ﻧ ﻀﯿﻒ داﺧ ﻞ ﻛ ﻞ ﻋﻨ ﺼﺮ ﻓ ﻲ اﻟ ﺼﻒ ﺑﻌ ﺪ ذﻛ ﺮ أﺳ ﻤﮫ اﻟﻘﯿﻤ ﺔ اﻟﺠﺪﯾ ﺪة اﻟﻤﺪﺧﻠ ﺔ ﻓ ﻲ اﻟﻌﻨﺎﺻ ﺮ
TextBox
اﻟﺴﻄﺮ اﻟﺜﺎﻣﻦ ﻧﻌﻤﻞ ﻋﻤﻠﯿﺔ إﺿﺎﻓﺔ ﻓﻌﻠﯿﺔ ﻟﺒﯿﺎﻧﺎت اﻟﺼﻒ اﻟﺠﺪﯾﺪ داﺧﻞ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت Dataset
اﻟﺴﻄﺮ اﻟﺘﺎﺳﻊ ﻧﺤﺪث اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺟﺪول Departmentﻓﻲ اﻟﻘﺎﻋﺪة ﻣﺜﻞ ﻣﺎ ﺗﻢ ﻋﻠﯿﮫ ﻓﻲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧــــﺎت
ﯾﻤﻜﻨﻚ اﻵن ﺗﺸﻐﯿﻞ WebFormوإدﺧﺎل ﺑﯿﺎﻧﺎت ﺑﮭﺎ وﻟﻜﻦ ﻣﺎذا ﻟﻮ ﻛﺎﻧﺖ ھﻨﺎك أﺧﻄ ﺎء ھﻨ ﺎك ﻃ ﺮق ﻋﺪﯾ ﺪة ﺟ ﺪا
ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻷﺧﻄﺎء ﺳﻨﺘﻨﺎول أﺳﮭﻠﮭﻢ وھﻲ اﻟﻄﺮﯾﻘ ﺔ Try – Catchﻋﻨ ﺪﻣﺎ ﺗ ﺪﺧﻞ رﻗ ﻢ اﻟﻘ ﺴﻢ وھ ﻮ ﻣﻮﺟ ﻮد
ﻓﺴﻮف ﯾﺤﺪث ﺧﻄﺄ وﻋﻨﺪﻣﺎ ﺗﺪﺧﻞ رﻗﻢ ﻣﺪﯾﺮ ﻏﯿﺮ ﻣﻮﺟﻮد أو ھﻮ ﻣﺪﯾﺮ ﻟﻘ ﺴﻢ ﺛ ﺎﻧﻲ ﺳ ﻮف ﯾﺤ ﺪث ﺧﻄ ﺄ ﻟ ﻮ أدﺧﻠ ﺖ
ﺑﯿﺎﻧﺎت ﻏﯿﺮ ﻣﺘﻮاﻓﻘﺔ ﻣﻊ اﻟﺤﻘﻮل ﺳﻮف ﯾﺤﺪث ﺧﻄﺄ اﻟﻤﮭ ﻢ أن اﻟﺨﻄ ﺄ ﺳ ﻮف ﯾ ﺄﺗﻲ داﺋﻤ ﺎ ﻣ ﻦ أول اﻟﺠ ﺰء اﻟﺨ ﺎص
ﺑﺈﺿﺎﻓﺔ اﻟﺒﯿﺎﻧﺎت داﺧﻞ اﻟﺤﻘﻮل ﺣﺘﻰ ﻧﮭﺎﯾﺔ ھﺬا اﻟﻜﻮد أو ﺑﻤﻌﻨﻲ أﺧﺮ ھﺬا ھﻮ اﻟﺠﺰء اﻟﻤﻌﺮض ﻟﺤﺪوث أﺧﻄﺎء ﻓﯿ ﮫ
ﻧﻀﻊ أول ھﺬا اﻟﺠﺰء اﻟﻜﻠﻤﺔ Tryوﻧﮭﺎﯾﺘﮭﺎ اﻟﻜﻠﻤ ﺔ End Tryوآﺧ ﺮ اﻟﺠ ﺰء اﻟﻤ ﺸﻜﻮك ﻓ ﻲ أﻣ ﺮه أﻛﺘ ﺐ اﻟﻜﻠﻤ ﺔ
Catchﻟﻺﻣ ﺴﺎك ﺑﺎﻟﺨﻄ ﺄ وﻋ ﺮف اﻟﻤﺘﻐﯿ ﺮ اﻟﺨ ﺎص ﺑﺎﻟﺨﻄ ﺄ وھ ﻮ ﻓ ﻲ ھ ﺬه اﻟﺤﺎﻟ ﺔ eEndEditوھ ﺬا اﻟﺨﻄ ﺄ
اﻟﺨﺎص ﺑﺂﺧﺮ ﺗﻌﺪﯾﻞ وھﻮ ﻣﻦ اﻟﻨﻮع System.Exceptionأي اﺳ ﺘﺜﻨﺎء أو اﻋﺘ ﺮاض ﻣ ﻦ اﻟﻨﻈ ﺎم وﻣ ﺎ ﺑ ﯿﻦ
ھﺬا اﻟﺨﻄﺄ وﺑﯿﻦ End tryﻧﻜﺘﺐ اﻟﺒﺮﻣﺠﺔ اﻟﻤﺮاد ﺗﻨﻔﺬھﺎ ﻋﻨﺪ ﺣﺪوث اﻟﺨﻄﺄ ﻛﻤﺎ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ
ﯾﺤﺘﻮي اﻟﻜﺎﺋﻦ eEndEditﻋﻠﻲ ﺧﺎﺻﯿﺔ ﺗﺤﻤﻞ رﺳﺎﻟــﺔ
ﺧﺎﺻﺔ ﺑﺎﻟﺨﻄﺄ وھﻲ Messageوﺳﻮف ﻧﺴﺘﺨﺪﻣﮭﺎ ﻓﻲ
ﻋﺮﺿﮭﺎ ﻟﻠﻤﺴﺘﺨﺪم وﺑﮭﺬا ﻟﻦ ﯾﺨﻄﺄ ﺑﮭﺎ وﯾﻤﻜﻨﻨﺎ إﺗﺒــــــﺎع
ﻃﺮق ﻛﺜﯿﺮة ﻟﺘﺄﻛﺪ ﻣﻦ ﺻﺤﺔ اﻟﺒﯿﺎﻧﺎت وﻟﻜﻦ ھﺬا ھﻮ أﺑﺴﻂ
اﻟﺤﻠﻮل أوﻻ وﻟﻨﺎ ﺑﻌﺪ ذﻟﻚ أن ﻧﺘﻌﻤﻖ ﻓﻲ ھﺬا..
وﯾﻜﻮن اﻟﻜﻮد ﺑﺎﻟﻜﺎﻣﻞ اﻵن ﻛﺎﻟﺘﺎﻟﻲ
١٤٤
واﻟﺠﺰء اﻟﻤﺤﺪد ﻓﻘﻂ ھﻮ اﻟﺬي ﺗﻢ إﺿﺎﻓﺘﮫ ﻧﻌ ﺮض ﻓ ﻲ ﺣﺎﻟ ﺔ اﻟﻮﺻ ﻮل إﻟ ﻲ آﺧ ﺮ اﻟﻜ ﻮد ﻓ ﻲ ھ ﺬه اﻟﺤﺎﻟ ﺔ ﻟ ﻦ ﯾﻜ ﻮن
ھﻨﺎك أﺧﻄﺎء وﻟﻦ ﯾﻨﻔﺬ اﻟﺠﺰء Catchﻓﻨﻌﺮض رﺳﺎﻟﺔ ﻟﻠﻤﺴﺘﺨﺪم ﺗﻔﯿﺪ ﺑﺄن اﻟﻘﺴﻢ ﻗ ﺪ أﺿ ﯿﻒ وﻓ ﻲ ﺣﺎﻟ ﺔ ﺣ ﺪوث
ﺧﻄﺄ ﻓﺴﻮف ﯾﻨﻔﺬ اﻟﺠﺰء ﻣﺎﺑﯿﻦ Catchو End Tryوھﻮ ﻋﺮض اﻟﺮﺳﺎﻟﺔ اﻟﻤﺤﺘﻮﯾﺔ ﻋﻠﻲ اﻟﺨﻄﺄ
ﺟﺮب ﻓﻲ إﺿﺎﻓﺔ ﺳﺠﻞ ﺻﺎﻟﺢ وأﺣﺼﻞ ﻋﻠﻲ رﺳﺎﻟﺔ اﻹﺿﺎﻓﺔ وﺟﺮب ﺑﯿﺎﻧﺎت ﺧﻄﺄ ﻟﺘﺤﺼﻞ ﻋﻠﻲ رﺳﺎﻟﺔ اﻟﺨﻄﺄ
١٤٥
ﻓﻲ ﺣﺪث Form_Loadﻧﻀﻊ ﻛﻮد ﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ورﺑﻂ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﻌﻨﺎﺻﺮ
ﺣﻤﻞ اﻵن اﻟﻨﻤﻮذج وﺳﻮف ﯾﻜﻮن ﺑﺎﻟﻘﺎﺋﻤﺔ اﻟﻤﻨﺴﺪﻟــــﺔ
أﺳﻤﺎء اﻷﻗﺴﺎم أﻧﻨﺎ ﻧﺮﯾﺪ ﻋﻨﺪ اﺧﺘﯿﺎر أﺣﺪ اﻷﻗﺴﺎم ﺛــــــﻢ
اﻟﻀﻐﻂ Removeﯾﺤﺬف اﻟﻘﺴﻢ وﻟﻜﻦ ﻣﺎ ھﺬا اﻟﺸﺮط
أﻧﻨﺎ ﻧﺘﺄﻛﺪ ﻣﻦ ﺧﺎﺻﯿﺔ IsPostBackأن ﺗﻜــــــــــﻮن
Falseأﻧﺎ ھﺬه اﻟﺨﺎﺻﯿﺔ ﺗﻌﻄﻲ Falseﻓﻲ أول ﻣﺮة
ﺗﺤﻤﯿﻞ ﻟﻠﻨﻤﻮذج وﺑﻌﺪ ذﻟﻚ ﻓﻲ اﻟﻤﺮة اﻟﺜﺎﻧﯿﺔ واﻟﺜﺎﻟﺜﺔ اﻟﺦ
ﺗﻌﻄﻲ Trueﻓﯿﻌﻨﻲ ھﺬا اﻻﺧﺘﺒﺎر أن ﻻﺑﺪ أن ﯾﻜﻮن اﻟﻨﻤﻮذج ﻓﻲ أول ﻣﺮة ﺗﺤﻤﯿﻞ ﻓﻘﻂ ﯾﺤﺪث ھﺬا اﻟﻜﻮد أﻣ ﺎ ﺑ ﺎﻗﻲ
اﻟﻤﺮات ﻻ ﻧﺮﯾﺪ أن ﯾﺤﺪث ذﻟﻚ اﻟﻜﻮد وإﻧﻤﺎ ﺳﻨﺘﺤﻜﻢ ﻓﻲ ﺗﺮﺗﯿﺐ ھ ﺬا اﻟﻜ ﻮد ﻣ ﻦ ﺧ ﻼل ﻛ ﻮد اﻟﻤ ﺴﺢ وﻋﻨ ﺪھﺎ ﺳ ﻮف
ﺗﻌﺮف ﻟﻤﺎذا
ﻓﻲ ﻋﻤﻠﯿﺔ اﻟﻮﺻﻮل إﻟﻲ وﺣﺪة اﻟﺨﺪﻣ ﺔ Serverﺗﻔﻘ ﺪ Datasetﺑﯿﺎﻧﺎﺗﮭ ﺎ وﻻ ﯾﻜ ﻦ ﺑﻤﻘ ﺪورﻧﺎ اﻟﺤ ﺬف ﻷﻧ ﮫ ﻻ
ﯾﻮﺟﺪ ﻟﺪﯾﻨﺎ ﺑﯿﺎﻧﺎت داﺧﻞ Datasetﻟﺬﻟﻚ ﺳﻮف ﻧﺒﺪأ اﻟﻜﻮد ﺑﻤﻸ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻣ ﻦ ﻣﻼﺋ ﻢ اﻟﺒﯿﺎﻧ ﺎت ﻓﻘ ﻂ وﻻ
ﻧ ﻀﻊ )( Page.DataBindﺣﺘ ﻰ ﻻ ﺗﺄﺧ ﺬ اﻟﻘﺎﺋﻤ ﺔ رﻗ ﻢ أول ﻗ ﺴﻢ ﻷﻧﻨ ﺎ ﻣﺤﺘ ﺎﺟﯿﻦ ﻣﻌﺮﻓ ﺔ آﺧ ﺮ ﺷ ﺊ أﺧﺘ ﺎره
اﻟﻤﺴﺘﺨﺪم ﻟﯿﺼﺒﺢ اﻟﻜﻮد ﻛﺎﻟﺘﺎﻟﻲ
وﺑﻌﺪھﺎ ﻧﻌﻄﻲ ﻛﻮد اﻟﻤﺴﺢ ﻣﻦ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت
ﻛﺎﻟﺸﻜﻞ اﻟﻌﺎم اﻟﺘﺎﻟﻲ
)().Deleteرﻗﻢ اﻟﺼﻒ اﻟﻤﺮاد ﺣﺬﻓﮫ(").Rowsاﻟﺠﺪول"(DataSet11.Tables
)"أﺳﻢ اﻟﺠﺪول" SqlDataAdapter1.Update(DataSet11,
اﻟ ﺴﻄﺮ اﻷول ﻟﻠﻮﺻ ﻮل ﺣﺘ ﻰ اﻟ ﺼﻒ ﻣﻔﮭ ﻮم ﻛﻤ ﺎ ﺷ ﺮح ﻣ ﻦ ﻗﺒ ﻞ وﻟﻜ ﻦ اﻟﺨﺎﺻ ﯿﺔ Deleteھ ﻲ اﻟﻤﺆﻛ ﺪة ﻋﻠ ﻲ
ﻋﻤﻠﯿﺔ اﻟﺤﺬف واﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ﻣﻦ اﻟﻜﻮد ﯾﻤﺜﻞ ﻋﻤﻠﯿﺔ ﺗﺤﺪﯾﺚ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﻤﺎ ﺣﺪث ﻓﻲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ
ﺗ ﻢ ﺷ ﺮﺣﮫ ﺳ ﺎﺑﻘﺎ وﻟﻜ ﻦ اﻟ ﺴﺆال اﻵن ﻛﯿ ﻒ ﺳ ﯿﺘﻢ ﺗﺤﺪﯾ ﺪ رﻗ ﻢ اﻟ ﺼﻒ اﻟﻤ ﺮاد ﺣﺬﻓ ﮫ ﻓ ﻲ اﻟﻘﺎﺋﻤ ﺔ اﻟﻤﻨ ﺴﺪﻟﺔ
DDLDeptﺑﮭﺎ ﺧﺎﺻﯿﺔ SelectedIndexوھﻲ ﺗﻌﻄﻲ رﻗﻢ ﻷول ﻋﻨﺼﺮ ﻓ ﻲ اﻟﻘﺎﺋﻤ ﺔ ٠واﻟﺜ ﺎﻧﻲ
١واﻟﺜﺎﻟﺚ ..اﻟﺦ وھﺬا ھﻮ اﻟﺘﺮﺗﯿﺐ اﻟﻤﺘﺒﻊ ﻣﻊ Datasetوﻟ ﺬﻟﻚ ﺳ ﻮف ﻧ ﺴﺘﻐﻞ ھ ﺬه اﻟﺨﺎﺻ ﯿﺔ ﻓ ﻲ
ذﻟﻚ ﻟﯿﻜﻮن اﻟﻜﻮد اﻟﺴﺎﺑﻖ ﻛﺎﻟﺘﺎﻟﻲ
ﻓﻲ اﻟﻨﮭﺎﯾﺔ ﻋﺮﺿﻨﺎ ﻓ ﻲ اﻟﻌﻨ ﻮان lblMsgرﺳ ﺎﻟﺔ ﺗﻔﯿ ﺪ ﺑﻌ ﺮض رﻗ ﻢ اﻟﻘ ﺴﻢ اﻟ ﺬي ﺣ ﺬف اﻟﻤﺨ ﺰن ﻓ ﻲ اﻟﺨﺎﺻ ﯿﺔ
SelectedValueﻟﻠﻘﺎﺋﻤ ﺔ اﻟﻤﻨ ﺴﺪﻟﺔ وأﻧ ﮫ ﺗ ﻢ ﺣﺬﻓ ﮫ ﺑﺎﻟﻔﻌ ﻞ وﺑﻌ ﺪ ذﻟ ﻚ اﺳ ﺘﺨﺪﻣﻨﺎ )(Page.DataBind
ﻟﺮﺑﻂ اﻟﻌﻨﺎﺻﺮ ﺑﺒﯿﺎﻧﺎﺗﮭﺎ ﻣﻦ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت اﻟﺤﺪﯾﺜﺔ )اﻟﺬي ﺗﻢ اﻟﺤﺬف ﻣﻨﮭﺎ( وﻟﻢ ﻧﺴﺘﺨﺪﻣﮭﺎ ﺑﻌﺪ ﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ
اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت data Adapterﻣﺒﺎﺷﺮة ﺣﺘﻰ ﻻ ﺗﺄﺧﺬ اﻟﻘﺎﺋﻤﺔ اﻟﻤﻨﺴﺪﻟﺔ ﻗﯿﻤﺔ أول اﺧﺘﯿﺎر ﺑﻞ ﺗﻈﻞ
ﻣﺤﺘﻮﯾ ﮫ ﻋﻠ ﻲ ﻣ ﺎ ﺗ ﻢ اﺧﺘﯿ ﺎره ﻣ ﻦ ﻗﺒ ﻞ اﻟﻤ ﺴﺘﺨﺪم وﺑﻌ ﺪ ﻋﻤﻠﯿ ﺔ اﻟﻤ ﺴﺢ ﻣﺘ ﺎح ﻟﻨ ﺎ ﺗﻨ ﺸﯿﻂ اﻟﺒﯿﺎﻧ ﺎت داﺧ ﻞ اﻟﻘﺎﺋﻤ ﺔ
اﻟﻤﻨﺴﺪﻟﺔ وﻟﻜﻦ ﻣﺎ اﻟﺬي ﯾﺤﺪث إذا أﺧﺘﺎر اﻟﻤﺴﺘﺨﺪم ﻗﺴﻢ ﺑﮫ ﻣﺪرﺳﯿﻦ ﯾﻌﻤﻠﻮن ﺑﮫ وأراد أن ﯾﺤﺬﻓﮭﻢ ﺳﻮف ﯾﺤﺪث
ﺧﻄﺄ ﻷﻧﻨﺎ ﻓﻲ ﺗﺼﻤﯿﻢ اﻟﺠﺪول وﺗﺼﻤﯿﻢ اﻟﻌﻼﻗﺔ ﺑﯿﻦ ﺟﺪول اﻟﻤﺪرﺳﯿﻦ واﻷﻗﺴﺎم ﻟ ﻢ ﻧ ﻀﻊ اﻟﻌﺒ ﺎرة On Delete
cascadeﻟﺤﺮﺻ ﻨﺎ ﻋﻠ ﻲ اﻟﺒﯿﺎﻧ ﺎت ﻓﻼﺑ ﺪ ﺑ ﺪ ﻣ ﻦ إﺿ ﺎﻓﺔ اﻟﺠ ﺰء اﻟﺨ ﺎص Try – Catchاﻟ ﺬي ﺗ ﻢ إﺿ ﺎﻓﺘﮫ
ﺳﺎﺑﻘﺎ ﻟﻌﺮض رﺳﺎﻟﺔ اﻟﺨﻄﺄ ﻟﻠﻤﺴﺘﺨﺪم داﺧﻞ اﻟﻌﻨﺼﺮ LblMsgوﺗﺨﻄﻲ ﺣﺪوث ﺧﻄﺄ ﻟﯿﻜﻮن اﻟﻜﻮد ﻛﺎﻣﻼ ﻛﺎﻟﺘﺎﻟﻲ
١٤٦
١٤٧
و اﻟﻤﮭﻤﺔ اﻵن ھﻮ ﻣﻠﺊ Datasetﺑﺎﻟﺒﯿﺎﻧ ﺎت ﻣ ﻦ Data Adapterوﻟﻜ ﻦ ﻣﻼﺋ ﻢ اﻟﺒﯿﺎﻧ ﺎت اﻟﻤﺨ ﺘﺺ ﺑﺠ ﺪول
اﻟﻤﻌﻠﻤﯿﻦ SqlDataAdapter2ﯾﺮﯾﺪ إرﺳﺎل ﻗﯿﻤﺔ ﻟﻠﻮﺳﯿﻂ اﻟﻤﻜﻮن داﺧﻞ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﺑﮫ وﻟﻌﻤﻞ ذﻟﻚ
ﻧﺘﺒﻊ ﻣﺎ ﯾﻠﻲ
اﻟﻘﯿﻤﺔ = ).Valueرﻗﻢ اﻟﻮﺳﯿﻂ(SqlDataAdapter2.SelectCommand.Parameters
وﻻﺣﻆ أن اﻟﻮﺳﯿﻂ ﯾﺄﺧﺬ رﻗﻢ وھﺬا اﻟﺮﻗﻢ ﻣﻔﮭﺮس ﺣﯿﺚ أﻧﮫ ﯾﺒﺪأ ﻣﻦ ﺻﻔﺮ ﻻﺣﻆ ذﻟﻚ أن ﻛﺎن ﻟﺪﯾﻚ أﻛﺜﺮ ﻣﻦ وﺳﯿﻂ
وأن ﻛﺎن وﺳﯿﻂ واﺣﺪ ﻓﺒﻄﺒﻊ ﯾﺄﺧﺬ رﻗﻢ أول وﺳﯿﻂ وھﻮ ٠ﺛﻢ ﺗﻀﻊ اﻟﻘﯿﻤﺔ اﻟﻤﺮداة
واﻵن ﻟﺒﺪأ ﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻧﺘﺒﻊ ﻛﻤﺎ ﺳﺒﻖ اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻓﻲ Form_Load
وﻻﺣﻆ أن اﻟﻘﯿﻤﺔ اﻟﻤ ﺴﻨﺪة ﻟﻠﻮﺳ ﯿﻂ ﺗ ﺄﺗﻲ ﻣ ﻦ اﻟﻘﺎﺋﻤ ﺔ DDLDeptﻣ ﻦ اﻟﺨﺎﺻ ﯿﺔ SelectedValueوھ ﻲ
اﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ ﻟﻜﻞ ﻋﻨﺼﺮ)رﻗ ﻢ اﻟﻘ ﺴﻢ( ﺑﺎﻟﻘﺎﺋﻤ ﺔ وﻟ ﯿﺲ اﻟﻘﯿﻤ ﺔ اﻟﻈ ﺎھﺮة وھ ﻲ أﺳ ﻢ اﻟﻘ ﺴﻢ وﻗ ﺪ ﺗ ﻢ إﺳ ﻨﺎد ھ ﺬا
اﻟﺘﻌﺒﯿﺮ ﻣﺎ ﺑﯿﻦ أﻗﻮاس اﻟﺪاﻟﺔ Valﻟﺘﺤﻮﯾﻞ اﻟﻘﯿﻤﺔ إﻟﻲ ﻗﯿﻤﺔ رﻗﻤﯿﺔ وھﺬا ﻷن اﻟﺤﻘﻞ اﻟﻤﺮﺳﻞ إﻟﯿﮫ اﻟﻘﯿﻤﺔ ھﻮ ﺣﻘﻞ
رﻗﻤﻲ وﺑﻌﺪ ذﻟﻚ أﺗﺒﻌﻨﺎ اﻟﻄﺮﯾﻘﺔ اﻟﻘﺪﯾﻤﺔ ﻟﻀﺒﻂ اﻟﺒﯿﺎﻧﺎت
وﻋﻨﺪ ﺗﺸﻐﯿﻞ اﻟﻨﻤﻮذج واﺧﺘﯿﺎر أي ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﻤﻨﺴﺪﻟﺔ ﻻ ﯾﺤﺪث ﺷﻲ ﻷن ھﺬه اﻷﻛﻮاد ﺗﻨﻔﺬ ﻓﻘ ﻂ ﻓ ﻲ ﺣ ﺪث
اﻟﺘﺤﻤﯿﻞ ﻷول ﻣﺮة ﻓﻘﻂ وﻟﻜﻨﻨﺎ ﻧﺮﯾﺪ ﻋﻤﻞ ذﻟﻚ ﻋﻨﺪ ﻛﻞ ﻣﺮة ﯾﺘﻢ ﻓﯿﮭﺎ ﺗﻐﯿﺮ اﻟﻘﯿﻤ ﺔ اﻟﺘ ﻲ ﯾﺨﺘﺎرھ ﺎ اﻟﻤ ﺴﺘﺨﺪم داﺧ ﻞ
اﻟﻘﺎﺋﻤﺔ ﻓﻨﻀﻐﻂ ﻋﻠﻲ اﻟﻘﺎﺋﻤﺔ ﻣﺮﺗﯿﻦ ﺑﺎﻟﻤﺎوس ﻟﯿﻔﺘﺢ ﻟﻨﺎ اﻟﺤﺪث SelectedIndexChangedوھﺬا اﻟﺤﺪث
ﯾﻨﻔﺬ اﻟﻜﻮد اﻟﺬي ﺑﺪاﺧﻠﮫ ﻛﻠﻤﺎ ﺗﻐﯿﺮت اﻟﻘﯿﻤﺔ ﻓﻲ اﻟﻘﺎﺋﻤﺔ وﻧﻜﺘﺐ ﺑﮫ اﻟﻜﻮد اﻟﺘﺎﻟﻲ
اﻟﻜﻮد ﻻ ﯾﺲ ﻏﺮﯾﺒﺎ ﺑﺎﻟﻤﺮة ﻓﻨﺤﻦ ﻧﺮﺳﻞ اﻟﻘﯿﻤﺔ اﻟﻤﻮﺟﻮدة ﺣﺎﻟﯿﺎ ﻓﻲ اﻟﻘﺎﺋﻤﺔ اﻟﻲ اﻟﻮﺳﯿﻂ وﻣ ﻦ ﺛ ﻢ ﻧﻤ ﻸ ﻣﺠﻤﻮﻋ ﺔ
اﻟﺒﯿﺎﻧ ﺎت وﻟﻜ ﻦ ﻻﺣ ﻆ ﻓ ﻲ أﺧ ﺮ اﻟﻜ ﻮد أﻧﻨ ﺎ ﻟ ﻢ ﻧﻜﺘ ﺐ )( Page.DataBindوﻟﻜ ﻦ ﻛﺘﺒﻨ ﺎ
)( dataGrid1.DataBindوھﺬا ﻷﻧﻨﺎ ﻟﻮ رﺑﻂ ﺑﯿﺎﻧﺎت ﺟﺪﯾ ﺪة ﻟﻠﻘﺎﺋﻤ ﺔ ﺳ ﻮف ﺗ ﻀﺒﻂ ﻋﻠ ﻲ أول ﻗ ﺴﻢ وﻟ ﯿﺲ
آﺧﺮ ﻗﺴﻢ أﺧﺘﺎره اﻟﻤﺴﺘﺨﺪم ﻟﻮ ﺟﺮﺑﻨﺎ اﻵن ھﺬا ﻟﻦ ﯾﺤﺪث أﯾﻀﺎ ﺷﺊ ﻋﻨﺪ اﺧﺘﯿﺎر أﺣﺪ اﻟﻌﻨﺎﺻﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ وﯾﺮﺟﻊ
ھﺬا إﻟﻲ أﻧﮫ ﻋﻨﺪ اﺧﺘﯿﺎر أﺣﺪ اﻟﻌﻨﺎﺻﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ ﻻ ﯾﺬھﺐ اﻟﻨﻤﻮذج إﻟﻲ اﻟﺨ ﺎدم ﻟﺘﻨﻔﯿ ﺬ اﻷواﻣ ﺮ أي أﻧ ﮫ ﻻ ﯾﺤ ﺪث
اﻟﺤﺪث submitوﻟﺠﻌﻞ اﻟﻘﺎﺋﻤﺔ ﻋﻨﺪ اﻻﺧﺘﯿﺎر ﺗﺬھﺐ إﻟﻲ اﻟﺨﺎدم Serverﻟﺘﻨﻔﯿﺬ اﻷواﻣﺮ اﻟﻤﻮﺟﻮدة داﺧ ﻞ ھ ﺬا
اﻟﺤ ﺪث ﻧﻘ ﻒ ﻋﻠ ﻲ اﻟﻘﺎﺋﻤ ﺔ اﻟﻤﻨ ﺴﺪﻟﺔ وﻧﺨﺘ ﺎر propertiesوﻧﺨﺘ ﺎر ﻣ ﻦ اﻟﺨ ﺼﺎﺋﺺ اﻟﺨﺎﺻ ﯿﺔ
AutoPostBackﻋﻠﻲ اﻟﻘﯿﻤﺔ Trueوﺑﮭﺬا ﺗﺬھﺐ ﺑﻄﺮﯾﻘﺔ ﺗﻠﻘﺎﺋﯿ ﺔ إﻟ ﻲ اﻟﺨ ﺎدم وﻣﻨﮭ ﺎ ﯾﻨﻔ ﺬ اﻟﻜ ﻮد اﻟﺨ ﺎص
ﺑﮭﺎ ﺟﺮب أﻻن ﻓﻠﻘﺪ وﺻﻠﻨﺎ إﻟﻲ ﻣﺎ ﻧﺮﯾﺪه ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ
١٤٨
اﻟـﺒﺤــﺚ Search
ﯾﻤﻜﻨﻨ ﺎ اﻟﺒﺤ ﺚ ﺑ ﻨﻔﺲ ﻓﻜ ﺮ وﺳ ﺎﺋﻂ اﻻﺳ ﺘﻌﻼﻣﺎت ﺳ ﻮف ﻧﻨﻔ ﺬ ﺑﺎﺣ ﺚ ﺑ ﺴﯿﻂ ﻓ ﻲ ﺟ ﺪول اﻟﻤﻌﻠﻤ ﯿﻦ ﻋ ﻦ ﺣﻘ ﻞ اﻻﺳ ﻢ
ﻓﻨﺨﻄﻂ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
وﻋﻨﺪ ﺳﺤﺐ وإدراج ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت Data Adapter
ﻧﻀﺒﻂ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﻛﺎﻟﺘﺎﻟﻲ
* SELECT
FROM Teacher
? WHERE Name LIKE
وﻗﺪ اﺳﺘﺨﺪﻣﻨﺎ ﻋﻼﻣﺎت %ﻛﻤﺎ ﻧﻌﻠ ﻢ ﻟﻠﺒﺤ ﺚ ﻋ ﻦ أي أﺳ ﻢ ﻣﺘ ﺸﺎﺑﮫ ﻣ ﻊ ﻣ ﺎ ﯾﻜﺘﺒ ﮫ اﻟﻤ ﺴﺘﺨﺪم وھ ﺬا ﺑ ﺪون ﻋﻼﻣ ﺎت
ﺗﻨﺼﯿﺺ أوﻟﻲ وﻻ أﺧﯿﺮة وﯾﻤﻜﻨﻨﺎ ﻓﻲ ﻧﺺ اﻟﺒﺤﺚ أﯾﻀﺎ إدراج ﻋﻼﻣﺘﻲ %أو _ ﻛﻤﺎ ﻧﺮي
١٤٩
وﺑﻌﺪ ذﻟﻚ ﻋﻨﺪ ﺗﻌﺪﯾﻞ أﺳﻢ اﻟﻘﺴﻢ أو اﺧﺘﯿﺎر ﻣﺪﯾﺮ ﻏﯿﺮ اﻟﻤﺪﯾﺮ اﻟﻤﻮﺟﻮد واﻟﻀﻐﻂ ﻋﻠﻲ اﻟﺰر Modifyﯾﺘﻢ ﺗﺤﺪﯾﺚ
وﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت وﻓﻘﺎ ﻟﻢ ﺗﻢ ﺗﻌﺪﯾﻠﮫ
أوﻻ ﺗ ﺼﻤﯿﻢ اﻟﻨﻤ ﻮذج اﻟﻌﻨ ﺼﺮ اﻟ ﺬي ﺳ ﻮف ﯾ ﺘﻢ ﻋ ﺮض أﺳ ﻤﺎء اﻷﻗ ﺴﺎم ھ ﻮ ListBoxﻧ ﺴﺤﺒﮫ ﻣ ﻦ اﻟﺠ ﺰء
WebFormsﻣ ﻦ ﺻ ﻨﺪوق اﻷدوات واﻟﻌﻨ ﺼﺮ اﻟ ﺬي ﺳ ﯿﺘﻢ ﻓﯿ ﮫ ﻋ ﺮض أﺳ ﻤﺎء اﻟﻤﻌﻠﻤ ﯿﻦ ھ ﻮ
RadioButtonListﻧﻘ ﻮم أﯾ ﻀﺎ ﺑ ﺴﺤﺒﮫ ﻣ ﻦ اﻟﺠ ﺰء WebFormsﻣ ﻦ ﺻ ﻨﺪوق اﻷدوات Toolbox
وﯾ ﺘﻢ ﺳ ﺤﺐ ﺑ ﺎﻗﻲ اﻟﻌﻨﺎﺻ ﺮ ﻛﻤ ﺎ ﺗﻌﻠﻤﻨ ﺎ ﻣ ﻦ ﻗﺒ ﻞ واﻟﺠ ﺰء اﻟﺨ ﺎص ﺑﺎﻟﺒﯿﺎﻧ ﺎت Dataﻣ ﻦ ﺻ ﻨﺪوق اﻷدوات ﻧﻘ ﻮم
ﺑﺴﺤﺐ SqlDataAdapterوﺿﺒﻄﮭﺎ ﻟﻼﺳﺘﺮﺟﺎع ﻛﺎﻓ ﺔ ﺑﯿﺎﻧ ﺎت اﻷﻗ ﺴﺎم وﺑﻌ ﺪ ذﻟ ﻚ أﺧ ﺮاج ﻣﺠﻤﻮﻋ ﺔ ﺑﯿﺎﻧ ﺎت
Datasetﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ وﻧﻘﻮم أﯾﻀﺎ ﺑﻌﻤﻠﯿﺔ ﺳﺤﺐ ﺟﺪﯾﺪة ﻟﻠﻌﻨﺼﺮ SqlDataAdapterوﺿﺒﻄﮫ ﻋﻠﻲ
اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ وأﯾﻀﺎ ﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﺑﮭﺬا وﺗ ﻢ إﺿ ﺎﻓﺔ ﻣﻼﺋ ﻢ ﺑﯿﺎﻧ ﺎت ﻟﺠ ﺪول اﻟﻤﻌﻠﻤ ﯿﻦ
ھﺬا ﻷﻧﻨﺎ ﻧﺮﯾﺪ ﻋﺮض أﺳﻤﺎء اﻟﻤﻌﻠﻤﯿﻦ وﻟﯿﺲ أرﻗﺎﻣﮭﻢ وﻟﻜﻦ ﻣﻊ اﻻﺣﺘﻔﺎظ ﺑﺎﻷرﻗﺎم وﺳﻮف ﻧﻀﯿﻒ ﻣﺸﮭﺪ ﺑﯿﺎﻧ ﺎت
DataViewوھﺬا ﻷﻧﻨﺎ ﻧﺮﯾﺪ ﻋﻨﺪ اﺧﺘﯿﺎر أﺣﺪ اﻷﻗﺴﺎم ﻣﻦ اﻟﻘﺎﺋﻤﺔ ﻋﻤﻞ ﺗﺤﺪﯾﺪ أو ﺗﺼﻔﯿﮫ ﻟﺼﻒ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮاد
اﻵن ﻣ ﻦ اﻟﺨﺎﺻ ﯿﺔ Tableﻧ ﻀﺒﻄﮭﺎ Dataset11.Departmentﻛﻤ ﺎ ﺗﻌﻠﻤﻨ ﺎ ﻓ ﻲ ﻣﺜ ﺎل اﻟﺘﺠ ﻮل ﻓ ﻲ
ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت وﺑﻌﺪ أن ﺗﻢ ﺗﺤﺪﯾﺪ ﻛﻞ ﻣﺎ ﻧﺤﺘﺎﺟﮫ ﻣﻦ ﺟﺰء اﻟﺒﯿﺎﻧﺎت وﺗﺼﻤﯿﻢ اﻟﻨﻤﻮذج ﻧﺒﺪأ
ﺛﺎﻧﯿﺎ رﺑﻂ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ
ﻋﻨﺼﺮ اﻟﻘﺎﺋﻤﺔ أﯾﺴﺮ اﻟﺸﺎﺷﺔ ﻧﻀﺒﻂ ﺧﻮاﺻﮭﺎ ﻛﻤﺎ ﯾﻠﻲ
ﺿﺒﻂ ﻣﺼﺪر اﻟﺒﯿﺎﻧﺎت واﻟﺠﺪول اﻟﺬي ﺗﺘﻌﺎﻣﻞ ﻣﻌﮫ واﻟﺤﻘﻞ اﻟﻈﺎھﺮ ﻟﻠﻤﺴﺘﺨﺪم
وﺣﻘﻞ اﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﻲ ﻟﻜﻞ ﻋﻨﺼﺮ ﺑﺎﻟﻘﺎﺋﻤﺔ وﻣﻤﯿﺰ اﻟﻌﻨﺼﺮ) اﻻﺳﻢ ( ID
وﻣﺮﺑﻊ اﻟﻨﺺ ﯾﻀﺒﻂ ﻛﺎﻟﺘﺎﻟﻲ ﻣﻦ ﺧﺎﺻﯿﺔ DataBindings
وﻋﻨﺪ ﺗﺤﺪﯾﺪ ﻋﻨﺼﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ ) lstUpdateأي ﻋﻨﺪﻣﺎ ﯾﺘﻐﯿﺮ رﻗﻢ اﻟﻌﻨﺼﺮ اﻟﻤﺨﺘﺎر ﻓﻲ اﻟﻘﺎﺋﻤﺔ( ﻧﺮﯾﺪ أوﻻ أن
ﻧﺤﺘﻔﻆ ﺑﺮﻗﻢ اﻟﻌﻨﺼﺮ اﻟﺬي أﺧﺘﺎره اﻟﻤﺴﺘﺨﺪم وذﻟﻚ ﻟﻌﺮﺿﮫ ﻣﻨﺸﻄﺎ ﻛﻤﺎ ھﻮ ﺑﻌﺪ اﻟﺮﺟﻮع ﻣﻦ وﺣﺪة اﻟﺨﺪﻣﺔ وﺑﻌﺪ
١٥٠
ذﻟﻚ ﻧﻤﻸ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت Dataset11ﻣﻦ ﻣﻼﺋ ﻢ اﻟﺒﯿﺎﻧ ﺎت اﻟﺨ ﺎص ﺑﺠ ﺪول اﻷﻗ ﺴﺎم أﻣ ﺎ ﺟ ﺪول اﻟﻤﻌﻠﻤ ﯿﻦ ﻻ
ﻧﺮﯾﺪ أن ﯾﺤﺪث ﺷﺊ ﻷﻧﻨﺎ ﻋﺮﺿﻨﺎ ﻣﻨﮫ اﻷﺳﻤﺎء واﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ ھﻲ رﻗﻢ اﻟﻤﻌﻠﻢ ﻓﻘﻂ وﻻ ﻧﺮﯾﺪ ﺗﺤﺪﯾﺜ ﮫ ﺑ ﺄي ﺷ ﻜﻞ
ﻣﻦ اﻷﺷ ﻜﺎل وﺑﻌ ﺪ ذﻟ ﻚ ﻧﻘ ﻮم ﺑﻌﻤ ﻞ ﺗ ﺼﻔﯿﺔ ﻟﻤ ﺸﮭﺪ اﻟﺒﯿﺎﻧ ﺎت DataViewﺣﺘ ﻲ ﺗﻜ ﻮن ﻗﯿﻤ ﺔ ﺣﻘ ﻞ DeptNo
ﺑﺎﻟﻄﺒﻊ ﻓﻲ ﺟﺪول Departmentﻣﺴﺎوﯾﺔ ﻟﻠﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ )رﻗﻢ اﻟﻤﻌﻠﻢ( ﻟﻠﻌﻨﺼﺮ اﻟﺬي ﺗﻢ أﺧﺘﯿﺎره ﻣﻦ اﻟﻘﺎﺋﻤ ﺔ
وﺑﻌﺪ ذﻟﻚ رﺑﻂ ﻣﺮﺑﻊ اﻟ ﻨﺺ TxtDNameﺑﺎﻟﺒﯿ ﺎت ﻟﺘﻠﻘ ﻲ ﺑﯿﺎﻧ ﺎت أﺳ ﻢ اﻟﻘ ﺴﻢ اﻟﻤﺤ ﺪد وﺑﻌ ﺪ ذﻟ ﻚ ھﻨ ﺎك أﺳ ﻤﺎء
ﻣﻌﺮوﺿﺔ ﺑﺎﻟﻌﻨﺼﺮ ﻗﺎﺋﻤﺔ أزرار اﻻﺧﺘﯿﺎر اﻟﻤﻮﺣﺪ Radio Button Listﻧﺮﯾﺪ أن ﻧ ﺮﺑﻂ ﻗﯿﻤ ﺔ ھ ﺬه اﻟﻌﻨﺎﺻ ﺮ
)وھﻲ رﻗﻢ اﻟﻤﻌﻠﻢ ( ﺑﺮﻗﻢ ﻣﺪﯾﺮ اﻟﻘﺴﻢ وھﺬا ﻟﯿﻈﮭﺮ ﻟﻠﻤﺴﺘﺨﺪم أﺳﻢ اﻟﻤﻌﻠﻢ اﻟﺬي ھﻮ ﻣﺪﯾﺮ اﻟﻘﺴﻢ ﻣﺤﺪد وﻟﻌﻤﻞ ذﻟ ﻚ
ﺗﺘﺒﻊ اﻟﻜﻮد اﻟﻘﺎدم
ﻟﻘﺪ ﺗﻢ ﺗﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮ Indexھﻨﺎ ﻣﻦ اﻟﻨﻮع Integerوإﺳﻨﺎد ﻗﯿﻤﺔ رﻗﻢ اﻟﻌﻨ ﺼﺮ )اﻟﺒﻨ ﺪ( اﻟﻤﺨﺘ ﺎر ﻣ ﻦ ﻗﺎﺋﻤ ﺔ
LstUpdateوھﺬا ﻟﻠﻤﺤﺎﻓﻈﺔ ﻋﻠﻲ ﻣﺎ ﺗﻢ اﺧﺘﯿﺎره ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪم وﺑﻌﺪ ذﻟﻚ ﻣﺴﺢ وﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت
ﻛﻤﺎ ﻧﻌﻠﻢ )ﻟﺘﺤﺪﯾﺜﮭﺎ وﻣﻠﺌﮭﺎ ﺑﺎﻟﺒﯿﺎﻧﺎت( وﺑﻌﺪ ذﻟﻚ ﻋﻤﻞ ﺗﺼﻔﯿﮫ ﻟﻤﺸﮭﺪ اﻟﺒﯿﺎﻧﺎت DataView1ﻟﺤﻘﻞ DeptNo
ﺑﺄن ﯾﻜﻮن ﻣﺴﺎوﯾﺎ ﻟﻠﻘﯿﻤﺔ اﻟﺮﻗﻤﯿﺔ )ﺑﺎﺳﺘﺨﺪام اﻟﺪاﻟﺔ (Valاﻟﻤﻮﺟ ﻮدة ﻓ ﻲ اﻟﻘﯿﻤ ﺔ اﻟﺪاﺧﻠﯿ ﺔ ﻟﻌﻨ ﺼﺮ اﻟﻘﺎﺋﻤ ﺔ اﻟ ﺬي
أﺧﺘ ﺎره اﻟﻤ ﺴﺘﺨﺪم وﺑﻌ ﺪ ذﻟ ﻚ رﺑ ﻂ TxtNameﻣﺒﺎﺷ ﺮة ﻋﻠ ﻲ ﺣ ﺪه ) ﻷﻧﻨ ﺎ ﻟ ﻮ رﺑﻄﻨ ﺎ Page.DataBind
ﺳﻮف ﯾﺤﺪث ﺧﻄﺄ ﻓﻲ أﺳﻤﺎء اﻟﻤﻌﻠﻤﯿﻦ ﺣﯿﺚ أﻧﻨﺎ ﻟﻢ ﻧﺤﺪﺛﮭﻢ ﺑﺎﻟﺒﯿﺎﻧﺎت( وﺑﻌﺪ ذﻟﻚ رﺑﻂ rblManagerﻟﺨﺎﺻﯿﺔ
SelectedValueوھ ﻲ اﺧﺘﯿ ﺎر )ﺗﻌﻠ ﯿﻢ( اﻟﻘﯿﻤ ﺔ اﻟﺪاﺧﻠﯿ ﺔ ﻟﻠﻘﺎﺋﻤ ﺔ ﺑ ﺎﻻﺗﻲ DataBinderﻛ ﺎﺋﻦ ﻟﻼﺗ ﺼﺎل
ﺑﺎﻟﺒﯿﺎﻧﺎت وﯾﺘﻢ إﻣﺪاده ﺑﺎﻟﻘﯿﻤﺔ ﻣ ﻦ اﻟﻌﻨ ﺼﺮ DataView1ﺑﺎﻟﺘﺤﺪﯾ ﺪ ﻣ ﻦ اﻟﻌﻨ ﺼﺮ [0].Managerوھ ﻮ أول
ﺷ ﻲ ﻓ ﻲ DataView1ﻷﻧﮭ ﺎ ﺗﺮﺗ ﺐ ﻋﻠ ﻲ ھﯿﺌ ﺔ ﻣﻔﮭﺮﺳ ﮫ ﺗﺒ ﺪأ ﺑ ﺼﻔﺮ وھ ﺬا اﻟ ﺴﻄﺮ ﯾﻌ ﻮد ﺑﻘﯿﻤ ﺔ ﺣﻘ ﻞ
Managerداﺧﻞ ﻣﺸﺎھﺪ اﻟﺒﯿﺎﻧﺎت وﻣﻌﻨﻲ اﻟﺠﻤﻠﺔ ﻛﺎﻣﻠﺔ أن ﺗﺠﻌﻞ اﻟﻘﯿﻤﺔ اﻟﻤﺨﺘﺎرة ﻓﻲ أزرار اﻻﺧﺘﯿ ﺎر ﻛﺎﻟﻘﯿﻤ ﺔ
اﻟﻤﻮﺟﻮدة ﻓﻲ ﺣﻘﻞ اﻟﻤﺪﯾﺮ ﻟﻤﺸﺎھﺪ اﻟﺒﯿﺎﻧﺎت اﻟﺬي ﺗﻢ ﺗﺼﻔﯿﺘﮫ وﺑﻌﺪ ذﻟﻚ وﺑﻌﺪ ﺗﺤﺪﯾﺚ اﻟﺒﯿﺎﻧﺎت ﺳﻮف ﺗﻔﻘﺪ اﻟﻘﺎﺋﻤ ﺔ
ﻣﺎ ﺗﻢ اﺧﺘﯿﺎره ﻣ ﻦ ﻗﺒ ﻞ اﻟﻤ ﺴﺘﺨﺪم وﻟﻜﻨﻨ ﺎ اﺣﺘﻔﻈﻨ ﺎ ﺑ ﺮﻗﻢ اﻟﺒﻨ ﺪ اﻟ ﺬي أﺧﺘ ﺎره اﻟﻤ ﺴﺘﺨﺪم ﻓﯿ ﺘﻢ ﺗﺨﺼﯿ ﺼﮫ ﻟﺨﺎﺻ ﯿﺔ
SelectedIndexﻟﺘﺤﺪﯾﺪ اﻟﻘﯿﻤﺔ اﻟﺬي ﺣﺪدھﺎ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﻗﺒﻞ
وﻋﺪ ذﻟﻚ ﺣﺎول ﺗﺸﻐﯿﻞ اﻟﻨﻤﻮذج ﻟﺘﺠﺮﯾﺐ ﺣﺮﻛﺔ اﻟﺒﯿﺎﻧﺎت ﻓ ﻲ اﻟﻨﻤ ﻮذج وإﻣﻜﺎﻧﯿ ﺔ ﺗﻐﯿ ﺮ اﻟﺒﯿﺎﻧ ﺎت وﻗﺒ ﻞ ھ ﺬا أﺿ ﺒﻂ
اﻟﺨﺎﺻﯿﺔ RepeatDirectionﻟﻠﻌﻨﺼﺮ rblManagerﻋﻠﻲ Horizontalﻟﻌﺮض اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻃﺮﯾ ﻖ
اﻟﺼﻒ وﺿ ﺒﻂ ﺧﺎﺻ ﯿﺔ RepeatColumnsﻋﻠ ﻲ ٣ﻟﻌ ﺮض ﺛ ﻼث أﻋﻤ ﺪة ﻓ ﻲ ﻛ ﻞ ﺻ ﻒ وﺑﻌ ﺪ ذ١ﻟ ﻚ ﺻ ﻒ
ﺟﺪﯾﺪ ﻟﯿﻜﻮن ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
واﻵن ﺟﺎء دور زر اﻟﺘﻌﺪﯾﻞ وھﻮ ﺑﻜﻞ ﺑﺴﺎﻃﺔ ﯾﻌﺪ ﻗﯿﻤ ﺔ أﺳ ﻢ اﻟﻘ ﺴﻢ أذا ﻗ ﺎم اﻟﻤ ﺴﺘﺨﺪم ﯾﺘﻐﯿ ﺮ ھ ﺬه اﻟﻘﯿﻤ ﺔ وأﯾ ﻀﺎ
ﺗﺤﺪﯾﺚ رﻗﻢ اﻟﻤﺪﯾﺮ ﺑﺎﻟﺮﻗﻢ اﻟﺠﺪﯾﺪ أذا أﺧﺘﺎر اﻟﻤﺴﺘﺨﺪم ﻣﺪﯾﺮا أﺧﺮ ﻣﻦ اﻟﻤﺪﯾﺮﯾﻦ
١٥١
)myrow = DataSet11.Tables("Department").Rows(lstUpdate.SelectedIndex
myrow.Item("DName") = txtDName.Text
myrow.Item("Manager") = rblManager.SelectedValue
)"SqlDataAdapter1.Update(DataSet11, "Department
وﻛ ﺎن ھ ﺬا ﻟﻤﺤ ﺔ ﺳ ﺮﯾﻌﺔ ﻟ ﺮﺑﻂ اﻟﺒﯿﺎﻧ ﺎت ﻓ ﻲ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت ﺑﻤﻠﻔ ﺎت اﻟﻮﯾ ﺐ واﺳ ﺘﺨﺪﻣﻨﺎ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت SQL
Serverﻛﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻷﺳﺎﺳﯿﺔ وﺗﻢ ﻋﺮض اﻟﻨﻤﺎذج اﻟﺨﺎﺻﺔ ﺑﺎﻟﻮﯾ ﺐ ﺑﺘﻘﻨﯿ ﺔ ASP.NETاﻟﻤﻜﺘﻮﺑ ﺔ ﺑﻠﻐ ﺔ
VB.NETوﺗﻢ رﺑﻂ اﻟﻘﺎﻋﺪة ﺑﺎﻟﻨﻤﺎذج ﻋﻦ ﻃﺮﯾﻖ اﻟﺒﺮوﺗﻮﻛﻮل اﻷﺳﺎﺳ ﻲ ﻟـ ـ .NET Frameworkاﻟﺨ ﺎص
ﺑﺮﺑﻂ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وھﻮ ADO.NET
Visual Studio (ASP.NET) -- By Mr. Adel Sabour
١٥٢
وﺑﮭﺬا ﻧﻜﻮن ﻗﺪ اﻧﺘﮭﯿﻨﺎ واﻟﺤﻤﺪ ﷲ ﻣﻦ اﻟﺠﺰء اﻷول ﻣﻦ ھﺬا اﻟﻜﺘﺎب ﻟﻘﺪ ﺗﻌﻠﻤﻨﺎ اﻟﻜﺜﯿﺮ وﻟﻜﻨﮫ ﻟﯿﺲ ﻛﻞ ﺷﺊ وﺳﻨﺮي
اﻟﻤﺰﯾﺪ أن ﺷﺎء اﷲ ﻓﻲ اﻟﺠﺰء اﻟﺜﺎﻧﻲ ﻣﻦ ھﺬا اﻟﻜﺘﺎب .