0% found this document useful (0 votes)
61 views160 pages

SQLServer

This document provides instructions for setting up SQL Server 2000. It describes the installation process, which involves inserting the CD, selecting components to install, and proceeding through a series of screens to select installation options such as the type of installation and file locations. The instructions recommend selecting typical installation for beginners and using the built-in Windows account for services.

Uploaded by

galess
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
61 views160 pages

SQLServer

This document provides instructions for setting up SQL Server 2000. It describes the installation process, which involves inserting the CD, selecting components to install, and proceeding through a series of screens to select installation options such as the type of installation and file locations. The instructions recommend selecting typical installation for beginners and using the built-in Windows account for services.

Uploaded by

galess
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

PDF created with pdfFactory Pro trial version www.pdffactory.

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

SQL Server Setup ‫إﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ‬

SQL Server 2000 ‫ ﻛﯿﻔﯿﺔ إﻋﺪاد ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬: ‫أوﻻ‬


. ‫ ﺳﺘﻌﻤﻞ ﺑﻄﺮﯾﻘﺔ أوﺗﻮﻣﺎﺗﯿﻜﯿﺔ ﻛﺎﻟﺘﺎﻟﻲ‬CD ‫ ﺑﻌﺪ وﺿﻊ اﻟــ‬-١

‫ ﺛﻢ ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﻛﺎﻟﺘﺎﻟﻲ‬SQL Server 2000 Components ‫ﻧﺨﺘﺎر ﻣﻨﮭﺎ‬

: ‫ ﺛﻢ ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺮﺣﯿﺐ ﻛﺎﻟﺘﺎﻟﻲ‬Install Database Server ‫ﻧﺨﺘﺮ ﻣﻨﮭﺎ‬

PDF created with pdfFactory Pro trial version www.pdffactory.com


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻧ ﻀﻐﻂ ﻋﻠ ﻲ ‪ Next‬ﻓﻘ ﻂ وﺗﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ ﺗ ﺴﺄل ﻋ ﻦ أﺳ ﻢ اﻟﺤﺎﺳ ﺐ ﻧﺘ ﺮك اﻻﺧﺘﯿ ﺎر اﻻﻓﺘﺮاﺿ ﻲ ﻋﻠ ﻲ ‪Local‬‬


‫‪Computer‬أي ﺧﺎص ﺑﺎﻟﺤﺎﺳﺐ اﻟﺤﺎﻟﻲ اﻟﺸﺨ ﺸﻲ وﻧﻀﻐﻂ ‪Next‬‬

‫ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷ ﺔ ﺗﺨ ﺺ أﺧﯿ ﺎرات اﻟﺘﺤﻤﯿ ﻞ وﻷﻧﻨ ﺎ ﻓ ﻲ أول ﻣ ﺮة ﺗﺠﮭﯿ ﺰ ﻧﺨﺘ ﺎر ‪Create a new instance of‬‬
‫‪ SQL Server‬وﻧﻀﻐﻂ ‪Next‬‬

‫‪2‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻓﺘﻈﮭﺮ ﺗﻠﻚ اﻟﺸﺎﺷﺔ اﻟﺘﻲ ﺗﻀﻢ ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﻤﺴﺘﺨﺪم ﻓﺘﺴﺄل ﻋ ﻦ اﻻﺳ ﻢ واﻟ ﺸﺮﻛﺔ أدﺧ ﻞ ﻣ ﺎ ﺗ ﺸﺎء وأﺿ ﻐﻂ ‪Next‬‬
‫ﺳﻮف ﺗﻈﮭﺮ ﻟﻚ ﺷﺎﺷﺔ ﺑﮭﺎ اﺗﻔﺎﻗﯿﺔ أﺿﻐﻂ ﻋﻠﻲ ‪ Yes‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﻣﻨﮭﺎ ﻋﻠﻲ ﺷﺎﺷﺔ ﺗﺨﺺ ﺗﻌﺮﯾﻔﺎت ﻟﻌﻤﻠﯿﺔ اﻟﺘﺤﻤﯿﻞ ﻧﺨﺘﺎر ﺗﺤﻤﯿﻞ ﻣﺎ ﯾﺨﺺ اﻟﺨﺎدم واﻟﻌﻤﯿﻞ ﻣﻌﺎ ﺛﻢ ﻧﻀﻐﻂ ‪Next‬‬

‫‪3‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺨﺺ اﻟـ ـ ‪ Instance Name‬ﻧﺘ ﺮك اﻻﺧﺘﯿ ﺎر اﻻﻓﺘﺮاﺿ ﻲ ﺛ ﻢ ﻧ ﻀﻐﻂ ‪ Next‬ﻓﺘﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ‬
‫ھﺎﻣ ﺔ ﺗﺨ ﺺ ﻧ ﻮع اﻟﺘﺤﻤﯿ ﻞ ﺣﯿ ﺚ ﯾﻮﺟ ﺪ ﺛ ﻼث أﻧ ﻮاع أوﻟﮭ ﻢ ﯾﺤﻤ ﻞ ﺟﻤﯿ ﻊ اﻷﺷ ﯿﺎء اﻟﺘ ﻲ ﯾﺤﺘﺎﺟﮭ ﺎ ﺗﻘﺮﯾﺒ ﺎ ﺟﻤﯿ ﻊ‬
‫اﻟﻤ ﺴﺘﺨﺪﻣﯿﻦ ‪ Typical‬أﻣ ﺎ اﻻﺧﺘﯿ ﺎر اﻟﺜ ﺎﻧﻲ ‪ Minimum‬ﯾﺤﻤ ﻞ اﻷﺷ ﯿﺎء اﻟ ﻀﺮورﯾﺔ ﻓﻘ ﻂ أﻣ ﺎ اﻻﺧﺘﯿ ﺎر اﻷﺧﯿ ﺮ‬
‫‪ Custom‬ﻓﻤﻦ ﺧﻼﻟﮫ ﯾﻤﻜﻨﻚ ﺗﺤﺪﯾﺪ اﻷﺷﯿﺎء اﻟﺘﻲ ﺗﺮﯾﺪھﺎ ﺑﺎﻟﻔﻌﻞ وﻣﺎ ﻻ ﺗﺮﯾﺪھﺎ وﺑﻤ ﺎ أﻧﻨ ﺎ ﻣﺎزﻟﻨ ﺎ ﻓ ﻲ اﻟﺒﺪاﯾ ﺔ ﻓ ﺴﻮف‬
‫ﻧﺨﺘﺎر اﻻﺧﺘﯿﺎر اﻷول‬
‫أﻣﺎ اﻟﺠﺰء اﻟﺜﺎﻧﻲ ﻣﻦ اﻟ ﺸﺎﺷﺔ ﯾﺨ ﺺ ﺑﺘﻌﺮﯾ ﻒ ﻣﻮاﻗ ﻊ اﻟﻤﻠﻔ ﺎت ﻓ ﺎﻟﺰر اﻷول ‪ Browse‬ﯾﻤﻜﻨ ﻚ ﻣ ﻦ ﺧﻼﻟ ﮫ ﺗﺤﺪﯾ ﺪ أن‬
‫ﺳﯿﺘﻢ ﺗﺤﻤﯿﻞ ﻣﻠﻔ ﺎت ‪ SQL Server‬واﻟ ﺰر اﻟﺜ ﺎﻧﻲ ﯾﻤﻜﻨ ﻚ ﻣ ﻦ ﺧﻼﻟ ﮫ ﺗﺤﺪﯾ ﺪ أن ﺳ ﯿﺘﻢ وﺿ ﻊ اﻟﻤﻠﻔ ﺎت اﻟﺘ ﻲ ﺳ ﻮف‬
‫ﯾﻨﺘﺠﮭﺎ اﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت ﻧﺤﺪد ﻣﺎ ﻧﺮﯾﺪ ﺛﻢ ﻧﻀﻐﻂ ‪ Next‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ‬

‫ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺨﺺ ﺣﺴﺎب اﻟﺨﺪﻣﺎت ﻧﺨﺘﺎر اﻻﺧﺘﯿﺎر اﻷول وھﻮ ﯾﻔﯿﺪ ﺑﺎن ﻧﺴﺘﺨﺪم ﺣﺴﺎب واﺣ ﺪ إﻟ ﻲ ﻛ ﻞ اﻟﺨ ﺪﻣﺎت‬
‫ﻓﻲ ﺑﺪاﯾﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺧﺪﻣﺎت ال ‪ SQL Server‬واﻻﺧﺘﯿﺎر اﻟﺜﺎﻧﻲ ﯾﻔﯿﺪ ﺑﺘﺤﺪﯾ ﺪ ﺗﻠ ﻚ اﻹﻋ ﺪادات ان ﻛﻨ ﺖ ﺧﺒﯿ ﺮ ﺑ ﺬﻟﻚ‬
‫ﻟﻜﻦ أﻻن ﻧﺨﺘﺎر اﻻﺧﺘﯿﺎر اﻻﻓﺘﺮاﺿ ﻲ وﻣ ﻦ اﻟﺠﺎﻧ ﺐ ‪ Service Setting‬إﻋ ﺪادات اﻟﺨ ﺪﻣﺎت ﻧﺨﺘ ﺎر اﻻﺧﺘﯿ ﺎر اﻷول‬
‫وھﻮ ﯾﻔﯿﺪ ﺑﺎﺳﺘﺨﺪام اﻟﺤﺴﺎب اﻟﺨﺎص ﺑﻨﻈﺎم ﺑﺎل وﯾﻨﺪوز ﻟﻠﺪﺧﻮل واﻻﺧﺘﯿﺎر اﻟﺜﺎﻧﻲ اﻟﺨﺎص ﺑـﺎﻟـــ ‪ Domain‬ﻛﺤﺴﺎب‬
‫ﻟﻞ ‪ SQL Server‬ﻧﺨﺘﺎر ﻣﺎ ﻧﺸﺎء ﻛﺎﻟﺘﺎﻟﻲ وﻧﻀﻐﻂ ‪ Next‬ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ‪:‬‬

‫‪4‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺨﺺ ﻧﻈﺎم اﻟﺴﺮﯾﺔ اﻻﺧﺘﯿﺎر اﻷول وھﻮ ﺿ ﺒﻄﮭﺎ ﻋﻠ ﻲ ﻣﻨﮭﺠﯿ ﺔ ﻧﻈ ﺎم اﻟ ﺴﺮﯾﺔ اﻟﺨ ﺎص ﺑ ﺎل وﯾﻨ ﺪوز‬
‫واﻻﺧﺘﯿﺎر اﻟﺜﺎﻧﻲ ھﻮ ﻧﻈﺎم ﻣﺨﺘﻠﻂ ﻣﺎﺑﯿﻦ اﻟــ وﯾﻨﺪوز وال ‪ SQL Server‬ﻧﺨﺘﺎر اﻻﺧﺘﯿﺎر اﻷول وﻧﻀﻐﻂ ‪Next‬‬

‫وﺑﮭﺬا ﯾﻜﻮن أﺧﺬ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻜﺎﻓﯿﺔ ﻟﻌﻤﻠﯿﺔ اﻹﻋﺪاد ﻓﻨﻀﻐﻂ ‪ Next‬ﻟﺒﺪأ ﻧﺸﺮ اﻟﻤﻠﻔﺎت ﻛﺎﻟﺘﺎﻟﻲ‬

‫‪5‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺳﯿﺒﺪأ اﻵن ﻓﻲ ﺗﺤﻤﯿﻞ اﻟﻤﻠﻔﺎت ﻛﺎﻟﺘﺎﻟﻲ ﻓﺘﻨﺘﻈﺮ ﻗﻠﯿﻼ ﺛﻢ ﺗﻈﮭﺮ ﺷﺎﺷﺔ ﻧﮭﺎﯾﺔ اﻟﺘﺠﮭﯿﺰ ﻧﻀﻐﻂ ‪Finish‬‬

‫وﻟﺤﺬف اﻟﺒﺮﻧﺎﻣﺞ ﯾﻤﻜﻨﻨﺎ ذﻟﻚ ﺑﺎﻟﻄﺮﯾﻘﺔ اﻻﻋﺘﯿﺎدﯾﺔ ﻣﻦ ﺧ ﻼل ﻧﻈ ﺎم ال وﯾﻨ ﺪوز وﻟﻔ ﺘﺢ اﻟﺒﺮﻧ ﺎﻣﺞ ﻛﺎﻟﺘ ﺎﻟﻲ وﻋﻨ ﺪ ذﻛ ﺮ أي‬
‫أداة ﺑﺒﻌﺪ ذﻟﻚ ﺗﻮﻗﻊ أﻧﮭﺎ ﻓﻲ ھﺬه اﻟﻘﺎﺋﻤﺔ وان ﻟﻢ ﯾﻜﻦ ﺳﻮف ﻧﺬﻛﺮ ذﻟﻚ ‪.‬‬

‫‪6‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻋﻤﻠﯿﺔ ﺗﺼﻤﯿﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪Database Design‬‬


‫ﺳﻮف ﻧﺘﺤﺪث ﻣﺒﺪﺋﯿﺎ ﻋﻦ اﻷداة ‪Enterprise Manager‬‬
‫وھﻲ ﻋﺒﺎرة ﻋﻦ أداة رﺳﻮﻣﯿﺔ داﺧﻞ ال ‪ SQL Server‬ﺗﺴﺎﻋﺪ ﻓﻲ ﺑﻨﺎء ﻗﻮاﻋ ﺪ اﻟﺒﯿﺎﻧ ﺎت واﻟﺘﻌﺎﻣ ﻞ ﻣﻌﮭ ﺎ وﻓ ﻲ‬
‫اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ﻛﯿﻔﯿﺔ ﻓﺘﺤﮭﺎ وھﺬا ھﻮ اﻟﺸﻜﻞ اﻷﺳﺎﺳﻲ ﻟﻸداة‬

‫ﻓﻜﻤﺎ ﺗﻼﺣﻆ أﻧﮭﺎ ﺗﻨﺴﻖ ﺑﻄﺮﯾﻘﺔ ﺷﺠﺮﯾﺔ ﯾﻤﻜﻨﻚ ﻓﺘﺢ أي ﻓﺮع واﻟﺘﻌﺮف ﻋﻠﻲ ﻣﺎ اﻷﻓﺮع اﻟﺘﻲ ﯾﺤﺘﻮي ﻋﻠﯿﮭﺎ ‪.‬‬
‫أوﻻ‪ :‬ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬
‫ﺳﻮف ﻧﺘﺤﺪث ﻋﻦ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت دراﺳﯿﺔ ﺗﺨﺼﻨﺎ ﻟﻨﺮي ﻛﯿﻔﯿﺔ ﺗﻨﻔﺬھﺎ ﻣﻦ ﺧﻼل ھﺬه اﻷداة‬
‫ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻣﺪرﺳﺔ‬
‫‪ - ١‬اﻻﺣﺘﯿﺎﺟﺎت اﻟﻤﻌﻠﻮﻣﺎﺗﯿﺔ ‪:‬‬
‫اﻟﻤﻄﻠﻮب ﺗﺼﻤﯿﻢ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺗﺤﺘﻮي ﻋﻠﻲ ﻣﻌﻠﻮﻣﺎت ﺗﺨﺺ ﻣﺪرﺳﺔ وھﺬا ﻃﺒﻘﺎ ﻟﻠﺒﯿﺎﻧﺎت اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫§ ﻟﻜﻞ ﻃﺎﻟﺐ ﺑﺎﻟﻤﺪرﺳﺔ رﻗﻢ وھﻮ رﻗﻢ ﻓﺮﯾﺪ ﻻ ﯾﺘﻜﺮر وأﺳﻢ ﻣﺘﻔ ﺮع ﻷﺳ ﻢ اﻟﻄﺎﻟ ﺐ و ﺑ ﺎﻗﻲ اﻻﺳ ﻢ وﺗ ﺎرﯾﺦ ﻣ ﯿﻼد‬
‫وﻋﻨﻮان وﻧﻮع ورﻗﻢ ﺗﻠﯿﻔﻮن ان وﺟﺪ وﻋﻤﺮ اﻟﻄﺎﻟﺐ اﻟﺤﺎﻟﻲ ‪.‬‬
‫§ وﺑﺎﻟﻄﺒﻊ ﻗﺪ ﯾﺪرس اﻟﻄﺎﻟﺐ أﻛﺜﺮ ﻣ ﻦ ﻣ ﺎدة وھ ﺬا ﻋﻠ ﻲ أﺳ ﺎس أن اﻟﻤ ﺎدة ﺗﻮﺻ ﻒ ﺑ ﺮﻗﻢ ﻓﺮﯾ ﺪ ﻻ ﯾﺘﻜ ﺮر داﺧ ﻞ‬
‫اﻟﻘﺴﻢ اﻟﻮاﺣﺪ وﻋﻨﻮان اﻟﻤﺎدة وﻟﻜﻞ ﻃﻠﺐ ﻓﻲ ﻛﻞ ﻣﺎدة درﺟﺔ ‪.‬‬
‫§ أﻣﺎ اﻟﻘﺴﻢ ﻓﻠﮫ رﻗﻢ ﻓﺮﯾﺪ ﻻ ﯾﺘﻜﺮر وأﺳﻢ ﻣﻤﯿﺰ ﻻ ﯾﺘﻜﺮر واﻟﻤﺎدة ھﻨﺎ ﺗﺘﺒﻊ ﻗﺴﻢ واﺣﺪ ) ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻣﺎدة‬
‫إﻋﺪاد اﻟﺘﻘﺎرﯾﺮ ﺗﺪرس ﺑﻘﺴﻢ اﻟﺤﺎﺳﺐ ﻓﻘﻂ وﻏﯿ ﺮ ﻣﺨﺘ ﺼﺔ ﺑ ﺄي ﻣ ﺎدة أﺧ ﺮي ﻓ ﻲ ﻗ ﺴﻢ آﺧ ﺮ ﺣﺘ ﻰ وﻟ ﻮ ﺗ ﺸﺎﺑﮭﺖ ﻓ ﻲ‬
‫اﻻﺳﻢ(‪.‬‬
‫§ وﻟﻠﻤﺎدة ﻣﺪرس واﺣﺪ ﯾﺪرﺳﮭﺎ ﻋﻠﻲ أﺳﺎس إن اﻟﻤﺪرس اﻟﻮاﺣﺪ ﻗﺪ ﯾﺪرس أﻛﺜﺮ ﻣﻦ ﻣﺎدة‪.‬‬

‫‪7‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫§ وﯾﺴﺠﻞ ﻋﻦ اﻟﻤﺪرس رﻗﻢ ﻣﻤﯿﺰ ﻟﻠﻤﺪرس وأﺳﻢ وﻧﻮع وﻣﺮﺗﺐ ورﺗﺒﮫ ﺟﺎﻣﻌﯿﺔ وﺷﮭﺎداﺗﮫ اﻟﺘ ﻲ ﺣ ﺼﻞ ﻋﻠﯿﮭ ﺎ‬
‫ﺗﺎرﯾﺦ ﺗﻌﯿﻨﮫ وﻣﺪﯾﻨﺘﮫ واﻟﻘﺴﻢ اﻟﺬي ﯾﻌﻤﻞ ﺑﮫ واﻟﻘﺴﻢ اﻟﺬي ﯾﺪﯾﺮه أن وﺟﺪ‬

‫‪ -٢‬اﻟﺘﺼﻤﯿﻢ اﻷوﻟﻲ ﻟﻠﺒﯿﺎﻧﺎت )‪( ER - Entity Relational Schema‬‬

‫‪ -٣‬اﻟﻤﺴﺘﻮي اﻟﺜﺎﻧﻲ ﻟﻠﺘﺼﻤﯿﻢ ) ‪( Relational Schema‬‬

‫‪8‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


SQL Server 2000 -- By Mr. Adel Sabour

‫ اﻟﻤﺴﺘﻮي اﻟﺜﺎﻟﺚ ﻟﺘﺼﻤﯿﻢ اﻟﺠﺪاول‬-٤

Department ‫ﺟﺪول اﻟﻘﺴﻢ‬

‫اﻟﻘﯿﻮد‬ ‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ‬ ‫ﻃﻮل اﻟﺤﻘﻞ‬ ‫ﻧﻮع اﻟﺒﯿﺎﻧﺎت‬ ‫وﺻﻒ‬ ‫أﺳﻢ اﻟﺤﻘﻞ‬
Primary Key X ٤ int ‫ رﻗﻢ اﻟﻘﺴﻢ‬DeptNo
Unique X ٢٥ Varchar ‫ أﺳﻢ اﻟﻘﺴﻢ‬DName
Foreign Key /
Unique
ü ٤ int ‫ ﻣﺪﯾﺮ اﻟﻘﺴﻢ‬Manager

Teacher ‫ﺟﺪول اﻟﻤﺪرس‬

‫اﻟﻘﯿﻮد‬ ‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ‬ ‫ﻃﻮل اﻟﺤﻘﻞ‬ ‫ﻧﻮع اﻟﺒﯿﺎﻧﺎت‬ ‫وﺻﻒ‬ ‫أﺳﻢ اﻟﺤﻘﻞ‬
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

CollegeDegree ‫ﺟﺪول اﻟﺸﮭﺎدات اﻟﺠﺎﻣﻌﯿﺔ‬

‫اﻟﻘﯿﻮد‬ ‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ‬ ‫ﻃﻮل اﻟﺤﻘﻞ‬ ‫ﻧﻮع اﻟﺒﯿﺎﻧﺎت‬ ‫وﺻﻒ‬ ‫أﺳﻢ اﻟﺤﻘﻞ‬
Foreign
Key
X ٤ int ‫ رﻗﻢ اﻟﻤﺪرس‬TeacherId
Primary Key
X ٥٠ Varchar ‫ اﻟﺸﮭﺎدة‬CollegeDegree

Student ‫ﺟﺪول اﻟﻄﺎﻟﺐ‬

‫اﻟﻘﯿﻮد‬ ‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ‬ ‫ﻃﻮل اﻟﺤﻘﻞ‬ ‫ﻧﻮع اﻟﺒﯿﺎﻧﺎت‬ ‫وﺻﻒ‬ ‫أﺳﻢ اﻟﺤﻘﻞ‬
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

PDF created with pdfFactory Pro trial version www.pdffactory.com


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺟﺪول اﻟﻤﺎدة ‪Subject‬‬

‫اﻟﻘﯿﻮد‬ ‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ‬ ‫ﻃﻮل اﻟﺤﻘﻞ‬ ‫ﻧﻮع اﻟﺒﯿﺎﻧﺎت‬ ‫وﺻﻒ‬ ‫أﺳﻢ اﻟﺤﻘﻞ‬
‫‪Primary‬‬ ‫‪X‬‬ ‫‪٤‬‬ ‫‪int‬‬ ‫‪ SubCode‬رﻗﻢ اﻟﻤﺎدة‬
‫‪Key‬‬ ‫‪Foreign‬‬
‫‪Key‬‬
‫‪X‬‬ ‫‪٤‬‬ ‫‪int‬‬ ‫‪ DeptBelong‬اﻟﻘﺴﻢ اﻟﺘﺎﺑﻌﺔ ﻟﮫ‬
‫‪Foreign Key‬‬ ‫‪ü‬‬ ‫‪٤‬‬ ‫‪int‬‬ ‫‪ TeacherTaught‬اﻟﻤﺪرس اﻟﻤﻠﻘﻦ‬
‫‪X‬‬ ‫‪٢٠‬‬ ‫‪varchar‬‬ ‫‪ Title‬ﻋﻨﻮان اﻟﻤﺎدة‬

‫ﺟﺪول اﻟﺪراﺳﺔ ‪Study‬‬

‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ اﻟﻘﯿﻮد‬ ‫ﻃﻮل اﻟﺤﻘﻞ‬ ‫ﻧﻮع اﻟﺒﯿﺎﻧﺎت‬ ‫وﺻﻒ‬ ‫أﺳﻢ اﻟﺤﻘﻞ‬
‫‪Foreign‬‬
‫‪Key‬‬
‫‪X‬‬ ‫‪٤‬‬ ‫‪Int‬‬ ‫‪ StudNo‬رﻗﻢ اﻟﻄﺎﻟﺐ‬
‫‪Primary‬‬
‫‪Key‬‬ ‫‪Foreign‬‬ ‫‪X‬‬ ‫‪٤‬‬ ‫‪int‬‬ ‫‪ SubCode‬رﻗﻢ اﻟﻤﺎدة‬
‫‪Key‬‬
‫‪X‬‬ ‫‪٤‬‬ ‫‪int‬‬ ‫‪ DeptNo‬رﻗﻢ اﻟﻘﺴﻢ‬
‫‪ü‬‬ ‫‪٥٫٢‬‬ ‫‪Numeric‬‬ ‫‪ Score‬اﻟﺪرﺟﺔ‬

‫اﻟﻤ ﺴﺘﻮي اﻷول واﻟﺜ ﺎﻧﻲ ﻗ ﺪ ﺗﻌﻠﻤﻨ ﺎھﻢ ﻣ ﻦ ﻗﺒ ﻞ وﻟﻜ ﻦ ﻣ ﺎذا ﻋ ﻦ اﻟﻤ ﺴﺘﻮي اﻟﺜﺎﻟ ﺚ أﻧ ﮫ ﺑ ﮫ ﺑﻌ ﺾ اﻟﻨﻘ ﺎط اﻟﺘ ﻲ ﻻﺑ ﺪ أن‬
‫ﺗﻮﺿﺢ‬
‫‪ Column Name -١‬أﺳﻢ اﻟﺤﻘﻞ ھﻮ ﻋﺒﺎرة ﻋﻦ اﻻﺳﻢ اﻟﻔﻌﻠﻲ اﻟﺬي ﺳﻮف ﯾﻜﻮن ﺑﺪاﺧﻞ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬
‫‪ Description -2‬اﻟﻮﺻﻒ ھﻮ وﺻﻒ ﺑﺴﯿﻂ ﻟﻤﻌﺮﻓﺔ اﻟﻤﻘﺼﻮد ﺑﮭﺬا اﻟﺤﻘﻞ‬
‫‪ Data Type -3‬ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﯾﻜﺘﺐ ﺑﮭﺎ ﻧﻮﻋﯿﺔ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﻮف ﺗﺴﺠﻞ داﺧﻞ ھﺬا اﻟﺤﻘﻞ‬

‫وﻣﻦ أھﻢ اﻷﻧﻮاع داﺧﻞ ‪SQL Server‬‬

‫وﺻﻒ ﻣﺒﺴﻂ‬ ‫ﻧﻮع اﻟﺒﯿﺎن‬


‫ﯾﺤﻤﻞ ﻧﻮع ﺑﯿﺎﻧﺎت ﻧﺼﻲ ) ﺣﺮﻓﻲ ( ﯾﺘﻤﯿﺰ ﺑﺨﺎﺻﯿﺔ اﻻﻧﻜﻤﺎش ﺑﻤﻌﻨﻲ ﺳ ﯿﺘﻢ ﺗﻮﺿ ﯿﺤﮫ ﻋﻨ ﺪ‬ ‫‪Varchar‬‬
‫اﻟﺤﺪﯾﺚ ﻋﻦ ﻃﻮل اﻟﺤﻘﻞ ‪Length‬‬
‫ﯾﺤﻤﻞ ﻧﻮع ﺑﯿﺎﻧﺎت ﻧﺼﻲ ) ﺣﺮﻓﻲ (‬ ‫‪Char‬‬
‫ﯾﺤﻤﻞ ﻧﻮع ﺑﯿﺎﻧﺎت رﻗﻤﻲ ﺻﺤﯿﺢ‬ ‫‪int‬‬
‫ﯾﺤﻤﻞ ﻧﻮع ﺑﯿﺎﻧﺎت رﻗﻤﻲ ﻗﺪ ﯾﺤﻤﻞ ﻋﻼﻣﺎت ﻋﺸﺮﯾﺔ‬ ‫‪Numeric‬‬
‫ﯾﺤﻤﻞ ﻧﻮع ﺑﯿﺎﻧﺎت ﻛﺘﻮارﯾﺦ أو ﺳﺎﻋﺔ أو اﻻﺛﻨﯿﻦ‬ ‫‪DateTime‬‬
‫ﯾﺤﻤﻞ ﻧﻮع ﺑﯿﺎﻧﺎت رﻗﻤﻲ )‪ (٠٫١‬ﻣﺜﻞ اﻟﻔﯿﺪﯾﻮ اﻟﺮﻗﻤﻲ‬ ‫‪Binary‬‬
‫ﯾﺤﻤﻞ ﻧﻮع ﺑﯿﺎﻧﺎت )ﺻﻮر(‬ ‫‪Image‬‬
‫ﯾﺤﻤﻞ ﻧﻮع ﺑﯿﺎﻧﺎت ﻛﻌﻤﻠﺔ‬ ‫‪Money‬‬

‫‪ Length -٤‬ﻃﻮل اﻟﺨﺎﻧﺎت‬


‫ﯾﺤﺪد ﺑﮭﺎ ﻋﺪد اﻟﺨﺎﻧﺎت اﻟﻤﺘﺎﺣﺔ ﻟﻺدﺧﺎل اﻟﻤﺘﺎﺣﺔ ﻛﻤﺪﺧﻼت ﻓ ﻲ ھ ﺬا اﻟﺤﻘ ﻞ ﻓﻔ ﻲ اﻟﻨ ﻮع ‪ Varchar‬ﻧﺤ ﺪد ﻟﯿ ﺴﺖ‬
‫اﻟﻘﯿﻤ ﺔ أو ﻋ ﺪد اﻟﺨﺎﻧ ﺎت اﻟﻤﺤﺠ ﻮزة ﻓﻌﻠﯿ ﺎ ﻓ ﻲ ﻛ ﻞ ﺻ ﻒ ﺑﯿﺎﻧ ﺎت وﻟﻜ ﻦ اﻟﺤ ﺪ اﻻﻗ ﺼﻲ ﻟﻌ ﺪد اﻟﺨﺎﻧ ﺎت وان ﻛﺎﻧ ﺖ اﻟﻘﯿﻤ ﺔ‬
‫اﻟﻔﻌﻠﯿﺔ ﻓﻲ اﻟﺠﺪول أﻗﻞ ﯾﺤﺠﺰ ﻋﺪد اﻟﺨﺎﻧﺎت اﻟﻔﻌﻠﯿﺔ ﻓﻘﻂ ‪.‬‬

‫‪ Allow Nulls -٥‬اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ‬


‫ﻧﺤﺪد ﻣﻦ ﺧﻼﻟﮫ اﻟﺤﻘﻞ اﻟﺘﻲ ﻗﺪ ﺗﺤﺘﻮي ﻋﻠﻲ ﻗﯿﻢ ﻓﺎرﻏﺔ واﻟﺤﻘﻞ اﻟﺘﻲ ﻻﺑﺪ أن ﺗﻤﻸ ﯾﻘﯿﻢ ‪.‬‬

‫‪10‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪ Constraints -٦‬اﻟﻘﯿﻮد‬
‫ﻣ ﻦ أھ ﻢ اﻟﻨﻘ ﺎط ﻗﺒ ﻞ ﺗﻨﻔﯿ ﺬ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت ھ ﻮ ﺗﺤﺪﯾ ﺪ اﻟﻘﯿ ﻮد اﻟﺘ ﻲ ﺗ ﻀﻤﻦ ﻋ ﺪم دﺧ ﻮل أي ﺑﯿﺎﻧ ﺎت ﻏﯿ ﺮ ﺳ ﻠﯿﻤﺔ‬
‫ﺑﺎﻟﻘﺎﻋﺪة وﺗﻀﻤﻦ ﺗﻜﺎﻣﻞ اﻟﺒﯿﺎﻧﺎت وﺗﻤﺎﺛﻠﮭﺎ‬
‫وھﻨﺎك ﺧﻤﺴﺔ أﻧﻮاع ﻣﻦ اﻟﻘﯿﻮد ﯾﺼﻨﻔﻮا داﺋﻤﺎ اﻟﻲ ﻧﻮﻋﯿﻦ‬
‫‪ -١‬ﻧﻮع ﯾﻔﺮض ﻟﻀﻤﺎن ﺻﺤﺔ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺤﻘﻞ وھﻢ ﺛﻼﺛﺔ أﻧﻮاع‬
‫‪ -٢‬ﻧﻮع ﯾﻔﺮض ﻟﻀﻤﺎن ﺗﻜﺎﻣﻞ اﻟﺒﯿﺎﻧﺎت ﻋﺒﺮ اﻟﺠﺪاول وھﻢ ﻧﻮﻋﺎن‬

‫‪ -١‬ﻧﻮع ﯾﻔﺮض ﻟﻀﻤﺎن ﺻﺤﺔ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺤﻘﻞ ) ‪(Value Constraints‬‬

‫أ‪ -‬اﻟﺤﻘﻞ اﻟﻤﻤﯿﺰ )‪(Unique Constraint UK‬‬


‫ﻣﻦ أھﻢ ﺧﻮاﺻﮫ ‪:‬‬
‫‪ -١‬ﻗﺪ ﯾﻜﻮن ﺣﻘﻞ واﺣﺪ ﻣﻤﯿﺰ أو أﻛﺜﺮ ﻣﻦ ﺣﻘﻞ ﺑﻤﻌﻨﻲ ﻣﺜﻼ ﻗﯿﻤﺔ اﻟﺤﻘﻠﯿﻦ ﻣﻌﺎ ﻻ ﺗﺘﻜﺮر ‪.‬‬
‫‪ -٢‬ﯾﻤﻜﻦ أن ﯾﻜﻮن ﻓﻲ ﻗﯿﻢ ھﺬا اﻟﺤﻘﻞ ﺣﻘﻞ واﺣﺪ ﻋﻠﻲ اﻷﻗﻞ ﯾﺤﺘﻮي ﻋﻠﻲ ﻗﯿﻤﺔ ﻓﺎرﻏﺔ ‪.‬‬
‫‪ -٣‬ﯾﻔﮭﺮس داﺋﻤﺎ ﺑــ ‪ Unique Index‬وﻻ ﯾﻤﻜﻦ إزاﻟﺘﮫ ﻣﻦ ﺧﻼل اﻷﻣﺮ ‪. Drop Index‬‬

‫ب‪ -‬ﺣﻘﻞ ﺗﺤﻘﻖ ﺷﺮط )‪(Check Constraint CK‬‬


‫ﻣﻦ أھﻢ ﺧﻮاﺻﮫ ‪:‬‬
‫‪ -١‬ﯾﻔﺮض ﻋﻠﻲ ﺣﻘﻞ ﻣﺤﺪد ‪.‬‬
‫‪ -٢‬ﻗﺪ ﯾﺤﺘﻮي ﻋﻠﻲ ﺷﺮﻃﺎ أو أﻛﺜﺮ ﻣﻦ ﺷﺮط ﻋﻠﻲ ﻧﻔﺲ اﻟﺤﻘﻞ اﻟﻤﺤﺪد ‪.‬‬
‫‪ -٣‬ﻋﻨﺪ ﻓﺮﺿﮫ ﻋﻠﻲ ﺣﻘﻞ ﺑﮫ ﺑﯿﺎﻧﺎت ﯾﺘﻢ ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ ﺗﺄﻛﯿﺪ اﻟﺸﺮط ‪.‬‬

‫ت‪ -‬ﺣﻘﻞ ﻻ ﯾﻘﺒﻞ ﻗﯿﻤﺔ ﻓﺎرﻏﺔ )‪(Not Null NN‬‬


‫ﻣﻦ أھﻢ ﺧﻮاﺻﮫ ‪:‬‬
‫‪ -١‬ﯾﻔﺮض ﻋﻠﻲ ﺣﻘﻞ واﺣﺪ ‪.‬‬
‫‪ -٢‬ﻗﺪ ﺗﺘﻜﺮر اﻟﺒﯿﺎﻧﺎت ﺑﺪاﺧﻠﮫ أو ﻻ اﻟﻤﮭﻢ أن ﻻ ﺗﻜﻮن ﻓﺎرﻏﺔ ‪.‬‬
‫‪ -٣‬ﻋﻨﺪ ﻓﺮﺿﮫ ﻋﻠﻲ ﺣﻘﻞ ﺑﮫ ﺑﯿﺎﻧﺎت ﯾﺘﻢ ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ ﺗﻨﻔﯿﺬ اﻟﻘﯿﺪ ‪.‬‬

‫‪ -٢‬ﻧﻮع ﯾﻔﺮض ﻟﻀﻤﺎن ﺗﻜﺎﻣﻞ اﻟﺒﯿﺎﻧﺎت ﻋﺒﺮ اﻟﺠﺪاول )‪(Integrity Constraints‬‬

‫أ‪ -‬ﺣﻘﻞ ﻣﻔﺘﺎح رﺋﯿﺴﻲ )‪(Primary Key PK‬‬


‫ﻣﻦ أھﻢ ﺧﻮاﺻﮫ ‪:‬‬
‫‪ -١‬ﻻﺑﺪ أن ﯾﺤﺘﻮي ﻋﻠﻲ ﻗﯿﻤﺔ ﺣﺘﻰ وﻟﻮ ﻛﺎﻧﺖ ﻓﺎرﻏﺔ‪.‬‬
‫‪ -٢‬ﻛﻞ ﻗﯿﻤﺔ ﻻﺑﺪ أن ﺗﻜﻮن ﻣﻤﯿﺰة أي أﻧﮭﺎ ﻻ ﺗﺘﻜﺮر ‪.‬‬
‫‪ -٣‬اﻟﺠﺪول اﻟﻮاﺣﺪ ﯾﺤﺘﻮي ﻋﻠﻲ ﻣﻔﺘﺎح رﺋﯿﺴﻲ واﺣﺪ ‪.‬‬
‫‪ -٤‬ﻗﺪ ﯾﻜﻮن اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ﺣﻘﻞ واﺣﺪ أو أﻛﺜﺮ ‪.‬‬
‫‪ -٥‬ﯾﻔﮭﺮس داﺋﻤﺎ ﺑــ ‪. Unique Index‬‬
‫‪ -٦‬ﯾﺼﻠﺢ أن ﯾﻜﻮن ﻟﮫ ﻣﻔﺘﺎح ﺧﺎرﺟﻲ ﻓﻲ ﺟﺪول أﺧﺮ ‪.‬‬

‫ب‪ -‬ﺣﻘﻞ ﻣﻔﺘﺎح ﺧﺎرﺟﻲ )‪(Foreign Key FK‬‬


‫ﻣﻦ أھﻢ ﺧﻮاﺻﮫ ‪:‬‬
‫‪ -١‬ﻗﺪ ﯾﻜﻮن اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﺣﻘﻞ أو أﻛﺜﺮ ‪.‬‬
‫‪ -٢‬ﻋﺪد ﺣﻘﻮﻟﮫ ﻻﺑﺪ أن ﺗﻜﻮن ﻣﺘﻮاﻓﻘﺔ اﻟﻌﺪد ﻣﻊ ﻣﻔﺘﺎﺣﮫ اﻟﺮﺋﯿﺴﻲ ‪.‬‬
‫‪ -٣‬ﻧﻮع ﺑﯿﺎﻧﺎﺗﮫ ﻻﺑﺪ أن ﯾﻜﻮن ﻣﺘﻮاﻓﻖ ﻣﻊ ﻧﻮع ﺑﯿﺎﻧﺎت اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ‪.‬‬
‫‪ -٤‬ﻟﯿﺲ ﺷﺮﻃﺎ أن ﯾﺤﻤﻞ ﻧﻔﺲ أﺳﻢ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ‪.‬‬
‫‪ -٥‬ﻟﻮ ﺗﻢ ﻋﻤﻞ ﻋﻼﻗﺔ ﺑﻤﻔﺘﺎح ﺧﺎرﺟﻲ ﺑ ﮫ ﺑﯿﺎﻧ ﺎت ﯾ ﺘﻢ ﻓﺤ ﺼﮭﺎ ﻟﺮؤﯾ ﺔ أن ﻛ ﻞ اﻟﺒﯿﺎﻧ ﺎت ﻟﮭ ﺎ ﻣﻤﺎﺛ ﻞ‬
‫ﻓﻲ اﻟﻤﻔﺘﺎح اﻷﺳﺎﺳﻲ أم ﻻ ‪.‬‬

‫‪11‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪ -٧‬اﻟﻌﻼﻗﺎت ‪Relationships‬‬
‫أﻣﺎ اﻟﻌﻼﻗﺎت ﻓﻘﺪ ﺗﻌﻠﻤﻨﺎھﻢ ﻣﻦ ﻗﺒﻞ وھﻢ ﺛﻼﺛﺔ أﻧﻮاع ﻓﻘﻂ ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻌﻼﻗﯿﺔ وھﻢ ‪:‬‬
‫‪ -١‬اﻟﻌﻼﻗﺔ ‪١ : ١‬‬
‫وﻣﻌﻨﺎھﺎ أن ﻛﻞ ﺣﻘﻞ ﻓﻲ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻟﮫ ﻗﯿﻤﺔ ﻻﺑﺪ أن ﺗﻜﻮن ﻟﮭﺎ ﻗﯿﻤﺔ أﺧﺮي ﻣﻨﺎﻇﺮة ﻟﮫ ﻓ ﻲ اﻟﻤﻔﺘ ﺎح‬
‫اﻟﺮﺋﯿﺴﻲ وﻻ ﯾﺤﺘﻮي ﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻋﻠﻲ ﻧﻔﺲ اﻟﻘﯿﻤﺔ ﻣﺮة أﺧﺮي ‪.‬‬

‫‪ -٢‬اﻟﻌﻼﻗﺔ ‪N : ١‬‬
‫وﻣﻌﻨﺎھﺎ أن ﻛﻞ ﺣﻘﻞ ﻓﻲ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻟﮫ ﻗﯿﻤﺔ ﻻﺑﺪ أن ﺗﻜﻮن ﻟﮭﺎ ﻗﯿﻤﺔ أﺧﺮي ﻣﻨ ﺎﻇﺮة ﻟ ﮫ ﻓ ﻲ اﻟﻤﻔﺘ ﺎح‬
‫اﻟﺮﺋﯿﺴﻲ وﻗﺪ ﯾﺤﺘﻮي ﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻋﻠﻲ ﻧﻔﺲ اﻟﻘﯿﻤﺔ ﻣﺮة أﺧﺮي ‪.‬‬

‫‪ -٣‬اﻟﻌﻼﻗﺔ ‪N : M‬‬
‫وﻣﻌﻨﺎھﺎ أن ﻛﻞ ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول اﻷول ﻗﺪ ﯾﺘﺒﻊ أﻛﺜﺮ ﻣﻦ ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ وﻛﻞ ﺳ ﺠﻞ ﻓ ﻲ اﻟﺠ ﺪول‬
‫اﻟﺜﺎﻧﻲ ﻗﺪ ﯾﺘﺒﻊ أﻛﺜﺮ ﻣﻦ ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول اﻷول وﺗﻤﺜﻞ ھﺬه اﻟﻌﻼﻗﺔ ﻓﻲ ﺟﺪول ﺟﺪﯾﺪ ﯾﺪﻋﻲ اﻟﺠﺪول اﻟﻮﺳﯿﻂ‬
‫ﯾﺘﻜﻮن ﻣﻦ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ﻟﻠﺠ ﺪول اﻷول واﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﻟﻠﺠ ﺪول اﻟﺜ ﺎﻧﻲ وﯾﻜﻮﻧ ﺎ اﻟﻤﻔﺘ ﺎﺣﯿﻦ ﻣﻔﺘﺎﺣ ﮫ‬
‫اﻟﺮﺋﯿﺴﻲ ‪.‬‬
‫ﺑﻌﺪ ﻛﻞ ھﺬه اﻟﻤﻘﺪﻣﺔ اﻟﺴﺮﯾﻌﺔ ﯾﻤﻜﻨﻨﺎ اﻵن ﺗﻄﺒﯿﻖ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻋﻠﻲ اﻷداة ‪Enterprise Manager‬‬

‫‪12‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫أﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻋﻠﻲ اﻷداة ‪Enterprise Manager‬‬


‫ﻹﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ ‪ databases‬وﻧﺨﺘﺎر ﻣﻨﮭﺎ ‪New Database‬‬

‫ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺧﺼﺎﺋﺺ اﻟﻘﺎﻋﺪة ﻓﻲ اﻟﺘﺒﻮﯾﺒﺔ اﻷوﻟ ﻲ ‪ General‬ﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪ Name‬ﻧﻜﺘ ﺐ أﺳ ﻢ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت‬
‫اﻟﺠﺪﯾﺪة وﻓﻲ اﻟﺘﺒﻮﯾﺒﺔ ‪ Data Files‬ﯾﻤﻜﻨﻨﺎ رؤﯾﺔ أﺳﻢ ﻣﻠﻒ اﻟﺒﯿﺎﻧﺎت وﻣﻮﻗﻌﺔ وﺣﺠﻤﮫ واﻟﺘﺒﻮﯾﺒﮫ ‪Transaction‬‬
‫‪ Log‬ﺗﺤﺘﻮي ﻋﻠﻲ أﺳﻢ اﻟﻤﻠﻒ اﻟﻤﺴﺌﻮل ﻋﻦ اﻟﻌﻤﻠﯿﺎت اﻟﺤﺎﻟﯿﺔ وﻣﻮﻗﻌﺔ وﺣﺠﻤﮫ ﻧﻀﻐﻂ ‪ Ok‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ‪.‬‬

‫‪13‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺳﻮف ﺗﻈﮭﺮ اﻟﻘﺎﻋﺪة ﻓﻲ اﻟﺒﻨﺎء اﻟﺸﺠﺮي وﻗﺪ ﺗﺤﺘﺎج ﻟﻠﻀﻐﻂ ‪ F5‬ﻟﻠﺮؤﯾﺔ اﻟﺘﺤﺪﯾﺚ‬
‫وﻟﺤﺬف ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﻘﺎﻋﺪة اﻟﻤﺮاد ﺣﺬﻓﮭﺎ وﻧﺨﺘﺎر ‪Delete‬‬

‫ﺳﻮف ﯾﻈﮭﺮ ﻟﻨ ﺎ رﺳ ﺎﻟﺔ ﻟﺘﺄﻛﯿ ﺪ اﻟﺤ ﺬف ﯾﻤﻜﻨ ﻚ اﻟ ﻀﻐﻂ ‪ Yes‬ﻟﺘﺄﻛﯿ ﺪ اﻟﺤ ﺬف وﻟﻜﻨﻨ ﺎ ﻣﺎزﻟﻨ ﺎ ﺑﺤﺎﺟ ﺔ ﻹﺗﻤ ﺎم اﻟﻘﺎﻋ ﺪة ﻓ ﻼ‬
‫ﺗﺤﺬﻓﮭﺎ‬

‫‪14‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻛﯿﻔﯿﺔ إﻧﺸﺎء اﻟﺠﺪاول‬


‫ﻧﻘﻒ ﻋﻠﻲ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﻟﻤﺪرﺳﺔ وﻣﻨﮭﺎ ﻋﻠﻲ ‪ Tables‬ﺳﯿﻈﮭﺮ ﻟﻨﺎ ﻋﻠﻲ اﻟﺠﺎﻧﺐ اﻷﯾﻤﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺠﺪاول‬
‫اﻟﺘﻲ ﻟﻢ ﻧﻨﺸﺌﮭﺎ ﺑﮭﺎ أﺳﻢ اﻟﺠﺪول وﻣﺎﻟﻚ ھ ﺬه اﻟﺠ ﺪاول وھ ﻮ ‪ dbo‬وﻧ ﻮع ھ ﺬه اﻟﺠ ﺪاول وﻛ ﻞ ھ ﺬه اﻟﺠ ﺪاول ﺗﺨ ﺼﺺ‬
‫اﻟﻨﻈﺎم أي ﺟﺪاول ﺗﺨﺺ إدارة ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﺗﺎرﯾﺦ إﻧﺸﺎء ﻛﻞ ﺟﺪول‬

‫ﻹﻧﺸﺎء اﻟﺠﺪاول اﻟﺘﻲ ﺗﺨﺼﻨﺎ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ ‪ tables‬وﻣﻨﮭﺎ ﻧﺨﺘﺎر ‪New Table‬‬

‫‪15‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺗﻈﮭ ﺮ ﻟﻨ ﺎ اﻟ ﺸﺎﺷﺔ اﻟﺘﺎﻟﯿ ﺔ ﻟ ﻨﻤﻸ ﺑﮭ ﺎ ﺑﯿﺎﻧ ﺎت ﻟﻮﺻ ﻒ اﻟﺠ ﺪول ﻛﻤ ﺎ ﻛ ﺎن ﻣﻮﺿ ﺤﺎ ﻣ ﻦ ﻗﺒ ﻞ ﻓﻔ ﻲ اﻟﺨﺎﻧ ﺔ ‪Column‬‬
‫‪ Name‬ﻧﻀﻊ أﺳﻤﺎء اﻟﺠﺪاول واﻟﺤﻘﻞ ‪ Data Type‬ﻧﺨﺘﺎر ﻧﻮع اﻟﺒﯿﺎﻧ ﺎت واﻟﺤﻘ ﻞ ‪ Length‬ﻧﺤ ﺪد ﻋ ﺪد اﻟﺨﺎﻧ ﺎت‬
‫واﻟﺤﻘﻞ ‪ Allow Nulls‬ﻧ ﻀﻊ ﻋﻼﻣ ﺔ ﺻ ﺢ أﻣ ﺎ اﻟﺤﻘ ﻞ اﻟ ﺬي ﻗ ﺪ ﯾﺤﺘ ﻮي ﻋﻠ ﻲ ﻗﯿﻤ ﺔ ﻓﺎرﻏ ﺔ واﻟﺘﺒﻮﯾ ﺐ ‪Column‬‬
‫ﻧﺤﺪد ﺑﮫ ﺑﻌﺾ اﻟﻤﺘﻐﯿﺮات ﻋﻠﻲ ﺣﺴﺐ ﻧ ﻮع اﻟﺤﻘ ﻞ اﻟﺤ ﺎﻟﻲ ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل ﯾﻤﻜ ﻦ وﺿ ﻊ وﺻ ﻒ ﻟﻠﺤﻘ ﻞ ﻓ ﻲ اﻟﺨﺎﻧ ﺔ‬
‫‪ Description‬أو وﺿﻊ ﻗﯿﻤﺔ اﻓﺘﺮاﺿﯿﺔ أن ﻟﻢ ﯾ ﺪﺧﻞ اﻟﻤ ﺴﺘﺨﺪم ﻗﯿﻤ ﺔ ﻓ ﻲ ﺣﻘ ﻞ ﻣ ﺎ وھ ﺬا ﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪Default‬‬
‫‪ Value‬ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ‪:‬‬

‫و اﻵن ﯾﻤﻜﻨﻨﺎ اﻟﺒﺪاﯾﺔ ﻓ ﻲ اﻟﻌﻤ ﻞ واﻷﻓ ﻀﻞ ﻋﻨ ﺪ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ اﻷداة ‪ Enterprise Manager‬أن ﻧﻨ ﺸﺊ اﻟﺠ ﺪاول‬
‫أوﻻ ﺛﻢ ﺑﻌﺪ ذﻟﻚ ﯾﺘﻢ ﻋﻤﻞ اﻟﻌﻼﻗﺎت ‪:‬‬
‫إﻧﺸﺎء ﺟﺪول اﻟﻘﺴﻢ ‪Department‬‬

‫ﻟﻘﺪ ﺗﻢ إﻧﺸﺎء اﻟﺤﻘﻮل ﺑﻜﻞ ﺑﺴﺎﻃﺔ ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ اﻟﻤﻘﺎﺑﻞ‬


‫وﻟﻜﻦ ﻣﺎذا ﻋﻦ اﻟﻘﯿﻮد اﻟﺤﻘﻞ اﻷول ﺣﻘﻞ ﻣﻔﺘﺎح رﺋﯿﺴﻲ‬
‫ﻟﻌﻤﻞ ذﻟﻚ‬
‫ﻧﻀﻐﻂ ﻋﻠﻲ اﻟﺤﻘﻞ ‪ DeptNo‬وﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس‬
‫ﺗﻈﮭﺮ ﻟﻨﺎ ﻗﺎﺋﻤﺔ ﻧﺨﺘﺎر ﻣﻨﮭﺎ ‪Set Primary Key‬‬
‫ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ‪:‬‬

‫‪16‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻟﺤﻘﻞ ‪ DName‬ﻟﮫ ﻗﯿ ﺪ أﻧ ﮫ ﻗﯿ ﺪ ‪ Unique‬ﻣﻤﯿ ﺰ ﻟﻌﻤ ﻞ ذﻟ ﻚ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ اﻟﺤﻘ ﻞ اﻟﻤ ﺮاد ﺛ ﻢ ﺿ ﻐﻂ ﯾﻤ ﯿﻦ ﺑﺎﻟﻤ ﺎوس‬
‫واﺧﺘﯿﺎر ‪ Indexes/Keys‬ﻛﻤﺎ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﺳﻮف ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﻧﺒﺪأ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻲ اﻟﺰر ‪ New‬ﺛ ﻢ ﻧ ﺬھﺐ ﻟﻠﺨﺎﻧ ﺔ ‪ Index name‬ﻧ ﻀﻊ ﻓﯿﮭ ﺎ أﺳ ﻤﺎ ﻟﻠﻘﯿ ﺪ أو‬
‫ﻧﺘ ﺮك اﻻﺧﺘﯿ ﺎر اﻻﻓﺘﺮاﺿ ﻲ وﺑﻌ ﺪھﺎ ﺗﺤ ﺖ اﻟﺨﺎﻧ ﺔ ‪ Column Name‬ﻧﺨﺘ ﺎر أﺳ ﻢ اﻟﺤﻘ ﻞ أو اﻟﺤﻘ ﻮل وﺑﻌ ﺪھﺎ ﻧﺨﺘ ﺎر‬
‫‪ Create Unique‬وﺑﻌﺪ ذﻟﻚ ﻧﻀﻐﻂ ﻋﻠﻲ ‪ Close‬ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺨﻄﻮات اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﺑﻘ ﻲ ﻟﻨ ﺎ اﻟﺤﻘ ﻞ ‪ Manager‬وﺑ ﮫ ﻗﯿ ﺪ ﻣﻔﺘ ﺎح ﺧ ﺎرﺟﻲ ﯾﺨ ﺺ ﺟ ﺪول اﻟﻤ ﺪرس وﻟﻜ ﻦ ﺟ ﺪول اﻟﻤ ﺪرس ﻣ ﺎزال ﻏﯿ ﺮ‬
‫ﻣﻮﺟﻮد ﻓﯿﺆﺟﻞ ھﺬا اﻟﻘﯿﺪ ﺣﺘﻰ ﯾﻜﻮن ﺟ ﺪول اﻟﻤ ﺪرس ﺑﻤﻔﺘﺎﺣ ﮫ اﻟﺮﺋﯿ ﺴﻲ ﺟ ﺎھﺰﯾﻦ ﻓﻨﺒ ﺪأ اﻵن ﺑﺤﻔ ﻆ ھ ﺬا اﻟﺠ ﺪول أوﻻ‬
‫ﻧﻀﻐﻂ ﺑﺄي ﻣﻜﺎن ﺑﺎﻟﺠﺪول ﺛﻢ ﻧﺨﺘﺎر ‪ Save‬وﺑﻌﺪھﺎ ﺗﻈﮭﺮ ﻟﻨﺎ ﺧﺎﻧﺔ ﻻﺧﺘﯿﺎر أﺳﻢ ﻟﻠﺠﺪول و ﺑﮭﺎ أﺳﻢ اﻓﺘﺮاﺿ ﻲ ﻧﻜﺘ ﺐ‬
‫أﺳﻢ اﻟﺠﺪول ‪ Department‬ﺛﻢ ﻧﻀﻐﻂ ‪ OK‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫‪17‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﺑﻌﺪھﺎ ﻧﻐﻠﻖ اﻟﺠﺪول‬

‫وﻧﻨﺘﻘﻞ اﻵن ﻟﻌﻤ ﻞ ﺟ ﺪول اﻟﻤ ﺪرس ‪ Teacher‬ﻛﻤ ﺎ ﺳ ﺒﻖ ﺗﻤﺎﻣ ﺎ ﺣﻘ ﻞ ‪ TeacherId‬ﻧﺨﺘ ﺎر ﻃﺒﻘ ﺎ ﻟﻠﺠ ﺪول وﻧ ﻀﻌﮫ‬
‫ﻛﻤﻔﺘﺎح رﺋﯿﺴﻲ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ وﺣﻘ ﻞ ‪ Name‬ﻧﺨﺘ ﺎر ﻃﺒﻘ ﺎ ﻟﺠ ﺪول اﻟﻤ ﺴﺘﻮي اﻟﺜﺎﻟ ﺚ وﻧﺠﻌﻠ ﮫ ﻣﻔﺘﺎﺣ ﮫ ﻣﻤﯿ ﺰ ﻛﻤ ﺎ‬
‫ﺗﻌﻠﻤﻨﺎ وﻟﻜﻦ ﺣﻘﻞ اﻟﻨﻮع ‪ Gender‬ﻋﻠﯿﮫ ﻗﯿ ﺪ ‪ Check‬ﻓﻜﯿ ﻒ ﯾﻜ ﻮن ذﻟ ﻚ ‪ ،‬ﻧ ﻀﻐﻂ ﻋﻠ ﻲ اﻟﺤﻘ ﻞ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ‬
‫ﻧﺨﺘﺎر ‪ Check Constraints‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ‬

‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﻧﻀﻐﻂ ﻣﻨﮭﺎ ﻋﻠﻲ ‪ New‬وﻓﻲ اﻟﺨﺎﻧﺔ‬


‫‪ Constraint Expression‬ﻧﻜﺘﺐ اﻟﺘﻌﺒﯿﺮ اﻟﺨﺎص‬
‫ﺑﻠﻐﺔ ‪ SQL‬ﻟﻠﺤﻔﺎظ ﻋﻠﻲ اﻟﻘﯿﻢ اﻟﺘﻲ ﺗﺪﺧﻞ ﻓﻲ ھﺬا اﻟﺤﻘﻞ‬
‫ﻋﻠﻲ أن ﺗﻜﻮن ‪ F or f or M or m‬ﺑﺪاﺧﻞ)ﻓﻲ( اﻟﺤﻘﻞ‬
‫‪ Gender‬اﻟﻨﻮع وھﺬا اﻟﺘﻌﺒﯿﺮ اﻟﺨﺎص ﺑﺬﻟﻚ‬

‫)'‪Gender In('M','m','F','f‬‬

‫ﺛﻢ ﻧﻜﺘﺐ أﺳﻢ اﻟﻘﯿﺪ ﻓﻲ اﻟﺨﺎﻧﺔ ‪Constraint Name‬‬


‫أو ﻧﺘﺮك اﻻﺧﺘﯿﺎر اﻻﻓﺘﺮاﺿﻲ ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ اﻟﻤﻘﺎﺑﻞ‬
‫وﻧﻀﻐﻂ ‪ Close‬وﻧﺴﺘﻤﺮ ﻓﻲ ﺑﻨﺎء اﻟﺠﺪول ﻓﻨﺄﺗﻲ ﻟﺤﻘﻞ‬
‫اﻟﻤﺮﺗﺐ ‪Salary‬‬

‫‪18‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻓﺤﻘﻞ اﻟﻤﺮﺗﺐ ‪ Salary‬ھﻮ ﺣﻘﻞ ﻧﻮﻋﮫ ‪ Numeric‬ﯾﺤﻤﻞ ‪ ٦‬ﺧﺎﻧﺎت رﻗﻤﯿﺔ ﻣﻨﮭﻢ ﺧﺎﻧﺘﯿﻦ ﻋﺸﺮﯾﺘﯿﻦ ﻓﻜﯿ ﻒ ﯾ ﺘﻢ ذﻟ ﻚ‬
‫ﻧﻀﻐﻂ ﻋﻠﻲ اﻟﺤﻘﻞ وﻣﻦ اﻟﺘﺒﻮﯾﺒﮫ ‪ Column‬ﻓﻲ اﻟﺨﺎﻧﺔ ‪ Precision‬ﻧﻜﺘﺐ ‪ ٦‬وﻓﻲ اﻟﺨﺎﻧﺔ ‪ Scale‬ﻧﻜﺘﺐ ‪ ٢‬ﻛﻤ ﺎ‬
‫ھﻮ ﻣﻮﺿﺢ‬

‫وﺑﻌﺪ ذﻟﻚ وﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ ﺑﺎﻗﻲ اﻟﺤﻘﻮل ‪ Rank‬اﻟﺮﺗﺒ ﺔ اﻟﺠﺎﻣﻌﯿ ﺔ وﺗ ﺎرﯾﺦ اﻟﺘﻌﯿ ﯿﻦ ‪ HireDate‬واﻟﺒﻠ ﺪ‪ City‬وﻟﻜ ﻦ‬
‫اﻟﺤﻘﻞ ‪ DeptWork‬اﻟﻘﺴﻢ اﻟﺬي ﯾﻌﻤﻞ ﺑﮫ اﻟﻤﺪرس ھ ﻮ ﻣﻔﺘ ﺎح ﺧ ﺎرﺟﻲ ﺟﺪوﻟ ﮫ اﻷﺳﺎﺳ ﻲ اﻟﻘ ﺴﻢ ‪Department‬‬
‫ﻓﯿﻤﻜﻨﻨﺎ ﻋﻤﻞ ذﻟﻚ اﻟﻘﯿﺪ ﻣﻨﮭﺎ أو ﻣﻦ ‪ Diagrams‬ﻓﺴﻮف ﻧﺒﻨﻲ ھﺬه اﻟﻌﻼﻗﺔ وﺑﺎﻗﻲ اﻟﻌﻼﻗﺎت ﻣﻦ ھﻨﺎ وﻧﺘﺮك ﻋﻼﻗ ﺔ‬
‫ﻧﺒﻨﯿﮭﺎ ﻣﻦ ﺧﻼل ال‪ Diagrams‬اﻻن ﻟﻌﻤﻞ ھﺬه اﻟﻌﻼﻗ ﺔ ﺑﺎﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ اﻟﺤﻘ ﻞ ﺛ ﻢ‬
‫ﻧﺨﺘﺎر ‪ Relationships‬ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﻛﻤﺎ ﺗﻮﺿﺢ اﻟﺨﻄﻮات ﻧﻀﻐﻂ ﻋﻠﻲ ‪ New‬ﺛﻢ ﻣﻦ‬


‫اﻟﺨﺎﻧﺔ ‪ Primary Key table‬ﻧﺨﺘﺎر اﻟﺠﺪول‬
‫واﻟﺤﻘﻞ وﻣﻦ اﻟﺨﺎﻧﺔ ‪Foreign Key table‬‬
‫ﻧﺨﺘﺎر اﻟﺤﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ وأن ﻟﻢ ﯾﻜﻦ ﺣﻔﻆ‬
‫اﻟﺠﺪول ﺑﺎﺳﻢ ﺣﺘﻰ اﻵن ﻓﺴﻮف ﯾﻈﮭﺮ أﺳﻢ اﻓﺘﺮاﺿﻲ‬
‫وﺑﻌﺪھﺎ ﻓﻲ اﻟﺨﺎﻧﺔ ‪Relationship Name‬‬
‫ﻧﻜﺘﺐ أﺳﻤﺎ ﻟﻠﻌﻼﻗﺔ أو ﻧﺘﺮك اﻻﺳﻢ اﻻﻓﺘﺮاﺿﻲ وﻟﻜﻦ‬
‫ﻣﺎذا ﻋﻦ اﻻﺧﺘﯿﺎرات اﻟﺴﻔﻠﯿﺔ ﻧﻠﺨﺼﮭﺎ ﺑﺎﻟﺠﺪول اﻟﺘﺎﻟﻲ‬

‫‪19‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﯾﻌﻨﻲ‬ ‫اﻷﺧﺘﯿﺎر‬
‫ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت اﻟﺤﺎﻟﯿﺔ ﻣﻊ ﺗﻔﻌﯿﻞ اﻟﻌﻼﻗﺔ‬ ‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫واﺣﺪ أﯾﻀﺎ ھﻨﺎك إذا اﻟﻌﻼﻗﺔ ﺳﻠﯿﻤﺔ ‪ ١ : ١‬وﻟﻌﻤﻞ ذﻟﻚ ﻧﻀﯿﻒ ﻗﯿﺪ اﻟﺘﻤﯿﺰ ‪ Unique‬ﻟﻠﺤﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ ﻧ ﻀﻐﻂ‬
‫ﺑﯿﻤﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﺤﻘﻞ ‪ Manager‬وﻧﺨﺘﺎر ‪ Indexes/Keys‬ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﻧﻀﺒﻂ إﻋﺪادات اﻟﻤﻔﺘﺎح اﻟﻤﻤﯿﺰ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ ﻛﻤﺎ‬


‫ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﺛﻢ ﻧﻀﻐﻂ ‪ Close‬وﺑﻌﺪھﺎ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس‬


‫وﻧﺨﺘﺎر ﺣﻔﻆ ‪ Save‬ﺛﻢ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس‬
‫ﻋﻠﻲ اﻟﺤﻘﻞ ‪ Manager‬ﻧﺨﺘﺎر ‪Relationships‬‬
‫وﻧﻀﺒﻂ اﻹﻋﺪادات اﻟﺨﺎﺻﺔ ﺑﺎﻟﻌﻼﻗﺔ واﻟﻤﻔﺘﺎح‬
‫اﻟﺨﺎرﺟﻲ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ‬

‫وﻻ ﻧﻨﺴﻲ اﺧﺘﯿﺎر اﻟﺠﺪول اﻟﺬي ﯾﺤﻮي اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ أوﻻ ﺛﻢ اﻟﺠﺪول اﻟﺬي ﺑﮫ اﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ ﺛ ﻢ ﺣﻘ ﻞ اﻟﻤﻔﺘ ﺎح‬
‫اﻟﺮﺋﯿﺴﻲ وﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ وﺑﻌﺪھﺎ ﻧﺴﻤﻲ اﻟﻌﻼﻗﺔ ﺑﺎﺳﻢ ﻛﻤﺎ ھ ﻮ ﻣﻮﺿ ﺢ ﺑ ﺎﻟﺨﻄﻮات ﺑﺎﻟ ﺸﻜﻞ اﻟﺘ ﺎﻟﻲ وﻻ ﻧﺨﺘ ﺎر‬
‫أي ‪Cascade‬‬

‫‪21‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻵن ﺗ ﻢ ﻋﻤ ﻞ ﻋﻼﻗﺘ ﯿﻦ وھ ﻢ ﺧﺎﺻ ﯿﻦ ﺑﺎﻟﺠ ﺪوﻟﯿﻦ ‪ Teacher , Department‬ﺣ ﺎن اﻵن وﻗ ﺖ ﻋﻤ ﻞ ﺟ ﺪول‬


‫‪ CollegeDegree‬وﺑﺎﻟﻄﺮﯾﻘﺔ اﻟﻤﻌﺘ ﺎدة ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ ‪ Tables‬وﻧﺨﺘ ﺎر‪ New Table‬وﻣﻨﮭ ﺎ‬
‫ﻧﻘﻮم ﺑﻌﻤﻞ اﻟﺤﻘﻮل اﻟﻼزﻣﺔ ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﻧﻀﺒﻂ اﻹﻋﺪادات ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻛﺎﻟﺘﺎﻟﻲ ﻋﻠﻤﺎ ﺑﺄﻧﮫ أن ﻟﻢ ﯾﻜ ﻦ ﺗ ﻢ اﻟﺤﻔ ﻆ ﺣﺘ ﻰ اﻵن ﻓ ﺴﻮف ﻧ ﺮي أﺳ ﻢ اﻟﺠ ﺪول أي اﺳ ﻢ‬
‫اﻓﺘﺮاﺿﻲ ﺣﺘ ﻰ ﯾ ﺘﻢ اﻟﺤﻔ ﻆ وﺗﻐﯿﯿ ﺮ اﻻﺳ ﻢ وﻟﻌﻤ ﻞ ﻣﻔﺘ ﺎح رﺋﯿ ﺴﻲ ﻛﺤﻘﻠ ﯿﻦ ﻣﻌ ﺎ ﻧ ﻀﻐﻂ ‪ Ctrl‬وﻧﻌﻠ ﻢ ﻋﻠ ﻲ اﻟﺤﻘﻠ ﯿﻦ ﺛ ﻢ‬
‫ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻧﺨﺘﺎر ‪ Set Primary Key‬ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻠﯿﻦ اﻵﺗﯿﯿﻦ‬

‫وﻣﻨﮭﺎ ﻧﺤﻔﻆ اﻟﺠﺪول ﺑﺎﻻﺳﻢ ‪CollegeDegree‬‬

‫و اﻵن ﻧﻨﺘﻘﻞ ﻟﻌﻤﻞ ﺟﺪول اﻟﻄﺎﻟﺐ ‪Student‬‬


‫وھﺬا اﻟﺠﺪول ﺑﺴﯿﻂ ﯾﺤﺘﻮي ﻋﻠﻲ ﻗﯿﺪﯾﻦ وھﻢ ﻣﻔﺘﺎح رﺋﯿﺴﻲ وﻗﯿﺪ ﺗﺤﻘﻖ ﻣﻦ اﻟﻨﻮع وﻗ ﺪ ﺗ ﻢ ﻋﻤﻠ ﮫ ﻣ ﻦ ﻗﺒ ﻞ ﻓ ﻲ ﺟ ﺪول‬
‫اﻟﻤﺪرس ﻧﺘﺒﻊ ﻧﻔﺲ اﻟﺨﻄﻮات ﻟﯿﻜﻮن ﺷﻜﻞ اﻟﺘﺼﻤﯿﻢ اﻟﻨﮭﺎﺋﻲ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ‪:‬‬

‫‪22‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫و اﻵن ﻧﻨﺘﻘﻞ ﻟﻌﻤﻞ ﺟﺪول اﻟﻤﺎدة ‪Subject‬‬


‫وھ ﺬا اﻟﺠ ﺪول ﺑ ﮫ ﻋﻼﻗﺘ ﯿﻦ ﯾﻤ ﺜﻼن ﻓ ﻲ ﻣﻔﺘ ﺎﺣﯿﻦ ﺧ ﺎرﺟﯿﯿﻦ وﻣﻔﺘ ﺎح رﺋﯿ ﺴﻲ ﻟﺤﻘﻠ ﯿﻦ ﻧﺒ ﺪأ ﺑﻌﻤ ﻞ اﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ‬
‫‪ DeptBelong‬ﻟﺮﺑﻂ اﻟﺠﺪول ﺑﺠﺪول اﻟﻘﺴﻢ ﻛﻤﺎ ﺑﺎﻹﻋﺪادات اﻟﺘﺎﻟﯿﺔ‪:‬‬

‫أﻣﺎ اﻟﻌﻼﻗﺔ اﻟﺨﺎﺻﺔ ﺑﺤﻘﻞ ‪ TeacherTaught‬ﻣﻊ ﺟﺪول اﻟﻤﺪرس ﺳﻨﺘﻨﺎوﻟﮭﺎ ﻣﻦ ﺧﻼل اﻟــ ‪Diagrams‬‬

‫‪23‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫و اﻵن ﻣﻊ آﺧﺮ اﻟﺠﺪاول ﺟﺪول اﻟﺪراﺳﺔ ‪Study‬‬


‫اﻟﺠﺪول اﻟﻮﺳ ﯿﻂ ﻟﻔ ﻚ ﻋﻼﻗ ﺔ ﻛﺜﯿ ﺮ ﺑﻜﺜﯿ ﺮ ﻓﻠ ﮫ ﻋﻼﻗ ﺔ ﺑﺠ ﺪول اﻟﻄﺎﻟ ﺐ وﻋﻼﻗ ﺔ ﻣ ﻦ اﻟﻨ ﻮع اﻟﻤﺮﻛ ﺐ ﺑﺠ ﺪول اﻟﻤ ﺎدة أي‬
‫ﺣﻘﻠﯿﻦ ﻣﻔﺘﺎح رﺋﯿﺴﻲ ﻣﻌﺎ ﺳﯿﺘﻢ ﻋﻤﻞ اﻟﻌﻼﻗﺔ ﺑﺠ ﺪول اﻟﻄﺎﻟ ﺐ ﺑﺎﻹﻋ ﺪادات اﻟﻤﻌﺮﻓ ﺔ اﻟﺘﺎﻟﯿ ﺔ وﯾﺰﯾ ﺪ ﻓ ﻲ اﻟﻌﻼﻗ ﺔ اﻟﺨﺎﺻ ﺔ‬
‫ﺑﺠﺪول اﻟﻤﺎدة أﻧﮭﺎ ﺣﻘﻠﯿﻦ ﻛﻤﺎ ﺑﺎﻷﺷﻜﺎل اﻟﺘﺎﻟﯿﺔ ‪:‬‬

‫ﻟﯿﻜﻮن اﻟﺸﻜﻞ اﻟﻨﮭﺎﺋﻲ ﻟﺘﺼﻤﯿﻢ اﻟﺠﺪول ﻛﺎﻟﺘﺎﻟﻲ وﻻ ﻧﻨﺴﻲ ﺣﻘﻞ اﻟﺪرﺟﺔ ‪ Score‬وإﻋﺪاده ﻋﻠﻲ رﻗﻤ ﻲ ‪ ٥‬ﺧﺎﻧ ﺎت ﻣ ﻨﮭﻢ‬
‫ﺧ ﺎﻧﺘﯿﻦ ﻋ ﺸﺮي وأﯾ ﻀﺎ ﻧﺤ ﺪد ﻋﻠ ﻲ اﻟﺜﺎﻟﺜ ﺔ ﺣﻘ ﻮل اﻟﺨﺎﺻ ﺔ ﺑﺎﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﺑﺎﻟ ﻀﻐﻂ ﻣ ﻊ ﻣﻔﺘ ﺎح ‪ Ctrl‬ﺛ ﻢ ﯾﻤ ﯿﻦ‬
‫اﻟﻤﺎوس و اﺧﺘﯿﺎر ‪ Set Primary Key‬ﻛﻤﺎ ﺳﺒﻖ وﻛﺎﻟﺘﺎﻟﻲ ‪:‬‬

‫وﻋﻨﺪ اﻟﺤﻔﻆ ﺳﻮف ﺗﻈﮭﺮ رﺳﺎﻟﺔ ﻛﺎﻟﺘﺎﻟﻲ ﻟﻌﻤﻞ‬


‫اﻟﺘﻌﺪﯾﻼت اﻟﺘﻲ ﺗﻢ ﻋﻠﻲ اﻟﺜﻼث ﺟﺪاول ﻧﺨﺘﺎر‪yes‬‬

‫‪24‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﯾﻤﻜﻦ ﻋﻨﺪ اﻟﻮﻗﻮف ﻋﻠﻲ أي ﺟﺪول واﻟﻀﻐﻂ ﺑﯿﻤﻦ اﻟﻤﺎوس ﺗﻈﮭﺮ ﻟﻨﺎ ﻗﺎﺋﻤﺔ ﯾﻤﻜﻨﻨﺎ ﻣﻦ ﺧﻼﻟﮭﺎ إﻧﺸﺎء ﺟﺪول ﺟﺪﯾﺪ ﻣﻦ‬
‫اﻻﺧﺘﯿﺎر ‪ New Table‬أو اﻟﺘﻌﺪﯾﻞ ﻓﻲ ﺗﺼﻤﯿﻢ اﻟﺠﺪول ﻣﻦ ﺧﻼل اﻻﺧﺘﯿﺎر ‪ Design Table‬أو ﻓﺘﺢ اﻟﺠ ﺪول ﻣ ﻦ‬
‫ﺧ ﻼل ‪ Open Table‬ﺑ ﺄﻛﺜﺮ ﻣ ﻦ ﻃﺮﯾﻘ ﺔ أو ﻋﻤ ﻞ ﻧ ﺴﺦ أو ﻗ ﺺ أو ﻣ ﺴﺢ ‪ Delete‬ﻟﻠﺠ ﺪول اﻟﺤ ﺎﻟﻲ أو ﻋﻤ ﻞ‬
‫‪ Rename‬ﺗﻌﺪﯾﻞ ﻷﺳﻢ اﻟﺠﺪول اﻟﺤﺎﻟﻲ أو رؤﯾﺔ ﺧﺼﺎﺋﺺ وﺗﺼﻤﯿﻢ اﻟﺠﺪول ﻣﻦ ﺧﻼل اﻻﺧﺘﯿﺎر ‪Properties‬‬

‫اﻟﻌﻼﻗﺎت ﻣﻦ ﺧﻼل ‪Diagrams‬‬

‫و اﻵن ﻧﺮﯾﺪ ﻋﻤﻞ ﺷﻜﻞ ﻛﺮﺳﻢ ﺑﯿﺎﻧﻲ ﯾﻤﺜﻞ اﻟﻌﻼﻗﺎت ﻣﺎﺑﯿﻦ اﻟﺠﺪاول ﻣﻦ ﺧﻼل ‪Diagrams‬‬
‫وﻣﻦ ﺧﻼﻟﮫ ﯾﻤﻜﻨﻨﺎ‬
‫ﻋﻤﻞ رﺳﻢ ﺑﯿﺎﻧﻲ ﻟﻠﻌﻼﻗﺎت وإﺿﺎﻓﺔ ﺟﺪاول ﻟﻠﺸﻜﻞ‬
‫ﻋﻤﻞ اﻟﻌﻼﻗﺔ أﺳﺎﺳﺎ ﻣﻦ ﺧﻼﻟﮫ‬
‫ﺗﻨﺴﯿﻖ اﻟﺠﺪاول وأﺷﻜﺎل اﻟﻌﻼﻗﺎت‬

‫ﻧﻀﻐﻂ ﻋﻠﻲ ‪ Diagrams‬ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﻧﺨﺘﺎر ‪ New Database Diagrams‬ﻛﺎﻟﺘﺎﻟﻲ‬

‫‪25‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﻤﻌﺎﻟﺞ اﻟﺨﺎص ﺑﺎﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻓﻨﻀﻐﻂ ‪Next‬‬

‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺗﺘﯿﺢ ﻟﻨﺎ اﺧﺘﯿﺎر اﻟﺠﺪاول اﻟﺘﻲ ﻧﺮﯾﺪھﺎ ﻹﺿﺎﻓﺔ ﻣﻌﻨﺎ إﻟﻲ اﻟﺸﻜﻞ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻲ ﻣﻔﺘ ﺎح ‪ Ctrl‬ﻧﺨﺘ ﺎر ﻛ ﻞ‬
‫اﻟﺠﺪاول اﻟﻤﺮادة ﺛﻢ ﻧﻀﻐﻂ ‪ Add‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﯾﻤﻜ ﻦ اﺧﺘﯿ ﺎر ‪ Add related tables automatically‬ﻟﻺﺿ ﺎﻓﺔ اﻟﺘﻠﻘﺎﺋﯿ ﺔ ﻟﻠﺠ ﺪاول اﻟﻤﺮﺗﺒﻄ ﺔ ﺑﻌﻼﻗ ﺎت‬
‫ﻧﻀﻐﻂ ‪Next‬‬

‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ اﻛﺘﻤﺎل ﺻﻨﻊ اﻟﺸﻜﻞ اﻟﺒﯿﺎﻧﻲ‬


‫ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻧﻀﻐﻂ ﻋﻠﻲ ‪Finish‬‬

‫‪26‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺳﻮف ﯾﻈﮭﺮ ﻟﻨﺎ ﺷﻜﻞ ﺑﯿﺎﻧﻲ ﯾﻤﺜﻞ اﻟﻌﻼﻗﺎت ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﺗﻢ ﺗﻨﺴﯿﻘﮫ ﺑﻌﺾ اﻟﺸﺊ ﻣﻦ ﺧﻼل اﻟﺴﺤﺐ واﻹﺳﻘﺎط أﻣﺎم اﻟﻤﻔﺎﺗﯿﺢ اﻷﺳﺎﺳﯿﺔ ﻟﺘﻜﻮن أﻛﺜ ﺮ وﺿ ﻮﺣﺎ وﻣ ﻦ ﺧ ﻼل ﺑﻌ ﺾ‬
‫ﻟﺘﻤﺜﯿﻞ واﺣ ﺪ وﻋﻼﻣ ﺔ‬ ‫اﻟﺨﯿﺎرات اﻟﺘﻲ ﺗﺴﺎﻋﺪ ﻛﺎﻟﺘﺎﻟﻲ وﻗﺪ ﺗﻼﺣﻆ ﻋﻨﺪ ﻧﮭﺎﯾﺔ ﻃﺮف اﻟﻌﻼﻗﺔ ﯾﻮﺿﻊ ﻋﻼﻣﺔ اﻟﻤﻔﺘﺎح‬
‫ﻟﺘﻤﺜﯿ ﻞ اﻟﻜﺜﯿ ﺮ وھ ﺬا ﻟﺒﯿ ﺎن اﻟﻌﻼﻗ ﺎت وأﻧﻮاﻋﮭ ﺎ وھ ﺬا ﺗﻮﺿ ﯿﺢ ﻟﻜﯿﻔﯿ ﺔ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ ھ ﺬه اﻷدوات‬ ‫ﻣ ﺎ ﻻ ﻧﮭﺎﯾ ﺔ‬
‫اﻟﻤﺴﺎﻋﺪة‬

‫‪27‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫و ﯾﺒﻘﻰ ﻟﻨﺎ ﻋﻼﻗﺔ واﺣﺪة وھﻲ ﻋﻼﻗ ﺔ اﻟﻤ ﺪرس اﻟﻤﻠﻘ ﻦ ﺑ ﯿﻦ ﺟ ﺪول اﻟﻤ ﺎدة وﺟ ﺪول اﻟﻤ ﺪرس وﺳ ﯿﺘﻢ أﻧﺘﺎﺟﮭ ﺎ ﻣ ﻦ ھﻨ ﺎ‬
‫ﻛﺎﻟﺘ ﺎﻟﻲ ﻣ ﻊ ﺳ ﺤﺐ اﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﻣ ﻦ ﺟ ﺪول اﻟ ﺪرس وإﺳ ﻘﺎﻃﮫ ﻋﻠ ﻲ ﺟ ﺪول اﻟﻤ ﺎدة ﻋﻠ ﻲ ﺣﻘ ﻞ اﻟﻤ ﺪرس اﻟﻤﻠﻘ ﻦ‬
‫ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﺳﻮف ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ إﺿﺎﻓﺔ ﻋﻼﻗﺎت ﻛﻤﺎ ﺗﻌﻮدﻧﺎ ﻋﻠﯿﮭﺎ ﻣﻦ ﻗﺒﻞ و ﺑﮭﺎ ﻛﻞ اﻻﺧﺘﯿ ﺎرات اﻟ ﺴﺎﺑﻘﺔ ﻣ ﻊ اﺧﺘﻼﻓ ﺎت ﺷ ﻜﻠﯿﮫ‬
‫ﻃﻔﯿﻔﺔ ﻧﻀﺒﻂ إﻋﺪاداﺗﮭﺎ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﺛﻢ ﻧﻀﻐﻂ ‪OK‬‬

‫وﺑﮭﺬا ﻧﻜﻮن ﻗﺪ أﻧﺘﮭﯿﻨﺎ ﻣﻦ اﻟﺘﺼﻤﯿﻢ اﻟﻨﮭﺎﺋﻲ اﻟﻜﺎﻣﻞ ﻟﻠﻘﺎﻋﺪة‬


‫ﺑﺠﻤﯿﻊ ﻋﻼﻗﺘﮭﺎ ﻟﯿﻜﻮن اﻟﺸﻜﻞ اﻟﻨﮭﺎﺋﻲ ﻟﻠﻤﺨﻄﻂ اﻟﺒﯿﺎﻧﻲ ﻛﺎﻟﺘﺎﻟﻲ‬
‫ﺑﺴﺒﻌﺔ ﻋﻼﻗﺎت ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ‬

‫‪28‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﺑﻌﺪ أﻧﺖ ﺗﻤﺖ اﻹﻋﺪادات ﻛﻤﺎ أردﻧﺎ ﯾﻤﻜﻨﻨﺎ ﺣﻔﻆ ھﺬا اﻟﺸﻜﻞ ﺑﺎﻟﻀﻐﻂ ﻓ ﻲ أي ﻣﻮﺿ ﻊ ﺧ ﺎﻟﻲ ﺑﺎﻟ ﺸﻜﻞ ﺗﻈﮭ ﺮ ﻟﻨ ﺎ اﻟﻘﺎﺋﻤ ﺔ‬
‫اﻟﺘﺎﻟﯿﺔ‬
‫ﻓﯿﻤﻜﻨﻨﺎ اﻟﻮﺻﻮل ﻟﺨﯿﺎرات ﻋﺪﯾﺪة ﻣﺜﻞ إﻧﺸﺎء ﺟﺪول ﺟﺪﯾﺪ أول إﺿﺎﻓﺔ ﺟﺪول ﻣﻮﺟﻮد ﻣﻦ‬
‫ﻗﺒﻞ أو ﺗﺤﺪﯾﺪ ﺣﺠﻢ اﻟﺮؤﯾﺔ أو إﻋﺪادات اﻟﻄﺒﺎﻋﺔ أو اﻟﻜﺜﯿﺮ وﻟﻜﻨﻨﺎ ﻧﻀﻐﻂ ﻋﻠﻲ ﺣﻔـــــــﻆ‬
‫وذﻟﻚ ﻟﺤﻔﻆ ھﺬا اﻟﻤﺨﻄﻂ اﻟﺒﯿﺎﻧﻲ ﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﻤﺮﺑﻊ اﻟﺤﻮاري ﺣﻔﻆ ﺑﺎﺳﻢ ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﻧﻜﺘﺐ أﺳﻢ ﻟﻠﺸﻜﻞ ﺛﻢ ﻧﻀﻐﻂ ‪OK‬‬


‫وﻗﺪ ﺗﻈﮭﺮ رﺳﺎﻟﺔ ﻟﺘﺄﻛﯿﺪ اﻟﺤﻔﻆ ﻓﻲ اﻟﺠﺪاول اﻟﺘﻲ ﺗﻢ ﻋﻠﯿﮭﺎ ﺗﻌﺪﯾﻼت ﻧﻀﻐﻂ ‪Yes‬‬

‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت‬
‫وﺟﺎء اﻵن وﻗﺖ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت داﺧﻞ اﻟﺠﺪول وﻟﯿﺴﺖ اﻟﺒﯿﺎﻧﺎت اﻟﻮﺻﻔﯿﺔ ﻟﻠﺠﺪول وھﻢ أرﺑﻌﺔ ﻋﻤﻠﯿﺎت‬
‫‪Inserting Data‬‬ ‫‪ -١‬إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت‬
‫‪Modify Data‬‬ ‫‪ -٢‬ﺗﻌﺪﯾﻞ ﺑﯿﺎﻧﺎت‬
‫‪Delete Data‬‬ ‫‪ -٣‬ﺣﺬف ﺑﯿﺎﻧﺎت‬
‫‪ -٤‬اﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ‪Selecting Data‬‬
‫‪Query Analyzer‬ﺳﻮف ﻧﺘﻨ ﺎول اﻟ ﺜﻼث ﻧﻘ ﺎط اﻷوﻟ ﻲ وﺳ ﻮف ﻧﺆﺟ ﻞ اﻟﻨﻘﻄ ﺔ اﻟﺮاﺑﻌ ﺔ ﻟﺤ ﯿﻦ اﻟﺤ ﺪﯾﺚ ﻋ ﻦ اﻟـ ـ‬
‫وﻟﻔﺘﺢ اﻟﺠﺪول ﻟﻠﺘﻌﺎﻣﻞ ﻣﻌﮫ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﺠﺪول اﻟﻤﻄﻠﻮب اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺑﯿﺎﻧﺎﺗﮫ ﺑﯿﻤﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر‬
‫أي اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ اﻟﺴﺠﻼت ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘ ﺎﻟﻲ وﺑﻌ ﺪھﺎ ﻟﻨ ﺎ ‪ Return all rows‬وﻣﻨﮭﺎ ﻧﺨﺘﺎر ‪Open Table‬‬
‫اﻟﻘﺪرة ﻋﻠﻲ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺑﯿﺎﻧﺎﺗﮫ ‪:‬‬

‫وﻣﻨﮭﺎ ﺳﻮف ﯾﻈﮭﺮ اﻟﺠﺪول ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫‪29‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫أوﻻ ‪ :‬إﺿﺎﻓﺔ اﻟﺒﯿﺎﻧﺎت‪Inserting Data‬‬


‫ﯾﻤﻜﻨﻨﺎ إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﻣﺒﺎﺷﺮة ﻓﻲ اﻟﺠﺪول ﻣﻦ ﺧﻼل اﻟﻮﻗﻮف ﻋﻠﻲ أول ﺳﻄﺮ ﺧﺎﻟﻲ وﻛﺘﺎﺑﺔ اﻟﺒﯿﺎﻧﺎت ﺑﮫ وذﻟﻚ ﻣ ﻊ‬
‫ﻣﻼﺣﻈﺔ ﻋﺪم إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت ﻓﻲ اﻟﺤﻘﻮل اﻟﺨﺎرﺟﯿﺔ إﻟﻲ ﻓﻲ ﺣﺎﻟ ﺔ ﻣﻠ ﺊ اﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﻟﮭ ﺎ ﺑﺎﻟﺒﯿﺎﻧ ﺎت وﺑﻌ ﺪ ذﻟ ﻚ ﻣﻠ ﺊ‬
‫اﻟﻤﻔﺘ ﺎح اﻟﺨ ﺎرﺟﻲ ﺑﺎﻟﺒﯿﺎﻧ ﺎت اﻟﻤﻤﺎﺛﻠ ﺔ ﻟﻠﺒﯿﺎﻧ ﺎت اﻟﻤﻮﺟ ﻮدة ﻓ ﻲ اﻟﻤﻔﺘ ﺎح اﻷﺳﺎﺳ ﻲ وإﻻ ﺳ ﻮف ﺗﻈﮭ ﺮ رﺳ ﺎﻟﺔ ﺑ ﺎﻹﻋﻼم‬
‫ﺑﺎﻟﺨﻄﺄ ﯾﻤﻜﻨﻨﺎ ﻣﺒﺪﺋﯿﺎ إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﺑﺪون إدﺧﺎل ﺣﻘﻮل اﻟﻤﻔﺎﺗﯿﺢ اﻟﺮﺋﯿﺴﯿﺔ‬

‫واﺧﺘﯿ ﺎر ‪ Insert Into‬ﻛﻤ ﺎ ﺑﺎﻟ ﺸﻜﻞ اﻟﺘ ﺎﻟﻲ أو‬ ‫أو ﺑﺎﻟﻮﻗﻮف ﻋﻠﻲ اﻷﯾﻘﻮﻧ ﺔ ‪Change Query Type‬‬
‫ﻧﺨﺘﺎر ‪ Insert from‬ﻓﻲ ﺣ ﯿﻦ ﻣﻠ ﺊ اﻟﺠ ﺪول ﻣ ﻦ ﺧ ﻼل ﺟ ﺪول ﺛ ﺎﻧﻲ وھ ﺬا ﻓ ﻲ ﺣﺎﻟ ﺔ ﺗ ﺸﺎﺑﮫ اﻟﺒﯿﺎﻧ ﺎت ﻓ ﻲ اﻟﺠ ﺪاول‬
‫ﻧﺨﺘﺎر ‪ Insert into‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬

‫ﺛﻢ إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﺑﮭﺬه اﻟﻄﺮﯾﻘﺔ ﻧﺴﺘﻌﺪ اﻵن ﻟﻤﻠﺊ ﺑ ﺎﻗﻲ اﻟﺠ ﺪاول ﺑﺎﻟﺒﯿﺎﻧ ﺎت ﻛﻤ ﺎ ﻧﺮﯾ ﺪ وﻧﻼﺣ ﻆ رﻓ ﺾ اﻟﻘﺎﻋ ﺪة ﻷي ﺑﯿﺎﻧ ﺎت ﺗﺎﻟﻔ ﺔ ﺣ ﺎول‬
‫ﻣﺜﻼ إدﺧﺎل ﻣﺮﺗﺐ أﻋﻠﻲ ﻣﻦ أرﺑ ﻊ ﺧﺎﻧ ﺎت ﺻ ﺤﯿﺤﺔ ﺳ ﻮف ﯾ ﺮﻓﺾ ﺣ ﺎول إدﺧ ﺎل ﺣ ﺮف ‪ H‬ﻣ ﺜﻼ ﻟﺘﻤﺜﯿ ﻞ اﻟﻨ ﻮع ﺳ ﻮف‬
‫ﯾﺮﻓﺾ ﺣﺎول ﻋﺪم إدﺧﺎل أﺳﻢ ﻟﻠﻤﺪرس ﺳﻮف ﯾﺮﻓﺾ ﺣﺎول إدﺧﺎل رﻗﻢ ﻗ ﺴﻢ ﻏﯿ ﺮ ﻣﻮﺟ ﻮد اﻵن ﺳ ﻮف ﯾ ﺮﻓﺾ أﯾ ﻀﺎ‬
‫وھﺬا ﯾﻀﻤﻦ ﺗﻜﺎﻣﻞ اﻟﺒﯿﺎﻧﺎت وﺻﺤﺘﮭﺎ ﻛﻞ ھﺬا ﻣﻦ ﺧﻼل اﻟﺪﻗﺔ ﻓﻲ ﻓﺮض اﻟﻘﯿﻮد اﻟﺘﻲ ﺗﺤﻜﻢ اﻟﺒﯿﺎﻧﺎت واﻟﺘﻲ ﺗﺤﻜﻢ ﺗﻜﺎﻣ ﻞ‬
‫اﻟﺒﯿﺎﻧﺎت ﺑﯿﻦ اﻟﺠﺪاول‬

‫‪30‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺛﺎﻧﯿﺎ ‪ :‬ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ‪Modify Data‬‬


‫ﯾﻤﻜﻨﻨ ﺎ ﻓ ﺘﺢ اﻟﺠ ﺪول ﺑﺎﻟﻄﺮﯾﻘ ﺔ اﻟﻤﻌﺘ ﺎدة ﺛ ﻢ ﺗﺤﺪﯾ ﺪ اﻟﻘﯿﻤ ﺔ ﺑﺎﻟﺤﻘ ﻞ وﺗﻐﯿﺮھ ﺎ ﺑ ﺼﻮرة ﻣﺒﺎﺷ ﺮة أو ﻣ ﻦ اﻷﯾﻘﻮﻧ ﺔ‬
‫‪ Change Query Type‬وﻧﺨﺘﺎر ﻣﻨﮭﺎ ‪ Update‬وﻧﻌﺪل ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل اﻷﻗﺴﺎم اﻟﺘﻲ ﯾﻌﻤﻞ ﺑﮭ ﺎ اﻟﻤﺪرﺳ ﻮن‬
‫ﺑﻌﺪ ﻣﻠﺊ ﺟﺪول اﻷﻗﺴﺎم‬

‫أو ﺑﺎﻟﻄﺮﯾﻘﺔ اﻟﺜﺎﻧﯿﺔ‬

‫ﺛﺎﻧﯿﺎ ‪ :‬ﺣﺬف ﺑﯿﺎﻧﺎت ‪Delete Data‬‬


‫ﻧﻘﻒ ﻋﻠﻲ اﻟﺤﻘﻞ اﻟﻤﺮاد ﺣﺬﻓﮫ وﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﻧﺨﺘﺎر ‪Delete‬‬
‫وﻣﻦ ھﺬه اﻟﻘﺎﺋﻤﺔ ﯾﻤﻜﻨﻨﺎ اﺧﺘﯿﺎر ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷواﻣﺮ‬

‫اﻷﻣﺮ ‪ run‬ﯾﻨﻔﺬ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم اﻟﺤﺎﻟﯿﺔ وﻓﻲ ﺣﺎﻟﺘﻨﺎ ھﺬه ھﻲ‬


‫اﺧﺘﯿﺎر ‪ Return all rows‬أي اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ اﻟﺒﯿﺎﻧﺎت و‬
‫اﻻﻣﺮ ‪ Clear Results‬ﻣﺴﺢ اﻟﺒﯿﺎﻧﺎت اﻟﺤﺎﻟﯿﺔ ﻣﻦ ﻋﻠﻲ‬
‫اﻟﺸﺎﺷﺔ ﻓﻘﻂ )أي ﻧﺘﯿﺠﺔ اﻻﺳﺘﻌﻼم (‬
‫اﻷواﻣﺮ ‪ First , Last , Next , Previous‬ﻟﻠﺘﻨﻘﻞ ﻋﺒﺮ اﻟﺴﺠﻼت‬
‫اﻷﻣﺮ ‪ Row‬ﺗﺤﺪد ﻣﻦ ﺧﻼﻟﮫ رﻗﻢ اﻟﺼﻒ اﻟﺬي ﺗﺮﯾﺪ اﻟﺬھﺎب إﻟﯿﮫ‬
‫اﻷﻣﺮ ‪ New‬ﯾﻀﻒ ﺳﺠﻞ ﺟﺪﯾﺪ‬
‫اﻷواﻣﺮ ‪ Cut , Copy , Past‬ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺴﺠﻞ ﻛﺎﻣﻞ‬
‫اﻷﻣﺮ ‪ Delete‬ﻟﺤﺬف اﻟﺴﻄﺮ اﻟﺤﺎﻟﻲ‬
‫اﻷﻣﺮ ‪ Properties‬ﺗﻌﺮض ﺧﻮاص ﻟﻼﺳﺘﻌﻼم ﻋﻦ ھﺬا اﻟﺤﻘﻞ‬

‫‪31‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻷﻣﺮ ‪ Show Panes‬ﯾﻌﺮض ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻻﺧﺘﯿﺎرات وھﻢ‬

‫‪ Diagram - 1‬ﻟﻌﺮض رﺳﻢ ﺑﯿﺎﻧﻲ ﻟﻠﺠﺪول ﺑﺤﻘﻮﻟﮫ‬


‫‪ Grid Pane – 2‬ﻟﻌﺮض ﺷﺒﻜﺔ ﻛﺎﻧﺖ ﺗﺴﻤﻲ ﻗﺪﯾﻤﺎ )‪ QBE(Query by Example‬وھﻲ ﺗﺴﺎﻋﺪ ﻓ ﻲ ﺑﻨ ﺎء‬
‫اﻻﺳﺘﻌﻼﻣﺎت ‪.‬‬
‫ﺗﻌﺮض ﺟﻤﻠﺔ ال ‪ SQL‬اﻷﺳﺎﺳﯿﺔ اﻟﻨﺎﺗﺞ ﻋﻨﮭﺎ ھﺬه اﻟﺒﯿﺎﻧﺎت‬ ‫‪SQL -٣‬‬
‫‪ Results -٤‬ﺗﻌﺮض ﺷﺒﻜﺔ ﺑﮭﺎ اﻟﺒﯿﺎﻧﺎت اﻟﻨﺎﺗﺠﺔ ﻣﻦ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم‬

‫وأن ﺗﻢ اﺧﺘﯿﺎرھﻢ ﺟﻤﯿﻌﺎ ﺳﯿﻜﻮن اﻟﺸﻜﻞ ﻛﺎﻟﺘﺎﻟﻲ ‪:‬‬

‫وﻟﻜﻨﻨﺎ اﻵن ﺳﻮف ﻧﺆﺟﻞ اﻟﺤﺪﯾﺚ ﻋﻦ اﻻﺳﺘﻌﻼﻣﺎت وھﺬا ﻷﻧﮭﺎ ﻣﺮﺗﺒﻄﺔ ﺑﻠﻐﺔ اﻟــ ‪ SQL‬اﻟﺘﻲ ﺳﻮف ﻧﺘﻌﺎﻣ ﻞ ﻣﻌﮭ ﺎ ﻣ ﻦ‬
‫‪ Query Analyzer‬وﻓ ﻲ وﻗﺘﮭ ﺎ ﺳ ﻮف ﻧﻨﻔ ﺬ اﻻﺳ ﺘﻌﻼﻣﺎت ﺑ ﺎﻟﻄﺮﯾﻘﺘﯿﻦ ﺑﮭ ﺬه‬ ‫ﺧ ﻼل اﻷداة اﻟﺘ ﻲ ﺗ ﺪﻋﻲ‬
‫اﻟﻄﺮﯾﻘﺔ)اﻟﺸﺒﻜﺔ ( ‪ Grid Pane‬و ﻋﻦ ﻃﺮﯾﻖ اﻟــ ‪Query Analyzer‬‬

‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬


‫‪32‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Backing Up Database , Restoring Database and Data‬‬


‫)‪Transformation Services (DTS‬‬
‫ﻋﻤ ﻞ ﻧ ﺴﺨﺔ اﺣﺘﯿﺎﻃﯿ ﺔ ﻟﻘﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت وﻛﯿﻔﯿ ﺔ اﺳ ﺘﺮﺟﺎﻋﮭﺎ وﻧﻘ ﻞ اﻟﺒﯿﺎﻧ ﺎت ﺑ ﯿﻦ ﻗﻮاﻋ ﺪ‬
‫اﻟﺒﯿﺎﻧﺎت‬
‫أوﻻ ‪ :‬ﻋﻤﻞ ﻧﺴﺨﺔ اﺣﺘﯿﺎﻃﯿﺔ ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪Backing Up Database‬‬

‫وﻷﻧﻨ ﺎ ﻧﺮﯾ ﺪ ﻋﻤ ﻞ ﻧ ﺴﺨﺔ اﺣﺘﯿﺎﻃﯿ ﺔ ﻓﻤ ﻦ اﻟﺘﻔ ﺮع اﻟﺮﺋﯿ ﺴﻲ ‪ Management‬اﻟﺨ ﺎص ﺑ ﺎﻹدارة ﻧﺨﺘ ﺎر ‪Backup‬‬
‫ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ ﻣ ﻦ اﻟﻘﺎﺋﻤ ﺔ ﻧﺨﺘ ﺎر ‪ New Backup Device‬ﻛﻤ ﺎ ﯾﻮﺿ ﺢ ﻣ ﻦ اﻟ ﺸﻜﻞ ﺗﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ‬
‫ﺧﺼﺎﺋﺺ ﻟﻌﻤﻠﯿﺔ اﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ ﻧﺨﺘﺎر ﻣﺴﺎر اﻟﻤﻠﻒ ‪ File Name‬ﻟﻠﻤﻜﺎن اﻟﺬي ﻧﺮﯾﺪه ﻋﻠﻲ اﻟﻘﺮص اﻟﺼﻠﺐ‬

‫وﻣﻦ اﻟﻤﺮﺑﻊ اﻟﺤﻮاري ﻣﻜﺎن اﻟﻨﺴﺦ ﻧﺨﺘﺎر ‪ Folder‬ﻹﺟﺮاء‬


‫ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ ﻓﯿﮫ وﻧﻜﺘﺐ أﺳﻢ ﻟﻤﻠﻒ اﻟﻨﺴﺦ ﻓﻲ اﻟﺨﺎﻧﺔ أﺳـــﻢ‬
‫اﻟﻤﻠﻒ ‪ File Name‬ﺛﻢ ﻧﻀﻐﻂ ‪ OK‬ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜـــــﻞ‬

‫‪33‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺑﻌﺪ اﻟﻀﻐﻂ ﻋﻠﻲ ‪ OK‬ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺧﺼﺎﺋﺺ ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ ﻧﻜﺘﺐ ﻓﻲ اﻟﺨﺎﻧﺔ ‪ Name‬أﺳﻢ اﻟﻤﻠﻒ اﻟﺬي ﻗ ﺪ ﻛﺘﺒﻨ ﺎه‬
‫ﻣﻦ ﻗﺒﻞ ﻓﻲ اﻟﺨﺎﻧﺔ ‪ File Name‬وﻧﻀﻐﻂ ‪ OK‬و اﻵن أﺻﺒﺢ ﻟﺪﯾﻨﺎ ﻣﻠﻒ ﯾﻤﺜﻞ ﻣﻠﻒ اﻟــ ‪ Data File‬ﻛﻤ ﺎ ﻻﺣﻈﻨ ﺎ‬
‫ﻋﻨﺪ إﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وھﺬا اﻟﻤﻠﻒ ﯾﻤﻜﻦ ﻧﺴﺦ أي ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻓﯿﮫ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬

‫وﻟﻜﻦ ﻣﺎذا ﻋﻦ اﻟﻤﻠﻒ اﻟﺜﺎﻧﻲ اﻟﺬي ﻛ ﺎن ﯾ ﺴﻤﻲ ‪ Transaction Log‬اﻟﻤﺨ ﺘﺺ ﺑﺤﺮﻛ ﺔ ﺑ ﺎﻷداء اﻟﺨﺎﺻ ﺔ ﺑﺎﻟﻘﺎﻋ ﺪة‬
‫ﺳ ﻮف ﻧﺒﻨ ﻲ ﻟ ﮫ ﻣﻠ ﻒ ﺑ ﻨﻔﺲ اﻟﻄﺮﯾﻘ ﺔ اﻟ ﺴﺎﺑﻘﺔ ﻧﻘ ﻒ ﻋﻠ ﻲ ‪ Backup‬وﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ ﻧﺨﺘ ﺎر ‪New‬‬
‫‪ Backup‬وﻧﻜﺘ ﺐ أﺳ ﻢ اﻟﻤﻠ ﻒ ﻣﺒﺎﺷ ﺮة وﻟﻜ ﻦ ﻋﻠ ﻲ أن ﯾﻜ ﻮن ﻣ ﺜﻼ أﺳ ﻢ اﻟﻤﻠ ﻒ‬ ‫‪Device‬‬
‫‪ SchoolBackupLog‬ﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪ Name‬وﺳ ﯿﻜﺘﺐ ھ ﻮ ﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪ File Name‬اﻟﻤ ﺴﺎر اﻟ ﺴﺎﺑﻖ وأﺳ ﻢ‬
‫اﻟﻤﻠﻒ اﻟﺠﺪﯾﺪ ﺑﺎﻣﺘﺪاد ‪ __.BAK‬أﺿﻐﻂ ﻋﻠﻲ ‪ OK‬ﺳﻮف ﯾﻈﮭﺮ ﻓﻲ اﻟﺨﺎﻧﺔ ‪ Backup‬ﻛﻤﺎ ﯾﺘﻀﺢ ھﺬا ﻣﻦ ﺧﻼل‬
‫اﻟﺸﻜﻠﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ ‪:‬‬

‫‪34‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻛﺎﻧﺖ ھﺬه ھﻲ ﻋﻤﻠﯿﺔ ﺗﺠﮭﯿﺰ ﻣﻠﻔ ﺎن ﻟﯿﻘﻮﻣ ﺎ ﺑﺎﺳﺘ ﻀﺎﻓﺔ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﻧﺮﻏ ﺐ ﻓ ﻲ ﻧ ﺴﺨﮭﺎ اﺣﺘﯿﺎﻃﯿ ﺎ اﻵن ﯾﻤﻜﻨﻨ ﺎ‬
‫ﺗﺤﺪﯾﺪ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﺮﯾﺪ ﻧﺴﺨﮭﺎ ﻋﻦ ﻃﺮﯾ ﻖ اﻟ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﺛ ﻢ اﺧﺘﯿ ﺎر ‪Backup a Database‬‬
‫ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﻤﺮﺑﻊ اﻟﺨﺎص ﺑﺎﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ‬

‫ﻓﻲ اﻟﺨﺎﻧﺔ ‪ Database‬ﻧﺨﺘﺎر ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬


‫ﻓﻲ اﻟﺠﺰء ‪Backup‬‬
‫‪Database-Complete‬‬
‫ﻧﺴﺦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻛﺎﻣﻠﺔ )ﻧﺨﺘﺎرھﺎ(‬
‫‪Database-differential‬‬
‫ﻧﺴﺦ اﻟﺤﺪﯾﺚ أن ﻛﺎن ھﻨﺎك ﻧﺴﺦ ﻗﺪﯾﻢ‬
‫‪Transaction Log‬‬
‫ﻧﺴﺦ ﻣﻠﻒ اﻟﺨﺎص ﺑﺄداء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻓﻘﻂ‬
‫‪File and Filegroup‬‬
‫ﺳﻮف ﺗﺨﺘﺎر ﻣﻨﮫ ﻣﻠﻒ اﻟﺒﯿﺎﻧﺎت اﻟﺬي ﺗﺮﯾﺪه ﻓﻘﻂ‬

‫ﻓﻲ اﻟﺠﺰء ‪Destination‬‬


‫ﻧﺤﺪد ﺑﮫ اﻟﻤﻜﺎن اﻟﻤﻘﺼﻮد ﻧﻀﻐﻂ ﻋﻠﻲ ‪Add‬‬
‫ﺛﻢ ﻧﺨﺘﺎر ﻣﻦ ﺷﺎﺷﺔ ﺗﺤﺪﯾﺪ اﻟﻤﻜﺎن اﻟﻤﻘﺼﻮد‬
‫‪ Backup Device‬ﺳﻮف ﯾﻈﮭﺮ ﻟﻨﺎ اﻟﻤﻠﻒ‬
‫اﻟﺬي ﺗﻢ ﻋﻤﻠﮫ ﻧﻀﻐﻂ ﻋﻠﻲ ‪OK‬‬

‫ﻓﻲ اﻟﺠﺰء ‪Overwrite‬‬


‫اﻻﺧﺘﯿﺎر اﻷول ﻟﻺﺿﺎﻓﺔ ﻟﻤﻨﻄﻘﺔ اﻟﻨﻘﻞ‬
‫اﻻﺧﺘﯿﺎر اﻟﺜﺎﻧﻲ ﻟﻨﻘﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺠﺪﯾﺪة ﻣﻜﺎن اﻟﻘﺪﯾﻤﺔ‬
‫اﻟﺠﺰء ‪ Schedule‬اﻟﺨﺎص ﺑﺠﺪوﻟﺔ ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ‬
‫ﻓﻤﻦ ﺧﻼﻟﮫ ﯾﻤﻜﻨﻨﺎ ﺿﺒﻂ أﻋﺪادات ﻟﻌﻤﻞ ﻧﺴﺦ ﺗﻠﻘﺎﺋﻲ‬
‫ﻣﺤﺪد ﺑﻮﻗﺖ ﻣﺜﻼ واﺧﺘﯿﺎرات أﺧﺮي ﻛﺜﯿﺮة‪.‬‬
‫ﻧﺨﺘﺎر ﻣﺎ ﻧﺮﯾﺪ ﺛﻢ ﻧﻀﻐﻂ ‪OK‬‬

‫‪35‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻓﺴﻮف ﺗﻨﺘﻈﺮ ﻗﻠﯿﻼ ﺣﺘﻰ ﯾﺘﻢ ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ وﺑﻌﺪھﺎ رﺳﺎﻟﺔ ﺗﻔﯿﺪ ﺑﺈﺗﻤﺎم ﻋﻤﻠﯿﺔ اﻟﻨﺴﺦ ﻛﻤﺎ ﺑﺎﻷﺷﻜﺎل اﻟﺘﺎﻟﯿﺔ‬

‫وھﻜﺬا أﺻﺒﺢ ﻟﺪﯾﻨﺎ ﻣﻠﻒ ﻧﺴﺦ اﺣﺘﯿﺎﻃﻲ ﺑﮫ اﻟﺒﯿﺎﻧﺎت ﻣﺆﻣﻨﺔ ﻛﻤﺎ ھﻲ اﻵن ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬

‫ﯾﻤﻜﻨﻨﺎ اﻵن ﺣﺬف أي ﺑﯿﺎﻧﺎت أو أي ﺟﺪول ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻟﻨﺮي ﻛﯿﻔﯿﺔ‬
‫اﺳﺘﺮﺟﺎﻋﮫ ﻣﻦ ھﺬا اﻟﻤﻠﻒ اﻟﺨﺎص ﺑﺎﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ‬

‫ﺛﺎﻧﯿﺎ ‪ :‬ﻛﯿﻔﯿﺔ اﺳﺘﺮﺟﺎع ﻧﺴﺨﺔ اﺣﺘﯿﺎﻃﯿﺔ ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪Restoring Database‬‬

‫ﻣﻦ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﻟﻤﺪرﺳﺔ ﻧﺨﺘﺎر ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﺟﺪول اﻟﺸﮭﺎدات اﻟﺠﺎﻣﻌﯿﺔ ‪ CollegeDegree‬وﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ‬
‫اﻟﻤﺎوس وﻧﺨﺘﺎر ‪ Delete‬ﻟﺤﺬﻓﮫ ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﻟﺘﺄﻛﯿﺪ اﻟﺤﺬف ﻧﻀﻐﻂ ﻣﻨﮭﺎ ‪ Drop All‬ﻛﻤﺎ ﯾﻠﻲ‬

‫ﻓﻤﻦ اﻟﻤﻤﻜﻦ أن ﺗﻈﮭﺮ أﺧﻄﺎء أﺣﯿﺎﻧﺎ ﺑﺴﺒﺐ اﻟﻌﻼﻗﺎت وﻟﻜ ﻦ اﻵن ﻟ ﻢ ﯾﻌ ﺪ ھ ﺬا اﻟﺠ ﺪول ﻣﻮﺟ ﻮدا ﻓﻨﺮﯾ ﺪ اﺳ ﺘﺮﺟﺎﻋﮫ ﻣ ﻦ‬
‫ﻣﻠ ﻒ اﻟﻨ ﺴﺦ اﻻﺣﺘﯿ ﺎﻃﻲ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت ﺛ ﻢ ‪ All Tasks‬وﻣﻨﮭ ﺎ ‪Restore‬‬
‫‪Database‬‬

‫‪36‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ اﺳﺘﺮﺟﺎع ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻧﺨﺘﺎر ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤ ﺴﺘﺨﺪﻣﺔ ﻛﻤ ﺎ ﺑﺎﻟ ﺸﻜﻞ ﺛ ﻢ ﻧ ﻀﻐﻂ ‪ OK‬ﺳ ﯿﺒﺪأ ﻓ ﻲ‬
‫اﻟﺘﺤﻤﯿﻞ ﺣﺘﻰ ﯾﻈﮭﺮ ﻟﻚ ﺷﺎﺷﺔ ﺗﻔﯿﺪ ﺑﺈﺗﻤﺎم اﻟﻌﻤﻠﯿﺔ ﻧﻀﻐﻂ ﻋﻠﯿﮭﺎ ‪ OK‬ﻛﻤﺎ ﺗﻮﺿﺢ اﻷﺷﻜﺎل اﻟﺘﺎﻟﯿﺔ‬

‫ﺳﻮف ﯾﺘﻢ اﺳﺘﺮﺟﺎع اﻟﺠﺪول ﻗﺪ ﺗﺤﺘﺎج ﻟﻠﻮﻗﻮف ﻋﻠﻲ اﻟﺒﻨﺎء اﻟﺸﺠﺮي واﻟﻀﻐﻂ ‪ F5‬أو ﻏﻠﻖ وﻓﺘﺢ ‪SQL Server‬‬
‫ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﺛﺎﻟﺜﺎ ‪ :‬ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ﺑﯿﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺧﻼل اﻷداة‬


‫)‪Data Transformation Services (DTS‬‬
‫ﺗﺘﻤﯿﺰ ھﺬه اﻷداة ﺑﺎﻟﺘﺤﻮﯾﻞ ﻣﻦ واﻟﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﻠﻔﺔ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﺳﻮف ﻧﺨﺘﺎر أن ﻧﺤﻮل ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧ ﺎت‬
‫اﻟﺘﻲ أﻧﺸﺄﻧﮭﺎ أﻟﻲ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ‪ Access‬ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل‬
‫ﻣ ﻦ اﻟﺘﻔ ﺮع اﻷﺳﺎﺳ ﻲ ‪ Data Transformation Services‬ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ ‪Local‬‬
‫‪ Packages‬وﻧﺨﺘﺎر ‪New Package‬‬

‫‪37‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﻣﻨﮭ ﺎ ﺗﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ ﻧﺨﺘ ﺎر ﻣ ﻦ اﻟﺠﺎﻧ ﺐ اﻷﯾ ﺴﺮ ﻣﻨﮭ ﺎ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﻧﺮﯾ ﺪ أن ﻧﺤ ﻮل إﻟﯿﮭ ﺎ وھ ﻲ اﻵن‬
‫‪ Access‬أو ﻣ ﻦ ﻗﺎﺋﻤ ﺔ ‪ Connection‬ﺛ ﻢ ﻧﺨﺘ ﺎر ‪ Microsoft Access‬ﻓﺘﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ ﺧ ﺼﺎﺋﺺ‬
‫اﻻﺗ ﺼﺎل ﻋﻠ ﻲ أن ﻧﻜ ﻮن ﻗ ﺪ إﻧ ﺸﺎءﻧﺎ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ﻓﺎرﻏ ﺔ ﻣ ﻦ ﺧ ﻼل ‪ Access‬وﻧﺨﺘﺎرھ ﺎ ﻣ ﻦ اﻟﺨﺎﻧ ﺔ ‪File‬‬
‫‪ Name‬ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻔﺎرﻏﺔ أو ﻧﻜﺘﺐ اﻟﻤﺴﺎر ﺛﻢ ﻧﻀﻐﻂ ‪ OK‬ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ‬

‫ﻓﯿﺼﺒﺢ اﻟﺸﻜﻞ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﺛﻢ ﻧﺨﺘﺎر ﻣﻦ اﻟﺠﺎﻧﺐ اﻷﯾﻤﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻷﺻﻠﯿﺔ اﻟﺘﻲ ﺳﻮف ﯾﺤﻮل ﻣﻨﮭ ﺎ وھ ﻲ اﻵن‬
‫ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ‪ SQL Server‬أو ﻣ ﻦ ﻗﺎﺋﻤ ﺔ ‪ Connection‬ﺛ ﻢ ﻧﺨﺘ ﺎر ‪Microsoft OLE DB‬‬
‫‪ Provider for SQL Server‬ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﻧﺨﺘﺎر ‪ new Connection‬وﻧﺨﺘﺎر اﻟﻘﺎﻋﺪة‬


‫اﻟﻤﻘﺼﻮدة اﻷﺧﺬ ﻣﻨﮭﺎ ﻣﻦ ‪Data Source‬‬
‫وﻧﺤﺪد اﻟﺨﺎدم ﻣﻦ ‪Server‬‬
‫وﻧﺨﺘﺎر ﻧﻈﺎم اﻟﺼﻼﺣﯿﺎت‬
‫ﺛﻢ ﻧﺨﺘﺎر ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻧﺮﯾﺪ أن ﻧﺤﻮﻟﮭﺎ‬
‫ﻣﻦ ‪ database‬وﻣﻦ اﻟﺰر ‪Advanced‬‬
‫ﯾﻤﻜﻨﻨﺎ اﻟﺘﺤﻜﻢ ﻓﻲ اﻟﻤﺰﯾﺪ ﻣﻦ اﻟﻌﻤﻠﯿﺎت اﻟﺪﻗﯿﻘﺔ‬

‫‪38‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻧﺤﺪد ﻣﻨﮫ أوﻻ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮب اﻟﺘﺤﻮﯾﻞ إﻟﯿﮭﺎ وھﻨﺎ ھﻲ ‪ Access‬ﺛ ﻢ اﻟ ﻀﻐﻂ ﻋﻠ ﻲ‬
‫ﻣﻔﺘﺎح ‪ Ctrl‬واﺧﺘﯿﺎر ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮب ﺗﺤﻮﯾﻠﮭﺎ وھﻲ ھﻨﺎ ‪ SQL Server‬ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﯿﮭﻢ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس‬
‫ﻋﻠﯿﮭﻢ و ﻧﺨﺘﺎر ‪ Transform Data Task‬ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻣﻊ ﻣﺮاﻋ ﺎة اﻟﺘﺮﺗ ﺐ ﻓ ﻲ اﻻﺧﺘﯿ ﺎر اﻟﻤ ﺬﻛﻮر‬
‫ﺳﻮف ﯾﻈﮭ ﺮ ﺧ ﻂ ﺑ ﮫ ﺳ ﮭﻢ ﻣﺘﺠ ﮫ إﻟ ﻲ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﺗﺮﯾ ﺪ اﻟﺘﺤﻮﯾ ﻞ إﻟﯿﮭ ﺎ وان ﻟ ﻢ ﯾﻜ ﻦ ﻓﺘﻜ ﻮن ﻗ ﺪ أﺧﻄ ﺄت ﻓ ﻲ‬
‫اﻟﺘﺮﺗﯿﺐ اﻟﺴﺎﺑﻖ ﺷﺮﺣﮫ ﻛﻤﺎ ﺗﻮﺿﺢ اﻷﺷﻜﺎل اﻟﺘﺎﻟﯿﺔ ‪:‬‬

‫ﻧﻀﻐﻂ ﺿﻐﻂ ﻣﺰدوج ﻋﻠﻲ اﻟﺨﻂ اﻟﻮاﺻﻞ ﺑﯿﻦ اﻟﻘﺎﻋﺪﺗﯿﻦ ﻓﯿﻈﮭﺮ ﻣﺎ ﯾﻠﻲ ‪:‬‬
‫ﺷﺎﺷﺔ ﺧﺼﺎﺋﺺ ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﺠﺰء ‪Table/View‬‬
‫ﻧﺨﺘ ﺎر اﻟﺠ ﺪول اﻷول ﺛ ﻢ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ ‪ Preview‬ﻟﺮؤﯾ ﺔ ﺑﯿﺎﻧ ﺎت اﻟﺠ ﺪول ﻛﺎﻟ ﺸﻜﻞ اﻟﺘ ﺎﻟﻲ واﻟ ﻀﻐﻂ ﻋﻠ ﻲ‬
‫‪Destination‬‬
‫ﺳﺘﻈﮭﺮ أﻛﻮد إﻧﺸﺎء ﺟﺪول أو أﺿﻐﻂ‬
‫ﻋﻠﻲ زر ‪ Create‬ﻟﺮؤﯾﺘﮭﺎ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﻣﻦ اﻟﺘﺒﻮﯾﺐ ‪ Transformations‬ﻧﺄﺗﻲ ﻓﻲ اﻟﺨﺎﻧﺔ ‪ Name‬وﻧﺨﺘﺎر ‪DTSTransformatio__1‬‬


‫وھﺬا ﻹﺗﻤﺎم ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺠﺪول ﺛﻢ ﻧﻀﻐﻂ ‪ OK‬ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ‪:‬‬

‫‪39‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﺑﻌﺪ ذﻟﻚ ﻧﻀﻐﻂ ﻋﻠﻲ اﻷﯾﻘﻮﻧﺔ ‪Execute‬‬


‫ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ اﻟﺸﺎﺷﺔ اﻟﺘﺎﻟﯿﺔ ﺑﮭﺎ رﺳﺎﻟﺔ ﺗﻔﯿﺪ ﺑﺎﻧﺘﻘﺎل اﻟﺒﯿﺎﻧﺎت ﺑﻨﺠﺎح ﻧﻀﻐﻂ ‪ Ok‬ﺛﻢ ‪ Done‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬

‫وﻓﻲ ھﺬا اﻟﻮﻗﺖ ﻗﺪ أﻧﺘﻘﻞ اﻟﺠﺪول ﺑﺒﯿﺎﻧﺎﺗﮫ إﻟﻲ اﻟﻘﺎﻋﺪة أﻛﺴﺲ‬


‫ﻧﻜﺮر ﻣﻦ أول اﻟﻀﻐﻂ ﻣﺮﺗﯿﻦ ﻋﻠﻲ اﻟﺨــــﻂ اﻟﻮاﺻــــــﻞ ﺑﯿــ ﻦ‬
‫اﻟﻘﺎﻋﺪﺗﯿﻦ ﻓﺘﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺧﺼﺎﺋﺺ ﻧﻘـــــﻞ اﻟﺒﯿﺎﻧــﺎت ﻣــﻦ‬
‫اﻟﺠﺰء ‪ Table/View‬ﻧﺨﺘﺎر اﻟﺠﺪول اﻟﺬي ﯾﻠﯿﮫ ﺛﻢ ﻣﻦ‬
‫اﻟﺘﺒﻮﯾﺐ ‪ Destination‬ﻧﻀﻐﻂ ﻋﻠﻲ اﻟﺰر ‪Create‬‬
‫ﺛﻢ ‪ OK‬وﻣﻦ اﻟﺘﺒﻮﯾﺐ ‪ Transformation‬ﻧﻀﻐﻂ ﻋﻠﯿﮫ‬
‫ﺗﻈﮭﺮ ﻟﻨﺎ اﻟﺮﺳﺎﻟﺔ اﻟﺘﺎﻟﯿﺔ‬

‫اﻻﺧﺘﯿﺎر اﻷول ﻣﻨﮭﺎ ‪ 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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وھﺎ ھﻲ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﻷﻛﺴﺲ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﺑﺎﻟﺠﺪاول وﺑﯿﺎﻧﺎﺗﮭﺎ‬

‫وﺑﻌﺪ ذﻟﻚ ﻋﻨﺪ ﻏﻠﻖ اﻟـ ‪ DTS Package‬ﺳﻮف ﯾﺴﺄل ﻋ ﻦ رﻏﺒﺘ ﻚ ﻓ ﻲ ﺣﻔ ﻆ ھ ﺬه اﻟﺘﻐﯿ ﺮات أﺿ ﻐﻂ ﻧﻌ ﻢ وﺑﻌ ﺪھﺎ‬
‫ﺳ ﻮف ﺗﻈﮭ ﺮ ﻟ ﻚ ﺷﺎﺷ ﺔ ﻛﺎﻟﺘ ﺎﻟﻲ ﻧﻜﺘ ﺐ ﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪ Package Name‬أﺳ ﻢ اﻟﻤﻠ ﻒ اﻟﺨﺎﻧ ﺔ ‪ Location‬ﻧﺨﺘ ﺎر‬
‫ﻣﻨــــــــــ ـﮭﺎ ‪ SQL Server‬وﺑﺈﻣﻜﺎﻧﻨ ﺎ اﺧﺘﯿ ﺎر ‪ Meta data Services‬أو‪ Visual Basic File‬أﻛﺜ ﺮ‬
‫وﻛﻠﮭﺎ ﺧﺪﻣﺎت ﻣﺘﺎﺣﺔ ﻟﻚ ﻋﻠﻲ أﺳﺎس أﻋــــﺎدة ﺗﺸﻐﻠﮭﺎ ﻣﺮة أﺧﺮي ﺑﺴﮭﻮﻟﺔ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻓﺘﻈﮭﺮ اﻟــ ‪ Package‬ﻛﺎﻟﺘﺎﻟﻲ‬

‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬


‫‪41‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻷداة ‪Query Analyzer‬‬


‫ﻟﻐﺔ ﺗﻌﺮﯾﻒ اﻟﺒﯿﺎﻧﺎت )‪Data Definition Language(DDL‬‬

‫ﻓﺘﺢ اﻟﺒﺮﻧﺎﻣﺞ‬

‫ﻣﻦ ‪ Start‬ﺛﻢ ‪ Microsoft SQL Server‬ﺛﻢ‬


‫‪Query Analyzer‬‬
‫ﻛﻤﺎ ﯾﻮﺿﺢ اﻟﺸﻜﻞ‬

‫ﻓﺘﻜﻮن اﻟﺸﺎﺷﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﺧﺎﺻﺔ ﺑﺎﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪SQL Server‬‬


‫وﺑﮭﺎ أﻧﻈﻤﺔ اﻟﺼﻼﺣﯿﺎت ﻧﺨﺘﺎر ﻣﻨﮭﺎ اﻵن ‪Windows‬‬
‫‪ Authentication‬ﻟﺤﯿﻦ اﻟﺤﺪﯾﺚ ﻋﻦ اﻟﺼﻼﺣﯿﺎت‬
‫وﻓﻲ اﻟﺨﺎﻧﺔ ‪ SQL Server‬ﻧﻀﻊ ‪ .‬أو أﺳﻢ اﻟﺤﺎﺳﺐ‬
‫اﻟﺤﺎﻟﻲ ﻹﺗﻤﺎم ﻋﻤﻠﯿﮫ اﻻﺗﺼﺎل ﺑﺎﻟﻘﺎﻋﺪة اﻟﻤﻮﺟﻮدة ﻋﻠﻲ‬
‫ﺣﺎﺳﺒﻚ اﻟﺸﺨﺼﻲ ﺛﻢ ﻧﻀﻐﻂ ‪OK‬‬
‫ﻓﺘﻜﻮن اﻟﺸﺎﺷﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﻓﻨﺴﺘﻄﯿﻊ ﻛﺘﺎﺑﺔ أواﻣﺮ ‪ SQL‬ﺑﮭﺎ وﺗﻨﻔﺬھﺎ‬

‫‪42‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻟﻐﺔ ﺗﻌﺮﯾﻒ اﻟﺒﯿﺎﻧﺎت )‪Data Definition Language(DDL‬‬


‫أوﻻ ‪ :‬ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت‬
‫‪ -١‬إﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪Create Database‬‬
‫‪ -٢‬ﺣﺬف ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪Delete Database‬‬
‫‪ -١‬ﻹﻧﺸﺎء ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ﺟﺪﯾ ﺪة ﻧﻜﺘ ﺐ ﻛﻠﻤ ﺔ ‪ Create Database‬وﺑﻌ ﺪھﺎ أﺳ ﻢ اﻟﻘﺎﻋ ﺪة ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل‬
‫‪ SchoolQA‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻲ ‪ F5‬أو اﻹﯾﻘﻮﻧﺔ‬

‫وﺳﻮف ﺗﻼﺣﻆ ﻓﻲ اﻟﺠﺰء اﻟﺴﻔﻠﻲ ‪ Messages‬ﻇﮭ ﻮر رﺳ ﺎﻟﺘﯿﻦ ﺗﺨ ﺺ واﺣ ﺪة ال ‪ Data File‬واﻟﺜﺎﻧﯿ ﺔ ﺗﺨ ﺺ‬


‫‪ Transaction Log‬ﻛﻤ ﺎ رﺋﯿﻨ ﺎ ﻣ ﻦ ﻗﺒ ﻞ وﯾﻤﻜﻨﻨ ﺎ اﻟ ﻀﻐﻂ ﻋﻠ ﻲ ﻣ ﺴﺘﻌﺮض اﻟﻜﺎﺋﻨ ﺎت ‪Object Browser‬‬
‫أو ﺑﺎﻟ ﻀﻐﻂ ‪ F8‬أوﻣ ﻦ ﻗﺎﺋﻤ ﺔ ‪ Tools‬ﺛ ﻢ ‪ Object Browser‬ﺛ ﻢ‬ ‫ﻣ ﺴﺘﻌﺮض اﻟﻜﺎﺋﻨ ﺎت ﻣ ﻦ اﻹﯾﻘﻮﻧ ﺔ‬
‫‪ Show/Hide‬ﻟﯿﻜﻮن اﻟﻌﺮض ﻛﺎﻟﺘﺎﻟﻲ ورؤﯾﺔ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬

‫وﻗﺪ ﻧﺤﺘﺎج ﻛﺜﯿﺮ ﻟﻠﻮﻗﻮف ﻓﻲ ال ‪ Object Browser‬ﺛﻢ اﻟﻀﻐﻂ ﻋﻠﻲ ‪ F5‬ﻟﺮؤﯾﺔ اﻟﺘﻐﯿﺮات‬
‫‪ -٢‬ﻟﺤﺬف ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻧﻜﺘﺐ ‪ Drop Database‬وﺑﻌﺪھﺎ أﺳﻢ اﻟﻘﺎﻋﺪة اﻟﻤﺮاد ﺣ ﺬﻓﮭﺎ ﺛ ﻢ ﻧﺤ ﺪدھﺎ ﺑﺎﻟﻤ ﺎوس ﺛ ﻢ‬
‫اﻟﻀﻐﻂ ‪ F5‬ﻟﺤﺬف اﻟﻘﺎﻋﺪة ﻛﺎﻟﺘﺎﻟﻲ‬

‫‪43‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﯾﻤﻜﻨﻨ ﺎ ﺣﻔ ﻆ ھ ﺬه اﻷواﻣ ﺮ ﻓ ﻲ ﻣﻠ ﻒ ﺧ ﺎرﺟﻲ ﻣ ﻦ ﺧ ﻼل ﻗﺎﺋﻤ ﺔ ‪ File‬ﺛ ﻢ ‪ Save as‬وﻧﺨﺘ ﺎر اﻟﻤﻜ ﺎن وﻧﻜﺘ ﺐ أﺳ ﻢ‬


‫اﻟﻤﻠﻒ وﺳﯿﺘﻢ ﺣﻔﻈﮫ ﻛﻤﻠﻒ ﺑﺎﻣﺘﺪاد ‪ SQL‬ﯾﻤﻜﻨﻚ اﺳﺘﺪﻋﺎءه ﻣﺴﺘﻘﺒﻼ وھﺬا ﻣﻊ ﻛﻞ اﻷواﻣ ﺮ اﻟﺘﺎﻟﯿ ﺔ وﻟﻔ ﺘﺢ ﻣﻠ ﻒ ﺟﺪﯾ ﺪ‬
‫ﻟﻜﺘﺎﺑﺔ أواﻣﺮ ﺟﺪﯾﺪة ﯾﻤﻜﻨﻚ ذﻟﻚ ﻣﻦ ﻗﺎﺋﻤﺔ ‪ File‬ﺛﻢ ‪ New‬ﺛﻢ اﺧﺘﯿﺎر ﻣﺎ ﺗﺮﯾ ﺪ أو ﺑﺎﻟﻄﺮﯾﻘ ﺔ اﻟﺘﺎﻟﯿ ﺔ واﺧﺘﯿ ﺎر ‪Blank‬‬
‫‪ Query window‬ﻛﻤﺎ ﯾﻤﻜﻦ اﺧﺘﯿﺎر أي اﻻﺧﺘﯿﺎرات اﻻﺧﺮي ﻟﻈﮭﻮر ﺑﻌﺾ اﻷواﻣﺮ اﻟﺠﺎھﺰة اﻟﻤﺴﺎﻋﺪة ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﺳﯿﻈﮭﺮ ﻟﻚ ﻣﻠﻒ ﯾﻤﻜﻨﻚ ﻣﻦ ﺧﻼﻟﮫ ﻛﺘﺎﺑﺔ أواﻣﺮ ﺟﺪﯾﺪة وﺣﻔﻈﮭﺎ‬


‫وھﻜﺬا ﯾﻤﻜﻨﻚ ﺗﻨﺴﯿﻖ اﻟﻌﻤﻞ ﻋﻠﻲ أﻛﺜﺮ ﻣﻦ ﻣﻠﻒ واﻟﺮﺟﻮع إﻟﻲ‬
‫أي ﻣﻠﻒ إذا ﻟﺰم اﻷﻣﺮ ﻓﺄﺣﺮص ﻋﻠﻲ ﺣﻔﻆ اﻟﻌﻤﻞ داﺋﻤﺎ‬

‫وﻟﺘﻌﺪﯾﻞ أﺳﻢ اﻟﻘﺎﻋﺪة ﻧﺴﺘﺨﺪم اﻷﻣﺮ اﻟﺘﺎﻟﻲ‬


‫اﻻﺳﻢ اﻟﻘﺪﯾﻢ أوﻻ ﺛﻢ اﻻﺳﻢ اﻟﺠﺪﯾﺪ ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ‬
‫'‪EXEC sp_renamedb 'SchoolQA', 'School‬‬

‫ﺛﺎﻧﯿﺎ ‪ :‬اﻟﺠﺪاول‬
‫‪Creating Tables‬‬ ‫‪ -١‬إﺿﺎﻓﺔ اﻟﺠﺪاول‬
‫‪Alter Tables‬‬ ‫‪ -٢‬ﺗﻌﺪﯾﻞ اﻟﺠﺪاول‬
‫‪Dropping Tables‬‬ ‫‪ -٣‬ﺣﺬف اﻟﺠﺪاول‬
‫‪ -٤‬ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﺠﺪاول ‪Table Information‬‬
‫‪ -١‬إﺿﺎﻓﺔ اﻟﺠﺪاول ‪Creating Table‬‬
‫ﺗﻌﺮﻓﻨﺎ ﻣﻦ ﻗﺒ ﻞ ﻋﻠ ﻲ أﻧ ﻮاع اﻟﺒﯿﺎﻧ ﺎت وأﻧ ﻮاع اﻟﻘﯿ ﻮد وأﻧ ﻮاع اﻟﻌﻼﻗ ﺎت وﺗ ﻢ ﻋﻤ ﻞ ﺟ ﺪاول ﻣ ﻦ ﺧ ﻼل اﻷداة‬
‫‪ Enterprise Manager‬و اﻵن ﺟﺎء دور ‪ Query Analyzer‬اﻟﻘﻮي وھﺬا ﻷﻧﮫ اﻷﻗﺮب ﻟﻠﻌﻤﻞ ﻋﻠﻲ أي‬
‫ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ﻋﻼﻗﯿ ﺔ ﻷﻧ ﮫ ﯾﻌﻤ ﻞ ﻣ ﻦ ﺧ ﻼل أﺷ ﮭﺮ ﻟﻐ ﺎت اﻟﺤﺎﺳ ﺐ ﻟﻐ ﺔ ‪SQL (Structured Query‬‬
‫) ‪ Language‬ﻟﻐﺎت ﺑﻨﺎء اﻻﺳﺘﻔﺴﺎرات‬
‫ﺑﻨﺎء اﻟﺠﻤﻠﺔ اﻷﺳﺎﺳﯿﺔ ﻟﻌﻤﻞ ﺟﺪول ﻛﺎﻟﺘﺎﻟﻲ‬

‫أﺳﻢ اﻟﺠﺪول ]‪ .‬أﺳﻢ اﻟﻘﺎﻋﺪة [ ‪Create Table‬‬


‫‪ .. ,‬ﺟﺰء ﻋﻠﻲ ﺣﺴﺐ ﻧﻮع اﻟﻘﯿﺪ ] أﺳﻢ اﻟﻘﯿﺪ ‪ [Constraint‬ﻧﻮع ﺑﯿﺎﻧﺎﺗﮫ اﻟﺤﻘﻞ اﻷول (‬
‫‪ .. ,‬ﺟﺰء ﻋﻠﻲ ﺣﺴﺐ ﻧﻮع اﻟﻘﯿﺪ ] أﺳﻢ اﻟﻘﯿﺪ ‪ [Constraint‬ﻧﻮع ﺑﯿﺎﻧﺎﺗﮫ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ‬
‫‪.......... .‬‬
‫)اﻟﺤﻘﻮل اﻟﻤﻨﻔﺬ ﻋﻠﯿﮭﺎ اﻟﻘﯿﺪ ﻣﺎ ﺑﯿﻨﮭﻢ ﻓﺎﺻﻠﮫ ( ﺟﺰء ﻋﻠﻲ ﺣﺴﺐ ﻧﻮع اﻟﻘﯿﺪ ] أﺳﻢ اﻟﻘﯿﺪ ‪[Constraint‬‬
‫)‬

‫ﺗﻼﺣ ﻆ اﻷﻗ ﻮاس ] … [ أي ﺷ ﺊ ﻣ ﺎﺑﯿﻦ ھ ﺬه اﻷﻗ ﻮاس ﯾﻌﺘﺒ ﺮ ﺟ ﺰء اﺧﺘﯿ ﺎري ﯾﻤﻜﻨ ﻚ اﻻﺳ ﺘﻐﻨﺎء ﻋﻨ ﮫ اﻟﻤﻼﺣ ﻆ ھﻨ ﺎ‬
‫واﻟﻤﮭ ﻢ ھ ﻮ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ اﻟﻘﯿ ﻮد ﻓﺈﻧﮭ ﺎ ﻗ ﺪ ﺗﻮﺿ ﻊ ﺑﻌ ﺪ اﻟﺤﻘ ﻞ وﻗ ﺪ ﺗﻮﺿ ﻊ أﺳ ﻔﻞ اﻟﺠ ﺪول وﻓ ﻲ اﻟﺤ ﺎﻟﺘﯿﻦ ﻛﻠﻤ ﺔ‬
‫‪ Constraint‬وﺑﻌﺪھﺎ أﺳﻢ اﻟﻘﯿﺪ اﺧﺘﯿﺎرﯾﺔ ﻓﯿﻄﻠﻖ ﻋﻠ ﻲ اﻟﺤﺎﻟ ﺔ اﻷوﻟ ﻲ ﻋﻠ ﻲ ﻣ ﺴﺘﻮي اﻟﺤﻘ ﻞ ‪Column Level‬‬
‫واﻟﺤﺎﻟﺔ اﻟﺜﺎﻧﯿﺔ ﻋﻠﻲ ﻣﺴﺘﻮي اﻟﺠﺪول ‪ Table Level‬وﻟﻜﻦ ﺑﻌﺪ ﻛﻞ ﻗﯿﺪ ھﻨﺎك ﺟﺰء ﻋﻠﻲ ﺣﺴﺐ ﻧ ﻮع اﻟﻘﯿ ﺪ أي أﻧ ﮫ‬
‫ﯾﺨﺘﻠﻒ ﻣﻦ ﻗﯿﺪ ﻵﺧﺮ ﻓﺴﻮف ﻧﺒﺪأ ﺑﺎﻟﺘﻤﯿﺰ ﺑﯿﻨﮭﻢ أوﻻ‬

‫‪44‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺗﻌﺮﯾﻒ اﻟﻘﯿﻮد ‪Defining Constraints‬‬

‫‪ -١‬ﻋﻠﻲ ﻣﺴﺘﻮي اﻟﺤﻘﻞ ‪Column Level‬‬


‫ﯾﺘﻢ ﺗﻌﺮﯾﻒ أي ﻗﯿﺪ ﺑﮫ ﻏﯿﺮ اﻵﺗﻲ‬
‫§ اﻟﻤﻔﺘﺎح اﻷﺳﺎﺳﻲ اﻟﻤﺮﻛﺐ )أﻛﺜﺮ ﻣﻦ ﺣﻘﻞ( ‪Composite Primary Key‬‬
‫‪Composite Foreign Key‬‬ ‫§ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ اﻟﻤﺮﻛﺐ‬
‫وھﺬا ﻃﺒﯿﻌﻲ ﺟﺪا ﻷن اﻟﻘﯿﺪ ﻓﻲ ھﺬا اﻟﻤﺴﺘﻮي ﯾﻔﺮض ﻋﻠﻲ اﻟﺤﻘﻞ اﻟﺬي ﯾﻜﺘﺐ أﻣﺎﻣﮫ أﻣﺎ ﻓﻲ ﺗﻠﻚ اﻟﺤﺎﻻت‬
‫ﯾﺤﺘﻮي اﻟﻘﯿﺪ ﻋﻠﻲ أﻛﺜﺮ ﻣﻦ ﺣﻘﻞ ﻓﻼ ﯾﻤﻜﻦ إﺗﺒﺎع ھﺬه اﻟﻄﺮﯾﻘﺔ ﻓﻲ ﻋﻤﻠﮭﻢ‬

‫‪Table Level‬‬ ‫‪ -٢‬ﻋﻠﻲ ﻣﺴﺘﻮي اﻟﺠﺪول‬


‫ﯾﺘﻢ ﺗﻌﺮﯾﻒ أي ﻗﯿﺪ ﺑﮫ ﻏﯿﺮ اﻵﺗﻲ‬
‫‪NOT Null‬‬ ‫اﻟﻘﯿﺪ اﻟﻐﯿﺮ ﻓﺎرغ‬

‫ﻧﺒﺪأ اﻵن ﻓﻲ ﻣﻌﺮﻓﺔ ﻛﯿﻔﯿﺔ ﻋﻤﻞ ﻛﻞ ﻗﯿﺪ ﻣﻦ اﻟﻘﯿﻮد ﻓﻲ ﺗﻠﻚ اﻟﺤﺎﻟﺘﯿﻦ‬

‫‪ -١‬ﻗﯿﺪ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ‪Primary Key Constraint‬‬


‫‪Column Level‬‬
‫…‬
‫‪DeptNo int Constraint Dept_DeptNo_PK Primary Key ,‬‬
‫…‬

‫ﯾﻼﺣﻆ أﺳﻢ اﻟﻘﯿﺪ ﺳﻤﻲ ﻣﻦ ﺧﻼل أﺳﻢ اﻟﺠﺪول ﺛﻢ ﺷﺮﻃﺔ ﺳﻔﻠﯿﺔ ﺛﻢ أﺳﻢ اﻟﺤﻘﻞ ﺛﻢ ﺷﺮﻃﺔ ﺳﻔﻠﯿﺔ ﺛﻢ اﺧﺘﺼﺎر اﻟﻘﯿ ﺪ ھ ﺬا‬
‫ھﻮ ﻋﺒﺎرة ﻋﻦ ﻣﻌﯿﺎر ﻣﻦ اﻟﻤﻌﺎﯾﯿﺮ اﻟﺸﮭﺮ ﻟﻜﺘﺎﺑﺔ أﺳﻤﺎء اﻟﻘﯿﻮد اﻟﻤﮭﻢ إﺗﺒﺎع ﻃﺮﯾﻘﺔ واﺣﺪة ﻟﺘﺤﻘﯿﻖ اﻟﻐ ﺮض وھ ﻮ ﺗ ﺬﻛﺮ‬
‫أو ﺗﻮﻗﻊ ھﺬه اﻷﺳﻤﺎء ﺑﺴﮭﻮﻟﺔ أو ﻋﺪم ﻛﺘﺎﺑﺔ ﻛﻠﻤﺔ ‪ Constraint‬وﻻ أﺳﻢ اﻟﻘﯿﺪ وھﺬا ﻣﺘﺒﻊ ﻣﻊ ﻛﻞ اﻷواﻣﺮ ‪.‬‬
‫‪Table Level‬‬
‫…‬
‫‪Constraint Dept _PK Primary Key (DeptNo) ,‬‬
‫…‬

‫ﯾﻼﺣﻆ أن اﻟﻔﺮق ھﻨﺎ ﻷﻧﻨﺎ ﻧﻜﺘﺐ اﻷواﻣﺮ أﺧﺮ اﻟﺠﺪول ﻓﻼﺑﺪ أن ﻧﺤﺪد ﻣﻦ ھﻮ اﻟﺤﻘﻞ اﻟﺬي ﺳ ﻮف ﯾ ﺘﻢ ﺗﻨﻔﯿ ﺬ اﻟﻘﯿ ﺪ ﻋﻠﯿ ﮫ‬
‫أﻣ ﺎ ﻓ ﻲ اﻟﻄﺮﯾﻘ ﺔ اﻷوﻟ ﻲ ﻟ ﻢ ﻧﻜﺘ ﺐ ذﻟ ﻚ وھ ﺬا ﻷن اﻟﻘﯿ ﺪ ﺳ ﻮف ﯾﻨﻔ ﺬ ﻋﻠ ﻲ اﻟﺤﻘ ﻞ اﻟﻤﻜﺘ ﻮب أﻣﺎﻣ ﮫ ﻣﺒﺎﺷ ﺮة وﻗ ﺪ ﺗﻜ ﻮن‬
‫ﺗﺴﻤﯿﺔ ﺣﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ھﻜﺬا أﻓﻀﻞ وأﺳﮭﻞ ھﻮ أﺳﻢ اﻟﺠﺪول ﺛﻢ اﻟﻼﺣﻘﺔ ‪. PK‬‬

‫‪Foreign Key Constraint‬‬ ‫‪ -٢‬ﻗﯿﺪ اﻟﻤﻔﺘﺎح اﻟﺨﺎرﺟﻲ‬


‫‪Column Level‬‬

‫…‬
‫‪DeptًWork int Constraint Work_FK References Dept (DeptNo) ,‬‬
‫…‬

‫وﯾﻼﺣﻆ ﻛﺘﺎﺑﺔ أﺳﻢ اﻟﻘﯿﺪ ﻣﺨﺘﻠﻔﺔ ﻗﻠﯿﻼ وھﺬا ﻷﻧﮫ ھﺬه اﻟﻘﯿﺪ داﺋﻤ ﺎ ﯾﻤﺜ ﻞ ﻋﻼﻗ ﺔ وﯾﻔ ﻀﻞ ﻛﺘﺎﺑ ﺔ أﺳ ﻢ اﻟﻌﻼﻗ ﺔ ﻛﻤ ﺎ ﻓ ﻲ ال‬
‫‪ ER‬ﺛﻢ اﻟﻼﺣﻘﺔ ‪ FK‬أو أﺳﻢ اﻟﺠﺪول اﻷول ﺛﻢ اﻟﺜﺎﻧﻲ ﺛﻢ ‪ FK‬وﺑﻌﺪة ‪ References‬أي أﻧﮫ ﺣﻘﻞ ﻣﺮﺟﻌﻲ وﻻﺑﺪ أن‬
‫ﻧﺤﺪد ﻣﺮﺟﻌﻲ ﻷي ﺣﻘﻞ ﻓﻲ أي ﺟﺪول ﻓﻨﻜﺘﺐ أﺳﻢ اﻟﺠﺪول وﻣﺎﺑﯿﻦ ﻗﻮﺳﯿﻦ أﺳﻢ اﻟﺤﻘ ﻞ وﯾﻤﻜ ﻦ ﺑ ﺎﻟﻄﺒﻊ اﻻﺳ ﺘﻐﻨﺎء ﻋ ﻦ‬
‫ﻛﻠﻤﺔ ‪ Constraint‬وأﺳﻢ اﻟﻘﯿﺪ وﻟﻜﻨﮫ ﻏﯿﺮ ﻣﺴﺘﺤﺐ ﻟﻮﺟﻮد أواﻣﺮ ﺗﻘﻮم ﻋﻠﻲ ھﺬه اﻟﺘﺴﻤﯿﺔ‬

‫‪45‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


SQL Server 2000 -- By Mr. Adel Sabour

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 ,

Not Null Constraint ‫ ﻗﯿﺪ اﻟﻘﯿﻤﺔ اﻟﻐﯿﺮ ﻓﺎرﻏﺔ‬-٣


Column Level

Salary Numeric(6,2 ) Constraint Teacher_Salary_NN Not Null ,

‫وﻟﯿﺲ ﻟﮭﺎ ﺑﺎﻟﻄﺒﻊ ﻃﺮﯾﻘﺔ ﻋﻠﻲ ﻣﺴﺘﻮي اﻟﺠﺪول وﯾﻤﻜﻦ أن ﻧﺴﺘﻐﻨﻲ ﻋﻦ اﻟﺘﺴﻤﯿﺔ ﻓﻲ ھﺬا اﻟﻘﯿﺪ ﺣﯿﺚ أﻧﮫ ﻟﯿﺲ ﻣﻔﯿﺪ‬

Unique Constraint (‫ ﻗﯿﺪ اﻟﺤﻘﻞ اﻟﻤﻤﯿﺰ)ﻻ ﯾﺘﻜﺮر‬-٤


Column Level

DName varchar(25) Constraint Dept_DName_UK Unique ,

Table Level

Constraint Dept_DName_UK Unique ( DName ) ,

Unique (----- , -----) ‫ ﻣﺎﺑﯿﻨﮭﻢ‬, ‫وإن ﻛﺎن أﻛﺜﺮ ﻣﻦ ﺣﻘﻞ ﻣﻌﺎ ﻻ ﯾﻜﺮروا ﻧﻀﻌﮭﻢ ﻣﺎ ﺑﯿﻦ اﻷﻗﻮاس ﺑﻌﻼﻣﺔ ﻓﺎﺻﻠﺔ‬

Check Constraint ‫ ﻗﯿﺪ اﻟﺘﺤﻘﻖ ﻣﻦ اﻟﺸﺮط‬-٥


Column Level

Gender Char(1) Constraint Teacher_Gender_CK Check
( Gender In('M','m','F','f') ) ,

46

PDF created with pdfFactory Pro trial version www.pdffactory.com


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻧﻼﺣﻆ أن اﻟﺸﺮط ﻛﺎﻣﻞ ﯾﻜﺘﺐ ﺑﻌﺪ ﻛﻠﻤﺔ ‪ Check‬وﺑﯿﻦ أﻗﻮاﺳﮭﺎ‬


‫‪Table Level‬‬
‫…‬
‫‪Constraint Teacher_Gender_CK Check‬‬
‫‪( Gender In('M','m','F','f') ) ,‬‬
‫…‬

‫وﻧﻼﺣﻆ أﯾﻀﺎ ﻋﺪم ذﻛﺮ أﺳﻢ اﻟﺤﻘﻞ ﻓﻲ ﻣﻮاﺿﻊ أﺧﺮي وھﺬا ﻷن ھﺬا اﻟﻘﯿﺪ ﯾﻜﻮن ﺑﺪاﺧﻠﺔ داﺋﻤ ﺎ أﺳ ﻢ اﻟﺤﻘ ﻞ اﻟﻤﻔ ﺮوض‬
‫ﻋﻠﯿﮫ اﻟﻘﯿﺪ‬
‫ﻹﺿﺎﻓﺔ ﻗﯿﻤﺔ اﻓﺘﺮاﺿﯿﺔ ﻟﻠﺤﻘﻞ‬
‫…‬
‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


SQL Server 2000 -- By Mr. Adel Sabour

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') )
)

‫ ﯾﻔﺼﻞ ﺑﯿﻨﮭﻢ ﻣﺴﺎﻓﺎت‬StudNo ‫ﻻﺣﻆ وﺿﻊ ﻗﯿﺪﯾﻦ ﻣﺴﻤﯿﺎن ﻋﻠﻲ اﻟﺤﻘﻞ‬

48

PDF created with pdfFactory Pro trial version www.pdffactory.com


SQL Server 2000 -- By Mr. Adel Sabour

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 ‫وﻟﻜﻦ ﻟﻦ ﻧﻨﺴﻲ أﻧﻨﺎ ﻟﻢ ﯾﻜﻦ ﺑﺎﺳﺘﻄﺎﻋﺘﻨﺎ اﻟﻘﯿﺎم ﺑﻌﻤﻞ ﻋﻼﻗﺔ اﻹدارة‬
: ‫ﻓﻲ ھﺬه اﻟﻤﺸﻜﻠﺔ اﻟﺤﻞ ھﻮ اﻵﺗﻲ‬

Alter Tables ‫ ﺗﻌﺪﯾﻞ اﻟﺠﺪاول‬-٢


‫ﺑﻤ ﺎ أﻧ ﺎ ﺑﻨ ﺎء اﻟﺠ ﺪول ﻋﺒ ﺎرة ﻋ ﻦ ﺣﻘ ﻮل ﺑ ﺄﻧﻮاع ﺑﯿﺎﻧ ﺎت وﻗﯿ ﻮد ﻓ ﺴﻮف ﻧﺘﻨ ﺎول ﺗﻌ ﺪﯾﻞ اﻟﺠ ﺪول ﻣ ﻦ ذﻟ ﻚ‬
: ‫اﻟﻤﻨﻈﻮر ﻛﺎﻟﺘﺎﻟﻲ‬
Modify the Columns ‫ ﺗﻌﺪﯾﻞ اﻟﺠﺪول ﻓﯿﻤ ﺎ ﯾﺨ ﺺ اﻟﺤﻘ ﻮل‬-‫أ‬

Adding Column ‫ إﺿﺎﻓﺔ ﺣﻘﻞ ﺳﻮاء ﺑﻘﯿﻮد أو ﻻ‬-١


Redefinition Column ‫ ﺗﻌﺪﯾﻞ ﻧﻮع أو ﺣﺠﻢ أو اﻟﻘﯿﻤﺔ اﻟﺨﺎﻟﯿﺔ ﻟﺤﻘﻞ‬-٢
Dropping Column ‫ إﺳﻘﺎط ﺣﻘﻞ ﻣﺎ‬-٣
Modify the Constraints ‫ﺗﻌ ﺪﯾﻞ اﻟﺠ ﺪول ﻓﯿﻤ ﺎ ﯾﺨ ﺺ اﻟﻘﯿ ﻮد‬ -‫ب‬

Adding Constraint ‫ إﺿﺎﻓﺔ ﻗﯿﺪ إﻟﻲ اﻟﺠﺪول‬-١


Disabling and Enabling Constraint ‫ إﯾﻘﺎف أو ﺗﺸﻐﯿﻞ ﻗﯿﺪ‬-٢
Dropping Constraint ‫ إﺳﻘﺎط ﻗﯿﺪ‬-٣
Modifying Constraint ‫ ﺗﻌﺪﯾﻞ ﻗﯿﺪ‬-٤

49

PDF created with pdfFactory Pro trial version www.pdffactory.com


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Modify the Columns‬‬ ‫أوﻻ ‪ :‬ﺗﻌﺪﯾﻞ اﻟﺠﺪول ﻓﯿﻤﺎ ﯾﺨﺺ اﻟﺤﻘﻮل‬

‫‪Adding Column‬‬ ‫‪ -١‬إﺿﺎﻓﺔ ﺣﻘﻞ ﺳﻮاء ﺑﻘﯿﻮد أو ﻻ‬

‫‪Alter Table Teacher‬‬


‫‪Add Phone Char(11) Not Null‬‬
‫'‪Constraint Teacher_Phone_DF Default 'No Phone‬‬

‫ﻻﺣﻆ ﻣﻌﻲ إﺿﺎﻓﺔ اﻟﻘﯿﻤﺔ اﻻﻓﺘﺮاﺿﯿﺔ ﻛﻘﯿﺪ وﺗﻢ ﺗﺴﻤﯿﺘﮭﺎ وﯾﻤﻜﻦ إﺿﺎﻓﺔ اﻟﻘﯿﻮد أﻵﺧﺮي‬

‫‪ -٢‬ﺗﻌﺪﯾﻞ ﻧﻮع أو ﺣﺠﻢ أو اﻟﻘﯿﻤﺔ اﻟﺨﺎﻟﯿﺔ ﻟﺤﻘﻞ ‪Redefinition Column‬‬


‫‪Alter Table Teacher‬‬
‫‪Alter Column‬‬ ‫‪Phone Char(12) Null‬‬
‫ﻻﺣﻆ أﻧﮫ ﻻ ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ اﻟﻘﯿﻤﺔ اﻻﻓﺘﺮاﺿﯿﺔ ﻣﺒﺎﺷﺮة ﻷﻧﮭﺎ ﺗﻌﺘﺒﺮ ﻣ ﻦ أﻧ ﻮاع اﻟﻘﯿ ﻮد وﻻﺣ ﻆ ﻛﯿﻔﯿ ﺔ ﺗﻌ ﺪﯾﻞ اﻟﻘﯿ ﺪ‬
‫‪ Not Null‬ﺑﺎﻟﻜﻠﻤﺔ اﻟﻌﻜﺴﯿﺔ ‪ Null‬وﻻﺣﻆ أﯾﻀﺎ ﻛﯿﻔﯿﺔ ﺗﻌﺪﯾﻞ ﺣﺠﻢ اﻟﺤﻘﻞ ﻛﻤﺎ ﯾﻤﻜﻦ ﺗﻌﺪﯾﻞ ﻧﻮع اﻟﺒﯿﺎﻧﺎت أن ﻟﻢ ﯾﻜ ﻦ‬
‫ھﻨﺎك ﻋﺎﺋﻖ ﻣﺜﻞ ﻟﻮ ﻛﺎن ﺑﮫ ﺑﯿﺎﻧﺎت ﻏﯿﺮ ﻣﺘﻮاﻓﻘﺔ ﻣﺜﻼ أو ﻗﯿﺪ ﯾﺤﻜﻤﮫ ﻣﺜﻼ ﻣﺜﻞ ﺣﺎﻟﺘﻨﺎ ھﺬه ﻣﻊ اﻟﻘﯿﻤﺔ اﻻﻓﺘﺮاﺿﯿﺔ ‪.‬‬

‫‪Dropping Column‬‬ ‫‪ -٣‬إﺳﻘﺎط ﺣﻘﻞ ﻣﺎ‬

‫‪Alter Table Teacher‬‬


‫‪Drop Column Phone‬‬

‫ﻻﺣﻆ أﻧﮫ ھﺬا اﻟﻜﻮد ﻻ ﯾﻨﻔﺬ ﺑﺎﻟﻄﺒﻊ إﻻ ﺑﻌﺪ ﺣﺬف اﻟﻘﯿﺪ أوﻻ ﻛﻤﺎ ﺳﻨﺮي ﻻﺣﻘﺎ‬
‫وﻻﺣﻆ أﯾﻀﺎ أن اﻷﻣﺮ ‪ Alter‬واﻷﻣﺮ ‪ Drop‬ﻟﻠﺤﻘﻮل ﯾﺤﺘﺎﺟﻮا إﻟﻲ اﻟﻜﻠﻤﺔ ‪ Column‬و ‪ Add‬ﻻ ﺗﺤﺘﺎﺟﮭﺎ‬

‫‪Modify the Constraints‬‬ ‫ﺛﺎﻧﯿﺎ ‪ :‬ﺗﻌﺪﯾﻞ اﻟﺠﺪول ﻓﯿﻤﺎ ﯾﺨﺺ اﻟﻘﯿﻮد‬


‫‪Adding Constraint‬‬ ‫‪ -١‬إﺿﺎﻓﺔ ﻗﯿﺪ إﻟﻲ اﻟﺠﺪول‬
‫‪Alter Table Department‬‬
‫)‪Add Constraint Manager_UK Unique(Manager‬‬
‫ﻻ ﺣﻆ أﻧﮫ ﻣﺎ زال ﺑﺈﻣﻜﺎﻧﻨﺎ إزاﻟﺔ اﻟﻜﻠﻤﺔ ‪ Constraint‬و أﺳﻢ اﻟﻘﯿﺪ‬

‫‪Disabling and Enabling Constraint‬‬ ‫‪ -٢‬إﯾﻘﺎف أو ﺗﺸﻐﯿﻞ ﻗﯿﺪ‬


‫‪Alter Table Department NoCheck Constraint Manager_UK‬‬

‫ﻻﺣ ﻆ اﻟﻜﻠﻤ ﺔ ‪ NoCheck‬اﻟﺘ ﻲ ﺗﺒﻄ ﻞ ﻣﻔﻌ ﻮل اﻟﻘﯿ ﺪ وﻟﻜﻨﮭ ﺎ ﻻ ﺗﻤ ﺴﺤﮫ ﻓﯿﻤﻜﻨ ﻚ اﻵن إدﺧ ﺎل رﻗ ﻢ ﻣ ﺪﯾﺮ ﻣﻜ ﺮر‬
‫ﻓﺴﻮف ﺗﻘﺒﻞ اﻟﻘﺎﻋﺪة ذﻟﻚ وﻻﺣﻆ أﯾﻀﺎ أﻧﻨﺎ ﻧﺤﺘﺎج ﻟﻠﻜﻠﻤﺔ ‪ Constraint‬ﺑﻌﺪ ‪ NoCheck‬وﺑﻌﺪھﺎ أﺳﻢ اﻟﻘﯿﺪ اﻟﺬي‬
‫ﻻﺑﺪ أن ﻧﺬﻛﺮه ﻟﺬﻟﻚ ﺗﻢ اﻟﺘﺄﻛﯿﺪ ﻋﻠﯿﻚ ﺑﺎﻻﻟﺘﺰام ﺑﺘﺴﻤﯿﺔ اﻟﻘﯿﺪ‬
‫‪Alter Table Department Check Constraint Manager_UK‬‬

‫ھﺬا اﻷﻣﺮ اﻟﺬي ﯾﻌﯿﺪ ﺗﺸﻐﯿﻞ اﻟﻘﯿ ﺪ ﻻﺣ ﻆ أﻧ ﮫ ﻗ ﺪ ﻻ ﯾﻨﻔ ﺬ ﻓ ﻲ ﺣﺎﻟ ﺔ إدﺧ ﺎل ﺑﯿﺎﻧ ﺎت ﻣﻜ ﺮرة ارﺟ ﻊ وأﻣ ﺴﺢ ﺗﻠ ﻚ اﻟﺒﯿﺎﻧ ﺎت‬
‫اﻟﻤﻜﺮرة ﺛﻢ ﻧﻔﺬ اﻟﻜﻮد ﺳﻮف ﯾﻨﻔﺬ أرﺟﻊ وﺣﺎول إدﺧﺎل ﺑﯿﺎﻧﺎت ﻣﻜﺮرة ﻣﺮة أﺧﺮي ﺳﻮف ﺗﺮﻓﺾ اﻟﻘﺎﻋﺪة ذﻟﻚ‬

‫‪50‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Dropping Constraint‬‬ ‫‪ -٣‬إﺳﻘﺎط ﻗﯿﺪ‬


‫‪Alter Table Department Drop Constraint Manager_UK‬‬

‫ھﺬا ھﻮ اﻷﻣﺮ اﻟﺬي ﯾﺤﺬف اﻟﻘﯿﺪ وﺑﺎﻟﻄﺒﻊ ﻻﺑﺪ ﻣﻦ ﺗﺬﻛﺮ أﺳﻤﮫ وﻻﺣﻆ أﻧﻨﺎ ﻧﺤﺘﺎج ﻟﻠﻜﻠﻤﺔ ‪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‬‬

‫ﺣﺎول اﻵن ﺣﺬف اﻟﺴﺠﻼت اﻟﻤﺮﺗﺒﻂ ﻟ ﻦ ﯾﺤ ﺪث ﺷ ﻲ وﺳ ﯿﻈﮭﺮ إﻋ ﻼم ﺑﺎﻟﺨﻄ ﺄ ﻣ ﻦ اﻟﻘﯿ ﺪ ‪ WorkTest_FK‬وﻻﺣ ﻆ‬


‫اﻟﻜﻠﻤﺔ ‪ No Action‬اﻟﻤﻀﺎدة ﻟﻜﻠﻤﺔ ‪ Cascade‬ﺣﺘﻰ ﻻ ﯾﺘﻢ اﻟﺤﺬف‬
‫ﻻﺣﻆ أن ﻛﻞ اﻟﻜﻠﻤ ﺎت اﻷﺳﺎﺳ ﯿﺔ اﻟﺘ ﻲ اﺳ ﺘﺨﺪﻣﻨﮭﺎ ﻣ ﻊ اﻟﻘﯿ ﻮد ﺑﺒ ﺴﺎﻃﺔ ھ ﻢ ‪Add Constraint , No Check‬‬
‫‪Constraint , Check Constraint and Drop Constraint‬‬

‫‪Dropping Tables‬‬ ‫‪ -٣‬ﺣﺬف اﻟﺠﺪاول‬

‫أوﻻ ﻧﻨﺸﺄ ﺟﺪوﻻ ﻟﻼﺧﺘﺒﺎر وﻧﺘﺄﻛﺪ ﻣﻦ إﻧﺸﺎءه‬


‫‪Create Table Test‬‬
‫) ‪(col1 int‬‬
‫ﺛﺎﻧﯿﺎ ﻧﻘﻮم ﺑﺤﺬﻓﮫ ﺑﺎﻟﻄﺮﯾﻘﺔ اﻟﺘﺎﻟﯿﺔ‬
‫‪Drop Table Test‬‬

‫‪51‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Table Informations‬‬ ‫‪ -٤‬ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﺠﺪاول‬


‫ﻗﺒﻞ ھﺬا ﯾﻤﻜﻨﻨﺎ ﺗﻌﺪﯾﻞ أﺳﻢ اﻟﺠﺪول ﻋﻦ ﻃﺮﯾﻖ اﻷﻣﺮ اﻟﺘﺎﻟﻲ‬ ‫§‬

‫ﻧﻜﺘﺐ ﻛﻠﻤﺔ ‪ Exec‬اﺧﺘﺼﺎرا ﻟﻜﻠﻤﺔ ‪ Execute‬ﺛﻢ ﻧﻨﺎدي ﻋﻠﻲ اﻹﺟﺮاء ‪ sp_rename‬ﯾﺴﺘﻘﺒﻞ أوﻻ اﻻﺳ ﻢ اﻟﻘ ﺪﯾﻢ‬
‫وﻓﺎﺻﻠﺔ ﺛﻢ اﻻﺳﻢ اﻟﺠﺪﯾﺪ وﺳﯿﺘﻢ ﻋﻤﻞ ‪ Rename‬ﻟﻠﺠﺪول ﻛﻤﺎ ﯾﺘﻀﺢ ﻣﻦ اﻟﺼﻮرة‬
‫§ اﻟﻮﺻﻮل ﻟﺠﻤﯿﻊ اﻟﺠﺪاول اﻟﻤﻮﺟﻮدة ﺑﺎﻟﻘﺎﻋﺪة ﻧﺴﺘﺨﺪم اﻹﺟﺮاء ‪sp_tables‬‬

‫ﻟﻠﻮﺻﻮل إﻟﻲ اﻟﻘﯿﻮد اﻟﻤﻮﺟﻮدة ﺑﺠﺪول ﻧﺴﺘﺨﺪم اﻷﻣﺮ اﻟﺘﺎﻟﻲ ﻟﻺﺟﺮاء ‪sp_helpconstraint‬‬ ‫§‬

‫‪52‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


SQL Server 2000 -- By Mr. Adel Sabour

sp_help ‫ﻟﻠﻮﺻﻮل إﻟﻲ ﻣﻌﻠﻮﻣﺎت ﺗﻔﺼﯿﻠﯿﺔ ﺗﺨﺺ أي ﺟﺪول ﻧﻌﻤﻞ ﻣﻊ اﻹﺟﺮاء‬ §

SQL Server 2000 -- By Mr. Adel Sabour


53

PDF created with pdfFactory Pro trial version www.pdffactory.com


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻟﻐﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت )‪Data Manipulation Language (DML‬‬

‫§ ﺟﻤﻞ ‪ DML‬ﺗﻌﻤﻞ ﻋﻨﺪﻣﺎ ﺗﻨﻔﺬ‬


‫‪Insert Statement‬‬ ‫· إدﺧﺎل ﺻﻒ ﺟﺪﯾﺪ ﻓﻲ ﺟﺪول‬
‫· ﺗﻌﺪﯾﻞ ﻓﻲ ﺑﯿﺎﻧﺎت ﺻﻒ ﻣﻮﺟﻮد ‪Update Statement‬‬
‫‪Delete Statement‬‬ ‫· ﺣﺬف ﺻﻒ ﻣﻮﺟﻮد‬
‫اﻟﺘﺤﻜﻢ ﻓﻲ اﻟﺤﻔﻆ واﻟﺘﺮاﺟﻊ ﻋﻦ اﻟﺠﻤﻞ اﻟﻤﻨﻔﺬة‬ ‫§‬
‫‪Begin Tran‬‬ ‫· ﺑﺪاﯾﺔ ﺟﺰء ﺑﮫ ﻋﻤﻠﯿﺎت ﻣﻌﯿﻨﺔ‬
‫· ﻧﻘﻄﺔ ‪ ،‬ﻋﻤﻠﯿﺔ ﻣﻦ ﻋﻤﻠﯿﺎت اﻟﺠﺰء اﻟﺤﺎﻟﻲ ‪Save Tran‬‬
‫‪Commit Tran‬‬ ‫· ﺣﻔﻆ ﻧﻘﻄﺔ ﻣﺎ ﻣﻦ اﻟﻌﻤﻠﯿﺎت‬
‫· اﻟﺘﺮاﺟﻊ ﺣﺘﻰ ﻧﻘﻄﺔ ﻣﺎ أو اﻟﻌﻤﻠﯿﺎت ‪ Rollback Tran‬ﺟﻤﻞ ‪DML‬‬
‫‪Insert Statement‬‬ ‫أوﻻ ‪ :‬ﺟﻤﻠﺔ إﺿﺎﻓﺔ ﺻﻒ ﺟﺪﯾﺪ ﻟﻠﺠﺪول‬
‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ ‪Syntax‬‬

‫] ) ]… ‪ ,‬أﺳﻢ اﻟﺤﻘﻞ اﻟﺜﺎﻟﺚ ‪,‬اﺳﻢ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ ‪ [ ,‬أﺳﻢ اﻟﺤﻘﻞ اﻷول ( [ أﺳﻢ اﻟﺠﺪول ‪Insert Into‬‬
‫) ] … ‪ ,‬اﻟﻘﯿﻤﺔ اﻟﺜﺎﻟﺜﺔ ‪ ,‬اﻟﻘﯿﻤﺔ اﻟﺜﺎﻧﯿﺔ‪ [ ,‬اﻟﻘﯿﻤﺔ اﻷوﻟﻲ ( ‪Values‬‬

‫ﺗﻔﺴﯿﺮ اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ ‪:‬‬


‫ھﺬه اﻟﺠﻤﻠﺔ ﺗﻀﯿﻒ ﺳﻄﺮ ﻣﻦ اﻟﺒﯿﺎﻧﺎت وﻛﻤﺎ ذﻛﺮﻧﺎ أن اﻷﻗﻮاس ] ‪ [ ..‬ﻣﺎ ﺑﯿﻨﮭﻢ ﯾﻌﺘﺒﺮ ﺟﺰء اﺧﺘﯿﺎري‬
‫ﻻﺣﻆ ﻣﻌﻲ أن ﺑﻌﺪ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ Insert Into‬وﻣﻌﻨﺎھﺎ أدﺧﻞ ﻓﻲ ﻧﻜﺘﺐ أﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﻓﯿ ﮫ‬
‫ﺛﻢ ﺟﺰء اﺧﺘﯿﺎري وھﻮ ﺗﺤﺪﯾﺪ اﻟﺤﻘﻮل اﻟﺘﻲ ﺳﻮف ﺗﺪﺧﻞ ﻓﯿﮭﺎ اﻟﺒﯿﺎﻧﺎت ھﺬا ﺑﺎﻟﻄﺒﻊ أن ﻛﻨﺖ ﺳﻮف ﺗﺪﺧﻞ ﺑﻌﺾ اﻟﺤﻘ ﻮل‬
‫أو ﺳﻮف ﺗﺪﺧﻞ اﻟﺤﻘﻮل وﻟﻜﻦ ﻟﯿﺴﺖ ﺑﻨﻔﺲ اﻟﺘﺮﺗﯿﺐ اﻟﺬي ﺗﻮﺟﺪ ﻋﻠﯿﮫ ﻓﻲ اﻟﺠﺪول اﻟﻤﺮاد أﻣﺎ إذا ﻛﻨﺖ ﺳﻮف ﺗ ﺪﺧﻞ ﻛ ﻞ‬
‫اﻟﺤﻘﻮل و ﺑﻨﻔﺲ اﻟﺘﺮﺗﯿﺐ ﻓﯿﻤﻜﻨﻚ اﻻﺳﺘﻐﻨﺎء ﻋﻦ ھﺬا اﻟﺠﺰء‬
‫وھﺬا اﻟﺠﺰء أن ﻛﺘﺐ ﻻﺑﺪ أن ﯾﻜﻮن ﺑﯿﻦ ﻗﻮﺳﯿﻦ وﺗﻜﺘﺐ اﻟﺤﻘﻮل وأن ﻛﺎن ھﻨﺎك أﻛﺜﺮ ﻣ ﻦ ﺣﻘ ﻞ ﻧﻔ ﺼﻞ ﺑ ﯿﻦ ﻛ ﻞ ﺣﻘﻠ ﯿﻦ‬
‫ﺑﻔﺎﺻﻠﺔ )‪ (,‬وھﻜﺬا‬
‫وﺑﻌﺪھﺎ ﺳﻮف ﻧﺪﺧﻞ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ Values‬وﻣﻌﻨﺎھﺎ اﻟﻘﯿﻢ ﺛﻢ ﻗﻮس وﻓﻲ اﻟﻨﮭﺎﯾﺔ ﻗﻮس وﻣﺎ ﺑﯿﻨﮭﻢ ھﻲ اﻟﻘﯿﻢ اﻟﺘ ﻲ‬
‫ﺳﻮف ﯾﺘﻢ إدﺧﺎﻟﮭﺎ ﻋﻠﻲ أن ﺗﻜﻮن اﻟﻘﯿﻢ اﻟﻨﺼﯿﺔ وﻗﯿﻢ اﻟﺘﻮارﯾﺦ ﻣﺎﺑﯿﻦ ﻋﻼﻣﺔ ﺗﻨﺼﯿﺺ ) ' ( و اﻷرﻗﺎم ﺑﺪون ذﻟﻚ‬

‫أﺧﻄﺎء ھﺬه اﻟﺠﻤﻠﺔ ‪:‬‬


‫ﻗﺪ ﺗﺤﺪث ﺑﻌﺾ اﻷﺧﻄﺎء اﻟﮭﺎﻣﺔ ﻓﻲ ھﺬه اﻟﺠﻤﻠﺔ ﺑﻌﯿﺪا ﻋﻦ ﺷﻜﻠﮭﺎ اﻟﻌﺎم ﻻﺑﺪ ﻣﻦ ﻓﮭﻤﮭﺎ ﺟﯿﺪا‬
‫‪Not Null‬‬ ‫§ ﻋﺪم إﺿﺎﻓﺔ ﻗﯿﻤﺔ ﻓﻲ ﺣﻘﻞ ﯾﺮﻓﺾ اﻟﻘﯿﻢ اﻟﺨﺎﻟﯿﺔ ﻣﺜﻞ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ أو ﺣﻘﻞ‬
‫)‪(Duplicate‬‬ ‫§ إﺿﺎﻓﺔ ﻗﯿﻤﺔ ﻣﻜﺮرة ﻟﺤﻘﻞ ﯾﺮﻓﺾ ذﻟﻚ ﻣﺜﻞ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ أو اﻟﺤﻘﻞ اﻟﻤﻤﯿﺰ‬
‫§ إﺿﺎﻓﺔ ﻗﯿﻤﺔ ﻟﺤﻘﻞ ﻣﻔﺘﺎح ﺧﺎرﺟﻲ وﻣﻔﺘﺎﺣﮫ اﻟﺮﺋﯿﺴﻲ ﻻ ﯾﺤﺘﻮي ﻋﻠﻲ ﺗﻠﻚ اﻟﻘﯿﻤﺔ ‪Foreign Key‬‬
‫‪Check‬‬ ‫§ إﺿﺎﻓﺔ ﻗﯿﻤﺔ ﺗﻌﺎرض ﺷﺮط ﻓﻲ اﻟﻘﯿﺪ‬
‫‪Data type mismatch‬‬ ‫§ إﺿﺎﻓﺔ ﻧﻮع ﺑﯿﺎﻧﺎت ﯾﺨﺘﻠﻒ ﻋﻦ اﻟﻨﻮع اﻟﺤﺎﻟﻲ ﻟﻠﺤﻘﻞ‬
‫إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت ﺑﺎﻟﻄﺮﯾﻘﺔ اﻷوﻟﻲ وھﻲ ﺗﺤﺪﯾﺪ اﻟﺤﻘﻮل اﻟﺘﻲ ﻧﺮﯾﺪ اﻹدﺧﺎل ﺑﮭﺎ‬

‫‪54‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻣﻦ ﺧﻼل اﻟﺸﻜﻞ اﻟ ﺴﺎﺑﻖ ﻧﺤ ﺪد اﻟﺠﻤﻠ ﺔ ﺛ ﻢ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ ‪ F5‬ﺳ ﻮف ﺗﻈﮭ ﺮ اﻟﺮﺳ ﺎﻟﺔ ‪ 1 row affected‬أي ﺻ ﻒ‬
‫ﺑﯿﺎﻧﺎت ﻗﺪ ﺗﺄﺛﺮ ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ‬

‫إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت ﺑﺪون ﺗﺤﯿﺪ اﻟﺤﻘﻮل وﯾﺸﺘﺮط ﻓﯿﮭﺎ اﻷﺗﻲ‬


‫‪ -١‬ﻋﺪد اﻟﻘﯿﻢ اﻟﻤﺪﺧﻠﺔ ﯾﺴﺎوي ﻋﺪد اﻟﺤﻘﻮل اﻟﻔﻌﻠﯿﺔ ﻟﻠﺠﺪول‬
‫‪ -٢‬اﻟﻘﯿﻢ اﻟﺘﻲ ﺗﺪﺧﻞ ﻣﻦ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺗﻜﻮن ﺑﻨﻔﺲ اﻟﺘﺮﺗﯿﺐ اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﺠﺪول‬

‫ﻣﻦ ﺧﻼل اﻟﺸﻜﻞ اﻟ ﺴﺎﺑﻖ ﻧﺤ ﺪد اﻟﺠﻤﻠ ﺔ ﺛ ﻢ ﻧ ﻀﻐﻂ ﻋﻠ ﻲ ‪ F5‬ﺳ ﻮف ﺗﻈﮭ ﺮ اﻟﺮﺳ ﺎﻟﺔ ‪ 1 row affected‬أي ﺻ ﻒ‬
‫ﺑﯿﺎﻧﺎت ﻗﺪ ﺗﺄﺛﺮ ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ‬
‫وﻟﻜﻦ ھﻨﺎك ﺑﻌﺾ اﻹدﺧﺎﻻت اﻟﻐﺮﯾﺒﺔ ﻣﺜﻞ ﻛﻠﻤﺔ ‪ null‬وﻻﺑﺪ أن أﻟﺘ ﺰم ﺑﮭ ﺬه اﻟﻜﻠﻤ ﺔ ﻋﻨ ﺪﻣﺎ ﻧﺮﯾ ﺪ ﻋ ﺪم إدﺧ ﺎل ﻗﯿﻤ ﺔ ﻓ ﻲ‬
‫ھﺬه اﻟﻄﺮﯾﻘﺔ أﻣ ﺎ )(‪ GetDate‬ﻓ ﻲ ﻋﺒ ﺎرة ﻋ ﻦ داﻟ ﺔ ﺗﻌﯿ ﺪ اﻟﺘ ﺎرﯾﺦ واﻟﻮﻗ ﺖ اﻟﺤ ﺎﻟﻲ ﻟﻠﺤﺎﺳ ﺐ وﻣ ﻦ ﺧﻼﻟﮭ ﺎ ﻣﻤﻜ ﻦ‬
‫إدﺧﺎل اﻟﺘﺎرﯾﺦ واﻟﻐﺮض ﻣﻦ ﻋﺮﺿﮭﺎ ھﻨﺎ ھﻮ ﻓﮭﻤﻚ ﻷﻧﮫ ﯾﻤﻜﻦ اﺳ ﺘﺨﺪام دوال ﻓ ﻲ ﺟﻤﻠ ﺔ اﻹﺿ ﺎﻓﺔ وﻟﻜ ﻦ أﺻ ﺒﺢ ﻋﻤ ﺮ‬
‫اﻟﻄﺎﻟﺐ اﻵن وﻻ ﯾﻮم ﻷﻧﮫ ﻣﻮﻟﻮد ﻓﻲ اﻟﯿﻮم وھﺬا ﺧﻄﺄ إﻧﻨﺎ ﻧﺮﯾﺪ ﺗﻌﺪﯾﻞ ھﺬه اﻟﻘﯿﻤﺔ ﻓﻤﺎذا ﻧﻔﻌﻞ ؟؟‬

‫‪Update Statement‬‬ ‫ﺛﺎﻧﯿﺎ ‪ :‬ﺟﻤﻠﺔ ﺗﻌﺪﯾﻞ ﺑﯿﺎن ﻓﻲ ﺻﻒ ﻣﻮﺟﻮد‬


‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ ‪Syntax‬‬

‫أﺳﻢ اﻟﺠﺪول ‪Update‬‬


‫‪Set‬‬ ‫] … ‪ ,‬اﻟﻘﯿﻤﺔ اﻟﺤﺪﯾﺜﺔ ﻟﮫ = أﺳﻢ ﺣﻘﻞ أﺧﺮ ‪ [ ,‬اﻟﻘﯿﻤﺔ اﻟﺤﺪﯾﺜﺔ = أﺳﻢ اﻟﺤﻘﻞ‬
‫‪[ Where‬‬ ‫] ﺷﺮط ﻣﻦ ﺧﻼﻟﮫ ﯾﺘﻢ اﻟﺘﺤﺪﯾﺚ ﻋﻠﻲ ﺻﻔﻮف ﻣﻌﯿﻨﺔ‬

‫ﺗﻔﺴﯿﺮ اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ ‪:‬‬


‫ﻧﻜﺘﺐ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ Update‬وﺗﻌﻨﻲ ﺗﺤﺪﯾﺚ وﺑﻌﺪھﺎ أﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد ﺗﻌﺪﯾﻞ ﻗ ﯿﻢ ﺑ ﮫ وﺑﻌ ﺪھﺎ اﻟﻜﻠﻤ ﺔ اﻷﺳﺎﺳ ﯿﺔ‬
‫‪ Set‬وﺗﻌﻨﻲ) ﺿﻊ ( وﺑﻌﺪھﺎ أﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺮاد ﺗﻐﯿﺮ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺑﺪاﺧﻠﮫ ﺛﻢ = ﺛﻢ اﻟﻘﯿﻤﺔ اﻟﺠﺪﯾﺪة اﻟﻤ ﺮاد إدﺧﺎﻟﮭ ﺎ وﺑﻌ ﺪ‬
‫ذﻟﻚ ﯾﻮﺟﺪ ﺟﺰء اﺧﺘﯿﺎري ﻣﻤﻜﻦ ﻣﻦ ﺧﻼل ﻧﻐﯿﺮ ﺑﻌﺾ اﻟﺤﻘﻮل اﻷﺧﺮى اﻟﻤﻮﺟﻮدة ﻓﻲ ﻧﻔﺲ اﻟﺠﺪول ﻋﻠﻲ أﺳﺎس أن ﻣﺎ‬
‫ﺑﯿﻦ ﻛﻞ ﺣﻘﻠﯿﻦ ﺑﻘﯿﻤﮭﻢ اﻟﺠﺪﯾﺪة ﻧﻔﺼﻞ ﺑﻔﺎﺻﻠﺔ ) ‪ ( ,‬وھﻜﺬا‬
‫وﺑﻌﺪھﺎ ﺟﺰء اﺧﺘﯿﺎري أﺧﺮ وﻟﻜﻨﮫ ھﺎم ﺟﺪا وﻟﻜﻲ ﻧﻔﮭﻤﮫ ﻧﺴﺄل ﺳﺆال وھ ﻮ اﻟﺠ ﺪول ﺑ ﮫ ﺻ ﻔﻮف ﻛﺜﯿ ﺮة )وﻟ ﯿﻜﻦ ﻃ ﻼب‬
‫ﻛﺜﯿﺮة ( وأﻧﺎ أرﯾﺪ ﺗﻌﺪﯾﻞ ﻗﯿﻤﺔ واﺣﺪة ﻓﻲ ﺻﻒ واﺣﺪ ﻓﻲ ھﺬا اﻟﺠﺪول )وﻟﯿﻜﻦ ﻗﯿﻤﺔ ﺗ ﺎرﯾﺦ ﻣ ﯿﻼد اﻟﻄﺎﻟ ﺐ ﻣﺤﻤ ﺪ ( وأﻧ ﺎ‬
‫اﻵن ﺣﺪدت ﻟﮫ ﻓﻲ ھﺬه اﻟﺠﻤﻠﺔ اﻟﺠﺪول واﻟﺤﻘﻞ اﻟﻤﺮاد ﺗﻌﺪﯾﻠﮫ وﻟﻢ أذﻛﺮ اﻟﺼﻒ ﻓﺄﯾﻦ ﯾﺘﻢ ﺗﺤﺪﯾﺪ اﻟﺼﻒ اﻟﻤﺮاد ﺗﻌﺪﯾﻠ ﮫ ؟‬
‫أﻧﮫ ﻣﻦ ﺧﻼل اﻟﺠﺰء ‪ where Clause‬ﻧﻜﺘﺐ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ Where‬وﻣﻌﻨﺎھﺎ ) ﻋﻨﺪﻣﺎ ﯾﻜ ﻮن( وﺑﻌ ﺪھﺎ ﻧﻜﺘ ﺐ‬
‫ﺷﺮط ﻣﻦ ﺧﻼﻟﮫ أﺻﻞ أﻟﻲ اﻟﺼﻒ اﻟﻤﺮاد‬
‫وﻟﻜﻦ اﻟﺴﺆال ھﻮ ﻛﯿﻒ أﺻﻞ إﻟﻲ ﺻﻒ اﻟﻤﺮاد ﺗﺤﺪﯾﺜﮫ‬
‫ھﻨﺎك ﻃﺮق ﻛﺜﯿﺮة وﻟﻜﻦ اﻵن ﺣﺘﻰ أﺣﺪد ﺻﻒ ﻣﻌﯿﻦ ﻣ ﻦ اﻟﻤﻤﻜ ﻦ أن أﺣ ﺪد ﻗﯿﻤ ﺔ اﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﻋﻠ ﻲ ﺳ ﺒﯿﻞ‬
‫اﻟﻤﺜﺎل‬
‫‪Where StudNo = 1212‬‬
‫ﻓﻼ ﯾﺘﻢ اﻟﺘﺤﺪﯾﺚ ﻧﮭﺎﺋﯿﺎ إﻟﻲ ﻋﻠﻲ اﻟﺼﻒ اﻟﺬي ﯾﻜﻮن ﻓﯿﮫ ﻗﯿﻤﺔ اﻟﺤﻘﻞ ‪ StudNo‬ﻣﺴﺎوﯾﺎ ﻟﻠﻘﯿﻤﺔ ‪ 1212‬وإن ﻟ ﻢ ﯾﺤ ﺪد‬
‫ﻓﻲ اﻟﺠﺰء ‪ Where‬اﻟﺸﺮط ﺳﻮف ﯾﺤﺪث اﻟﺠﺪول ﺑﺎﻟﻜﺎﻣﻞ ﺑﻜ ﻞ ﺻ ﻔﻮﻓﮫ ﺑ ﺎﻟﻘﯿﻢ اﻟﻤﻜﺘﻮﺑ ﺔ ﻓ ﻲ اﻟﺠ ﺰء ‪ SET‬اﻟﺨ ﺎص‬
‫ﺑﺠﻤﻠﺔ ‪ Update‬وﯾﻤﻜﻦ ﺗﺤﺪﯾﺪ ﻗﯿﻤﺔ ﻟﺤﻘﻞ وھﺬه اﻟﻘﯿﻤﺔ ﻣﻮﺟ ﻮدة ﻋﻨ ﺪ أﻛﺜ ﺮ ﻣ ﻦ ﺳ ﺠﻞ ﻓ ﻲ ھ ﺬه اﻟﺤﺎﻟ ﺔ ﺳ ﻮف ﯾﻨﻔ ﺬ‬

‫‪55‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻟﺘﺤﺪﯾﺚ ﻋﻠﻲ ﻛﻞ اﻟﺼﻔﻮف اﻟﺘﻲ ﯾﻨﻄﺒﻖ ﻋﻠﯿﮭﺎ اﻟﺸﺮط وھﻨ ﺎك اﻟﻜﺜﯿ ﺮ ﻓ ﻲ اﻟﺤ ﺪﯾﺚ ﻋ ﻦ اﻟﺠ ﺰء ‪Where Clause‬‬
‫اﻟﺬي ﺳﻮف ﻧﺘﺤﺪث ﻋﻨﮫ ﻓﻲ ﺟﺰء اﻻﺳﺘﻌﻼﻣﺎت ﺑﺎﻟﺘﻔﺼﯿﻞ‬
‫واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ ﻛﯿﻔﯿﺔ اﻟﻮﺻﻮل إﻟﻲ ﻗﯿﻤﺔ ﻣﺎ ﻓﻲ ﺻﻒ ﺑﯿﺎﻧﺎت ﻣﻌﯿﻦ ﻣﻦ ﺟﺪول ﻣﺎ ﺣﺘﻰ ﯾﺘﻢ ﺗﻌﺪﯾﻠﮭﺎ‬

‫أﺧﻄﺎء ھﺬه اﻟﺠﻤﻠﺔ ‪:‬‬


‫ﻗﺪ ﺗﺤﺪث ﺑﻌﺾ اﻷﺧﻄﺎء اﻟﮭﺎﻣﺔ ﻓﻲ ھﺬه اﻟﺠﻤﻠﺔ ﺑﻌﯿﺪا ﻋﻦ ﺷﻜﻠﮭﺎ اﻟﻌﺎم ﻻﺑﺪ ﻣﻦ ﻓﮭﻤﮭﺎ ﺟﯿﺪا‬
‫وھﻲ ﻧﻔﺲ اﻷﺧﻄﺎء اﻟﻤﻮﺟﻮد ﻓﻲ ﺟﻤﻠﺔ ‪ ) Insert‬راﺟﻊ أﺧﻄﺎء ﺟﻤﻠﺔ ‪( Insert‬‬

‫ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﺑﺪون اﻟﺠﺰء ‪ Where‬واﻟﺠﺰء اﻟﺨﺎص ﺑﺄﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ‬

‫ﻣﻦ ﺧﻼل ھﺬا اﻟﺸﻜﻞ ﻧﺤﺪد اﻟﺠﻤﻠﺔ ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻲ ‪F5‬‬


‫ﺳﻮف ﺗﻈﮭﺮ اﻟﺮﺳﺎﻟﺔ ‪ 9 rows affected‬أي ‪ ٩‬ﺻﻔﻮف‬
‫ﺑﯿﺎﻧﺎت ﻗﺪ ﺗﺄﺛﺮ ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ وﺑﺎﻟﻄﺒﻊ ﻋﻠﻲ ﺷﺮط‬
‫وﺟﻮد ﻗﺴﻢ رﻗﻢ ‪ ١‬ﻓﻲ ﺟﺪول اﻷﻗﺴﺎم واﻟﺼﻔﻮف ‪ ٩‬ھﻢ ﻋﺪد‬
‫ﺻﻔﻮف اﻟﺠﺪول ﻟﺬﻟﻚ ﻗﺪ ﺗﻢ اﻟﺘﺄﺛﯿﺮ ﻋﻠﻲ اﻟﺠﺪول ﻛﻠﮫ ﺑﺠﻤﯿﻊ‬
‫ﺻﻔﻮﻓﮫ‬

‫وﯾﻄﻠﻖ ﻋﻠﻲ )=( ھﻨﺎ ﻣﻌﺎﻣﻞ اﻟﺘﺨﺼﯿﺺ ﺣﯿﺚ أﻧﮫ ﺧﺼﺺ ﻟﻠﺤﻘﻞ‬
‫‪ DeptWork‬اﻟﻘﯿﻤﺔ ‪١‬‬
‫ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﺑﺎﺳﺘﺨﺪام اﻟﺠﺰء ‪ Where‬وﺑﺪون أﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ‬
‫ﻣﻦ ﺧﻼل ھﺬا اﻟﺸﻜﻞ ﻧﺤﺪد اﻟﺠﻤﻠﺔ ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻲ ‪F5‬‬
‫ﺳﻮف ﺗﻈﮭﺮ اﻟﺮﺳﺎﻟﺔ ‪ 1 row affected‬أي ﺻﻒ‬
‫ﺑﯿﺎﻧﺎت واﺣﺪ ﻗﺪ ﺗﺄﺛﺮ ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ وھﻮ اﻟﺼﻒ‬
‫اﻟﺨﺎص ﺑﺎﻟﻄﺎﻟﺐ رﻗﻢ ‪ ١٢١٢‬اﻟﻤﺴﻤﻲ ﻣﺤﻤﺪ ﻛﻤﺎ ذﻛﺮ ﻣﻦ‬
‫ﻗﺒﻞ‬
‫وھﻨﺎ اﻟﻤﻌﺎﻣﻞ = ﻓﻲ ﺟﻤﻠﺔ ‪ Where‬ﻻ ﯾﺨﺼﺺ أو ﯾﻀﻊ اﻟﻘﯿﻤﺔ‬
‫‪ ١٢١٢‬داﺧﻞ اﻟﺤﻘﻞ ‪ StudNo‬ﻟﺬﻟﻚ ﯾﻄﻠﻖ ﻋﻠﯿﮫ ﻣﻌﺎﻣﻞ ﻣﻘﺎرﻧﺔ‬
‫وﯾﺨﺘﻠﻒ ھﺬا اﻟﻤﻌﺎﻣﻞ ﻋﻦ اﻟﺬي ﻓﻮﻗﺔ اﻟﺬي ﯾﺨﺼﺺ ﻗﯿﻤﺔ اﻟﺘﺎرﯾﺦ‬
‫ﻟﻠﺤﻘﻞ ‪ BDate‬وھﺬا ﻓﺮق ﺑﯿﻦ اﻟﻤﻌﺎﻣﻠﯿﻦ ﻣﻊ أﻧﮭﻢ ﻧﻔﺲ اﻟﺸﻜﻞ‬

‫‪56‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺗﻌﺪﯾﻞ أﻛﺜﺮ ﻣﻦ ﺑﯿﺎن ﻷﻛﺜﺮ ﻣﻦ ﺻﻒ ﻣﺤﺪد ﻣﻦ ﺧﻼل اﻟﺠﺰء ‪Where‬‬

‫ﻓ ﻲ ھ ﺬا اﻟﻤﺜ ﺎل ﯾﻌ ﺪل اﻟﻤﺮﺗ ﺐ ﺑﺈﺿ ﺎﻓﺔ ‪ %١٠‬وﯾﻌ ﺪل اﻟﻤﺪﯾﻨ ﺔ ﻟﺘﻜ ﻮن اﻟﺠﯿ ﺰة وھ ﺬا ﻟﻜ ﻞ اﻟ ﺼﻔﻮف ﻋﻨ ﺪﻣﺎ ﯾﻜ ﻮن ﺣﻘ ﻞ‬
‫اﻟﺮﺗﺒﺔ اﻟﺠﺎﻣﻌﯿﺔ ‪ Mr‬أي أﺳﺘﺎذ ﺗﻼﺣﻆ أن ھﻨﺎك ﺛﻼث ﺻﻔﻮف ﻓﻘﻂ ﻣﻦ اﻟﺠﺪول اﻟﺬي ﺗﻢ ﻋﻠﯿﮭﻢ اﻟﺘﺄﺛﯿﺮ وھﻢ ﻣ ﻦ ﯾﻜ ﻮن‬
‫اﻟﺮﺗﺒﺔ اﻟﺠﺎﻣﻌﯿﺔ ﻟﮭﻢ ‪Mr‬‬

‫‪Delete Statement‬‬ ‫ﺛﺎﻟﺜﺎ ‪ :‬ﺟﻤﻠﺔ ﺣﺬف ﻋﺪه ﺻﻔﻮف أو ﺻﻒ ﻣﺎ‬


‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ ‪Syntax‬‬

‫أﺳﻢ اﻟﺠﺪول ] ‪Delete [ From‬‬


‫‪[ Where‬‬ ‫] ﺷﺮط ﻣﻦ ﺧﻼﻟﮫ ﯾﺘﻢ ﻣﺴﺢ ﺻﻔﻮف ﻣﻌﯿﻨﺔ‬

‫ﺗﻔﺴﯿﺮ اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ ‪:‬‬


‫ﺑﻌﺪ ﻛﺘﺎﺑﺔ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳ ﯿﺔ ‪ Delete‬واﻟﺘ ﻲ ﺗﻌﻨ ﻲ ﻣ ﺴﺢ أو ﺣ ﺬف ﺑﻌ ﺪھﺎ ﯾﻤﻜ ﻦ ﻛﺘﺎﺑ ﮫ ﻛﻠﻤ ﺔ اﺧﺘﯿﺎرﯾ ﺔ وھ ﻲ ‪From‬‬
‫وﻣﻌﻨﺎھﺎ )ﻣﻦ( وﺑﻌ ﺪھﺎ أﺳ ﻢ اﻟﺠ ﺪول اﻟ ﺬي ﻧﺮﯾ ﺪ ﻣ ﺴﺢ ﺑﯿﺎﻧ ﺎت ﻣﻨ ﮫ ﺛ ﻢ اﻟﺠ ﺰء اﻻﺧﺘﯿ ﺎري ‪ Where‬اﻟ ﺬي ﻧﺤ ﺪد ﻣ ﻦ‬
‫ﺧﻼﻟ ﮫ أي اﻟ ﺼﻔﻮف اﻟﺘ ﻲ ﯾ ﺘﻢ ﻣ ﺴﺤﮭﺎ ﺑ ﻨﻔﺲ اﻟﻤﻨﮭﺠﯿ ﺔ اﻟ ﺴﺎﺑﻖ ﺷ ﺮﺣﮭﺎ ﻓ ﻲ ﺟﻤﻠ ﺔ ‪ Update‬وأن ﻟ ﻢ ﺗﻜ ﻦ ﺟﻤﻠ ﺔ‬
‫‪ where‬ﻣﻮﺟﻮدة ﺳﻮف ﯾﺘﻢ ﻣﺴﺢ ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺠﺪول اﻟﻤﺬﻛﻮر‪.‬‬

‫أﺧﻄﺎء ھﺬه اﻟﺠﻤﻠﺔ ‪:‬‬


‫ﻗﺪ ﺗﺤﺪث ﺑﻌﺾ اﻷﺧﻄﺎء اﻟﮭﺎﻣﺔ ﻓﻲ ھﺬه اﻟﺠﻤﻠﺔ ﺑﻌﯿﺪا ﻋﻦ ﺷﻜﻠﮭﺎ اﻟﻌﺎم ﻻﺑﺪ ﻣﻦ ﻓﮭﻤﮭﺎ ﺟﯿﺪا‬
‫وھﻲ ﻧﻔﺲ اﻷﺧﻄﺎء اﻟﻤﻮﺟﻮد ﻓﻲ ﺟﻤﻠﺔ ‪ Insert‬وﺟﻤﻠﺔ ‪ Update‬ﺑﺎﻹﺿﺎﻓﺔ إﻟﻲ‬
‫§ ﻋﻨﺪ ﺣﺬف ﺻﻒ ﺑﯿﺎﻧﺎت ﺑﮫ ﻣﻔﺘﺎح رﺋﯿﺴﻲ ﻣﺮﺗﺒﻂ ﺑﻌﻼﻗ ﺔ ﻣ ﻊ ﻣﻔﺘ ﺎح ﺧ ﺎرﺟﻲ ﻓ ﻲ ﺟ ﺪول اﺧ ﺮ واﻟﺠ ﺪول‬
‫اﻷﺧﺮ ﺑﮫ ﺑﯿﺎﻧﺎت وﻋﻨﺪ ﻋﻤﻞ اﻟﻌﻼﻗﺔ ﻟﻢ ﺗﺬﻛﺮ ‪On Delete Cascade‬‬
‫ﻣﺜﺎل ﻋﻠﻲ ھﺬا اﻟﺨﻄﺄ ﺣﺬف ﺑﯿﺎﻧﺎت اﻷﻗﺴﺎم ﻋﻠﻤﺎ ﺑﺄن ﺑﮭﺎ ﻣﺪرﺳﯿﻦ وﻻ ﯾﻮﺟﺪ ﻋﻠﻲ اﻟﻘﯿﺪ ‪On Delete Cascade‬‬

‫‪57‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻟﺤﺬف ﺑﯿﺎﻧﺎت اﻟﺠﺪول ﺑﺎﻟﻜﺎﻣﻞ ﻧﺘﺒﻊ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻣﻦ ﺧﻼل ھﺬا اﻟﺸﻜﻞ ﻧﺤﺪد اﻟﺠﻤﻠﺔ ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻲ ‪F5‬‬


‫ﺳﻮف ﺗﻈﮭﺮ اﻟﺮﺳﺎﻟﺔ ‪ 17 rows affected‬أي‪17‬‬
‫ﺻﻒ ﺑﯿﺎﻧﺎت ﻗﺪ ﺗﺄﺛﺮوا ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ‬
‫وھﻢ ﻋﺪد اﻟﺼﻔﻮف اﻟﻤﻮﺟﻮدة ﻓﻲ ھﺬا اﻟﺠﺪول‬

‫ﻟﺤﺬف ﺑﯿﺎﻧﺎت ﻃﺎﻟﺐ ﻣﻌﯿﻦ ﻧﺘﺒﻊ اﻷﺗﻲ‬

‫ﻣﻦ ﺧﻼل ھﺬا اﻟﺸﻜﻞ ﻧﺤﺪد اﻟﺠﻤﻠﺔ ﺛﻢ ﻧﻀﻐﻂ ﻋﻠﻲ ‪F5‬‬


‫ﺳﻮف ﺗﻈﮭﺮ اﻟﺮﺳﺎﻟﺔ ‪ 1 row affected‬أي ‪1‬‬
‫ﺻﻒ ﺑﯿﺎﻧﺎت ﻗﺪ ﺗﺄﺛﺮ ﻣﻦ ﺧﻼل ھﺬه اﻟﺠﻤﻠﺔ وھﻮ اﻟﻄﺎﻟﺐ‬
‫رﻗﻢ ‪٩٩٩٩‬‬

‫‪Controlling Transactions‬‬ ‫اﻟﺘﺤﻜﻢ ﻓﻲ اﻟﺤﻔﻆ واﻟﺘﺮاﺟﻊ ﻋﻦ اﻟﺠﻤﻞ اﻟﻤﻨﻔﺬة‬ ‫§‬


‫‪Begin Transaction‬‬ ‫· ﺑﺪاﯾﺔ ﺟﺰء ﺑﮫ ﻋﻤﻠﯿﺎت ﻣﻌﯿﻨﺔ‬
‫· ﻧﻘﻄﺔ ‪ ،‬ﻋﻤﻠﯿﺔ ﻣﻦ ﻋﻤﻠﯿﺎت اﻟﺠﺰء اﻟﺤﺎﻟﻲ ‪Save Transaction‬‬
‫‪Commit Transaction‬‬ ‫· ﺣﻔﻆ ﻧﻘﻄﺔ ﻣﺎ ﻣﻦ اﻟﻌﻤﻠﯿﺎت‬
‫‪Rollback Transaction‬‬ ‫· اﻟﺘﺮاﺟﻊ ﺣﺘﻰ ﻧﻘﻄﺔ ﻣﺎ أو اﻟﻌﻤﻠﯿﺎت‬
‫ﻧﺤﻦ ﻓﻲ ﺻﺪد ﻣﻮﺿﻮع ھﺎم وﻃﻮﯾﻞ ﻟﻜﻨﻨﺎ ﺳﻮف ﻧﺄﺧﺬه ﻣﻨﮫ ﺟﺰء ﺑﺴﯿﻂ ﯾﮭﻤﻨﺎ ﺟﺪا وھﻮ ﻋﻨ ﺪ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ اﻟﺒﯿﺎﻧ ﺎت ﻗ ﺪ‬
‫ﻧﻜﻮن ﻓﻲ أﻛﺜﺮ اﻷﺣﯿﺎن ﻧﺠﺮب ﺑﻌﺾ اﻟﺠﻤﻞ وﻧﺮﯾﺪ اﻟﺘﺮاﺟﻊ ﻋﻦ ﺟﺰء ﻣﻨﮭﺎ وﻧﺠﺮب ﺟﻤﻞ أﺧﺮي وھﻜﺬا وﻗﺪ ﻻ ﻧﺮﯾﺪ أن‬
‫ﯾﻄﻠﻊ أي ﻣﺴﺘﺨﺪم أﺧﺮ ﻋﻠﻲ ﺗﻠﻚ اﻟﺒﯿﺎﻧﺎت ﺣﺘﻰ ﯾﺘﻢ اﻻﻧﺘﮭﺎء ﻣﻨﮭﺎ ﻋﻠﻲ اﻟﻌﻤﻮم اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ ﺗﻠﻚ اﻟﻌﻤﻠﯿﺎت ‪:‬‬

‫‪58‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺗﻔﺴﯿﺮ اﻟﺸﻜﻞ ‪:‬‬


‫ﺗﻼﺣﻆ ﻣﻌﻲ ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ ﻓﻲ اﻟﺒﺎدﯾﺔ ﻻﺑﺪ ﻣﻦ ﻋﻘﺪ ﺟﻠﺴﺔ ﯾﻤﻜﻨﻨﺎ ﻣﻦ ﺧﻼﻟﮭﺎ اﻟﺤﻔ ﻆ واﻟﺘﺮاﺟ ﻊ ﻋ ﻦ اﻟﺠﻤ ﻞ ﻟﺒﺪاﯾ ﺔ‬
‫ﻋﻤﻞ ﺟﻠﺴﺔ ﻧﺒﺪأ ﺑﺎﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ Begin Tran‬أو ‪ Begin Transaction‬ﻓﻜﻼھﻤﺎ واﺣﺪ وﺑﻌﺪھﺎ ﻧﻜﺘﺐ أﺳﻢ‬
‫ﻟﮭﺬه اﻟﺠﻠﺴﺔ ‪.‬‬
‫وﯾﻼﺣﻆ أن ھﺬه اﻟﺠﻠﺴﺔ ﺗﻤﺖ ﻓﯿﮭﺎ ﻋﻤﻠﯿﺎت ﻛﺜﯿ ﺮة ﺑ ﺪأﻧﺎ ﻧ ﺴﻤﻲ أول ﺟ ﺰء ﺑﺎﻟﻜﻠﻤ ﺔ ‪ Save Tran‬وﺑﻌ ﺪھﺎ أﺳ ﻢ ﻟﮭ ﺬه‬
‫اﻟﻨﻘﻄﺔ وﺑﻌﺪھﺎ ﺗﻤﺖ ﻋﻤﻠﯿﮫ ‪ Create‬وﺑﻌﺪھﺎ أﻃﻠﻘﻨﺎ أﺳﻤﺎ أﺧﺮ وﺑﻌﺪه ﻋﻤﻠﯿﺔ ‪ Insert‬وھﻜﺬا ﺣﺘﻰ اﻟﻨﮭﺎﯾﺔ‪.‬‬
‫ﯾﻼﺣﻆ ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﺠﻠﺴﺔ أﻧﻨﺎ ﻧﻨﮭﯿﮭﺎ ﺑﺄﺣﺪي اﻟﻜﻠﻤﺘﯿﻦ إﻣﺎ اﻟﺤﻔﻆ اﻟﺘﺎم ﻟﻠﺤﺎﻟﺔ اﻟﺤﺎﻟﯿﺔ اﻟﻨﮭﺎﺋﯿ ﺔ ﻟﮭ ﺬه اﻟﺠﻠ ﺴﺔ ﺑﺎﺳ ﺘﺨﺪام‬
‫اﻷﻣ ﺮ ‪ Commit Tran‬أو ‪ Commit Transaction‬ﺑ ﺎﻟﻄﺒﻊ أﻣ ﺎ ﻋ ﻦ اﻟﺘﺮاﺟ ﻊ ﻋ ﻦ ﻛ ﻞ ﻣ ﺎ ﺗ ﻢ ﻓ ﻲ ھ ﺬه‬
‫اﻟﺠﻠﺴﺔ ﯾﻤﻜﻦ ذﻟﻚ ﻣﻦ ﺧﻼل اﻟﻜﻠﻤﺔ ‪. RollBack Work‬‬
‫ﻟﻮ ﻗﺒﻞ اﻟﺠﺰء اﻟﺨﺎص ﺑﺈﻧﮭﺎء اﻟﺠﻠﺴﺔ وﺗﻢ ﻋﻤﻞ اﻷﻣ ﺮ ‪ RollBack Tran Point_1‬ﻓﻤﻌﻨﺎھ ﺎ اﻟﺘﺮاﺟ ﻊ ﻋ ﻦ ﻛ ﻞ‬
‫اﻟﻌﻤﻠﯿﺎت ﺣﺘﻰ اﻟﻮﺻﻮل إﻟﻲ اﻟﻨﻘﻄﺔ ‪ Point_1‬وﺑﻤﺎ أﻧ ﮫ أول أﻣ ﺮ ﻓ ﺴﻮف ﯾ ﺘﻢ اﻟﺘﺮاﺟ ﻊ ﻋ ﻦ ﺟﻤﯿ ﻊ اﻟﻌﻤﻠﯿ ﺎت ﻟﻜ ﻦ ﻻ‬
‫ﺗﻨﮭﻲ اﻟﺠﻠﺴﺔ أﻣﺎ أﺻﺪرﻧﺎ اﻷﻣﺮ ‪ RollBack Tran Point_3‬ﻓﻤﻌﻨﺎھﺎ أﻧﮫ ﺳﻮف ﯾﺘﻢ اﻟﺘﺮاﺟ ﻊ ﺣﺘ ﻰ ﺗﻠ ﻚ اﻟﻨﻘﻄ ﺔ‬
‫أي أن أﺧ ﺮ ﺛ ﻼث ﺟﻤ ﻞ وھ ﻢ ‪ Update , Insert , Delete‬ﻗ ﺪ ﺗ ﻢ اﻟﺘﺮاﺟ ﻊ ﻋ ﻨﮭﻢ أﻣ ﺎ ﻟ ﻮ أﺻ ﺪرﻧﺎ اﻷﻣ ﺮ‬
‫‪ RollBack Tran Point_5‬ﻓﺴﻮف ﯾﺘﻢ اﻟﺘﺮاﺟﻊ ﺣﺘﻰ ھﺬه اﻟﻨﻘﻄﺔ أي أﻧﮫ ﺳﻮف ﯾﺘﻢ اﻟﺘﺮاﺟﻊ ﻋﻦ أﻣ ﺮ اﻟﻤ ﺴﺢ‬
‫ﻓﻘﻂ ‪.‬‬
‫أﻣﺜﻠﺔ ‪:‬‬
‫‪Begin Tran MyTran_1‬‬
‫ﺑﺪاﯾﺔ ﺟﻠﺴﺔ ﺗﺴﻤﻲ ‪MyTran_1‬‬

‫‪Save Tran Point_1‬‬


‫)‪Create Table Test (Col1 int‬‬
‫' ‪Print 'Table Created Now‬‬

‫ﺗﻢ ﺗﺤﺪﯾﺪ ﻧﻘﻄﺔ ﺗﺴﻤﻲ ‪ 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.‬‬

‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬


‫‪59‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺑﻨﺎء ﺟﻤﻠﺔ اﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ‪Retrieving Data Statement Structure‬‬


‫‪Grid Pane and Query Analyzer‬‬
‫أوﻻ ‪ :‬ﻛﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻷﺳﺎﺳﯿﺔ ﻻﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت‪.‬‬
‫‪ (١‬اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ اﻟﺤﻘﻮل ‪.‬‬
‫‪ (٢‬اﺳﺘﺮﺟﺎع ﺣﻘﻮل ﻣﻌﯿﻨﺔ ‪.‬‬
‫‪ (٣‬اﺳﺘﺨﺪام اﻟﺘﻌﺒﯿﺮات اﻟﺮﯾﺎﺿﯿﺔ وأوﻟﻮﯾﺎت ﺗﻨﻔﺬھﺎ ‪.‬‬
‫‪ (٤‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻘﯿﻤﺔ اﻟﺨﺎﻟﯿﺔ ‪.‬‬
‫‪ (٥‬اﺳﺘﺨﺪام ﻋﻨﺎوﯾﻦ ﻣﺴﺘﻌﺎرة ‪.‬‬
‫‪ (٦‬ﻣﻌﺎﻣﻞ دﻣﺞ اﻟﺒﯿﺎﻧﺎت ‪.‬‬
‫‪ (٧‬إﻟﻐﺎء ﺗﻜﺮار اﻟﺒﯿﺎﻧﺎت‪.‬‬
‫ﺛﺎﻧﯿﺎ ‪ :‬اﺳﺘﺮﺟﺎع ﺻﻔﻮف ﻣﺤﺪدة ﻣﻦ اﻻﺳﺘﻌﻼم وﺗﺮﺗﯿﺒﮭﺎ‪.‬‬
‫‪ (١‬ﻋﻮاﻣﻞ اﻟﻤﻘﺎرﻧﺔ ‪.‬‬
‫‪ (٢‬اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ‪.‬‬
‫‪ (٣‬اﻟﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي واﻟﺘﻨﺎزﻟﻲ ﻟﻠﺒﯿﺎﻧﺎت‪.‬‬

‫أوﻻ ‪ :‬ﻛﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻷﺳﺎﺳﯿﺔ ﻻﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ‪Writing Basic Select Statement‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﺠﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع اﻟﺒﺴﯿﻄﺔ ‪Basic SELECT Statement Syntax‬‬

‫] ‪ ], ….‬أﺳﻢ ﻣﺴﺘﻌﺎر ﻟﻠﺤﻘﻞ اﻟﺜﺎﻧﻲ [ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ ‪] [,‬أﺳﻢ ﻣﺴﺘﻌﺎر ﻟﻠﺤﻘﻞ اﻷول [ اﻟﺤﻘﻞ اﻷول | * ‪Select‬‬
‫‪From‬‬ ‫أﺳﻢ اﻟﺠﺪول اﻟﺬي ﺳﯿﺘﻢ اﺳﺘﺮﺟﺎع اﻟﺤﻘﻮل ﻣﻨﮫ‬

‫ﺗﻔﺴﯿﺮ اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ ‪:‬‬


‫ﻓﻲ اﻟﺤﻘﯿﻘﺔ أن اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﮭﺬه اﻟﺠﻤﻠﺔ ﻟﯿﺲ ھﻮ اﻟﺸﻜﻞ اﻟﻨﮭﺎﺋﻲ ﻟﮭﺎ ﺑﻞ ھﻮ ﺷﻜﻞ ﺳﻮف ﯾﺘﻄﻮر ﻣﻌﻨ ﺎ ﺧ ﻼل اﻟ ﺪروس‬
‫اﻟﻘﺎدﻣﺔ ﻟﯿﻜﻮن أﻛﺜﺮ دﻗﺔ ‪.‬‬
‫ﻛﻠﻤﺔ ‪ Select‬وﻣﻌﻨﺎھﺎ ھﻨﺎ )أﺳﺘﺮﺟﻊ( وﺑﻌﺪھﺎ ﻧ ﻀﻊ اﻟﺮﻣ ﺰ * وﻣﻌﻨ ﺎه )ﻛ ﻞ اﻟﺤﻘ ﻮل( واﻟﻌﻼﻣ ﺔ ) | ( ﺗﻌﻨ ﻲ أو ﯾﻌﻨ ﻲ‬
‫ﻣﻦ اﻟﻤﻤﻜﻦ إدﺧﺎل ﻋﻼﻣﺔ اﻟﻨﺠﻤﺔ ﻟﻜﻲ ﺗﻤﺜﻞ ﻛﺎﻓﺔ اﻟﺤﻘﻮل أو ﻧﻀﻊ أﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺮاد اﺳﺘﺮﺟﺎﻋﮫ وﺟﺰء اﺧﺘﯿﺎري وھﻮ‬
‫ﻋﻨﻮان ﻣﺴﺘﻌﺎر ﻟﻠﺤﻘﻞ ھﺬا إن ﻛﻨﺎ ﻧﺮﯾﺪ اﺳﺘﺮﺟﺎع ﺣﻘﻞ واﺣﺪ أﻣﺎ إذا أردﻧﺎ اﺳﺘﺮﺟﺎع أﻛﺜﺮ ﻣﻦ ﺣﻘﻞ ﻓﻌﻠﯿﻨﺎ وﺿﻊ أﺳﻤﺎء‬
‫ﻛﻞ اﻟﺤﻘﻮل اﻟﺘﻲ ﻧﺮﯾﺪھﺎ ﻋﻠﻲ أﺳﺎس أﻧﮫ اﺧﺘﯿﺎري ﻟﻨﺎ أن ﻧﻜﺘﺐ أﺳﻤﺎ ﻣﺴﺘﻌﺎرا ﻟﻜﻞ ﺣﻘﻞ وﻟﻜ ﻦ ﻻﺑ ﺪ أن ﻧﻔ ﺼﻞ ﺑ ﯿﻦ ﻛ ﻞ‬
‫ﺣﻘﻠﯿﻦ ﺑﻔﺎﺻﻠﺔ ) ‪ ( ,‬ﺛﻢ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ From‬وھﻲ ﺗﻌﻨﻲ )ﻣﻦ أﯾﻦ( ﻧﻌﻢ ﻗﺪ أﻣﺮﺗﮫ ﺑﺎﺳﺘﺮﺟﺎع اﻟﺤﻘﻮل وﻟﻜ ﻦ ﻣ ﻦ‬
‫أﯾﻦ أﺳﺘﺮﺟﻊ ھﺬه اﻟﺤﻘﻮل ﻻﺑﺪ أن أذﻛﺮ أﺳﻢ اﻟﺠﺪول اﻟﺬي أرﯾﺪ أن أﺳﺘﺮﺟﻊ ھﺬه اﻟﺤﻘﻮل ﻣﻨﮫ ‪.‬‬

‫‪ -١‬اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ اﻟﺤﻘﻮل ‪. Selecting All Columns‬‬


‫‪Query Analyzer‬‬
‫ﺑﺎﺳﺘﺨﺪام ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﻟﻤﺪرﺳﺔ‬
‫‪Use School‬‬
‫اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ Select‬أي أﺳﺘﺮﺟﻊ ﻛﺎﻓﺔ‬
‫اﻟﺤﻘﻮل )اﻟﺮﻣﺰ*( ﻣﻦ ﺟﺪول ﻛﻠﻤﺔ)‪(From‬‬
‫ﺟﺪول اﻷﻗﺴﺎم وھﻮ ‪Department‬‬
‫ﻧﺤﺪد ھﺬه اﻟﺠﻤﻠﺔ ﺛﻢ ﻧﻀﻐﻂ ‪F5‬‬
‫ﻓﺘﻈﮭﺮ ﻟﻨﺎ اﻟﻨﺘﯿﺠﺔ‬

‫‪60‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Grid Pane‬‬
‫وﻟﻔﺘﺢ ﻃﺮﯾﻘﺔ اﻟﺸﺒﻜﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﺠﺪول اﻟﻤﻄﻠﻮب اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ ﺑﯿﺎﻧﺎﺗ ﮫ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس‬
‫وﻧﺨﺘﺎر ‪ Open Table‬وﻣﻨﮭﺎ ﻧﺨﺘﺎر ‪ Query‬إي اﻻﺳﺘﻌﻼﻣﺎت ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ وﺑﻌﺪھﺎ ﻟﻨﺎ اﻟﻘﺪرة ﻋﻠ ﻲ إﺻ ﺪار‬
‫أي أواﻣﺮ اﺳﺘﺮﺟﺎع ﺑﯿﺎﻧﺎت ‪:‬‬

‫وﺳﻮف ﺗﻜﻮن اﻟﺸﺎﺷﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﺑﺎﻟﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺗﻈﮭﺮ ﻟﻨﺎ ﻗﺎﺋﻤﺔ ھﺎﻣﺔ‬


‫أھﻢ ﻧﻘﺎﻃﮭﺎ اﻷﺗﻲ‬

‫‪ Run‬ﺗﻨﻔﯿﺬ اﻷﻣﺮ اﻟﺤﺎﻟﻲ‬


‫‪ Add Table‬إﺿﺎﻓﺔ ﺟﺪول ﻟﻼﺳﺘﻌﻼم‬
‫‪ Group By‬اﺳﺘﻌﻼﻣﺎت إﺣﺼﺎﺋﯿﺔ‬
‫‪ Change Type‬ﺗﻐﯿﯿﺮ ﻧﻮع اﻻﺳﺘﻌﻼم‬
‫‪ Show Panes‬إﺧﻔﺎء وإﻇﮭﺎر اﻟﺸﺎﺷﺎت‬
‫‪ Diagram‬ﻋﺮض ﺟﺪاول اﻻﺳﺘﻌﻼم اﻟﺤﺎﻟﯿﺔ‬
‫‪ Grid‬ﺷﺒﻜﺔ ﺑﻨﺎء اﻻﺳﺘﻌﻼم‬
‫‪ SQL‬إﻇﮭﺎر ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم‬
‫‪ Results‬ﻧﺘﯿﺠﺔ اﻻﺳﺘﻌﻼم‬
‫‪ Properties‬ﺧﺼﺎﺋﺺ اﻟﺠﻤﻠﺔ‬

‫واﻵن ﻻﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ اﻟﺒﯿﺎﻧﺎت‬


‫ﻓﻲ اﻟﺸﺒﻜﺔ ‪ Grid Pane‬ﻓﻲ اﻟﺠﺰء ‪Column‬‬
‫ﻧﺨﺘﺎر *‪ Department.‬اﻟﻤﻌﻮﺿﺔ ﻋﻦ ﻛﻞ اﻟﺤﻘﻮل‬
‫وﺗﻠﻘﺎﺋﯿﺎ ﻓﻲ اﻟﺨﺎﻧﺔ ‪ Table‬ﺳﯿﻜﺘﺐ أﺳﻢ اﻟﺠﺪول واﻟﺨﺎﻧﺔ‬
‫‪ Output‬اﻟﺮﻣﺰ ﺻﺢ ﻹﻇﮭﺎر ﺑﯿﺎﻧﺎت ذﻟﻚ اﻟﻌﻤﻮد‬
‫ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﻧﺨﺘﺎر ‪ Run‬ﻟﻠﺘﻨﻔﯿﺬ ﺗﻈﮭﺮ ﺗﻠﻚ‬
‫اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺠﺰء ‪Results‬‬

‫‪61‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪ -٢‬اﺳﺘﺮﺟﺎع ﺣﻘﻮل ﻣﻌﯿﻨﮫ ‪. Selecting Specific Columns‬‬

‫‪Query Analyzer‬‬ ‫‪Grid Pane‬‬ ‫‪Result‬‬


‫‪Select‬‬ ‫‪DeptNo‬‬ ‫‪,‬‬
‫‪DName‬‬
‫‪From Department‬‬

‫ﻧﻔﺼﻞ ﺑﯿﻦ ﻛﻞ ﺣﻘﻠﯿﻦ ﺑﻔﺎﺻﻠﺔ وﻓﻲ اﻟﺸﺒﻜﺔ ﻣﻦ اﻟﺤﻘﻞ ‪ Column‬ﻓﻲ اﻟﺼﻒ اﻷول ﻧﺨﺘﺎر اﻟﺤﻘﻞ اﻟﻤﺮاد ﺛﻢ ﻓﻲ‬
‫اﻟﺼﻒ اﻟﺬي ﯾﻠﯿﮫ ﻧﺨﺘﺎر اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ وھﻜﺬا‬

‫‪ -٣‬اﺳﺘﺨﺪام اﻟﺘﻌﺒﯿﺮات اﻟﺮﯾﺎﺿﯿﺔ وأوﻟﻮﯾﺎت ﺗﻨﻔﺬھﺎ ‪Arithmetic Expression & Precedence‬‬


‫اﻷوﻟﻮﯾﺔ‬ ‫وﺻﻒ‬ ‫اﻻﺳﻢ ‪Name‬‬ ‫اﻟﻤﻌﺎﻣﻞ ‪operator‬‬
‫‪I‬‬ ‫اﻟﻀﺮب‬ ‫‪Multiplication‬‬ ‫*‬
‫‪I‬‬ ‫اﻟﻘﺴﻤﺔ‬ ‫‪Division‬‬ ‫‪/‬‬
‫‪II‬‬ ‫اﻟﺠﻤﻊ‬ ‫‪Addition‬‬ ‫‪+‬‬
‫‪II‬‬ ‫اﻟﻄﺮح‬ ‫‪Subtraction‬‬ ‫‪-‬‬
‫اﻟﻤﻌ ﺎﻣﻠﯿﻦ * ‪ / ،‬ﻟﮭ ﻢ أوﻟﻮﯾ ﺔ واﺣ ﺪة أي أﻧﮭ ﻢ ﺑ ﻨﻔﺲ اﻟﻘ ﻮة و اﻟﻤﻌ ﺎﻣﻠﯿﻦ ‪ - ، +‬ﻟﮭ ﻢ أوﻟﻮﯾ ﺔ ﺗﻨﻔﯿ ﺬ أﺿ ﻌﻒ وﻟﻜ ﻦ ھ ﻢ‬
‫اﻻﺛﻨﺎن ﺑﻨﻔﺲ اﻟﻘﻮة وأن ﺟﻤﻊ ﻣﻌﺎﻣﻼن ﻣﻦ ﻧﻔﺲ اﻟﻘﻮة ﯾﻨﻔﺬ اﻷول ﻣﻨﮭﻢ ﻣﻦ ﺟﺎﻧﺐ اﻟﯿ ﺴﺎر وﻟﺘﻨﻔﯿ ﺬ أﺣ ﺪھﻢ ﻗﺒ ﻞ اﻷﺧ ﺮ‬
‫ﻧﺴﺘﺨﺪم اﻷﻗﻮاس ﻓﻠﮭﺎ اﻷوﻟﻮﯾﺔ اﻷﻗﻮى ﻣﻨﮭﻢ ﺟﻤﯿﻌﺎ ﻓﯿﻨﻔﺬ ﻣﺎ ﺑ ﺪاﺧﻠﮭﺎ أوﻻ ﺛ ﻢ اﻟﺒ ﺎﻗﻲ وإن ﻛ ﺎن ھﻨ ﺎك أﻛﺜ ﺮ ﻣ ﻦ ﻗ ﻮس‬
‫ﻓﯿﻨﻔﺬ اﻷول ﻣﻦ اﻟﯿﺴﺎر أوﻻ واﻟﯿﻚ ﻣﺜﺎل ﺗﻮﺿﯿﺤﻲ ﺗﺄﻣﻠﮫ ‪:‬‬

‫ﻣﺜﺎل‬
‫‪Query Analyzer‬‬ ‫‪Grid Pane‬‬
‫‪Select Name , Salary ,‬‬
‫‪Salary+100‬‬ ‫‪,‬‬
‫)‪12*(Salary+100‬‬
‫‪From Teacher‬‬

‫‪Result‬‬

‫ﻓﻲ ‪ Grid Pane‬ﻧﻀﻐﻂ ﻋﻠ ﻲ اﻟﺠ ﺪول اﻟﻤﻮﺟ ﻮد ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر ‪ Remove‬ﻟﺤﺬﻓ ﮫ ﺛ ﻢ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس‬
‫وﻧﺨﺘﺎر ‪ Add Table‬ﻹﺿﺎﻓﺔ ﺟﺪول ﺛﻢ ﻧﺨﺘﺎر ﺟﺪول ‪ Teacher‬ﺛﻢ ﻧﻀﻐﻂ ‪ Add‬وﻧﻀﺒﻂ اﻹﻋﺪادات ﻛﺎﻟﺴﺎﺑﻖ‬

‫‪62‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪-٤‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻘﯿﻤﺔ اﻟﺨﺎﻟﯿﺔ ‪.Null Value‬‬


‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ ‪ Null‬ھﻲ ﻗﯿﻤﺔ ﻏﯿﺮ ﻣﺘﺎﺣﺔ وﻏﯿﺮ ﻣﺤﺪدة وﻏﯿﺮ ﻣﻌﺮوﻓﺔ وﻏﯿ ﺮ ﻣﻼﺋﻤ ﺔ وھ ﻲ ﻟﯿ ﺴﺖ ﺻ ﻔﺮ وﻻ ﺣﺘ ﻰ‬
‫ﻣﺴﺎﻓﺔ ﻓﺎرﻏﺔ ھﻲ ﻻ ﺷﺊ وھﻲ ﻣﻊ اﻟﻌﻤﻠﯿﺎت اﻟﺤﺴﺎﺑﯿﺔ ﻻ ﺗﻨﺘﺞ ﺷﺊ ﻻ ﺗﻜﻮن ھﻨﺎك ﻧﺘﯿﺠﺔ‬
‫ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ ‪ IsNull‬وﺑﻨﺎءھﺎ‬

‫)ﻗﯿﻤﺔ ﺗﻌﺮض ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﺤﻘﻞ ﻓﺎرغ ‪ ,‬أﺳﻢ اﻟﺤﻘﻞ ﯾﻌﺮض ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﻏﯿﺮ ﻓﺎرغ(‪IsNull‬‬

‫ﺗﻘﯿﻢ ھﺬه اﻟﺪاﻟﺔ اﻟﻤﻌﺎﻣﻞ اﻷول وھﻮ اﻟﺤﻘﻞ وأن ﻛﺎن ﺑﮫ ﺑﯿﺎﻧ ﺎت ﯾﻌ ﺮض أﻣ ﺎ أن ﻛ ﺎن ﻓﺎرﻏ ﺎ ﺗﺄﺧ ﺬ ﻗﯿﻤ ﺔ اﻟﻤﻌﺎﻣ ﻞ اﻟﺜ ﺎﻧﻲ‬
‫ﺣﺘﻰ وﻟﻮ ﻛﺎن ﺣﻘﻼ‬
‫ﻣﺜﺎل‬
‫‪Query Analyzer‬‬ ‫‪Grid Pane‬‬
‫‪Select FName ,Phone ,‬‬
‫)'‪IsNull(Phone,'No Phone Yet‬‬
‫‪from Student‬‬
‫‪Result‬‬

‫ﻓﻲ ‪ Grid Pane‬ﻧﻀﻐﻂ ﻋﻠﻲ اﻟﺠﺪول اﻟﻤﻮﺟﻮد ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وﻧﺨﺘﺎر ‪ Remove‬ﻟﺤﺬﻓ ﮫ ﺛ ﻢ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس‬
‫وﻧﺨﺘﺎر ‪ Add Table‬ﻹﺿﺎﻓﺔ ﺟﺪول ﺛﻢ ﻧﺨﺘﺎر ﺟﺪول ‪ Student‬ﺛﻢ ﻧﻀﻐﻂ ‪ Add‬وﻧﻀﺒﻂ اﻹﻋﺪادات ﻛﺎﻟﺴﺎﺑﻖ‬

‫‪-٥‬اﺳﺘﺨﺪام ﻋﻨﺎوﯾﻦ ﻣﺴﺘﻌﺎرة ‪. Using Column Aliases‬‬


‫ﻧﺴﺘﺨﺪم اﻟﻌﻨﺎوﯾﻦ اﻟﻤﺴﺘﻌﺎرة ﺑﻜﺜﺮة ﻓﻔﻲ ﻣﻌﻈﻢ اﻷﺣﯿﺎن ﯾﻜﻮن أﺳﻢ اﻟﺤﻘﻞ داﺧﻞ اﻟﺠﺪول ﻣﺨﺘﺼﺮ وﻧﺮﯾﺪ أن وﺿﺤﮫ‬
‫أو ﻟﻌﺪة أﺳﺒﺎب أﺧﺮي أھﻤﮭﺎ اﻟﺘﻮﺿﯿﺢ وھﻨﺎك ﺛﻼث ﻃﺮق ﻓﻲ ﺟﻤﻠﺔ ‪SQL‬‬
‫‪ -١‬ﺑﻌﺪ اﻟﺤﻘﻞ ﻧﻜﺘﺐ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ as‬وﺑﻌﺪھﺎ اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر ﺑﺪون ﻣﺴﺎﻓﺔ ﻓﻲ اﻻﺳﻢ‬
‫‪ -٢‬ﺑﻌﺪ اﻟﺤﻘﻞ ﻧﺘﺮك ﻣﺴﺎﻓﺔ ﺛﻢ ﻧﻜﺘﺐ اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر ﺑﺪون ﻣﺴﺎﻓﺔ ﻓﻲ اﻻﺳﻢ‬
‫‪ -٣‬ﺑﻌﺪ اﻟﺤﻘﻞ ﺑﺎﻟﻄﺮﯾﻘﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ وﻧ ﻀﻊ اﻻﺳ ﻢ اﻟﻤ ﺴﺘﻌﺎر ﻣ ﺎﺑﯿﻦ ﻋﻼﻣ ﺔ ﺗﻨ ﺼﯿﺺ أو ﻋﻼﻣﺘ ﯿﻦ‬
‫وﻗﺪ ﯾﺤﺘﻮي ھﺬا اﻟﻌﻨﻮان ﻋﻠﻲ ﻣﺴﺎﻓﺔ ﻓﻲ اﻻﺳﻢ‬
‫‪Query Analyzer‬‬ ‫‪Grid Pane‬‬
‫‪Select Rank as Academic_Rank ,‬‬
‫‪name "Teacher Name" ,‬‬
‫‪Salary*12 Annual‬‬
‫‪from Teacher‬‬
‫‪Result‬‬

‫ﻓﻲ ‪ Grid Pane‬ﺑﻨﻔﺲ اﻟﻄﺮﯾﻘﺔ ﻧﺤﺬف اﻟﺠ ﺪول وﻧﺨﺘ ﺎر ﺟ ﺪول ‪ Teacher‬وﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪ Alias‬ﻧﻜﺘ ﺐ أﻣ ﺎم ﻛ ﻞ‬
‫ﺣﻘﻞ اﻟﻌﻨﻮان اﻟﻤﺴﺘﻌﺎر ﻣﺒﺎﺷﺮة ﺣﺘﻰ وﻟﻮ ﻛﺎن ﺑﮫ ﻣﺴﺎﻓﺔ وھﻮ ﯾﻀﻊ أﻗﻮاس ﺗﻠﻘﺎﺋﯿﺎ ﻓﻲ اﻷﺳﻤﺎء اﻟﺘﻲ ﺑﮭﺎ ﻣﺴﺎﻓﺎت‬

‫‪63‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪ -٦‬ﻣﻌﺎﻣﻞ دﻣﺞ اﻟﺒﯿﺎﻧﺎت واﻟﺤﻘﻮل ‪Concatenation Operator‬‬


‫ﻣﻌﺎﻣﻞ اﻟﺮﺑﻂ ﺑﯿﻦ اﻟﺠﻤﻞ واﻟﺤﻘﻮل ھﻮ )‪ (+‬وﻋﻨﺪ دﻣﺞ اﻟﺠﻤﻞ ﺗﻮﺿﻊ ﻣﻤﺎ ﺑﯿﻦ ﻋﻼﻣﺔ ﺗﻨﺼﯿﺺ ‪:‬‬
‫ﻣﺜﺎل‬
‫‪Query Analyzer‬‬ ‫‪Grid Pane‬‬
‫‪Select Rank+'-'+Name‬‬
‫‪'Teacher Name' ,‬‬
‫‪'Live In '+ City as City‬‬
‫‪from Teacher‬‬
‫‪Result‬‬

‫ﻓ ﻲ ‪ Grid Pane‬ﺑ ﻨﻔﺲ اﻟﻄﺮﯾﻘ ﺔ ﻧﺤ ﺬف اﻟﺠ ﺪول وﻧﺨﺘ ﺎر ﺟ ﺪول ‪ Teacher‬وﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪ Alias‬ﻧﻜﺘ ﺐ‬
‫أﻣ ﺎم ﻛ ﻞ ﺣﻘ ﻞ اﻟﻌﻨ ﻮان اﻟﻤ ﺴﺘﻌﺎر ﻣﺒﺎﺷ ﺮة وﻧﻼﺣ ﻆ اﻟﻤ ﺴﺎﻓﺔ ﺑﻌ ﺪ ﻛﻠﻤ ﺔ ‪ Live In‬وان ﻟ ﻢ ﺗﻜ ﻦ ھﻨ ﺎك ﻣ ﺴﺎﻓﺔ‬
‫ﺳﻮف ﺗﻠﺼﻖ ﻛﻠﻤﺔ ‪ In‬وﻣﻌﮭﺎ أﺳﻢ اﻟﻤﺪﯾﻨﺔ‬

‫‪ -٧‬إﻟﻐﺎء ﺗﻜﺮار اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺼﻔﻮف ‪. Eliminating Duplicate Rows‬‬


‫اﻻﻓﺘﺮاﺿﻲ ﻋﻨﺪ اﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت واﻟﺼﻔﻮف ھﻮ اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ اﻟ ﺼﻔﻮف اﻟﻤﻄﺒﻘ ﺔ ﻟ ﺸﺮوط اﻟﺠﻤﻠ ﺔ ﺣﺘ ﻰ وﻟ ﻮ‬
‫ﻛﺎﻧﺖ ﺗﻠﻚ اﻟﺼﻔﻮف ﻣﻜﺮرة واﻟﻜﻠﻤﺔ ‪ Distinct‬ﻗﺒﻞ اﻟﺤﻘﻞ ﺗﻠﻐﻲ ﺗﻜﺮار اﻟﺒﯿﺎﻧﺎت ﻓﯿﮫ أن ﻛﺎن ھﻨﺎك ﺗﻜﺮار‬
‫ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻋﻨﺪ اﺳﺘﺪﻋﺎء ﺣﻘﻞ ‪ Rank‬ﻓﺴﻮف ﯾﺄﺗﻲ ﻟﻨﺎ ‪ ٩‬ﺻﻔﻮف وھﻢ ﻛﺎﻓ ﺔ ﺻ ﻔﻮف اﻟﺠ ﺪول وﻟﻜ ﻦ ﻗ ﯿﻢ ھ ﺬا‬
‫اﻟﺼﻒ ھﻢ ‪ Dr , Mr , Ms‬ﻓﻘﻂ‬
‫‪Query Analyzer‬‬ ‫‪Grid Pane‬‬
‫‪Select Rank‬‬
‫‪from Teacher‬‬
‫‪Result‬‬

‫ﻧﻌﺪل ﺟﻤﻠﺔ ال‪ SQL‬ﻟﺘﻜﻮن‬


‫‪Select Distinct Rank From Teacher‬‬

‫وﻣ ﻦ ‪ Grid Pane‬ھ ﻲ اﻟﺠﻤﻠ ﺔ ﻛﻤ ﺎ ھ ﻲ ﺑ ﺪون ﺗﻐﯿ ﺮ وﻟﻜ ﻦ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر ‪Properties‬‬
‫اﻟﺨﺼﺎﺋﺺ وﻣﻨﮭﺎ ﻓﻲ اﻟﺠﺰء ‪ Options‬ﻧﺨﺘﺎر ‪ Distinct‬ﺛﻢ ‪ Ok‬ﺛﻢ ‪ Run‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬
‫ﻓﺴﻮف ﺗﻜﻮن اﻟﻨﺘﯿﺠﺔ‬

‫‪64‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺛﺎﻧﯿﺎ ‪ :‬اﺳﺘﺮﺟﺎع ﺻﻔﻮف ﻣﺤﺪدة وﺗﺮﺗﯿﺒﮭﺎ ‪.Restricting and Sorting Data‬‬


‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﺠﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع‬
‫] ‪ ], ….‬أﺳﻢ ﻣﺴﺘﻌﺎر ﻟﻠﺤﻘﻞ اﻟﺜﺎﻧﻲ [ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ ‪] [,‬أﺳﻢ ﻣﺴﺘﻌﺎر ﻟﻠﺤﻘﻞ اﻷول [ اﻟﺤﻘﻞ اﻷول | *]‪Select [Distinct‬‬
‫‪From‬‬ ‫أﺳﻢ اﻟﺠﺪول اﻟﺬي ﺳﯿﺘﻢ اﺳﺘﺮﺟﺎع اﻟﺤﻘﻮل ﻣﻨﮫ‬
‫] ﺷﺮوط ﻣﻦ ﺧﻼﻟﮭﺎ ﯾﺘﻢ اﺳﺘﺮﺟﺎع ﺻﻔﻮف ﻣﻌﯿﻨﺔ ‪[ Where‬‬

‫ﻗﺪ ﺗﻢ ﺗﻔﺴﯿﺮ ھﺬا اﻟﺸﻜﻞ ﻣﻦ ﻗﺒﻞ وﻗﺪ ﺗﻢ ﺗﻔﺴﯿﺮ اﻟﺠﺰء اﻟﺠﺪﯾﺪ أﯾﻀﺎ وﻗﺪ ذﻛﺮﻧﺎ أﻧﻨﺎ ﺳ ﻮف ﻧﺘﺤ ﺪث ﻋﻨ ﮫ ﺑﺎﻟﺘﻔ ﺼﯿﻞ وﻗ ﺪ‬
‫ﺣﺎن اﻟﻮﻗﺖ‬
‫اﺳﺘﺮﺟﺎع ﺻﻔﻮف ﻣﺤﺪدة‬
‫اﺳﺘﺮﺟﺎع أﺳﻢ وﻣﺮﺗﺐ وﺑﻠﺪ اﻟﻤﺪرﺳﯿﻦ اﻹﻧﺎث‬
‫‪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‬‬

‫وﺻﻒ ‪Description‬‬ ‫اﻟﻌﺎﻣﻞ ‪Operator‬‬


‫ﯾﻘﺎرن ﺑﯿﻦ ﻃﺮﻓﯿﯿﻦ ﯾﺴﺎره وﯾﻤﯿﻨﮫ وﻣﮭﻤﺘﮫ أن ﯾﻜﻮن اﻟﻄﺮﻓﯿﻦ ﻣﺘﺴﺎوﯾﯿﻦ‬ ‫=‬
‫ﯾﻘﺎرن ﺑﯿﻦ ﻃﺮﻓﯿﻦ ﯾﺴﺎره وﯾﻤﯿﻨﮫ وﻣﮭﻤﺘﮫ أن ﯾﻜﻮن اﻟﻄﺮﻓﯿﻦ ﻏﯿﺮ ﻣﺘﺴﺎوﯾﻦ‬ ‫><‬ ‫‪,‬‬ ‫=!‬
‫ﯾﻘﺎرن ﺑﯿﻦ ﻃﺮﻓﯿﻦ ﯾﺴﺎره وﯾﻤﯿﻨ ﮫ وﻣﮭﻤﺘ ﮫ أن ﯾﻜ ﻮن اﻟﻄ ﺮف اﻷول أﻛﺒ ﺮ ﻣ ﻦ‬ ‫>‬
‫اﻟﺜﺎﻧﻲ‬
‫ﯾﻘﺎرن ﺑﯿﻦ ﻃﺮﻓﯿﻦ ﯾﺴﺎره وﯾﻤﯿﻨﮫ وﻣﮭﻤﺘﮫ أن ﯾﻜﻮن اﻟﻄﺮف اﻷول أﺻﻐﺮ ﻣ ﻦ‬ ‫<‬
‫اﻟﺜﺎﻧﻲ‬
‫ﯾﻘﺎرن ﺑﯿﻦ ﻃﺮﻓﯿﻦ ﯾﺴﺎره وﯾﻤﯿﻨ ﮫ وﻣﮭﻤﺘ ﮫ أن ﯾﻜ ﻮن اﻟﻄ ﺮف اﻷول أﻛﺒ ﺮ ﻣ ﻦ‬ ‫=>‬ ‫‪,‬‬ ‫<!‬
‫اﻟﺜﺎﻧﻲ أو ﯾﺴﺎوﯾﮫ‬
‫ﯾﻘﺎرن ﺑﯿﻦ ﻃﺮﻓﯿﻦ ﯾﺴﺎره وﯾﻤﯿﻨﮫ وﻣﮭﻤﺘﮫ أن ﯾﻜﻮن اﻟﻄﺮف اﻷول أﺻﻐﺮ ﻣ ﻦ‬ ‫=<‬ ‫‪,‬‬ ‫>!‬
‫اﻟﺜﺎﻧﻲ أو ﯾﺴﺎوﯾﮫ‬
‫ﯾﻘﺎرن ﻃﺮف ﻋﻠﻲ ﯾﺴﺎره ﺑﺄن ﯾﻜﻮن واﻗ ﻊ ﻣ ﺎﺑﯿﻦ اﻟﻘﯿﻤﺘ ﯿﻦ اﻟﻤﻮﺟ ﻮدﺗﯿﻦ ﻋﻠ ﻲ‬ ‫‪BETWEEN expr1 AND expr2‬‬
‫ﯾﻤﯿﻨﮫ وﻣﺎ ﺑﯿﻨﮭﻤﺎ اﻟﻜﻠﻤﺔ ‪And‬‬
‫ﯾﻘ ﺎرن ﻗﯿﻤ ﺔ ﻋﻠ ﻲ ﯾ ﺴﺎره ﺑ ﺄن ﺗﻜ ﻮن ﻗﯿﻤ ﺔ ﺧﺎﻟﯿ ﮫ وأن وﺿ ﻌﺖ اﻟﻜﻠﻤ ﺔ ‪Not‬‬ ‫‪IS [NOT] NULL‬‬
‫ﯾﻘﺎرن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ ﯾﺴﺎره ﺑﺄن ﺗﻜﻮن ﺑﮭﺎ ﻗﯿﻤﺔ)أي ﻗﯿﻤﺔ ﻏﯿﺮ اﻟﺨﺎﻟﯿﺔ(‬

‫‪65‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﯾﻘ ﺎرن ﻣ ﺎﺑﯿﻦ ﻗﯿﻤﺘ ﯿﻦ ﻋﻠ ﻲ ﯾﻤﯿﻨ ﮫ وﻋﻠ ﻲ ﯾ ﺴﺎره وﻣﮭﻤﺘ ﮫ أن ﺗﻜ ﻮن اﻟﻘﯿﻤﺘ ﯿﻦ‬ ‫‪[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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻟﺘﻲ ﺳﻮف ﻧﺘﻨﺎوﻟﮭﺎ ﺗﻔﺼﯿﻠﯿﺎ ﻓﯿﻤﺎ ﺑﻌﺪ وﻟﻜﻦ اﻵن دﻋﻨﺎ ﻧﺤﻞ ھﺬه اﻻﺳﺘﻌﻼم‬
‫‪٣٥٧٧٫٥٥‬‬ ‫ﻧﺘﻮﻗﻊ اﻻﺳﺘﻌﻼم اﻷول ﻓﮭﻮ ﺑﺴﯿﻂ ﻟﻠﻐﺎﯾﺔ ﻣﺮﺗﺐ اﻟﻤﻌﻠﻢ ﻧﺎﺟﻲ رﻣﻀﺎن‬
‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺛﺎﻟﺜﺎ ‪ :‬اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ أو ﻟﯿﺴﺖ ﻓﺎرﻏﺔ ‪IS [ NOT ] NULL‬‬


‫ﯾﻘﺎرن ﻗﯿﻤﺔ ﻋﻠﻲ ﯾﺴﺎره ﺑﺄن ﺗﻜﻮن ﻗﯿﻤﺔ ﺧﺎﻟﯿﮫ وأن وﺿﻌﺖ اﻟﻜﻠﻤﺔ ‪ Not‬ﯾﻘ ﺎرن اﻟﻘﯿﻤ ﺔ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾ ﺴﺎره ﺑ ﺄن ﺗﻜ ﻮن‬
‫ﺑﮭﺎ ﻗﯿﻤﺔ)أي ﻗﯿﻤﺔ ﻏﯿﺮ اﻟﺨﺎﻟﯿﺔ( واﻟﯿﻚ ﺑﻤﺜﺎل‬
‫أﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ وﻗﺴﻢ اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﯾﻦ ﯾﻌﻤﻠﻮن ﺑﺄﻗﺴﺎم‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬
‫‪Select Name , Salary , DeptWork‬‬
‫‪From Teacher‬‬
‫‪Where DeptWork Is Not Null‬‬

‫‪Grid Pane‬‬

‫ﻻﺣﻆ أﻧﻨﺎ ﻟﻮ ﺣﺬﻓﻨﺎ ﻛﻠﻤﺔ ‪ Not‬ﺳﻮف ﯾﻌﻮد ﺑﺄﺳﻤﺎء اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬي ﻟﻢ ﯾﺤﺪد ﻟﮫ أﻗﺴﺎم ﺣﺘﻰ اﻵن‬

‫راﺑﻌﺎ ‪:‬ﻣﻌﺎﻣﻞ اﻟﻤﻤﺎﺛﻠﺔ أو ﻋﺪم اﻟﻤﻤﺎﺛﻠﺔ ‪[NOT] LIKE‬‬


‫ﯾﻘﺎرن ﻣﺎﺑﯿﻦ ﻗﯿﻤﺘﯿﻦ ﻋﻠﻲ ﯾﻤﯿﻨﮫ وﻋﻠﻲ ﯾﺴﺎره وﻣﮭﻤﺘﮫ أن ﺗﻜﻮن اﻟﻘﯿﻤﺘﯿﻦ ﻣﺘﺸﺎﺑﮭﺘﯿﻦ أو ﻣﺘﻤ ﺎﺛﻠﺘﯿﻦ و ﻟ ﮫ أﺑﻌ ﺎد ﻛﺒﯿ ﺮة‬
‫ﻓﻲ اﻟﺒﺤﺚ وأن وﺿﻌﺖ اﻟﻜﻠﻤﺔ ‪ Not‬ﺗﻌﻜﺴﮫ ﻟﯿﻜﻮن ﻣﺜﻞ ﻻ ﯾﺘﺸﺎﺑﮫ ﻣﻊ ﻣﻦ اﻷﺑﻌﺎد اﻟﺨﺎﺻﺔ ‪.‬‬
‫§ ﯾﺴﺘﺨﺪم داﺋﻤﺎ ﻣﻊ اﻟﺤﻘﻮل واﻟﻘﯿﻢ اﻟﺘﻲ ﻻ ﻧﻌﺮف ﻣﺎ ﻧﺮﯾﺪه ﻣﻨﮭﺎ ﺑﺎﻟﻀﺒﻂ‬
‫§ ﯾﺴﺘﺨﺪم ﻋﻼﻣﺔ ‪ %‬أو * واﻷﻓﻀﻞ ‪ %‬وھﻲ ﺗﻌﻨﻲ وﻻ ﺣﺮف أو ﺣﺮف أو ﻋﺪة ﺣﺮوف‬
‫§ ﯾﺴﺘﺨﺪم ﻋﻼﻣﺔ _ أو ؟ واﻷﻓﻀﻞ _ وھﻲ ﺗﻌﻨﻲ ﺣﺮف واﺣﺪ ﻻ أﻋﺮﻓﮫ‬
‫دﻋﻨﺎ ﻧﻔﮭﻢ ﻣﺎ ھﺬا وﻟﻜﻦ ﻣﻦ ﺧﻼل ﻣﺜﺎل‬
‫أﺳﺘﺪﻋﻲ أﺳﻢ اﻟﻄﺎﻟﺐ ﻛﺎﻣﻼ ورﻗﻢ ﺗﻠﯿﻔﻮﻧﮫ ﻋﻠﻲ أﺳﺎس أن اﻟﻄﻼب ﯾﺒﺪأ أﺳﻤﺎﺋﮭﻢ اﻷوﻟﻲ ﺑﺤﺮف ﻻ أﻋﻠﻤﮫ وﺛ ﺎﻧﻲ ﺣ ﺮف‬
‫ﻣﻦ اﻻﺳﻢ ﺣﺮف ‪ a‬وﺑﺎﻗﻲ اﻻﺳﻢ أي ﻋﺪد ﻣﻦ اﻟﺤﺮوف أو ﺣﺘﻰ ﻻ ﺣﺮوف‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬
‫‪Select FName +' '+LName as Name , Phone‬‬
‫‪From Student‬‬
‫'‪Where FName Like '_a%‬‬

‫‪Grid Pane‬‬

‫ﻻﺣﻆ أﻧﻨﺎ ﻓﻲ ‪ Grid Pane‬ﻛﺘﺒﻨﺎ اﻻﺳﻢ اﻷول ﺛﻢ ﻣﻌﺎﻣﻞ اﻟﺪﻣﺞ ﺛﻢ ﻣﺴﺎﻓﺔ ﺑﯿﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ﺛﻢ ﻣﻌﺎﻣﻞ اﻟﺪﻣﺞ ﺛﻢ‬
‫اﻻﺳﻢ اﻷﺧﯿﺮ وھﺬا ﻟﻌﻤﻞ ﻓﺎرق ﻟﻼﺳﻢ ﺣﺘﻰ ﻻ ﯾﻠﺘﺤﻢ وﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ أن ﻛﻞ اﻷﺳﻤﺎء ﺛﺎﻧﻲ ﺣﺮف ﻓﯿﮭﺎ ﺣﺮف ‪ a‬وأول‬
‫ﺣﺮف أي ﺷﻲء وﺑﻌﺪ ذﻟﻚ ﺗﺸﻜﯿﻠﮫ ﺣﺮوف ﻻ ﻧﻌﻠﻤﮭﺎ وأن وﺿﻌﻨﺎ اﻟﻤﻌﺎﻣﻞ ‪ NOT‬ﻓﺴﻮف ﺗﺄﺗﻲ اﻟﻨﺘﯿﺠﺔ ﺑﻜﻞ اﻟﻄﻠﺒﺔ‬
‫اﻟﺬي ﯾﻜﻮن أﺳﻤﮭﻢ اﻷول ﻻ ﯾﻮﺟﺪ ﺑﺜﺎﻧﻲ ﺣﺮف ﻓﯿﮫ ﺣﺮف ‪a‬‬
‫أن ﻛﻨﺎ ﻧﺒﺤﺚ ﻓﻲ اﺳﺘﻌﻼم ﻋﻦ ﺣﺮف _ أو ﺣﺮف ‪ %‬ﻓﻤ ﺎذا ﻧﻔﻌ ﻞ داﺧ ﻞ ﻋﻼﻣ ﺎت اﻟﺘﻨ ﺼﯿﺺ ﺑﻌ ﺪ ‪ Like‬ﻓ ﻲ اﻟﻤﻮﺿ ﻊ‬
‫اﻟﺬي ﻧﺮﯾﺪ اﻟﺒﺤﺚ ﻓﯿﮫ ﻋﻦ ھﺬا اﻟﺤﺮف ﻗﺒﻠﮫ ﻧﻀﻊ ﻋﻼﻣﺔ وﻟﯿﻜﻦ ) \ ( وﺑﻌﺪ ﻋﻼﻣﺘﻲ اﻟﺘﻨ ﺼﯿﺺ ﻧﻜﺘ ﺐ '\' ‪Escape‬‬
‫ﻓﺒﺬﻟﻚ ﺳﯿﺘﻢ اﻟﺒﺤﺚ ﻋﻦ اﻟﻘﯿﻤﺔ اﻟﻤﺮداة ﺿﯿﻒ ﻗﺴﻢ ﺑﮫ ﻋﻼﻣﺔ ‪ %‬ﻓﻲ اﻻﺳﻢ‬
‫ﺛﻢ ﺟﺮب ھﺬا ﻓﺴﻮف ﯾﺄﺗﻲ ﺑﺎﺳﻢ اﻷﻗﺴﺎم‬
‫* ‪SELECT‬‬
‫اﻟﺘﻲ ﺑﮭﺎ ﻋﻼﻣﺔ ‪ %‬وﺟﺮب ﻋﻼﻣﺔ _‬
‫‪FROM‬‬ ‫‪Department‬‬
‫'\' ‪WHERE DName LIKE '%\%%' ESCAPE‬‬

‫‪68‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺧﺎﻣﺴﺎ‪:‬ﻣﻌﺎﻣﻞ )ﻣﻮﺟﻮد ﻣﺎﺑﯿﻦ( )‪(exp1 [ NOT ] IN (val1 , val2 , … | sub query‬‬


‫ﻣﻌﺎﻣﻞ ﯾﻘﺎرن اﻟﻘﯿﻤﺔ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾ ﺴﺎره ﺑ ﺎﻟﻘﯿﻢ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾﻤﯿﻨ ﮫ ﻋﻠ ﻲ أﺳ ﺎس أن ﺗﻜ ﻮن اﻟﻘﯿﻤ ﺔ اﻟﺘ ﻲ ﻋﻠ ﻲ‬
‫ﯾﺴﺎره ﻣﻮﺟﻮدة ﻣﺎ ﺑ ﯿﻦ أي ﻗﯿﻤ ﺔ ﻣ ﻦ اﻟﻘ ﯿﻢ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾﻤﯿﻨ ﮫ ‪ ،‬اﻟﻘ ﯿﻢ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾﻤﯿﻨ ﮫ ﺗﻜ ﻮن ﻓ ﻲ ﺷ ﻜﻞ ﻗﺎﺋﻤ ﺔ ﻧﻔ ﺼﻞ‬
‫ﻣﺎﺑﯿﻦ ﻛﻞ ﻗﯿﻤﺘﺎن ﻣﻨﮭﻢ ﺑﻔﺎﺻﻠﺔ أو ﯾﻜﻮن ﻗﺪ ﺗﻢ إرﺳﺎﻟﮭﻢ ﻣﻦ ﺧﻼل اﺳﺘﻌﻼم ﺻﻐﯿﺮ ﻓﺮﻋﻲ‬
‫وإن وﺿﻌﻨﺎ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ NOT‬ﺳﻮف ﻧﻨﻔﻲ ھﺬا اﻟﻜﻼم ﺑﺤﯿﺚ ﺗﻜﻮن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ اﻟﯿﺴﺎر ﻏﯿﺮ ﻣﻮﺟ ﻮدة ﺑ ﯿﻦ‬
‫اﻟﻘﯿﻢ اﻟﻤﻮﺟﻮدة ﻋﻠﻲ اﻟﯿﻤﯿﻦ وﻋﻠﻲ ذﻟﻚ ﯾﺘﻢ ﻓﺮز اﻟﺼﻔﻮف‬
‫ﻣﺜﺎل ﺑﺴﯿﻂ أﺳﺘﺮﺟﻊ ﻣﻦ ﺟﺪول اﻟﻤﻮاد ﻋﻨﻮان ﻛﻞ ﻣﺎدة ﻻ ﯾﺪرﺳﮭﺎ اﻟﻤﻌﻠﻤﯿﻦ رﻗﻢ ‪ ١١١١‬أو ‪ ٢٢٢٢‬أو ‪٣٣٣٣‬‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select Title‬‬
‫‪From Subject‬‬
‫‪Where TeacherTaught Not In‬‬
‫)‪(1111,2222,3333‬‬
‫‪Grid Pane‬‬

‫ﻻ ﺗﻨﺴﻲ ﻓﻲ ‪ 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‬‬

‫ﺳﺎدﺳﺎ ‪ ANY:‬أي )‪(Some‬‬


‫ﺗﻘﺎرن اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﻋﻠﻲ ﯾﺴﺎرھﺎ ﺑﻤﺠﻤﻮﻋﺔ ﻣ ﻦ اﻟﻘ ﯿﻢ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾﻤﯿﻨﮭ ﺎ ﺑ ﺸﺮط أن ﺗﻜ ﻮن اﻟﻘﯿﻤ ﺔ اﻟﺘ ﻲ ﻋﻠ ﻲ ﯾ ﺴﺎرھﺎ‬
‫)أﺻﻐﺮ أو أﻛﺒﺮ أو أﺻﻐﺮ ﻣﻦ أو ﺗﺴﺎوي أو أﻛﺒﺮ ﻣﻦ أو ﺗﺴﺎوي أو ﻻ ﺗ ﺴﺎوي ‪ ،‬ﯾﺤ ﺪد ﺑﻤﻌﺎﻣ ﻞ ﺗ ﻀﻌﮫ أﻧ ﺖ( ﻣ ﻦ أي‬
‫ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﯿﻢ اﻟﺘﻲ ﻋﻠﻲ ﯾﻤﯿﻨﮭﺎ واﻟﺤﺎﻻت اﻟﺨﺎﺻﺔ ﺑﮭﺎ‬
‫§ … ‪ … < Any‬ﺗﻌﻨﻲ )أﺻﻐﺮ ﻣﻦ أﻛﺒﺮھﻢ( اﻟﻘﯿﻤﺔ اﻟﯿﺴﺮي أﺻﻐﺮ ﻣﻦ أي ﻗﯿﻤﺔ ﻋﻠﻲ اﻟﯿﻤﯿﻦ ‪.‬‬
‫§ … ‪ … >Any‬ﺗﻌﻨﻲ )أﻛﺒﺮ ﻣﻦ أﺻﻐﺮھﻢ( اﻟﻘﯿﻤﺔ اﻟﯿﺴﺮي أﻛﺒﺮ ﻣﻦ أي ﻗﯿﻤﺔ ﻋﻠﻲ اﻟﯿﻤﯿﻦ ‪.‬‬

‫‪69‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫§ … ‪ … = Any‬ﺗﻜﺎﻓﺊ ﻣﻌﻨﻲ ‪ IN‬ﺗﻤﺎﻣﺎ ‪.‬‬


‫‪.‬‬ ‫§ … ‪ … !=Any‬اﻟﺤﺎﻟﺔ اﻟﻮﺣﯿﺪة ﻟﺘﻨﻔﯿﺬھﺎ أن ﺗﺴﺎوي اﻟﻘﯿﻤﺔ اﻟﯿﺴﺮي ﺟﻤﯿﻊ اﻟﻘﯿﻢ اﻟﯿﻤﻨﻲ‬
‫وھﺬا ﺑﺎﻟﻄﺒﻊ ﯾﺼﻠﺢ ﻋﻠﻲ <! ‪ <= , >= , !> ,‬ﺑﻨﻔﺲ اﻟﻔﻜﺮ‬
‫ﻣﺜﺎل ﺗﻮﺿﯿﺤﻲ ﻟﮭﺬا اﻟﻤﻌﺎﻣﻞ‬
‫اﺳﺘﺮﺟﻊ اﺳﻢ وﺗﺎرﯾﺦ ﻣﯿﻼد وﻧﻮع اﻟﻄﻠﺒﺔ اﻟﺬي ﯾﻜﻮن ﺗﺎرﯾﺦ ﻣﯿﻼدھﻢ أﺻﻐﺮ ﻣﻦ أي ﻃﺎﻟﺒﺔ‬
‫ھﺬا اﻻﺳﺘﻌﻼم ﻣﻨﻘﺴﻢ إﻟﻲ ﺟﺰﺋﯿﯿﻦ اﻟﺠﺰء اﻷول ﻣﻌﺮﻓﮫ ﺗﻮارﯾﺦ ﻣﯿﻼد اﻟﻄﺎﻟﺒﺎت وھﺬا اﺳﺘﻌﻼم ﺑﺴﯿﻂ‬
‫واﻻﺳ ﺘﻌﻼم اﻟﺜ ﺎﻧﻲ ھ ﻮ اﺳ ﺘﺮﺟﺎع اﻟﺒﯿﺎﻧ ﺎت ﻟﻠﻄﻠﺒ ﺔ اﻟ ﺬي ﯾﻜ ﻮن ﺗ ﺎرﯾﺦ ﻣ ﯿﻼدھﻢ أﺻ ﻐﺮ ﻣ ﻦ أي ﺗ ﺎرﯾﺦ ﻣ ﯿﻼد ﻟﻠﻄﺎﻟﺒ ﺎت‬
‫)ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم اﻷول(‬
‫اﻻﺳﺘﻌﻼم اﻷول ﺳﯿﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ‬
‫‪Select BDate‬‬
‫‪From Student‬‬ ‫وھﻢ ﺗﻮارﯾﺦ ﻣﯿﻼد ﻟﻄﺎﻟﺒﺘﺎن ﻣﻮﺟﻮدﺗﺎن ﺑﺎﻟﻘﺎﻋﺪة‬
‫'‪Where Gender='F‬‬

‫اﻻﺳﺘﻌﻼم اﻟﻜﺎﻣﻞ‬
‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select FName , BDate , Gender‬‬
‫‪From Student‬‬
‫( ‪Where BDate < All‬‬ ‫‪1984-10-10‬‬
‫‪1984-05-05‬‬
‫‪Select BDate‬‬
‫‪From Student‬‬
‫) '‪Where Gender='F‬‬
‫‪Grid Pane‬‬

‫ﻻﺣﻈﻚ ﻓﻲ اﻟﻨﺘﯿﺠﺔ اﻟﺘﻲ ﻇﮭﺮت ﻻ ﺗﻮﺟﺪ اﻟﻄﺎﻟﺒﺔ ‪ Soha‬وھﺬا ﻷن ﺗﺎرﯾﺦ ﻣﯿﻼدھﺎ ﻟﯿﺲ أﺻﻐﺮ ﻣﻦ ﻛﻞ ﺗﻮارﯾﺦ‬
‫اﻟﻤﯿﻼد اﻟﻤﻮﺟﻮدة ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ وھﻮ ﯾﺤﻮي ﺑﺎﻟﻔﻌﻞ ﺗﺎرﯾﺦ ﻣﯿﻼده ﻓﻄﺒﯿﻌﻲ ﺟﺪا أن ﺗﺎرﯾﺦ ﻣﯿﻼدھﺎ ﻟﯿﺲ‬
‫أﺻﻐﺮ ﻣﻦ ﻧﻔﺴﮫ ﻟﮭﺬا ﻟﻢ ﺗﻈﮭﺮ ﻓﻲ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم أﻣﺎ اﻟﺒﺎﻗﻲ ﻓﮭﻢ ﻛﻠﮭﻢ أﺻﻐﺮ ﻣﻨﮭﻤﺎ‬

‫ﺛﺎﻣﻨﺎ ‪ [NOT] EXISTS:‬ﻣﻮﺟﻮد أو ﻏﯿﺮ ﻣﻮﺟﻮد‬


‫ﺗﻌﻤﻞ ﻣﻊ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ ﻓﮭﻲ ﺗﻘﺎرن ﺑﯿﺎﻧﺎت اﻻﺳﺘﻌﻼم اﻷﺳﺎﺳﻲ ﻋﻠﻲ ﯾ ﺴﺎر اﻟﺠﻤﻠ ﺔ ﺑﺒﯿﺎﻧ ﺎت اﻻﺳ ﺘﻌﻼم‬
‫اﻟﻔﺮﻋﻲ ﻣﻨﮫ ﻋﻠﻲ ﯾﻤﯿﻦ اﻟﺠﻤﻠﺔ وان ﻛﺎن اﻟﺴﺠﻼت ﻣﺘﺸﺎﺑﮭﺎ ﻣﻦ ﺧﻼل ﺷﺮط ﻣﻜﺘﻮب داﺧ ﻞ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ اذا ﯾ ﺘﻢ‬
‫اﻟﻌﺮض وإن أﺿﯿﻔﺖ ﻛﻠﻤﺔ ‪ Not‬ﯾﺤﺪث اﻟﻌﻜﺲ ﺗﻤﺎﻣﺎ ﻓﺈن ﻛﺎﻧﺖ اﻟﺴﺠﻼت ﻏﯿﺮ ﻣﺘﺸﺎﺑﮫ ﻓﮭﻮ ﯾﻌﺮض ‪.‬‬
‫اﻟﻤﮭﻢ ھﻮ اﻟﺸﺮط اﻟﻤﻜﺘﻮب ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻓﺘﺴﺘﻄﯿﻊ ﺑﮭﺬا اﻟﺸﺮط ﻛﺄﻧﻚ ﺗﺮﺑﻂ ﺟﺪوﻟﯿﻦ ﻣﻌﺎ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل‬
‫ﻧﺮﯾﺪ إﻇﮭﺎر ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ ﺑﺸﺮط أن ﯾﻜﻮﻧﻮا ﻣﺪﯾﺮﯾﻦ أﻗﺴﺎم‬
‫ﯾﻮﺟﺪ ﻟ ﺪﯾﻨﺎ اﺳ ﺘﻌﻼﻣﯿﻦ اﻷول ﯾ ﺄﺗﻲ ﺑﺒﯿﺎﻧ ﺎت ﻣ ﺪﯾﺮﯾﻦ اﻷﻗ ﺴﺎم واﻟﺜ ﺎﻧﻲ ﯾ ﺄﺗﻲ ﺑﺒﯿﺎﻧ ﺎت اﻟﻤﻌﻠﻤ ﯿﻦ واﻟ ﺸﺮط أ ن ﯾﻜ ﻮن رﻗ ﻢ‬
‫اﻟﻤﻌﻠﻢ ھﻮ اﻟﺮﻗﻢ اﻟﻤﻮﺟﻮد ﻋﻠﻲ ﻣﺪﯾﺮ اﻟﻘﺴﻢ‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select TeacherId , Name‬‬
‫‪From Teacher‬‬
‫‪Where Exists‬‬
‫* ‪( Select‬‬
‫‪From Department‬‬
‫)‪Where Teacher.TeacherId = Department.Manager‬‬
‫‪Grid Pane‬‬

‫ﻻﺣﻆ ﻓﻲ ‪ Grid Pane‬أن ﺟﻤﻠﺔ ‪ Exists‬ﺗﻜﺘﺐ ﻓﻲ اﻟﺠﺰء ‪ Column‬وﯾﻜﺘﺐ أﻣﺎﻣﮭﺎ ﻓﻲ ‪(=True) Criteria‬‬

‫‪71‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻟﺠﺪﯾﺪ واﻟﻐﺮﯾﺐ ھﻨﺎ ھﻮ اﻟﺠ ﺰء ‪ Where‬اﻟﻤﻮﺟ ﻮد ﻓ ﻲ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ وھ ﺬا ﻷن ﻛﻠﻤ ﺔ ‪ Exists‬ﻻ ﯾ ﺄﺗﻲ ﻗﺒﻠﮭ ﺎ‬
‫ﺣﻘﻞ ﻟﻜﻲ ﯾﺘﻢ ﻓﺤﺼﮫ ﻣﻦ ﻗﺒﻞ اﻟﺸﺮط وﻓﻲ ﺟﺰء اﻟ ﺸﺮط ﻧﻨ ﺎدي أوﻻ ﺑﺎﺳ ﻢ اﻟﺠ ﺪول ﺛ ﻢ ﺑﻌ ﺪ ﻧﻘﻄ ﺔ ﺛ ﻢ اﺳ ﻢ اﻟﺤﻘ ﻞ وھﻨ ﺎ‬
‫ﻧﻘﺎرن ﺑﯿﻦ ﻗﯿﻤﺔ ﻣﻮﺟﻮدة ﻓﻲ ﺟﺪول وﻗﯿﻤﺔ ﻣﻮﺟﻮدة ﻓﻲ ﺟﺪول أﺧﺮ وﻋﻨﺪ ﺣﺪوث ﺗﻘﺎﻃﻊ ﻟﻠﺴﺠﻼت ﯾﺘﻢ ﻋﺮﺿﮭﺎ وﺑﮭﺬا‬
‫ﻧﻜﻮن ﻗﺪ رﺑﻄﻨﺎ ﺟﺪوﻟﯿﻦ وﻟﻜﻦ اﻟﺼﺪﻓﺔ ھﻨﺎ أن ھﺎذﯾﻦ اﻟﺠﺪوﻟﯿﻦ ﻣﺮﺑﻮﻃﯿﻦ ﻓﻌﻼ ﺑﻌﻼﻗﺔ ﻣﻦ ﺧﻼل ھ ﺬﯾﻦ اﻟﺤﻘﻠ ﯿﻦ وﻟﻜ ﻦ‬
‫ﻟﯿﺲ ھﺬا ﻓﻘﻂ اﻟﺬي ﺗﻘﻮم ﺑﮫ ‪ Exists‬ﺑﻞ ﻓﻲ إﻣﻜﺎﻧﮭﺎ أﯾﻀﺎ رﺑﻂ ﺟﺪوﻟﯿﻦ ﻻ ﯾﻮﺟ ﺪ ﻋﻼﻗ ﺔ ﺑﯿ ﻨﮭﻢ ﻛﻤ ﺎ ﺳ ﻨﺮي ﺑﻌ ﺪ ذﻟ ﻚ‬
‫ﻟﻜﻨﮭﺎ ﺗﺘﺸﺎﺑﮫ أﺣﯿﺎﻧﺎ ﻣﻊ ‪ IN‬وأﯾﻀﺎ ﻣﻊ ‪ Any‬ﻓﯿﻜﻮﻧﻮا ﻣﺘﻤﺎﺛﻠﯿﻦ ﻓﻲ ﺑﻌﺾ اﻷﺣﯿﺎن ﻣﺜﻞ‬

‫ﺗﺘ ﺸﺎﺑﮫ ﺗﻤﺎﻣ ﺎ ﻣ ﻊ … ‪ … =Any‬ﻋﻨ ﺪﻣﺎ ﯾﻜ ﻮن اﻟﺤﻘ ﻞ اﻟ ﺬي ﻋﻠ ﻲ ﯾﻤﯿﻨ ﮫ واﻟﺤﻘ ﻞ ﻓ ﻲ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ‬ ‫§‬
‫اﻟﺬي ﻋﻠﻲ ﯾﺴﺎره ھﻢ ﻧﻔﺲ ﺣﻘﻮل اﻟﺸﺮط اﻟﻤﻮﺟﻮد ﻣﻊ ‪ Exists‬ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ‬
‫ﺗﺘﺸﺎﺑﮫ ﻣﻊ ‪ IN‬ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﺤﻘﻞ اﻟﺬي ﻋﻠﻲ ﯾﻤﯿﻨﮫ واﻟﺤﻘﻞ ﻓ ﻲ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ اﻟ ﺬي ﻋﻠ ﻲ ﯾ ﺴﺎره ھ ﻢ‬ ‫§‬
‫ﻧﻔﺲ ﺣﻘﻮل اﻟﺸﺮط اﻟﻤﻮﺟﻮد ﻣﻊ ‪ Exists‬ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ‬

‫ﻓﺈذا ﺣﺎوﻟﻨﺎ ﻋﺮض ﻧﻔﺲ اﻟﻨﺘﯿﺠﺔ وﻟﻜﻦ ﻣﻊ ‪ IN‬وﻣﻊ ‪ =Any‬ﯾﻜﻮن اﻻﺳﺘﻌﻼﻣﯿﻦ ﻛﺎﻟﺘﺎﻟﻲ‬

‫‪-- Using =Any‬‬ ‫‪-- Using IN‬‬


‫‪Select TeacherId , Name‬‬ ‫‪Select TeacherId , Name‬‬
‫‪From Teacher‬‬ ‫‪From Teacher‬‬
‫‪Where TeacherId = Any‬‬ ‫‪Where TeacherId IN‬‬
‫‪( Select Manager‬‬ ‫‪( Select Manager‬‬
‫)‪From Department‬‬ ‫)‪From Department‬‬

‫‪ -٢‬اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ‪. Logical Operators‬‬


‫ھﺬه اﻟﻤﻌ ﺎﻣﻼت ﺗ ﺼﺪر ﻗﯿﻤ ﺔ ﻣﻨﻄﻘﯿ ﺔ ‪ Boolean‬وھ ﻲ ﻧ ﻮع ﺑﯿﺎﻧ ﺎت أﯾ ﻀﺎ وﻟﻜ ﻦ ھ ﺬا اﻟﻨ ﻮع ﻻ ﯾﺤﻤ ﻞ إﻻ ﻗﯿﻤ ﺔ ﻣ ﻦ‬
‫اﻟﻘﯿﻤﺘﯿﻦ ‪ True‬وﻣﻌﻨﺎھﺎ ﺣﻘﯿﻘﻲ أو ﺻﺤﯿﺢ واﻟﻘﯿﻤﺔ ‪ False‬وﻣﻌﻨﺎھﺎ ﻏﯿﺮ ﺣﻘﯿﻘﻲ أو ﺧﻄﺄ وھﻲ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫اﻟﻤﻌﺎﻣﻞ ‪ Operator‬ﻣﻌﻨﺎه ‪Meaning‬‬


‫ﺗﻌﻄﻲ ‪ True‬ﻟﻮ ﻛﻞ اﻟﻤﺠﻤﻮﻋﺔ اﻟﻤﻘﺎرﻧﺔ ﺑﮭﺎ ﻛﺎﻧﺖ ‪True‬‬ ‫‪All‬‬
‫ﺗﻌﻄﻲ ‪ True‬أن ﻛﺎن اﻟﺘﻌﺒﯿﺮان اﻟﺨﺎﺻﺎن ﺑﮭﺎ اﻻﺛﻨﯿﻦ ‪True‬‬ ‫‪And‬‬
‫ﺗﻌﻄﻲ ‪ True‬ﻟﻮ ﻛﺎن أي ﻋﻨﺼﺮ ﻣﻦ اﻟﻤﺠﻤﻮﻋﺔ اﻟﻤﻘﺎرن ﺑﮭﺎ ‪True‬‬ ‫‪Any‬‬
‫ﺗﻌﻄﻲ ‪ True‬إن ﻛﺎن ﻣﻌﺎﻣﻠﮭﺎ ﻣﺤﺼﻮر ﺑﺎﻟﻔﻌﻞ ﻣﺎﺑﯿﻦ ﻗﯿﻤﺘﯿﮭﺎ‬ ‫‪Between‬‬
‫ﺗﻌﻄﻲ ‪ True‬ﻟﻮ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﺑﮭﺎ أﺣﺘﻮي ﻋﻠﻲ أي ﺻﻒ‬ ‫‪Exists‬‬
‫ﺗﻌﻄﻲ ‪ True‬ﻟﻮ اﻟﻤﻌﺎﻣﻞ ﻛﺎن ﻣﺴﺎوﯾﺎ ﻟﻘﯿﻤﺔ واﺣﺪة ﻓﻲ ﻣﺠﻤﻮﻋﺔ اﻟﻤﻘﺎرﻧﺔ‬ ‫‪IN‬‬
‫ﺗﻌﻄﻲ ‪ True‬ﻟﻮ ﻛﺎن اﻟﻤﻌﺎﻣﻞ ﯾﻼﺋﻢ اﻟﻌﯿﻨﺔ اﻟﻤﺨﺘﺒﺮ ﻋﻠﯿﮭﺎ‬ ‫‪LIKE‬‬
‫ﺗﻌﻄﻲ ‪ True‬ﻟﻮ ﻛﺎن اﻟﻤﻌﺎﻣﻞ اﻟﺬي ﯾﻠﯿﮭﺎ ‪ False‬واﻟﻌﻜﺲ أﯾﻀﺎ ﻓﮭﻲ ﺗﻌﻜﺲ ﻗﯿﻤﺔ ﻣﻌﺎﻣﻠﮭﺎ‬ ‫‪NOT‬‬
‫ﺗﻌﻄﻲ ‪ True‬ﻟﻮ أي اﻟﺘﻌﺒﯿﺮان اﻟﺨﺎﺻﺎن ﺑﮭﺎ ﻗﯿﻤﺔ ‪ ) True‬ﻋﻠﻲ اﻷﻗﻞ ﻣﻌﺎﻣﻞ ‪( True‬‬ ‫‪OR‬‬
‫ﺗﻌﻄﻲ ‪ True‬ﻟﻮ ﺑﻌﺾ ﻋﻨﺎﺻﺮ اﻟﻤﺠﻤﻮﻋﺔ اﻟﻤﺨﺘﺒﺮة ‪True‬‬ ‫‪Some‬‬
‫أﻛﺜ ﺮ ھ ﺬه اﻟﻤﻌ ﺎﻣﻼت ﺗﻌﺎﻣﻠﻨ ﺎ ﻣﻌ ﮫ ﻣ ﻦ ﻗﺒ ﻞ ﻓ ﻲ ﻣﻌ ﺎﻣﻼت اﻟﻤﻘﺎرﻧ ﺔ وﻟﻜ ﻦ ھﻨ ﺎك ﺛ ﻼث ﻣﻌ ﺎﻣﻼت ﺟ ﺪد ھ ﻢ اﻷﺳ ﺎس‬
‫ﻟﻠﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﯿﺔ وھﻢ ‪ And , Or , Not‬وﺳﻮف ﻧﺮي أﻣﺜﻠﺔ ﻋﻠﯿﮭﻢ ﺑﻌﺪ ﻋﺮض أوﻟﻮﯾﺎت اﻟﺘﻨﻔﯿﺬ‬
‫أوﻟﻮﯾﺎت اﻟﺘﻨﻔﯿﺬ ﻟﻠﻤﻌﺎﻣﻼت‬

‫)ﺑﻌﺪ أن زاد ﻋﺪد اﻟﻤﻌﺎﻣﻼت ﯾﻤﻜﻦ أن ﺗﻜﻮن ھﻨﺎك ﺟﻤﻠﺔ ﻣﺮﻛﺒﺔ ﻣﻦ أﻛﺜﺮ ﻣﻦ ﻋﺎﻣﻞ ﻣﻦ اﻟﻌﻮاﻣﻞ ﻓﺎﻟﺴﺆال ھﻨﺎ‬
‫ھﻮ ﻣﻦ ﺳﯿﻨﻔﺬ أوﻻ وﻣﻦ اﻟﺬي ﯾﻠﯿﮫ ﻻﺑﺪ ﻣﻦ إدراك ھﺬه اﻷوﻟﻮﯾﺎت وإﻻ ﺳﻮف ﺗﺮي ﻧﺘﺎﺋﺞ ﻛﺜﯿﺮة ﻏﯿﺮ ﻣﺘﻮﻗﻌﺔ (‬

‫‪72‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫أوﻟﻮﯾﺎت اﻟﺘﻨﻔﯿﺬ ﻟﻠﻌﻮاﻣﻞ ‪Operators Precedence‬‬

‫§‬ ‫اﻷﻗﻮاس ‪( ) Parentheses‬‬

‫§‬ ‫*‬ ‫‪,‬‬ ‫‪/‬‬


‫§‬ ‫‪+‬‬ ‫‪,‬‬ ‫‪-‬‬
‫§‬ ‫<! ‪=, >, <, >=, <=, <>, !=, !>,‬‬
‫§‬ ‫‪NOT‬‬
‫§‬ ‫‪AND‬‬
‫§‬ ‫‪All , ANY , BETWEEN , IN , LIKE , OR , SOME‬‬
‫§‬ ‫)ﻣﻌﺎﻣﻞ اﻟﺘﺨﺼﯿﺺ ‪=(Assignment‬‬

‫و اﻵن ﻻﺑﺪ ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ‪ AND , OR , NOT‬ﺑﺸﻜﻞ ﻣﻔﺼﻞ‬


‫أوﻻ اﻟﻤﻌﺎﻣﻞ …‪ …AND‬ﯾﺘﻄﻠﺐ أن ﯾﻜﻮن ﻣﻌﺎﻣﻠﯿﮫ ﺻﺤﯿﺤﯿﻦ ‪True‬‬
‫أﺳﺘﺮﺟﻊ أﺳﻤﺎء وﻣﺮﺗﺒﺎت اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﻛﻮر ﻣﻦ ﻣﺪﯾﻨﺔ اﻟﻘﺎھﺮة ﻋﻠﻲ أن ﺗﻜﻮن رﺗﺒ ﺘﮭﻢ اﻟﺠﺎﻣﻌﯿ ﺔ دﻛﺘ ﻮر وﻣ ﺮﺗﺒﮭﻢ أﻛﺒ ﺮ‬
‫ﻣﻦ أو ﯾﺴﺎوي ‪٣٠٠٠‬‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬
‫‪Select Name , Salary‬‬
‫‪From Teacher‬‬
‫'‪Where Gender = 'M‬‬
‫‪And‬‬ ‫‪City‬‬ ‫'‪='Cairo‬‬
‫‪And‬‬ ‫'‪Rank ='Dr‬‬
‫‪And‬‬ ‫‪Salary !< 3000‬‬
‫‪Grid Pane‬‬

‫ﻻﺣﻆ أن اﻟﻜﻠﻤﺔ ‪ And‬اﻷوﻟﻲ ﻣﺎﺑﯿﻦ اﻟﺸﺮوط وھﺬا ﻣﻌﻨﺎه ﻋﻨﺪ اﻟﻤﺮور ﻋﻠﻲ ﻛﻞ ﺻﻒ ﯾﺴﺄل ھﻞ ھﻮ ذﻛﺮ إن ﻛﺎن ﻧﻌﻢ‬
‫ﻓﯿﻜﻤﻞ اﻷﺳﺌﻠﺔ وأن ﻛﺎن ﻻ ﻓﯿﻨﮭﻲ وﯾﻨﺰل اﻟﺴﻄﺮ اﻟﺬي ﯾﻠﯿﮫ وﯾﺴﺄل ھﻞ اﻟﻨﻮع ذﻛﺮ إن ﻛﺎن ﻧﻌﻢ ﯾﺴﺄل اﻟﺴﺆال اﻟﺬي‬
‫ﯾﻠﯿﮫ ھﻞ ﻣﻦ ﻣﺪﯾﻨﺔ اﻟﻘﺎھﺮة أن ﻛﺎﻧﺖ اﻹﺟﺎﺑﺔ ﻧﻌﻢ ﯾﻜﻤﻞ اﻷﺳﺌﻠﺔ وأن ﻛﺎن ﻻ ﻓﻼ ﯾﻜﻤﻞ وھﻜﺬا إﻟﻲ أن ﯾﺘﻢ ﺗﻮاﻓﺮ ﻛﻞ‬
‫اﻟﺸﺮوط ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﯾﻌﺮض اﻟﺼﻒ وﻻﺣﻆ ﻣﻌﻲ ﻓﻲ اﻟﺠﺰء ‪ Grid Pane‬اﻟﺸﺮوط ﺗﻮﺿﻊ ﺗﺤﺖ ﺑﻌﻀﮭﺎ ﻓﻲ‬
‫اﻟﺤﻘﻞ ‪ Criteria‬أﻣﺎ ﻛﻞ ﺻﻒ ﺑﮫ أﺳﻢ اﻟﺤﻘﻞ اﻟﺬي ﻋﻠﯿﮫ اﻟﺸﺮط واﻟﺤﻘﻮل اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺠﺰء ‪ Where‬وﻏﯿﺮ‬
‫ﻣﻮﺟﻮدة ﻓﻲ اﻟﺠﺰء ‪ Select‬ﻻ ﻧﻀﻊ ﻋﻼﻣﺔ ﺻﺢ ﻟﮭﺎ ﻓﻲ اﻟﺤﻘﻞ ‪Output‬‬

‫ﺛﺎﻧﯿﺎ اﻟﻤﻌﺎﻣﻞ … ‪ … OR‬ﯾﺘﻄﻠﺐ أن ﯾﻜﻮن ﻣﻌﺎﻣﻠﯿﮫ أﺣﺪھﻢ ﻋﻠﻲ اﻷﻗﻞ ‪True‬‬


‫أي أن ﻟﻮ ﻛﺎن أﺣﺪ اﻟﺸﺮﻃﯿﻦ ﻣﺤﻘﻖ أذا ﯾﺘﻢ اﻟﻌﺮض وأن ﻛﺎن اﻟﺸﺮﻃﯿﻦ ﻣﺤﻘﻘﯿﻦ إذا ﯾ ﺘﻢ اﻟﻌ ﺮض وإن ﻛ ﺎن اﻟ ﺸﺮﻃﯿﻦ‬
‫ﻏﯿﺮ ﻣﺤﻘﻘﯿﻦ ھﺬه اﻟﺤﺎﻟﺔ اﻟﻮﺣﯿﺪة اﻟﺘﻲ ﻻ ﯾﺘﻢ اﻟﻌﺮض ﺧﻼﻟﮭﺎ‬
‫ﻣﺜﺎل ﺗﻮﺿﯿﺤﻲ‬
‫اﺳ ﺘﺮﺟﻊ ﻣ ﻦ ﺟ ﺪول اﻟﻤﻌﻠﻤ ﯿﻦ اﻻﺳ ﻢ واﻟﻤﺮﺗ ﺐ واﻟﻨ ﻮع ﻟﻠﻤﻌﻠﻤ ﯿﻦ اﻹﻧ ﺎث أو إذا ﻛ ﺎن اﻟﻤﺮﺗ ﺐ أﻛﺒ ﺮ ﻣ ﻦ أو ﯾ ﺴﺎوي‬
‫‪٣٠٠٠‬‬

‫‪73‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select Name , Salary ,Gender‬‬
‫‪From Teacher‬‬
‫'‪Where Gender = 'F‬‬
‫‪Or‬‬ ‫‪Salary >=3٠00‬‬

‫‪Grid Pane‬‬

‫ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ ﻓﯿﻮﺟﺪ ﻛﺜﯿﺮ ﻣﻦ اﻟﻤﻮﻇﻔﯿﻦ رﺟﺎل ﻟﻜﻦ ﻣﺮﺗﺒﮭﻢ أﻛﺒﺮ ﻣﻦ ‪ ٣٥٠٠‬وھﻨﺎك واﺣﺪة أﻧﺜﻲ وﻟﻜﻦ ﻣﺮﺗﺒﮭﺎ ﻟﯿﺲ‬
‫أﻛﺒﺮ ﻣﻦ أو ﯾﺴﺎوي ‪ ٣٠٠٠‬وھﻨﺎك ﻣﻌﻠﻤﺔ أﺧﺮي أﻧﺜﻲ وﻣﺮﺗﺒﮭﺎ أﯾﻀﺎ ﯾﻔﻮق ‪٣٠٠٠‬‬
‫وﻻﺣﻆ أﯾﻀﺎ ﻓﻲ ‪ Grid Pane‬أﻧﻨﺎ وﺿﻌﻨﺎ ﺷﺮط ﻣﻦ اﻟﺸﺮوط ﻓﻲ اﻟﺨﺎﻧﺔ أو اﻟﺤﻘﻞ ‪ Or‬ﺣﺘﻰ ﯾﺘﻢ اﻟﺘﺤﻘﻖ ﻣﻦ‬
‫اﻟﺸﺮط اﻷول وأن ﻟﻢ ﯾﻜﻦ ﺳﻮف ﯾﺘﻢ اﻟﺘﺤﻘﻖ ﻣﻦ اﻟﺸﺮط اﻟﺜﺎﻧﻲ واﻷﻓﻀﻞ وﺿﻊ اﻟﺸﺮط اﻷﻗﻞ اﺣﺘﻤﺎﻻ ﻓﻲ اﻟﺨﺎﻧﺔ ‪Or‬‬
‫وھﺬا ﯾﺰﯾﺪ ﻣﻦ ﺳﺮﻋﺔ اﻟﺘﻨﻔﯿﺬ ﻷﻧﮫ ﯾﻔﺤﺺ اﻟﺸﺮط أوﻻ وأن ﻟﻢ ﯾﻜﻦ ﻣﺤﻘﻖ ﯾﺮﺟﻊ اﻟﻲ اﻟﺠﺰء ‪ Or‬وھﺬا ﻓﻲ اﻟﻄﺮﯾﻘﺘﯿﻦ‬
‫ﺛﺎﻟﺜﺎ اﻟﻤﻌﺎﻣﻞ … ‪ Not‬ﻣﻌﺎﻣﻞ اﻟﻨﻔﻲ‬
‫ﻓﺈن ﻛﺎن اﻟ ﺸﺮط ﺻ ﺤﯿﺤﺎ ﯾﺠﻌﻠ ﮫ ﺧﺎﻃﺌ ﺎ وإن ﻛ ﺎن اﻟ ﺸﺮط ﺧ ﺎﻃﺊ ﯾﺠﻌﻠ ﮫ ﺻ ﺤﯿﺢ وھﻜ ﺬا وﻗ ﺪ ﺗﻌﺮﺿ ﻨﺎ ﻟﮭ ﻮ ﻛﺜﯿ ﺮا ﻣﻌ ﺎ‬
‫اﻟﻤﻌﺎﻣﻼت وﻟﻜﻨﻨﺎ ﺳﻮف ﻧﺘﻌﺮض اﻵن ﻟﮫ ﻣﻨﻔﺼﻼ إﻟﯿﻚ ﺑﻤﺜﺎل‬
‫أﻋﺮض أﺳﻢ وﻣﺮﺗﺐ اﻟﻤﻌﻠﻤﯿﻦ إذا ﻛﺎن ﻣﺮﺗﺒﮭﻢ ﻻ ﯾﻜﻮن أﺻﻐﺮ ﻣﻦ أو ﯾﺴﺎوي ‪٣٥٠٠‬‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬
‫‪Select Name , Salary‬‬
‫‪From Teacher‬‬
‫‪Where Not Salary <=3500‬‬

‫‪Grid Pane‬‬

‫ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ اﻟﻤﻔﺮوض أن ﯾﻜﻮن اﻟﻤﺮﺗﺐ أﺻﻐﺮ ﻣﻦ أو ﯾﺴﺎوي ‪ ٣٥٠٠‬وﻟﻜﻦ اﻟﻜﻠﻤﺔ ‪ NOT‬ﻋﻜﺴﺖ اﻟﻤﻀﻤﻮن‬
‫ﺟﺎءت ﺑﻜﻞ اﻟﻘﯿﻢ اﻟﺘﻲ ھﻲ أﻛﺒﺮ ﻣﻦ ﻓﻘﻂ‬

‫أﻋﺮض أﺳﻢ وﻣﺮﺗﺐ ورﺗﺒﮫ اﻟﻤﻌﻠﻤﯿﻦ ﺳﻮاء ﻛﺎﻧﺖ رﺗﺒﺘﮭﻢ دﻛﺘﻮر أو أﺳﺘﺎذ وﯾﻜﻮن ﻣﺮﺗﺒﮭﻢ أﻗﻞ ﻣﻦ ‪ ١٢٠٠‬ﺟﻨﯿﺔ‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select Name , Salary, Rank‬‬
‫‪From Teacher‬‬
‫'‪Where Rank='Mr‬‬
‫‪Or‬‬ ‫'‪Rank='Dr‬‬ ‫ﺧﻄﺄ‬
‫‪And‬‬ ‫‪Salary<1200‬‬
‫‪Grid Pane‬‬

‫ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ أﻧﮭﺎ ﻧﺘﯿﺠﺔ ﺧﺮاﻓﯿﺔ ﻓﺈﻧﮫ ﯾﻮﺟﺪ أﻛﺜﺮ ﻣﻦ أﺳﺘﺎذ وﻟﻜﻦ ﻣﺮﺗﺒﮭﻢ أﻛﺒﺮ ﻣﻦ ‪ ١٢٠٠‬ﻓﻤﺎذا ﺣﺪث‬

‫‪74‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻣﺎذا ﺣﺪث ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ أﻧﮫ ﻛﺎن ﻣﻦ اﻟﻤﻔﺘﺮض أﻧﮫ ﺳﻮف ﯾﺨﺮج ﻧﺘﺎﺋﺞ ﺻﺤﯿﺤﺔ‬
‫أوﻟﻮﯾﺎت اﻟﺘﻨﻔﯿﺬ ﻟﻮ رﺟﻌﺖ اﻟﻲ اﻷوﻟﻮﯾﺎت ﺳﻮف ﺗﺮي أن اﻟﻌﺎﻣﻞ ‪ 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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select Name , Salary , Rank‬‬
‫‪From Teacher‬‬
‫(= ‪Where Rank‬‬
‫‪Select Rank‬‬
‫‪From Teacher‬‬
‫) '‪Where Name='Awad Khalil‬‬
‫( > ‪And Salary‬‬
‫‪Select Salary‬‬
‫‪From Teacher‬‬
‫) '‪Where Name='Nagy Ramadan‬‬
‫‪Grid Pane‬‬

‫ﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ ﻓﺄﻧﮫ ﺑﺎﻟﻔﻌﻞ رﺗﺒﺘﮫ ﻣﺜﻞ رﺗﺒﺔ دﻛﺘﻮر ﻋﻮض ﺧﻠﯿﻞ وﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ﻣﺮﺗﺒﮫ أﻛﺒﺮ ﻣﻦ راﺗﺐ‬
‫دﻛﺘﻮر ﻧﺎﺟﻲ رﻣﻀﺎن‬

‫‪ -٣‬اﻟﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي واﻟﺘﻨﺎزﻟﻲ ﻟﻠﺒﯿﺎﻧﺎت ‪Data Sorting‬‬


‫ﺗﺮﺗﺐ ﺻﻔﻮف اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺧﻼل اﻟﺠﺰء ‪Order by Clause‬‬
‫‪ -‬اﻟﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي ﻣﻦ ﺧﻼل اﻟﻜﻠﻤﺔ ‪ ASC‬وھﻮ اﻟﺘﺮﺗﯿﺐ اﻻﻓﺘﺮاﺿﻲ ﺑﺪون ذﻛﺮ أﺳﻢ‬
‫‪ -‬اﻟﺘﺮﺗﯿﺐ اﻟﺘﻨﺎزﻟﻲ ﻣﻦ ﺧﻼل اﻟﻜﻠﻤﺔ ‪Desc‬‬
‫اﻟﺠﺰء ‪ Order by‬ﯾﺄﺗﻲ ﻓﻲ ﻧﮭﺎﯾﺔ ﺟﻤﻠﺔ ‪Select‬‬
‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ ‪ Null‬ﻓﻲ اﻟﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي ﺗﺄﺗﻲ ﻓﻲ آﺧﺮ اﻟﺼﻔﻮف وﺑﺎﻟﻌﻜﺲ ﻣﻊ اﻟﺘﺮﺗﯿﺐ اﻟﺘﻨﺎزﻟﻲ‬

‫أﺳﺘﺮﺟﻊ اﻻﺳﻢ اﻷول واﻻﺳﻢ اﻷﺧﯿﺮ وﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﻟﻠﻄﻠﺒﺔ ورﺗﺒﮭﻢ ﺗﺼﺎﻋﺪﯾﺎ ﺣﺴﺐ اﻻﺳﻢ اﻷول‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select‬‬ ‫‪FName , LName , BDate‬‬
‫‪From‬‬ ‫‪student‬‬
‫‪Order by FName‬‬

‫‪Grid Pane‬‬

‫ﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ أن اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺣﺴﺐ اﻻﺳﻢ اﻷول ﺗﺮﺗﯿﺒﺎ ﺗﺼﺎﻋﺪﯾﺎ ﺑﺎﻟﻔﻌﻞ‬
‫وﻻﺣﻆ ﻓﻲ ‪ Grid Pane‬اﻟﺨﺎﻧﺔ ‪ Sort Type‬وھ ﻮ ﻧ ﻮع اﻟﺘﺮﺗﯿ ﺐ و ﺑﮭ ﺎ ﺛ ﻼث ﺧﯿ ﺎرات ﺗ ﺼﺎﻋﺪي‬
‫وﺗﻨ ﺎزﻟﻲ وﻋ ﺪم ﻓ ﺮز واﻟﺨﺎﻧ ﺔ ‪ Sort Order‬ﺗﻠﻘﺎﺋﯿ ﺎ ﺗﺄﺧ ﺬ اﻟﻘﯿﻤ ﺔ واﺣ ﺪ وﯾﻤﻜﻨ ﻚ ﻣ ﻦ ﺧﻼﻟﮭ ﺎ إﻟﻐ ﺎء‬
‫اﻟﻔ ﺮز ﻛﻤ ﺎ اﻧ ﮫ ﻓ ﻲ ‪ SQL‬ﻛ ﺎن ﯾﻤﻜﻨﻨ ﺎ ﺑﻌ ﺪ ﻛﻠﻤ ﺔ ‪ Order By‬أن ﻧﻜﺘ ﺐ رﻗ ﻢ ‪ ١‬ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل‬
‫ﻟﻠﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي ﺣﺴﺐ اﻟﺤﻘﻞ اﻷول ﺑﻌﺪ ﻛﻠﻤﺔ ‪ Select‬وھﻜﺬا وﯾﻤﻜﻨﻨ ﺎ أﯾ ﻀﺎ اﻟﺘﺮﺗﯿ ﺐ ﻋﻠ ﻲ ﺣ ﺴﺐ‬
‫ﺣﻘﻞ ﻏﯿﺮ ﻣﻮﺟﻮد ﻓﻲ اﻟﺠﺰء ‪Select‬‬

‫‪76‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫أﺳﺘﺮﺟﻊ اﻻﺳﻢ اﻷول واﻻﺳﻢ اﻷﺧﯿﺮ وﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﻟﻠﻄﻠﺒﺔ ورﺗﺒﮭﻢ ﺗﻨﺎزﻟﯿﺎ ﺣﺴﺐ اﻻﺳﻢ اﻷول‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select‬‬ ‫‪FName , LName , BDate‬‬
‫‪From‬‬ ‫‪student‬‬
‫‪Order by ١ Desc‬‬

‫‪Grid Pane‬‬

‫ﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ أن اﻟﺒﯿﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺣﺴﺐ اﻻﺳﻢ اﻷول ﺗﺮﺗﯿﺒﺎ ﺗﻨﺎزﻟﯿﺎ ﺑﺎﻟﻔﻌﻞ‬

‫أﺳﺘﺮﺟﻊ اﻻﺳﻢ ﻛﺎﻣﻞ وﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﻟﻠﻄﻠﺒﺔ ورﺗﺒﮭﻢ ﺗﺼﺎﻋﺪﯾﺎ ﺣﺴﺐ اﻻﺳﻢ ﺑﺎﻟﻜﺎﻣﻞ وﺗﻨﺎزﻟﯿﺎ ﺣﺴﺐ ﺗﺎرﯾﺦ اﻟﻤﯿﻼد‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫'‪Select FName+' '+LName 'Student Name‬‬
‫‪, BDate‬‬
‫‪From student‬‬
‫‪Order by 'Student Name' , BDate Desc‬‬

‫‪Grid Pane‬‬

‫ﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ أن ﻋﻤﻠﯿﺔ ﺗﺮﺗﯿﺐ اﻟﺒﯿﺎﻧﺎت‬


‫ﺳﻮف ﺗﻼﺣﻆ ﺑﻌﺾ اﻷﺧﻄﺎء ﻓﻲ ﺗﺮﺗﯿﺐ ﺗﺎرﯾﺦ اﻟﻤﯿﻼد ھﺬه ﻟﯿﺴﺖ أﺧﻄﺎ ﻓﻲ ﺟﻤﻠﺔ ‪ SQL‬ﻟﻘﺪ اﺧﺘﺮت أوﻻ أن‬
‫ﺗﺮﺗﯿﺐ ﺣﺴﺐ اﻻﺳﻢ وﺑﻌﺪھﺎ ﺣﺴﺐ اﻟﺘﺎرﯾﺦ ﻟﮭﺬا ﺗﻢ اﻻﺣﺘﻔﺎظ ﺑﺘﺮﺗﯿﺐ اﻻﺳﻢ أوﻻ‬
‫وﻻﺣﻆ أﯾﻀﺎ أﻧﻨﺎ ﯾﻤﻜﻨﻨﺎ اﻟﺘﺤﻜﻢ ﻓﻲ ھﺬا ﻓﻲ ‪ Grid Pane‬ﻣﻦ ﺧﻼل اﻟﻌﻤﻮد ‪ Sort Order‬إن اﺧﺘﺮت رﻗﻢ‬
‫واﺣﺪ ﻋﻠﻲ ﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﺳﻮف ﯾﺨﺘﻠﻒ اﻟﻔﺮز ﻋﻠﻲ أﺳﺎس اﻷھﻤﯿﺔ اﻷوﻟﻲ ﻟﺘﺎرﯾﺦ اﻟﻤﯿﻼد وإن أردت ذﻟﻚ ﻓﻲ‬
‫‪ SQL‬ﻓﻜﺘﺐ أوﻻ ﺗﺎرﯾﺦ اﻟﻤﯿﻼد ﺛﻢ ﺑﻌﺪه اﻻﺳﻢ وﻋﻠﻲ ذﻟﻚ ﺳﻮف ﯾﺘﻢ اﻟﺘﺮﺗﯿﺐ‬

‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬


‫‪77‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻋﺮض اﻟﺒﯿﺎﻧﺎت ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول ‪Displaying Data From Multiple Tables‬‬


‫ﻟﻘﺪ أﺧﺬﻧﺎ ﻣﻦ ﻗﺒﻞ ﻛﯿﻔﯿﺔ إﺧﺮاج ﺑﯿﺎﻧﺎت ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟ ﺪول ﻣ ﻦ ﺧ ﻼل أﻛﺜ ﺮ ﻣ ﻦ ﻣﻌﺎﻣ ﻞ ﻣ ﻊ اﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ اﻻﺳ ﺘﻌﻼﻣﺎت‬
‫اﻟﻔﺮﻋﯿﺔ وﻟﻜﻨﻨﺎ اﻵن ﺳﻮف ﻧﺄﺧﺬ أﻧﻮاع اﻟﺮﺑﻂ اﻷﺳﺎﺳﯿﺔ‬
‫ﻣﺎ ھﻮ اﻟﺮﺑﻂ ‪ What Is a Join‬؟‬

‫ﯾﺴﺘﺨﺪم اﻟﺮﺑﻂ ﻓﻲ اﻻﺳﺘﻌﻼم ﻋﻦ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺨﺮج ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ أﻧﻨﺎ ﻻ ﻧﺮﯾﺪ ﻋﺮض رﻗﻢ‬
‫اﻟﻄﺎﻟﺐ وﻟﻜﻨﻨﺎ ﻧﺮﯾﺪ ﻋﺮض أﺳﻤﮫ ﻣﻦ ﺟﺪول اﻟﻄﺎﻟﺐ وﻻ ﻧﺮﯾﺪ ﻋﺮض رﻗﻢ اﻟﻤ ﺎدة وﻟﻜﻨﻨ ﺎ ﻧﺮﯾ ﺪ ﻋ ﺮض أﺳ ﻢ اﻟﻤ ﺎدة ﻣ ﻦ‬
‫ﺟﺪول اﻟﻤﺎدة وﻻ ﻧﺮﯾﺪ ﻋﺮض رﻗﻢ اﻟﻘﺴﻢ وﻟﻜﻦ ﻧﺮﯾﺪ ﻋﺮض أﺳﻢ اﻟﻘﺴﻢ وھﺬا ﻣ ﻦ ﺟ ﺪول اﻟﻘ ﺴﻢ وﻓ ﻲ اﻟﻨﮭﺎﯾ ﺔ ﻧﻌ ﺮض‬
‫اﻟﺪرﺟﺔ ﺣﺘﻰ ﺗﻜﻮن ﺳﮭﻠﺔ اﻟﻔﮭﻢ ﻣﻦ ﻧﻈﺮة اﻟﻤﺴﺘﺨﺪم وﺑﮭﺬا ھﻨﺎك ﺑﯿﺎﻧﺎت ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول ﻛﯿ ﻒ ﻧ ﺼﻞ إﻟ ﻲ ﺣﻘ ﻞ ﻣ ﺎ‬
‫ﻓﯿﺲ ﺟﺪول ﻣﺎ وﺣﻘﻞ أﺧﺮ ﻓﻲ ﺟﺪول أﺧﺮ وأن ﺣﺪث ھﺬا ﻻﺑﺪ أن ﻧﻀﻤﻦ ﻋﺮض اﻟﺒﯿﺎن اﻟﻤﻘﺼﻮد وﻟﯿﺲ أي ﺑﯿ ﺎن ﻣ ﻦ‬
‫اﻟﺠﺪول اﻵﺧﺮ ﺑﮭﺬا ﺗﻜﻮن ﺷﻜﻞ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﻛﺎﻟﺘﺎﻟﻲ‬
‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ ‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫أوﻻ ‪ :‬اﻟﺮﺑﻂ أو اﻟﻨﺎﺗﺞ اﻟﻜﺎرﺗﯿﺰي )‪Cartesian Product (CROSS JOIN‬‬


‫وﯾﻌﺘﺒﺮ ھﺬا ﺧﻄﺄ ﺷﮭﯿﺮ ﻗﺪ ﯾﺤﺚ ﻣﻌﻚ ﻋﻨﺪ اﺳﺘﺮﺟﺎع ﺑﯿﺎﻧﺎت ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول وﯾﺤﺪث ﻓﻲ اﻟﺤﺎﻻت اﻵﺗﯿﺔ ‪:‬‬
‫§ ﻟﻮ ﻟﻐﯿﻨﺎ ﺷﺮط اﻟﺮﺑﻂ ﺳﻮاء ﻓﻲ ﺟﻤﻠﺔ اﻟـ ‪ SQL‬أو ﺣﺬﻓﻨﺎ اﻟﻌﻼﻗﺔ ﻓﻲ ‪. Diagram‬‬
‫§ ﻟﻮ ﻛﺎن ﺷﺮط اﻟﺮﺑﻂ ﺑﯿﻦ اﻟﺠﺪاول ﺧﻄﺄ ‪.‬‬
‫ﻧﺘﯿﺠﺘﮫ ﻛﻞ اﻟﺼﻔﻮف ﻣﻦ اﻟﺠﺪول اﻷول ﺗﺮﺗﺒﻂ ﻣﻊ ﻛﻞ ﺻﻒ ﻣﻦ اﻟﺠﺪول اﻟﺜﺎﻧﻲ أي ﺣﺎﺻﻞ ﺿﺮب ﻋﺪد ﺻﻔﻮف اﻟﺠﺪول‬
‫اﻷول ﻓﻲ ﻋﺪد ﺻﻔﻮف اﻟﺠﺪول اﻟﺜﺎﻧﻲ واﻟﺤﻞ اﻟﻮﺣﯿﺪ ﻟﮫ ھﻮ إﺿﺎﻓﺔ ﺷﺮط ﺳﻠﯿﻢ ﻟﻠﺮﺑﻂ ﺑﯿﻦ اﻟﺠﺪاول‬
‫وھﺬا اﻟﺮﺑﻂ ﯾﻌﺘﺒﺮ ﺧﻄﺄ ﻓﻠﯿﺲ ﻣﻦ اﻟﻤﮭﻢ أن ﻧﻌﺮﺿﮫ وﻟﻜﻦ اﻟﻤﮭﻢ أن ﺗﻌﺮﻓﮫ ‪.‬‬

‫وﻓﻲ ھﺬا اﻟﺒﺎب ﺳﻮف ﯾﺘﻢ ﻋﺮض ﺟﻤﻞ ‪ SQL‬ﻣﺒﺎﺷﺮة ﻋﻠﻲ أن ﯾﺘﻢ ﻛﺘﺎﺑﺘﮭﺎ ﻓﻲ ‪Query Analyzer‬‬
‫أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ‪ Grid Pane‬ﺳﻮف ﯾﺘﻢ ﻋﺮﺿﮭﺎ أﯾ ﻀﺎ وﻣﻌﮭ ﺎ ﺳ ﯿﺘﻢ ﻋ ﺮض ‪ Diagram Pane‬وھ ﺬا ﻷﻧﮭ ﺎ ﺗﻠﻌ ﺐ‬
‫دور ھﺎم ﻓﻲ اﻟﺮﺑﻂ واﻟﯿﻚ ﻣﻘﺪﻣﺔ ﺑﺴﯿﻄﺔ ﻋﻦ ‪. Diagram Pane‬‬
‫ﻟﻘﺪ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ ﻛﯿﻔﯿﺔ إﺿﺎﻓﺔ وﺣﺬف اﻟﺠﺪاول داﺧﻞ ‪Diagram Pane‬‬
‫اﺣﺬف أي ﺟﺪاول ﻣﻮﺟﻮدة ﺛﻢ أﺿﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وأﺧﺘﺎر ‪ Add Table‬ﺛﻢ أﺧﺘﺮ ﺟﺪول اﻟﻄﺎﻟﺐ وﺟﺪول اﻟﺪراﺳﺔ‬
‫وﺳﻮف ﺗﺮي اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻻﺣﻆ ﻣﻌﻲ ﻓﻲ ھﺬا اﻟﺸﻜﻞ ﯾﻮﺟﺪ ﻋﻠﻲ ﻃﺮف ﻋﻼﻣﺔ اﻟﻤﻔﺘﺎح وﻋﻠﻲ اﻟﻄﺮف اﻵﺧﺮ ﻋﻼﻣﺔ ﻣﺎﻻ ﻧﮭﺎﯾﺔ ﻓﻤﺎذا ﯾﻌﻨﻲ ھﺬا ‪:‬‬
‫اﻟﺮﻣﺰ ﻓﻲ ﻧﮭﺎﯾﺔ اﻟﻌﻼﻗﺔ ﻣﺎذا ﯾﻌﻨﻲ‬
‫ﺗﻤﺜﻞ ﻋﻼﻗﺔ واﺣﺪ إﻟﻲ واﺣﺪ‬

‫ﺗﻤﺜﻞ ﻋﻼﻗﺔ واﺣﺪ إﻟﻲ ﻛﺜﯿﺮ‬

‫ﻏﯿﺮ ﻗﺎدر ﻋﻠﻲ ﻣﻌﺮﻓﺔ ﻧﻮع اﻟﻌﻼﻗﺔ‬

‫اﻟﺮﻣﻮز اﻟﺘﻲ ﻋﻠﻲ اﻟﺤﻘﻮل ‪:‬‬


‫ﻣﺎذا ﯾﻌﻨﻲ‬ ‫اﻟﺮﻣﺰ‬
‫ﻋﻠﻲ ﺣﺴﺐ اﻟﺘﺮﺗﯿ ﺐ ﻋﻨ ﺪ اﺧﺘﯿ ﺎر ‪Change Query‬‬ ‫و‬ ‫‪،‬‬ ‫‪،‬‬
‫‪ Type‬اﻟﺮﻣ ﺰ اﻷول ﻟﻌﻤﻠﯿ ﺎت اﻻﺳ ﺘﺮﺟﺎع واﻟﺜ ﺎﻧﻲ‬
‫ﻟﻌﻤﻠﯿﺎت اﻹﺿﺎﻓﺔ اﻟﺜﺎﻟﺚ ﻟﻌﻤﻠﯿ ﺔ اﻟﺘﻌ ﺪﯾﻞ واﻟﺮاﺑ ﻊ ﻟﻌﻤﻠﯿ ﺎت‬
‫اﻟﺤﺬف‬
‫ﻣﺴﺌﻮﻟﯿﻦ ﻋﻦ اﻟﺠﺰء ‪ Order by‬اﻟﺮﻣﺰ اﻷول ﻟﻠﺘﺮﺗﯿ ﺐ‬ ‫‪,‬‬
‫اﻟﺘﺼﺎﻋﺪي واﻟﺜﺎﻧﻲ ﻟﺘﺮﺗﯿﺐ اﻟﺘﻨﺎزﻟﻲ‬
‫ھﺬا اﻟﺤﻘﻞ ﻋﻠﯿﮫ دوال ﺗﺠﻤﯿﻌﯿﺔ ‪Group by‬‬
‫ھﺬا اﻟﺤﻘﻞ ﻋﻠﯿﮫ ﺷﺮط ﻣﺎ ﻓﻲ اﻟﺠﺰء ‪Criteria‬‬
‫ھﺬا اﻟﺤﻘﻞ ﻋﻠﯿﺔ داﻟﺔ ﺣﺴﺎﺑﯿﺔ ﺗﺠﻤﯿﻌﯿﺔ )ﻣﻠﺨﺼﺔ ﻟﻠﻨﺘﺎﺋﺞ(‬

‫وھﻨﺎك أﯾﻀﺎ رﻣﺰ ﻋﻠﻲ ﺧﻂ اﻟﻌﻼﻗﺔ وﻟﻌﻠﻲ ھﺬا اﻟﺮﻣﺰ ھ ﻮ أھ ﻢ ﻣ ﺎ ﯾﮭﻤﻨ ﺎ ﻓ ﻲ ھ ﺬا اﻟﻤﻮﺿ ﻮع ﺣﯿ ﺚ أﻧ ﮫ ﯾﻤﺜ ﻞ ﺑ ﮫ ﻧ ﻮع‬
‫اﻟﻌﻼﻗﺔ اﻟﻤﻮﺟﻮدة ﻣﺎﺑﯿﻦ اﻟﺠﺪاول اﻟﺤﺎﻟﯿﺔ وھﺬا ﻣﻠﺨﺺ ﻟﺬﻟﻚ‬

‫‪79‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﺻﻒ‬ ‫رﻣﺰ ﻧﻮع اﻟﻌﻼﻗﺔ‬


‫‪.‬‬ ‫ﺗﻤﺜﻞ اﻟﺮﺑﻂ اﻟﺪاﺧﻠﻲ أو اﻟﻤﺘﺴﺎوي ‪Inner Join Or Equal join‬‬

‫اﻟﺮﺑﻂ اﻟﺪاﺧﻠﻲ ‪ Inner Join‬ﻋﻨﺪﻣﺎ ﻧﺴﺘﺨﺪم ﻣﻌﺎﻣﻞ ﻣﻘﺎرﻧﺔ ﻏﯿ ﺮ = وﯾﻜ ﻮن‬


‫ھﺬا اﻟﺮﻣﺰ اﻟﺪاﺧﻠﻲ ﻣﺸﺎﺑﮫ ﻟﻠﻤﻌﺎﻣﻞ اﻟﺬي ﺗﻢ اﺧﺘﯿﺎره ‪.‬‬
‫اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ ﻣﻦ اﻟﻨﻮع ‪. Left Outer Join‬‬

‫اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ ﻣﻦ اﻟﻨﻮع ‪. Right Outer Join‬‬


‫‪. Full Outer Join‬‬ ‫اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ ﻣﻦ اﻟﻨﻮع‬

‫وﺑﻌﺪ ھﺬه اﻟﻤﻘﺪﻣﺔ ﻋﻦ ‪ Diagram Pane‬ﻧﻨﺘﻘﻞ إﻟﻲ ﺑﺎﻗﻲ أﻧﻮاع اﻟﺮﺑﻂ ‪.‬‬
‫ﺛﺎﻧﯿﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ‪. Equal Join‬‬
‫اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ﯾﻜﻮن داﺋﻤﺎ ﻣﺎﺑﯿﻦ ﺣﻘﻠﯿﻦ ﻓﻲ ﺟﺪوﻟﯿﻦ أﺣﺪھﻢ ﻣﻔﺘﺎح رﺋﯿﺴﻲ واﻵﺧﺮ ﻣﻔﺘﺎح ﺧﺎرﺟﻲ‬
‫ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل إذا أردﻧﺎ اﺳﺘﺮﺟﺎع أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ اﻟﺬي ﯾﻌﻤﻞ ﺑﮫ ﻛﻞ ﻣﻌﻠﻢ‬
‫ﻧﻼﺣﻆ أن ھﺬا اﻻﺳﺘﻌﻼم ﯾﺨﺺ ﺟﺪوﻟﯿﻦ ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ ﻣﻦ ﺟﻮل اﻟﻤﻌﻠ ﻢ وﺑﯿﺎﻧ ﺎت ﺗﺨ ﺺ اﻟﻘ ﺴﻢ ﻣ ﻦ ﺟ ﺪول اﻟﻘ ﺴﻢ‬
‫وﻧﺮﯾ ﺪ ان ﻧﻌ ﺮض ﺑﯿﺎﻧ ﺎت اﻟﻤﻮﻇ ﻒ اﻷول وﻣﻌﮭ ﺎ أﺳ ﻢ اﻟﻘ ﺴﻢ ﺑﺎﻟﺘﻔ ﺼﯿﻞ ) ﻋ ﺮض أﺳ ﻢ اﻟﻘ ﺴﻢ اﻟ ﺬي ﯾﻜ ﻮن رﻗﻤ ﮫ ﻓ ﻲ‬
‫ﺟﺪول اﻟﻘﺴﻢ ﻧﻔﺲ اﻟﺮﻗﻢ اﻟﻤﻮﺟﻮد ﻋﻠﻲ ﺣﻘﻞ ‪ WorkDept‬ﻓﻲ ﺟﺪول اﻟﻤﻌﻠ ﻢ ( أﻗ ﺮأ ھ ﺬه اﻟﻌﺒ ﺎرة ﻣ ﻊ اﻟﻨﻈ ﺮ ﻟﻠ ﺸﻜﻞ‬
‫اﻟﺘﺎﻟﻲ‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select Teacher.Name ,‬‬
‫‪Teacher.Salary ,‬‬
‫‪Department.DName‬‬
‫‪From Teacher , Department‬‬
‫‪Where‬‬
‫‪Department.DeptNo = Teacher.DeptWork‬‬
‫‪Diagram Pane‬‬

‫ﺑﻌ ﺪ إﺿ ﺎﻓﺔ اﻟﺠ ﺪوﻟﯿﻦ ﺳ ﻮف ﯾﻈﮭ ﺮ ﻟ ﻚ ﻣ ﺎﺑﯿﻦ ھ ﺬﯾﻦ اﻟﺠ ﺪوﻟﯿﻦ ﻋﻼﻗﺘ ﯿﻦ ﻗ ﻒ ﻋﻠ ﻲ ﻋﻼﻗ ﺔ اﻹدارة ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس‬
‫واﺧﺘﺎر ‪ Remove‬ﻟﺤﺬﻓﮭﺎ ﻷﻧﻨﺎ ﻻ ﻧﺮﯾﺪھﺎ وﻧﻨﻘﺮ ﺑﺎﻟﻤﺎوس ﻋﻠ ﻲ اﻟﺤﻘ ﻮل اﻟﻤ ﺮاده ﻟﺘﺤ ﻮل ﻟﺮﻣ ﺰ ﺻ ﺢ وﻻﺣ ﻆ ﻋﻨ ﺪ‬
‫اﻟﻮﻗﻮف ﺑﺎﻟﻤﺎوس ﻋﻠﻲ اﻟﻌﻼﻗﺔ ﻟﻘﺪ ﻇﮭﺮ ﻛﻠﻤﺔ ‪ Inner join‬أﺗﺮﻛﮭﺎ اﻵن وﻟﻜﻦ ﺑﻌﺪھﺎ ﻧﻔﺲ ﺷﺮط ‪SQL‬‬

‫‪80‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﻟﻜﻦ ﻟﻮ ﻻﺣﻈﺖ إن ﺟﻤﻠﺔ ال‪ SQL‬أﺻﺒﺤﺖ ﺟﻤﻠﺔ ﻃﻮﯾﻠﺔ ھﺬا ﺑﺴﺒﺐ ذﻛﺮ أﺳﻢ اﻟﺠﺪول ﻣ ﻊ ﻛ ﻞ ﺣﻘ ﻞ ﯾﺨ ﺼﮫ وﯾﻤﻜﻨﻨ ﺎ‬
‫ﺗﻘﻠﯿﻞ ھﺬا اﻟﻄﻮل ﻣﻦ ﺧﻼل وﺿﻊ أﺳﻤﺎء ﻣﺴﺘﻌﺎرة ﻟﻠﺠ ﺪاول ‪ Aliases‬وﻧ ﺴﺘﺨﺪﻣﮭﺎ ﺑ ﺪﻻ ﻣ ﻦ أﺳ ﻢ اﻟﺠ ﺪول ﺑﺎﻟﻜﺎﻣ ﻞ‬
‫وﻧﻀﯿﻒ أﺳﻤﺎ ﻣﺴﺘﻌﺎرا ﻟﻠﺠﺪول ﺑﻌﺪ ﻛﻠﻤﺔ ‪ From‬وﺑﻌﺪ أﺳﻢ اﻟﺠﺪول اﻟﻜﺎﻣﻞ وھﻜﺬا ﻣ ﻊ ﺑ ﺎﻗﻲ اﻟﺠ ﺪاول وﻧ ﺴﺘﺨﺪم ھ ﺬا‬
‫اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر ﻓﻲ أي ﻣﻜﺎن ﺑﺎﻟﺠﻤﻠﺔ ﻟﺘﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ ‪:‬‬

‫‪Select T.Name , T.Salary , D.DName‬‬ ‫ﻟﺘﻜﻮن اﻟﺠﻤﻠﺔ أرﺷﻖ‬


‫‪From Teacher T , Department D‬‬ ‫وﺑﺎﻟﻄﺒﻊ ﻣﻊ ‪ Diagram Pane‬ﻻ ﻧﺤﺘﺎج ﻟﮭﺬا‬
‫‪Where T.DeptWork =D.DeptNo‬‬

‫ﻟﻌﻤﻞ اﻟﻤﺜﺎل اﻟﻤﻌﺮوض ﻓﻲ ﺑﺪاﯾﺔ اﻟﺒﺎب ﺗﺤﺖ ﻋﻨﻮان ﻣﺎ ھﻮ اﻟﺮﺑﻂ ؟)راﺟﻊ اﻟﺼﻮرة(‬
‫ﺳﻮف ﺗﻼﺣﻆ أن اﻟﺮﺑﻂ ھﻨﺎ ﯾﻘﻮم ﻋﻠﻲ أرﺑﻌﺔ ﺟﺪاول‬
‫ﻻﺳﺘﺮﺟﺎع أﺳﻢ اﻟﻄﺎﻟﺐ وأﺳﻢ اﻟﻘﺴﻢ وأﺳﻢ اﻟﻤﺎدة ودرﺟﺔ اﻟﻄﺎﻟﺐ ھﻨﺎك ﺛ ﻼث ﻋﻼﻗ ﺎت ﻣ ﺎﺑﯿﻦ أرﺑﻌ ﺔ ﺟ ﺪاول ﺑﺎﻟﺘﻔ ﺼﯿﻞ‬
‫ﻛﺎﻟﺘﺎﻟﻲ ‪:‬‬
‫§ ﺟﺪول اﻟﻄﺎﻟﺐ ﺣﻘﻞ رﻗﻢ اﻟﻄﺎﻟﺐ ﻣﻊ ﺟﺪول اﻟﺪراﺳﺔ ﺣﻘﻞ رﻗﻢ اﻟﻄﺎﻟﺐ ‪.‬‬
‫§ ﺟﺪول اﻟﺪراﺳﺔ ﺣﻘﻞ رﻗﻢ اﻟﻤﺎدة ورﻗﻢ اﻟﻘﺴﻢ ﻣﻊ ﺟﺪول اﻟﻤﺎدة ﺣﻘﻞ رﻗﻢ اﻟﻤﺎدة ورﻗﻢ اﻟﻘﺴﻢ ‪.‬‬
‫§ ﺟﺪول اﻟﻘﺴﻢ ﺣﻘﻞ رﻗﻢ اﻟﻘﺴﻢ ﻣﻊ ﺟﺪول اﻟﻤﺎدة ﺣﻘﻞ رﻗﻢ اﻟﻘﺴﻢ ‪.‬‬
‫وﻟﻌﻤﻞ رﺑﻂ أﻛﺜﺮ ﻣﻦ ﺷﺮط ﯾﺘﻢ اﺳﺘﺨﺪام اﻟﻤﻌﺎﻣﻞ ‪ 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‬‬

‫ﻻﺣﻆ أن ﻛﻞ ﺷ ﺮط ﻣ ﻦ اﻟ ﺸﺮوط ﻧﺮﺑﻄ ﮫ ﻣ ﻊ ﻣ ﺎ ﯾﻠﯿ ﮫ ﻣ ﻦ ﺧ ﻼل اﻟﻤﻌﺎﻣ ﻞ ‪ And‬وﻻﺣ ﻆ أﯾ ﻀﺎ ﻓ ﻲ ﺷ ﺮط رﺑ ﻂ ﺟ ﺪول‬


‫اﻟﺪراﺳﺔ ﻣﻊ ﺟﺪول اﻟﻤﺎدة ﺣﯿ ﺚ أﻧﮭ ﻢ ﺣﻘﻠ ﯿﻦ وﻻﺑ ﺪ أن ﯾﺘ ﺴﺎو ﻣﻌ ﺎ ﻟ ﺬﻟﻚ رﺑﻄﻨ ﺎ ﺑﯿ ﻨﮭﻢ ب ‪ And‬وھ ﺬا ﺷ ﺮط ﻣ ﺴﺘﻘﻞ‬
‫ﻟﺬﻟﻚ اﺳﺘﺨﺪﻣﻨﺎ اﻷﻗﻮاس‬

‫‪81‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺛﺎﻟﺜﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﻐﯿﺮ ﻣﺘﺴﺎوي ‪. Non-equal join‬‬


‫ﻟﻤﻌﺮﻓﺔ اﻟﺮﺑﻂ اﻟﻐﯿﺮ ﻣﺘﺴﺎوي ﺳﻮف ﻧﺼﻨﻊ ﺟﺪول ﻟﺘﺤﺪﯾﺪ ﻓﺌﺔ اﻷﺟﺮ وﻧﺴﻤﯿﮫ ‪ SalGrade‬ﻟﯿﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ‬
‫( ‪Create Table SalGrade‬‬
‫‪Grade Char(1) Constraint SalGrade_PK Primary Key,‬‬
‫‪HiSal‬‬ ‫‪Numeric(6,2) ,‬‬
‫) )‪LowSal Numeric(6,2‬‬
‫اﻟﺠﺪول ﺑﺴﯿﻂ ﻣﻔﺘﺎﺣﮫ اﻟﺮﺋﯿﺴﻲ ﺣﻘﻞ ﯾﺤﻤﻞ رﻣﺰ ﻛﺘﻘﺪﯾﺮ وﺣﻘﻞ أﻗﻞ ﻣﺮﺗﺐ ﻛﺤﺪ أدﻧ ﻲ وﺣﻘ ﻞ أﻋﻠ ﻲ ﻣﺮﺗ ﺐ ﻛﺤ ﺪ أﻗ ﺼﻲ‬
‫ﻋﻠﻲ أﺳﺎس أن ﯾﻜﻮن ﻣﺤﺪد ﻟﻜﻞ ﻓﺌﺔ اﻟﺤﺪ اﻷدﻧﻰ واﻟﺤﺪ اﻻﻋﻠﻲ وﻧﻤﻠﺌﮫ ﺑﺎﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ ھﻮ ﻣﻮﺟﻮد ﺑﺎﻟﺼﻮرة‬
‫وﻧﺮﯾﺪ أن ﻧﺮﺑﻄﮫ ﻣﻊ اﻟﻌﺎﻣﻠﯿﻦ ﻻﺣﻆ اﻟﺸﻜﻞ‬

‫ﻻ ﺗﻮﺟﺪ ﻋﻼﻗﺔ أﺳﺎﺳﺎ ﺑﯿﻦ ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ وﺟﺪول ﻓﺌﺔ اﻟﻤﺮﺗﺐ وﻟﻜﻦ ھﻨﺎك ﻋﻼﻗﺔ ﻏﯿﺮ ﺻ ﺮﯾﺤﺔ وھ ﻲ أن ﻣﺮﺗ ﺐ أي‬
‫ﻣﻌﻠﻢ ﻣﺤﺼﻮر ﺑﯿﻦ ﺣﺪ أدﻧﻲ وﺣﺪ أﻗﺼﻲ ﻓﻲ ھﺬا ﺟﺪول ‪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‬‬ ‫‪Result‬‬

‫ﻻﺣﻆ أﻧ ﮫ ﻓ ﻲ ‪ Diagram Pane‬ﻻ ﯾﻮﺟ ﺪ أي ﻋﻼﻗ ﺔ ﺣﻘﯿﻘﯿ ﺔ و ﻻ ﺣ ﻆ أﯾ ﻀﺎ ‪ Grid Pane‬اﻟ ﺸﺮط ﯾﻜﺘ ﺐ أﻣ ﺎم‬
‫ﺣﻘ ﻞ اﻟﻤﺮﺗ ﺐ و ﻧﻜﺘ ﺐ ﻗﺒ ﻞ ﻛ ﻞ ﺣﻘ ﻞ ﻓ ﻲ اﻟ ﺸﺮط أﺳ ﻢ اﻟﺠ ﺪول )ﯾﻤﻜﻨﻨ ﺎ اﻟﻜﺘﺎﺑ ﺔ ﺑ ﺪون أﺳ ﻢ اﻟﺠ ﺪول ﻟ ﻮ اﻟﺤﻘ ﻮل ﻏﯿ ﺮ‬
‫ﻣﺘﺸﺎﺑﮭﺔ اﻷﺳﻤﺎء ﻓﻲ اﻟﺠﺪوﻟﯿﻦ ﺟﺮب اﻵن ﺟﻤﻠﺔ ‪ SQL‬اﻟﺴﺎﺑﻘﺔ ﺑﺪون ﻛﺘﺎﺑﺔ أﺳﻢ اﻟﺠﺪول ﻗﺒﻞ اﻟﺤﻘﻞ وﺳﻮف ﺗﻨﻔﺬ (‬

‫‪82‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪.‬‬ ‫راﺑﻌﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﺪاﺧﻠﻲ ‪Inner Join‬‬

‫ﻟﻘﺪ ﻻﺣﻈﺖ ﻣﻦ ﻗﺒﻞ ﻓﻲ ‪ Diagram Pane‬ﻋﻨﺪﻣﺎ ﻧﻘﻒ ﻋﻠﻲ اﻟﻌﻼﻗﺔ ﺗﻈﮭﺮ ﻛﻠﻤﺔ ‪ Inner Join‬ﻗﺒﻞ ﺷﺮط اﻟﻌﻼﻗﺔ‬
‫ﻓﻲ اﻟﺤﻘﯿﻘﺔ أن اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ھﻮ ﻋﺒﺎرة ﻋﻦ رﺑﻂ داﺧﻠﻲ وﻛﺎن ھﻨﺎك ﻗﺪﯾﻤﺎ اﻟﻌﺪﯾﺪ ﻣ ﻦ اﻟﻄ ﺮق اﻷﺧ ﺮى اﻟﺘ ﻲ ﺑ ﺪأت‬
‫ﺗﻠﻐﻲ اﻟﻤﮭﻢ أن ﺗﺤﺎول داﺋﻤﺎ ﻋﻨﺪ رﺑﻂ اﻟﺠﺪاول ﻓﯿﻤﺎ ﺑﯿﻨﮭﻢ ﻣﻦ ﺧﻼل ﺣﻘﻮل ﻣﺘﺸﺎﺑﮭﺔ وﺑﯿﻨﮭﻢ ﻋﻼﻗﺔ ﺑﺎﻟﻔﻌﻞ أن ﺗ ﺴﺘﺨﺪم‬
‫‪ Inner Join‬ﻟﻜﻦ اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ﯾﻤﮭﺪك ﻟﻠﻮﺻﻮل ﻟﻠﺮﺑﻂ اﻟﺪاﺧﻠﻲ وأﯾﻀﺎ ﻗﺪ ﺗﺤﺘﺎﺟﮫ ﻓﻲ رﺑﻂ ﺟﺪوﻟﯿﻦ ﻟﯿﺲ ﺑﯿﻨﮭﻢ‬
‫ﻋﻼﻗﺔ ؟؟‬
‫ﺳﻮف ﻧﻨﻔﺬ ﻧﻔﺲ اﺳﺘﻌﻼم اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ‪ --‬أﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ ﻟﻜﻞ اﻟﻤﻌﻠﻤﯿﻦ‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬

‫‪Select T.Name ,T.Salary , D.DName‬‬


‫‪From Department D Inner Join Teacher T‬‬
‫‪on D.DeptNo = T.DeptWork‬‬

‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Result‬‬

‫ﻻﺣﻆ أﻧﻨﺎ ﺑﻌﺪ أول رﺑ ﻂ وﻗﺒ ﻞ أن ﻧ ﺪﺧﻞ ﻋﻠ ﻲ اﻟ ﺮﺑﻂ اﻟﺜ ﺎﻧﻲ ﻧﻜﺘ ﺐ اﻟﻜﻠﻤ ﺔ ‪ Inner Join‬وﺑﻌ ﺪھﺎ أﺳ ﻢ اﻟﺠ ﺪول اﻟ ﺬي‬
‫ﺳﻮف ﯾﺮﺑﻂ ﻓﻘﻂ وﻻ ﻧﺬﻛﺮ أﺳﻢ أي ﺟﺪول ﻗﺪ ﺗ ﻢ ذﻛ ﺮه وﺑﻌ ﺪھﺎ ﻛﻠﻤ ﺔ ‪ on‬ﺛ ﻢ ﺷ ﺮط اﻟ ﺮﺑﻂ ﺑﯿﻨ ﮫ وﺑ ﯿﻦ اﻟﺠ ﺪول اﻟﻤ ﺮاد‬
‫وھﻜﺬا ﻛﻠﻤﺔ ‪ inner Join‬وﺑﻌﺪھﺎ اﻟﺠﺪول وﺑﻌﺪھﺎ ‪ on‬ﺛﻢ ﺷﺮط اﻟﺮﺑﻂ ﺣﺘﻰ اﻟﻨﮭﺎﯾﺔ‬
‫وﻻﺣﻆ أﯾﻀﺎ اﺳﺘﺨﺪاﻣﻨﺎ أﺳﻤﺎء اﻟﺤﻘﻮل ﻣﺒﺎﺷﺮة ﻃﺎﻟﻤﺎ أن أﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺬﻛﻮر ﻏﯿﺮ ﻣﻮﺟﻮد ﻓﻲ أي ﺟﺪول ﻏﯿﺮ ﺟ ﺪول‬
‫واﺣﺪ وﻟﻜﻦ ﻣﻦ اﻟﻤﻔﻀﻞ اﻻﻟﺘﺰام ﺑﺬﻛﺮ أﺳﻢ اﻟﺠﺪول ﺛﻢ أﺳﻢ اﻟﺤﻘﻞ ﺑﻌﺪ ﻛﻠﻤﺔ ‪on‬‬
‫وﻣﻦ اﻟﻤﻔﻀﻞ أﯾﻀﺎ ﻛﻤﺎ ھﻮ ﻣﻮﺟﻮد ﻋﻨﺪ ﻛﻞ ﺷﺮط ﻧﺒﺪأ ﺑﺤﻘﻞ اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ‬

‫ﺧﺎﻣﺴﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ ‪. Outer join‬‬


‫وھﻨﺎك ﺛﻼﺛﺔ أﻧﻮاع ﻟﻠﺮﺑﻂ اﻟﺨﺎرﺟﻲ ﯾﻠﺨﺼﮭﻢ اﻟﺠﺪول اﻟﺘﺎﻟﻲ‪:‬‬
‫اﻟﻮﺻﻒ‬ ‫اﻟﻨﻮع‬ ‫اﻟﺮﻣﺰ‬
‫‪ Left Outer Join‬ﯾﺤﺪد ﻣﻦ ﺟﺪوﻟﻲ اﻟﻌﻼﻗﺔ اﻟﺴﺠﻼت اﻟﻤﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺤﻘﻮل اﻟﻤﺮﺗﺒﻄﺔ ﻣﺎ ﺑﯿﻦ‬
‫اﻟﺠﺪوﻟﯿﻦ و ﺳﺠﻼت اﻟﺠﺪول اﻷﯾﺴﺮ اﻟﻐﯿﺮ ﻣﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺤﻘﻮل اﻟﻤﺮﺗﺒﻄﺔ ﻣﺎ‬
‫ﺑﯿﻦ اﻟﺠﺪوﻟﯿﻦ و ﺗﻮﺿﻊ أﻣﺎﻣﮭﻢ اﻟﻘﯿﻤﺔ ‪Null‬‬
‫‪ Right Outer Join‬ﯾﺤﺪد ﻣﻦ ﺟﺪوﻟﻲ اﻟﻌﻼﻗﺔ اﻟﺴﺠﻼت اﻟﻤﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺤﻘﻮل اﻟﻤﺮﺗﺒﻄﺔ ﻣﺎ ﺑﯿﻦ‬
‫اﻟﺠﺪوﻟﯿﻦ و ﺳﺠﻼت اﻟﺠﺪول اﻷﯾﻤﻦ اﻟﻐﯿﺮ ﻣﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺤﻘﻮل اﻟﻤﺮﺗﺒﻄﺔ ﻣﺎ‬
‫ﺑﯿﻦ اﻟﺠﺪوﻟﯿﻦ أﻣﺎﻣﮭﺎ وﺗﻮﺿﻊ أﻣﺎﻣﮭﻢ اﻟﻘﯿﻤﺔ ‪Null‬‬
‫‪ Full Outer Join‬ﯾﺤﺪد ﻣﻦ ﺟﺪوﻟﻲ اﻟﻌﻼﻗﺔ اﻟﺴﺠﻼت اﻟﻤﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺤﻘﻮل اﻟﻤﺮﺗﺒﻄﺔ و ﺳﺠﻼت‬
‫اﻟﺠﺪول اﻷﯾﺴﺮ واﻷﯾﻤﻦ اﻟﻐﯿﺮ ﻣﺘﺸﺎﺑﮭﺔ وﺗﻮﺿﻊ أﻣﺎﻣﮭﻢ اﻟﻘﯿﻤﺔ ‪Null‬‬

‫ﻣﺒﺪﺋﯿﺎ ﻟﻤﻼﺣﻈﺔ اﻟﻔﺮق ﺑﯿﻦ ﻛﻞ ھﺬه اﻷﻧﻮاع ﻓﻠﺪﯾﻨﺎ ﻓﻲ ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ ﻣﻌﻠﻤﯿﻦ ﻏﯿﺮ ﻣﺤﺪد ﻟﮭﻢ أﻗ ﺴﺎم وﺳ ﻮف ﻧ ﻀﯿﻒ‬
‫ﻓﻲ ﺟﺪول اﻟﻘﺴﻢ ﻗﺴﻢ أﺧﺮ )اﻟﮭﻨﺪﺳﺔ ‪ ( Geometry‬ﻋﻠﻲ أﺳﺎس أﻧﮫ ﻻ ﯾﻌﻤﻞ ﺑﮫ أي ﻣﻌﻠﻤﯿﻦ ﺣﺘﻰ اﻵن وھﺬا ﻟﯿﻜﻮن‬
‫ﻟﺪﯾﻨﺎ ﺳﺠﻼت ﻓﻲ اﻟﺠﺪول اﻷول ﻟﯿﺲ ﻟﮭﺎ ﺳﺠﻼت ﻣﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ واﻟﻌﻜﺲ ﺣﺘﻰ ﯾﺴﮭﻞ ﺗﺘﺒﻊ اﻟﻔﺮوق‬

‫أوﻻ ‪ :‬اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ اﻷﯾﺴﺮ ‪Left Outer Join‬‬


‫ﯾﺤﺪد ﻣﻦ ﺟﺪوﻟﻲ اﻟﻌﻼﻗﺔ اﻟﺴﺠﻼت اﻟﻤﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺤﻘﻮل اﻟﻤﺮﺗﺒﻄﺔ ﻣﺎ ﺑﯿﻦ اﻟﺠﺪوﻟﯿﻦ و ﺳﺠﻼت اﻟﺠﺪول اﻷﯾﺴﺮ اﻟﻐﯿﺮ‬
‫ﻣﺘﺸﺎﺑﮭﺔ ﻓﻲ اﻟﺤﻘﻮل اﻟﻤﺮﺗﺒﻄﺔ ﻣﺎ ﺑﯿﻦ اﻟﺠﺪوﻟﯿﻦ و ﺗﻮﺿﻊ أﻣﺎﻣﮭﻢ اﻟﻘﯿﻤﺔ ‪Null‬‬

‫‪84‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻣﺜﺎل ‪:‬‬
‫ﻻﺣﻆ ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﺨﺎص ﺑﺄﺳﻤﺎء اﻟﻤﻌﻤﻠﯿﻦ وﻣﺮﺗﺒﺘﮭﻢ وأﺳﻤﺎء اﻷﻗﺴﺎم‬
‫أن اﻟﻨﺘﯿﺠﺔ اﻟﻈﺎھﺮة ﻟﺪﯾﻚ ھﻲ ﻋﺒﺎرة ﻋﻦ ﺛﻤﺎﻧﯿﺔ ﺳﺠﻼت ﻓﻘﻂ وﻣﻮﺟﻮد داﺧﻞ ﺟﺪول اﻟﻤﻌﻠﻢ ﻋﺸﺮة ﺳﺠﻼت وﻣﻮﺟ ﻮد‬
‫داﺧﻞ ﺟﺪول اﻟﻘﺴﻢ ﺛﻼﺛﺔ أﻗﺴﺎم ﻓﯿﻮﺟﺪ ﻋﺪد ‪ ٢‬ﻣﻌﻠﻤﯿﻦ ﻏﯿﺮ ﻣﻮﺟﻮدﯾﻦ ﻣﻦ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم وھ ﺬا ﺑ ﺴﺒﺐ أﻧ ﮫ ﯾﻮﺟ ﺪ ‪٢‬‬
‫ﻣﻌﻠﻢ ﻟﯿﺲ ﻣﺤﺪد ﻟﮭﻢ أﻗﺴﺎم ﺣﺘﻰ اﻵن وﯾﻮﺟﺪ ﻋﺪد ‪ ١‬ﻗﺴﻢ ﻏﯿﺮ ﻇﺎھﺮ ﺑﺎﻟﻨﺘﯿﺠﺔ أﯾﻀﺎ ﻓﮭﻨﺎك ﺑﯿﺎﻧﺎت ﻏﯿ ﺮ ﻛﺎﻣﻠ ﺔ وﻟﻜﻨﻨ ﺎ‬
‫ﻧﺮﯾﺪ اأوﻻ ﻇﮭﻮر اﻟﻤﻌﻠﻤﯿﻦ ﺳﻮاء ﻛﺎﻧﻮا ﯾﻌﻤﻠﻮا ﺑﺄﻗﺴﺎم أم ﻻ‬
‫ﻻﺣﻆ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫أﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ ﻟﻠﻤﻌﻠﻤﯿﻦ ﻣﻊ ﻇﮭﻮر ﻛﻞ اﻷﻗﺴﺎم ﺣﺘﻰ إذا ﻛﺎﻧﺖ ﺑﺪون ﻣﻌﻠﻤﯿﻦ ﺣﺘﻰ اﻵن‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬

‫‪Select Name , Salary , DName‬‬


‫‪From Department‬‬
‫‪Left Outer Join Teacher‬‬
‫‪On DeptNo = DeptWork‬‬

‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺛﺎﻧﯿﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ اﻷﯾﻤﻦ ‪Right Outer Join‬‬


‫ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻗﺪ ﺗﻤﻜﻨﺎ ﻣﻦ ﻋﺮض ﻛﻞ ﺳﺠﻼت اﻷﻗﺴﺎم ﻟﮭﺬا ﻛﺎﻧﺖ اﻟﻨﺘﯿﺠﺔ ‪ ٩‬ﺻﻔﻮف وﻟﻜﻨﻨﺎ اﻵن ﻧﺮﯾﺪ ﻋﺮض‬
‫ﺟﻤﯿﻊ ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ ﺣﺘﻰ وان ﻟﻢ ﯾﻌﻤﻠﻮا ﺣﺘﻰ اﻵن ﻓﻲ أي ﻗﺴﻢ ‪.‬‬
‫أﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ ﻟﻠﻤﻌﻠﻤﯿﻦ ﺟﻤﯿﻌﺎ ﺣﺘﻰ أن ﻟﻢ ﯾﻜﻦ ﻣﺤﺪد ﻟﮭﻢ أﻗﺴﺎم ﺣﺘﻰ اﻵن‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬

‫‪Select Name , Salary , DName‬‬


‫‪From Department‬‬
‫‪Right Outer Join Teacher‬‬
‫‪On DeptNo = DeptWork‬‬

‫‪Diagram Pane‬‬

‫ﻓﻲ اﻟﺠﺰء ‪ Diagram Pane‬ﻟﻌﻤﻞ ﻋﻼﻗﺔ ﺧﺎرﺟﯿﺔ ﯾﻤﻨﻲ ﺗﺴﺘﺮﺟﻊ ﺟﻤﯿﻊ ﺳﺠﻼت اﻟﻤﻌﻠﻤﯿﻦ ﻧﻘﻒ ﻋﻠﻲ اﻟﻌﻼﻗﺔ‬
‫ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺛﻢ ﻧﺨﺘﺎر ‪ Select All rows from Teacher‬أو ﻧﺨﺘﺎر ‪ properties‬ﺛﻢ ‪All rows‬‬
‫‪ from Teacher‬و ﺑ ﻨﻔﺲ اﻟﻄﺮﯾﻘ ﺔ اﻟ ﺴﺎﺑﻘﺔ ذﻛﺮﻧ ﺎ أﺳ ﻢ اﻟﺠ ﺪوﻟﯿﻦ وﻣ ﺎ ﺑﯿ ﻨﮭﻢ اﻟﻜﻠﻤ ﺔ اﻷﺳﺎﺳ ﯿﺔ ‪Right‬‬
‫‪ Outer Join‬ﻻﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ ﺳﺠﻼت اﻷﻗﺴﺎم ﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﻏﯿﺮ ﻣﺘﺸﺎﺑﮭﺔ وﺷﺮط اﻟﻌﻼﻗﺔ ﺑﻌﺪ اﻟﻜﻠﻤﺔ ‪On‬‬
‫ﺛﺎﻧﯿﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ اﻟﻜﺎﻣﻞ ‪Full Outer Join‬‬
‫أﺳﺘﺮﺟﻊ أﺳﻢ وﻣﺮﺗﺐ وأﺳﻢ اﻟﻘﺴﻢ ﻟﻠﻤﻌﻠﻤﯿﻦ ﻣﻊ إﻇﮭﺎر ﻛﺎﻓﺔ اﻟﻤﻌﻠﻤﯿﻦ وﻛﺎﻓﺔ اﻷﻗﺴﺎم‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬

‫‪Select Name , Salary , DName‬‬


‫‪From Department‬‬
‫‪Full Outer Join Teacher‬‬
‫‪On DeptNo = DeptWork‬‬

‫‪Diagram Pane‬‬

‫ﻻﺣﻆ ﻋﺪد اﻟﺼﻔﻮف ‪ ١١‬ﻛﺎﻧﻮا ‪ ٩‬وﻋﺪد ‪ ٢‬ﻣﻌﻠﻢ ﻟﯿﺲ ﻟﮫ ﻗﺴﻢ وواﺣﺪ ﻗﺴﻢ ﻟﯿﺲ ﺑﮫ ﻣﻌﻠﻤﯿﻦ إذا اﻹﺟﻤﺎﻟﻲ ‪١١‬‬

‫‪86‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺳﺎدﺳﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﺬاﺗﻲ ‪Self Join‬‬


‫اﻟﺮﺑﻂ اﻟﺬاﺗﻲ ھﻮ رﺑﻂ ﻣﻦ ﻧﻮع ﻏﺮﯾﺐ ﺟﺪا ﺣﯿﺚ أن ﻋﻼﻗﺘﮫ ﻏﺮﯾﺒﺔ أﯾﻀﺎ وﻗﺪ ﺗﻢ ﺗﺄﺟﯿﻠﮭﺎ إﻟﻲ ھﺬا اﻟﺠﺰء ‪ ،‬إن ﻛﺎن ﻣﻦ‬
‫ﺿﻤﻦ اﻻﺣﺘﯿﺎﺟ ﺎت اﻟﺨﺎﺻ ﺔ ﺑﺎﻟﻤﺪرﺳ ﺔ أن ﻟﻜ ﻞ ﻣﻌﻠ ﻢ ﻣ ﺸﺮف ﯾ ﺸﺮف ﻋﻠﯿ ﮫ )ﻓ ﻲ ﺣ ﯿﻦ أن اﻟﻤ ﺸﺮف ھ ﻮ ﻓ ﻲ اﻷﺳ ﺎس‬
‫ﻣﻌﻠﻢ( ﻓﻲ ﻧﻤﻮذج ‪ ER‬ﺳﻮف ﺗﺮﺳﻢ ﻛﺎﻟﺘﺎﻟﻲ وﺗﺴﻤﻲ ﻋﻼﻗﺔ ﻣﺮﺟﻌﯿﺔ‬

‫وﻓﻲ ﻧﻤﻮذج ‪Relational‬‬

‫وﻛﻮد ‪ SQL‬اﻟﻤﻨﻔﺬ ﻟﻠﺤﻘﻞ وﻋﻼﻗﺘﮫ‬


‫‪Alter Table Teacher‬‬
‫‪Add Supervisee int‬‬
‫)‪Constraint Supervision_FK References Teacher(TeacherId‬‬

‫وﺑﻌﺪھﺎ ﻧﻤﻠﺊ ھﺬا اﻟﺤﻘﻞ ﺑﺎﻟﺒﯿﺎﻧﺎت ﻋﻞ أن ﯾﻜﻮن ھﻨﺎك ﻣﺸﺮف أو أﺛﻨﯿﻦ‬


‫ﻧﺮﯾﺪ اﻵن اﺳﺘﺨﺮاج اﺳﺘﻌﻼم ﺑﺎﺳﻢ اﻟﻤﻌﻠﻤﯿﻦ وﺑﻌﺪھﺎ ﻛﻠﻤﺔ ‪ Works For‬ﺛﻢ أﺳﻢ اﻟﻤﺸﺮف‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬
‫‪Select‬‬
‫‪Super.Name +' Works For '+ T.Name‬‬

‫‪From Teacher T Inner Join Teacher Super‬‬


‫‪On‬‬ ‫‪Super.Supervisee = T.TeacherId‬‬

‫‪Diagram Pane‬‬ ‫‪Grid Pane‬‬

‫ﻻﺣ ﻆ ﻓ ﻲ ‪ SQl‬أﻧﻨ ﺎ ﻗ ﺪ رﺑﻄﻨ ﺎ ﺑ ﯿﻦ اﻟﺠ ﺪول وﻧﻔ ﺴﮫ ﻋ ﻦ ﻃﺮﯾ ﻖ إﻋﻄ ﺎء أﺳ ﻤﯿﻦ ﻣ ﺴﺘﻌﺎرﯾﻦ ﻟﻠﺠ ﺪول اﻟﻮاﺣ ﺪ )أي ﻧ ﺴﺨﺘﯿﻦ‬
‫وھﻤﯿﻦ( وﺑﻌﺪ ذﻟﻚ ﻗﺪ ﺗﻌﺎﻣﻠﻨﺎ ﻣﻊ ھﺬﯾﻦ اﻟﺠﺪوﻟﯿﻦ ﺑﺎﻟﺼﻮرة اﻟﻄﺒﯿﻌﯿﺔ )ﯾﻤﻜﻨﻨﺎ أﯾﻀﺎ ﻋﻤﻞ أﺳﻢ ﻣ ﺴﺘﻌﺎر ﻣ ﺮة واﺣ ﺪة واﻟﺠ ﺪول‬
‫اﻟﺜﺎﻧﻲ ﯾﻜﻮن ﺑﺎﻻﺳﻢ اﻷﺳﺎﺳﻲ وﻧﻌﻤﻞ ﻋﻠﻲ ذﻟﻚ( وﻻﺣﻆ اﻟﺸﺮط ﻻﺑﺪ أن ﺗﻈﮭﺮ اﻟﺴﺠﻼت ﻋﻨﺪﻣﺎ ﯾﻜﻮن رﻗﻢ اﻟﻤﺸﺮف ﻣﺜﻞ رﻗﻢ‬
‫اﻟﻤﺪرس أو اﻟﻌﻜ ﺲ ﻛﻤ ﺎ ﻧ ﺮي اﻟﻔﻜ ﺮة ﻛﻠﮭ ﺎ ﺗﻘ ﻮم ﻋﻠ ﻲ اﻷﺳ ﻤﺎء اﻟﺒﺪﯾﻠ ﺔ أو اﻟﻤ ﺴﺘﻌﺎرة ﻓﻜﯿ ﻒ ﻧﻘ ﻮم ﺑ ﺬﻟﻚ ﻓ ﻲ ‪Diagram‬‬
‫‪ Pane‬ﻧﻘ ﻒ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ اﻟﺠ ﺪول اﻟﻤﻄﻠ ﻮب ﺛ ﻢ ﻧﺨﺘ ﺎر اﻟﺨ ﺼﺎﺋﺺ ‪ Properties‬وﻣﻨﮭ ﺎ أﻣ ﺎ اﻟﺨﺎﻧ ﺔ اﻟﻌﻨ ﻮان‬
‫‪ Alias‬ﻧﻜﺘﺐ اﻻﺳﻢ وﻟﯿﻜﻦ ‪ T‬ﺛﻢ ﻧﻀﻐﻂ ﻓﻲ أي ﻣﻜ ﺎن ﺧ ﺎﻟﻲ وﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر ‪ Add Table‬ﺛ ﻢ ﻧﺨﺘ ﺎر‬
‫‪ Teacher‬ﻣﺮة أﺧﺮي وﻋﻠﯿﮫ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺛ ﻢ ﻧﺨﺘ ﺎر ‪ Properties‬ﺛ ﻢ ﻧﻌ ﺪل ﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪ Alias‬ﻟﻨﻜﺘ ﺐ ‪Super‬‬
‫وﺑﻌﺪ ذﻟﻚ ﻧﺴﺤﺐ ﻣﻦ ﺣﻘﻞ ‪ Supervisee‬وﻧﺴﻘﻂ ﻋﻠﻲ ﺣﻘﻞ ‪ TeacherId‬ﻓﻲ اﻟﺠﺪول اﻵﺧﺮ ﻟﺘﻜﻮن ھﺬه اﻟﻌﻼﻗﺔ اﻟﻐﯿﺮ‬
‫ﻣﻌﺮوﻓﺔ ﻟﮫ وﻧﻀﺒﻂ إﻋﺪادات ‪ Grid Pane‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ ﺛﻢ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﺛﻢ ‪ Run‬وﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ اﻟﻈﺎھﺮة‬
‫ﺣﺎول إﻇﮭﺎر ﺑﺎﻗﻲ اﻟﻤﻌﻠﻤﯿﻦ اﻟﺬﯾﻦ ﻟﯿﺴﻮا ﻟﮭﻢ ﻣﺸﺮﻓﯿﻦ‬

‫‪87‬‬ ‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Functions‬‬ ‫اﻟــــــــــــــﺪوال‬
‫‪String Functions‬‬ ‫‪ -١‬دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻨﺼﻮص‬
‫‪ -٢‬دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﻮارﯾﺦ واﻷوﻗﺎت ‪Date and Time Functions‬‬
‫‪Mathematical Functions‬‬ ‫‪ -٣‬اﻟﺪوال اﻟﺮﻗﻤﯿﺔ‬
‫‪Conversion Functions‬‬ ‫‪ -٤‬دوال اﻟﺘﺤﻮﯾﻞ‬
‫‪Aggregating Functions‬‬ ‫‪ -٥‬دوال اﻟﺘﺠﻤﯿﻊ‬
‫‪String Functions‬‬ ‫أوﻻ ‪ :‬دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻨﺼﻮص‬
‫اﻟﺴﻠﺴﻠﺔ اﻟﻨﺼﯿﺔ ‪ :‬ھﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷرﻗﺎم أو اﻟﺤﺮوف أو اﻟﺮﻣﻮز أو ﺧﻠﯿﻂ ﻣﺎ ﺑﯿﻨﮭﻢ وﯾﻨﺘﺞ ﺟﻤﻠﺔ ‪.‬‬
‫اﻟﺼﯿﻐﺔ اﻟﻌﺎﻣﺔ ﻟﺪوال اﻟﻨﺼﻮص‬
‫] ﺧﻮاص ﺣﺴﺐ اﻟﺪاﻟﺔ ‪ [ ,‬اﻟﺴﻠﺴﻠﺔ اﻟﻨﺼﯿﺔ ( اﻟﺪاﻟﺔ‬ ‫)‬

‫اﻟﺪوال اﻟﻨﺼﯿﺔ اﻟﺨﺎﺻﺔ ﺑــ ‪SQL Server‬‬


‫‪Syntax‬‬ ‫اﻟﺪاﻟﺔ ‪ Function‬اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫) ﺗﻌﺒﯿﺮ ﻧﺼﻲ( ‪ASCII‬‬ ‫‪ASCII‬‬
‫ﺗﺮﺟﻊ ﻗﯿﻤﺔ ﻛﻮد ‪ ASCII‬ﻟﻠﻨﺺ اﻟﻤﻮﺟﻮد ﻣﺎ ﺑﯿﻦ اﻷﻗﻮاس)ﻛﻘﯿﻤﺔ رﻗﻤﯿﺔ(‬
‫)ﺗﻌﺒﯿﺮ ﻋﺪدي ﺻﺤﯿﺢ( ‪CHAR‬‬ ‫‪CHAR‬‬
‫ﺗﺤﻮل ﻗﯿﻤﺔ ﻛﻮد ‪ ASCII‬إﻟﻲ ﺳﻠﺴﻠﺔ ﻧﺼﯿﺔ )ﯾﻤﻜﻦ ﺗﻨﺴﯿﻘﮭﺎ ﻣﻊ اﻟﺪاﻟﺔ ‪ ASCII‬ﻟﺘﺸﻔﯿﺮ وﻓﻚ ﺗﺸﻔﯿﺮ اﻟﺒﯿﺎﻧﺎت(‬
‫) ] ﺑﺪاﯾﺔ اﻟﺒﺤﺚ ‪ [ ,‬ﻗﯿﻤﺔ ﻧﺼﯿﺔ ‪, ٢‬ﻗﯿﻤﺔ ﻧﺼﯿﺔ ‪CHARINDEX ( ١‬‬ ‫‪CHARINDEX‬‬
‫اﻟﻘﯿﻤﺔ اﻟﻨﺼﯿﺔ‪ ١‬ھﻲ ﻗﯿﻤﺔ ﯾﺮاد اﻟﺒﺤﺚ ﻋﻨﮭﺎ ﻓﻲ ﻗﯿﻤﺔ ﻧﺼﯿﺔ‪ ٢‬واﺧﺘﯿ ﺎري ﺗﺤﺪﯾ ﺪ ﺑﺪاﯾ ﺔ رﻗ ﻢ ﺣ ﺮف اﻟﺒﺤ ﺚ وان‬
‫ﻟﻢ ﯾﺤﺪد ﻓﯿﻜﻮن ‪ ٠‬أي ﻣﻦ أول ﺣﺮف ﻣﻦ اﻟﯿﺴﺎر‬
‫) ﺗﻌﺒﯿﺮ ﻧﺼﻲ ‪ , ٢‬ﺗﻌﺒﯿﺮ ﻧﺼﻲ ‪DIFFERENCE ( ١‬‬ ‫‪DIFFERENCE‬‬
‫ﺗﺮﺟﻊ رﻗﻢ ﻣﻦ ‪ ٠‬إﻟﻲ ‪ ٤‬ﯾﻮﺿﺢ ﻣﺪي اﻻﺧﺘﻼف ﻣﺎﺑﯿﻦ اﻟﻨﺼﯿﯿﻦ إن ﻛﺎن ﺻﻔﺮ ﻓﮭﻢ ﻣﺨﺘﻠﻔﯿﻦ ﺗﻤﺎﻣﺎ وإن ﻛ ﺎن ‪٤‬‬
‫ﻓﮭﻢ ﻣﺘﺸﺎﺑﮭﯿﻦ وھﺬا ﻣﻦ وﺟﮭﺔ ﻧﻈﺮ اﻟﻜﻮد ‪SOUNDEX‬‬
‫)رﻗﻢ ﯾﻤﺜﻞ ﻋﺪد اﻟﺤﺮوف ﻣﻦ اﻟﯿﺴﺎر إﻟﻲ اﻟﯿﻤﯿﻦ ‪ ,‬ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪LEFT‬‬ ‫‪LEFT‬‬
‫ﺗﺴﺘﺨﺪم ﻟﻘﺺ اﻟﻨ ﺼﻮص ﻓﯿﺤ ﺪد ﻟﮭ ﺎ رﻗ ﻢ ﯾ ﺘﻢ ﻗ ﺺ اﻟﺤ ﺮوف ﻣ ﻦ اﻟﯿ ﺴﺎر ﺣﺘ ﻰ اﻟﯿﻤ ﯿﻦ ﺣﺘ ﻰ اﻟﺤ ﺮف اﻟﻤ ﺬﻛﻮر‬
‫رﻗﻤﮫ‬
‫)ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪LEN‬‬ ‫‪LEN‬‬
‫ﺗﻌﻄﻲ ﻋﺪد اﻟﺤﺮوف اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺘﻌﺒﯿﺮ اﻟﻨﺼﻲ ﺑﻤﺴﺎﻓﺎﺗﮫ‬
‫) ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪LOWER‬‬ ‫‪LOWER‬‬
‫ﺗﺮﺟﻊ اﻟﺘﻌﺒﯿﺮ اﻟﻨﺼﻲ إﻟﻲ ﺣﺎﻟﺔ اﻟﺤﺮوف اﻟﺼﻐﯿﺮة ‪Small‬‬
‫) ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪LTRIM‬‬ ‫‪LTRIM‬‬
‫ﺗﺮﺟﻊ ﻧﻔﺲ اﻟﻘﯿﻤﺔ اﻟﻨﺼﯿﺔ ﺑﻌﺪ ﺣﺬف اﻟﻤﺴﺎﻓﺎت ﻣﻦ اﻟﺠﺎﻧﺐ اﻟﯿﺴﺎري‬
‫) ﺗﻌﺒﯿﺮ رﻗﻤﻲ ﻣﺎﺑﯿﻦ ‪ ٠‬و ‪NCHAR ( ٦٥٥٣٥‬‬ ‫‪NCHAR‬‬
‫ﺗﺮﺟﻊ اﻟﻨﺺ ‪ Unicode‬اﻟﻘﯿﺎﺳﻲ ﻟﻠﺮﻗﻢ اﻟﻤﻮﺟﻮد )ﻣﺜﻼ اﻟﺮﻗﻢ ‪ ٦٥‬ﯾﻜﺎﻓﺊ اﻟﺤﺮف '‪( 'A‬‬
‫) ﻧﺺ ﯾﺮاد اﻟﺒﺤﺚ ﻓﯿﮫ ‪%' ,‬ﺟﺰء ﻧﺼﻲ‪PATINDEX ( '%‬‬ ‫‪PATINDEX‬‬
‫ﺗﺴﺘﺨﺪم ﻟﻠﺒﺤﺚ ﻋﻦ اﻟﺠﺰء اﻟﻨﺼﻲ داﺧﻞ اﻟﻨﺺ وھ ﺬا ﺑ ﻨﻔﺲ اﻟﻤﻌ ﺎﯾﯿﺮ اﻟﻤﺘﺒﻌ ﺔ ﻣ ﻊ اﻟﻤﻌﺎﻣ ﻞ ‪ %) Like‬و _ (‬
‫وﺗﺮﺟﻊ رﻗﻢ أول ﺣﺮف ﻣﺘﻄﺎﺑﻖ ﻣﻦ اﻟﺠﺰء اﻟﻨﺼﻲ داﺧﻞ اﻟﻨﺺ اﻟﻤﺮاد اﻟﺒﺤﺚ ﻓﯿﮫ‬
‫)اﻟﻨﺺ اﻟﻤﺮاد وﺿﻌﮫ ‪ ,‬اﻟﻨﺺ اﻟﻤﺮاد ﺣﺬﻓﮫ ‪,‬اﻟﻨﺺ اﻷﺳﺎﺳﻲ ( ‪REPLACE‬‬ ‫‪REPLACE‬‬
‫ﺗﻘﻮم ھﺬه اﻟﺪاﻟﺔ ﺑﻌﻤﻠﯿﺔ اﺳﺘﺒﺪال اﻟﻨﺺ اﻟﻤﺮاد ﺣﺬﻓﮫ ﺑﺎﻟﻨﺺ اﻟﻤﺮاد وﺿﻌﮫ ھﺬا داﺧﻞ اﻟﻨﺺ اﻷﺳﺎﺳﻲ‬
‫) ]'رﻣﺰ ﻟﯿﺤﯿﻂ ﺑﺎﻟﺘﻌﺒﯿﺮ اﻟﻨﺼﻲ' ‪ [ ,‬ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪QUOTENAME‬‬ ‫‪QUOTENAME‬‬
‫ﻋﻨ ﺪﻣﺎ ﺗﺮﯾ ﺪ وﺿ ﻊ ﻗﺒ ﻞ وﺑﻌ ﺪ اﻟﺘﻌﺒﯿ ﺮ اﻟﻨ ﺼﻲ رﻣ ﺰ اﻻﻓﺘﺮاﺿ ﻲ ] ‪ [ ---‬وﯾﻤﻜ ﻦ أن ﯾﻜ ﻮن " و ذﻟ ﻚ ﻣ ﻦ ﺧ ﻼل‬
‫وﺿﻌﮭﺎ ﻣﺮﺗﯿﻦ ﻣﻜﺎن اﻟﺮﻣﺰ أو ' أو { اﻟﺦ ‪.‬‬

‫‪88‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫) ﻋﺪد ﻣﺮات ﺗﻜﺮاره ‪ ,‬ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪REPLICATE‬‬ ‫‪REPLICATE‬‬


‫ﻧﻮاﺗﺠﮭﺎ ھﻮ ﻧﺺ ﻣﻜﻮن ﻣﻦ اﻟﺘﻌﺒﯿﺮ اﻟﻨﺺ ﻣﻜﺮر ﺣﺴﺐ ﻋﺪد ﻣﺮات اﻟﺘﻜﺮار اﻟﻤﺬﻛﻮرة‬
‫)ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪REVERSE‬‬ ‫‪REVERSE‬‬
‫ﺗﻘﻮم ﺑﻌﻤﻞ ﻋﻜﺲ ﻟﻠﺤﺮوف اﻟﻤﻮﺟﻮدة ﺑﺎﻟﺘﻌﺒﯿﺮ اﻟﻨﺼﻲ‬
‫)ﻋﺪد اﻟﺤﺮوف ﻣﻦ اﻟﯿﻤﯿﻦ إﻟﻲ اﻟﯿﺴﺎر ‪ ,‬ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪RIGHT‬‬ ‫‪RIGHT‬‬
‫ﺗﺴﺘﺨﺪم ﻟﻘﺺ اﻟﻨ ﺼﻮص ﻓﯿﺤ ﺪد ﻟﮭ ﺎ رﻗ ﻢ ﯾ ﺘﻢ ﻗ ﺺ اﻟﺤ ﺮوف ﻣ ﻦ اﻟﯿﻤ ﯿﻦ ﺣﺘ ﻰ اﻟﯿ ﺴﺎر ﺣﺘ ﻰ اﻟﺤ ﺮف اﻟﻤ ﺬﻛﻮر‬
‫رﻗﻤﮫ‬
‫) ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪RTRIM‬‬ ‫‪RTRIM‬‬
‫داﻟﺔ ﺗﻘﺺ اﻟﻤﺴﺎﻓﺎت ﻓﻲ اﻟﻨﺼﻮص ﻣﻦ اﻟﺠﺎﻧﺐ اﻷﯾﻤﻦ‬
‫) ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪SOUNDEX‬‬ ‫‪SOUNDEX‬‬
‫ھﻲ داﻟﺔ ﺗﻤﻠﻚ اﻟﻘﺪرة ﻏﯿﺮ اﻟﻌﺎدﯾﺔ ﻋﻠﻲ إﯾﺠﺎد اﻟﻜﻠﻤﺎت اﻟﺘﻲ ﻟﮭﺎ ﻧﻔ ﺲ اﻟﻨﻄ ﻖ ﺑﻐ ﺾ اﻟﻨﻈ ﺮ ﻋ ﻦ ﻃﺮﯾﻘ ﺔ ﻛﺘﺎﺑﺘﮭ ﺎ‬
‫)وھﻲ ﻓﻲ اﻟﺤﻘﯿﻘﺔ ﺗﺤﻮل اﻟﻨﺺ إﻟﻲ أرﺑﻌﺔ ﻣﻦ ‪ ٠‬إﻟﻲ ‪ ٤‬ﺣ ﺮوف ﺑﻜ ﻮد ﯾ ﺴﻤﻲ ‪ SOUNDEX‬وھ ﻮ ﯾ ﺴﺘﻄﯿﻊ‬
‫أن ﯾﺨﻤﻦ اﻟﺘﺸﺎﺑﮫ ﺑﯿﻦ ﻧﺼﯿﻦ ﻋﻠﻲ ﻋﻜﺲ ‪ DIFFERENCE‬ﻓﻲ ﺗﺨﻤﻦ اﻟﻔﺮق (‬
‫) رﻗﻢ ﺻﺤﯿﺢ ( ‪SPACE‬‬ ‫‪SPACE‬‬
‫ﺗﺘﺮك ھﺬه اﻟﺪاﻟﺔ ﻣﺴﺎﻓﺎت ﺑﻤﻘﺪار اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ اﻟﻤﻮﺟﺐ اﻟﻤﻮﺟﻮد )اﻟﺴﺎﻟﺐ ﯾﺮﺟﻊ ‪( null‬‬
‫) ] ] ﻃﻮل اﻟﻌﺸﺮي ‪ [ ,‬اﻟﻄﻮل ‪ [ ,‬رﻗﻢ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮫ ﻛﺴﻮر ( ‪STR‬‬ ‫‪STR‬‬
‫ﺗﺮﺟ ﻊ ﺑﯿﺎﻧ ﺎت ﻧ ﺼﯿﺔ ﻣﺤﻮﻟ ﺔ ﻣ ﻦ اﻟﻨ ﻮع ‪ numeric‬اﻟ ﺬي ﯾﻤﻜ ﻦ أن ﯾﺤﺘ ﻮي ﻋﻠ ﻲ ﻛ ﺴﻮر ‪ ،‬اﻟﻄ ﻮل ھ ﻮ ﻋ ﺪد‬
‫اﻷرﻗﺎم واﻟﻜﺴﻮر واﻟﻌﻼﻣﺔ اﻟﻌﺸﺮﯾﺔ أﯾﻀﺎ ‪ ،‬واﻟﻄﻮل اﻟﻌ ﺸﺮي ھ ﻮ ﻋ ﺪد اﻷرﻗ ﺎم ﺑﻌ ﺪ اﻟﻌﻼﻣ ﺔ اﻟﻌ ﺸﺮﯾﺔ ‪ ،‬أن ﻟ ﻢ‬
‫ﺗﻀﻊ اﻟﻄﻮل ﻓﺎﻻﻓﺘﺮاﺿﻲ ‪ ١٠‬وإن ﻟﻢ ﺗ ﻀﻊ اﻟﻄ ﻮل اﻟﻌ ﺸﺮي ﻓﺎﻻﻓﺘﺮاﺿ ﻲ ‪ ، ٠‬ﻓ ﻲ ﺗﺤ ﻮل وﺗﻘ ﺮب اﻷرﻗ ﺎم ﻣ ﻦ‬
‫ﺧﻼل اﻟﻄﻮل واﻟﻄﻮل اﻟﻌﺸﺮي وﺗﺤﻮﻟﮭﺎ إﻟﻲ ﻧﻮع ﻧﺼﻲ وإن ﻟ ﻢ ﺗﻘ ﺪر ﻋﻠ ﻲ اﻷﻃ ﻮال اﻟﻤﺤ ﺪدة ﻟﻠﺤ ﺮوف ﻓﺘ ﻀﻊ‬
‫ﻣﻜﺎﻧﮭﺎ اﻟﻌﻼﻣﺔ *‬
‫)اﻟﻨﺺ اﻟﺠﺪﯾﺪ ‪ ,‬ﻋﺪد اﻟﺤﺮوف ‪ ,‬اﻟﺒﺪاﯾﺔ ‪ ,‬ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪STUFF‬‬ ‫‪STUFF‬‬
‫ﺗﺴﺘﺨﺪم ﻟﻘﺺ ﺟﺰء ﻣﻦ اﻟﺘﻌﺒﯿﺮ اﻟﻨﺼﻲ وذﻟﻚ ﻣ ﻦ ﺧ ﻼل ﺗﺤﺪﯾ ﺪ رﻗ ﻢ ﺑﺪاﯾ ﺔ اﻟﻘ ﺺ ﻣ ﻦ اﻟﯿ ﺴﺎر وﻋ ﺪد اﻟﺤ ﺮوف‬
‫اﻟﻤﺮاد ﻗﺼﮭﺎ و أﺧﯿﺮا ﺗﺪﺧﻞ ﻣﻜﺎن اﻟﺤﺮوف اﻟﻤﻘﺼﻮﺻﺔ اﻟﻨﺺ اﻟﺠﺪﯾﺪ‬
‫) ﻋﺪد ﺣﺮوف اﻟﻘﺺ ‪ ,‬رﻗﻢ ﯾﺤﺪد ﺑﺪاﯾﺔ اﻟﻘﺺ ‪ ,‬ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪SUBSTRING‬‬ ‫‪SUBSTRING‬‬
‫ﺗﺴﺘﺨﺪم ﻟﻘﺺ ﺟﺰء ﻣﻦ اﻟﻨﺺ وذﻟﻚ ﻣﻦ ﺧﻼل ﺗﺤﺪﯾﺪ رﻗﻢ ﺑﺪاﯾﺔ اﻟﻘﺺ ﻣﻦ اﻟﯿﺴﺎر وﻋﺪد اﻟﺤﺮوف اﻟﻤﺮادة‬
‫) ﺗﻌﺒﯿﺮ ﻧﺼﻲ أو رﻗﻤﻲ ( ‪UNICODE‬‬ ‫‪UNICODE‬‬
‫ﺗﺮﺟﻊ اﻟﺮﻗﻢ اﻟﻤﻜ ﺎﻓﺊ ﻟﻠ ﻨﺺ اﻟﻘﯿﺎﺳ ﻲ ‪) Unicode‬ﯾﻤﻜ ﻦ أن ﺗ ﺴﺘﺨﺪم ھ ﻲ واﻟﺪاﻟ ﺔ ‪ NCHAR‬ﻟﺘ ﺸﻔﯿﺮ وﻓ ﻚ‬
‫ﺗﺸﻔﯿﺮ اﻟﺒﯿﺎﻧﺎت (‬
‫) ﺗﻌﺒﯿﺮ ﻧﺼﻲ ( ‪UPPER‬‬ ‫‪UPPER‬‬
‫ﺗﺴﺘﺮﺟﻊ ﻧﻔﺲ اﻟﺘﻌﺒﯿﺮ اﻟﻨﺼﻲ وﻟﻜﻦ ﻓﻲ ﺣﺎﻟﺔ اﻟﺤﺮوف اﻟﻜﺒﯿﺮة ‪Capital‬‬
‫أﻣـــــﺜـــﻠــــــــــــــــﺔ ‪:‬‬
‫اﻷﻣﺜﻠﺔ اﻟﻤﻌﺮوﺿﺔ اﻵن ﺳﻮف ﺗﻌﺮض ﺑﺠﻤﻠﺔ ‪ SQL‬ﻓﻘﻂ أﻣﺎ ﻧﻈﺎم اﻟﺸﺒﻜﺔ ﻓﺄﺻﺒﺢ ﻣﻌ ﺮوف ﻟ ﺪﯾﻨﺎ و ﻻ ﯾﻮﺟ ﺪ اﻟﺠﺪﯾ ﺪ‬
‫ﻓﻲ ﻧﻈﺎم اﻟ ﺸﺒﻜﺔ ﻓ ﻲ ھ ﺬا اﻟﺒ ﺎب ﻏﯿ ﺮ أﻧﻨ ﺎ ﻧ ﺴﺮد اﻟ ﺪوال اﻟﺨﺎﺻ ﺔ ﺑﺎﻟﺘﻌﺎﻣ ﻞ ﻣ ﻊ اﻟﻨ ﺼﻮص واﻷرﻗ ﺎم واﻟﺘ ﻮارﯾﺦ وﻋﻨ ﺪ‬
‫ﻇﮭﻮر دوال ﻟﮭﺎ ﺗﻌﺎﻣﻞ ﻣﺨﺘﻠﻒ ﻣﻊ اﻟﺸﺒﻜﺔ ﺳﻮف ﻧﻮﺿﺢ ذﻟﻚ‬
‫‪LEN , UPPER , LOWER , QUOTENAME , REPLICATE , REVERSE‬‬ ‫اﻟﺪوال‬
‫‪SQL‬‬
‫‪Select Name‬‬ ‫‪,‬‬
‫)‪LEN(Name‬‬ ‫‪as Length‬‬ ‫‪,‬‬
‫)‪UPPER(Name‬‬ ‫‪as UpperCase ,‬‬
‫)‪LOWER(Name‬‬ ‫‪as LowerCase ,‬‬
‫‪QUOTENAME(Name,'{}') as Quote‬‬ ‫‪,‬‬
‫)‪REPLICATE(Name,2‬‬ ‫‪as Replicate_2 ,‬‬
‫)‪REVERSE(Name‬‬ ‫‪as backward‬‬
‫‪From Teacher‬‬
‫‪Where Supervisee Is Null‬‬

‫‪89‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Result‬‬

‫‪ Length‬ھﺬه اﻟﺨﺎﻧﺔ ﻋﺮﺿﺖ ﻋﺪد اﻟﺤﺮوف ﻓﻲ اﻟﺤﻘﻞ ‪. Name‬‬


‫‪ UpperCase‬ھﺬه اﻟﺨﺎﻧﺔ ﺣﻮﻟﺖ اﻟﺤﻘﻞ ‪ Name‬ﻛﻠﮫ إﻟﻲ ﺣﺮوف ﻛﺒﯿﺮة‬
‫‪ LowerCase‬ھﺬه اﻟﺨﺎﻧﺔ ﺣﻮﻟﺖ اﻟﺤﻘﻞ ‪ Name‬ﻛﻠﮫ إﻟﻲ ﺣﺮوف‬
‫‪ Quote‬ﻻﺣﻆ أن ھﺬه اﻟﺨﺎﻧﺔ وﺿﻌﺖ ﻗﺒﻞ وﺑﻌﺪ اﻟﺤﻘﻞ ‪ Name‬اﻟﻌﻼﻣﺔ { و }‬
‫‪ Replicate_2‬ھﺬه اﻟﺨﺎﻧﺔ ﻛﺮرت اﻟﺤﻘﻞ ‪ Name‬ﻣﺮﺗﯿﻦ ﺑﺠﻮار ﻧﻔﺴﮫ‬
‫‪ Backward‬ھﺬه اﻟﺨﺎﻧﺔ ﻋﻜﺴﺖ اﻟﺤﺮوف اﻟﯿﺴﺎر ﯾﻤﯿﻦ واﻟﻌﻜﺲ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ ‪Reverse‬‬
‫اﻟﺪوال‬
‫‪CHARINDEX , LEFT , RIGHT , PATINDEX , REPLACE , STUFF , SUBSTRING‬‬
‫‪SQL‬‬
‫‪Select Name ,‬‬
‫"‪CHARINDEX('Kh', Name ,0) as "Kh‬‬ ‫‪,‬‬
‫)‪LEFT(Name,1‬‬ ‫‪as First‬‬ ‫‪,‬‬
‫)‪RIGHT(Name,1‬‬ ‫‪as Last‬‬ ‫‪,‬‬
‫‪PATINDEX('%a%', Name ) as Like_2‬‬ ‫‪,‬‬
‫)'?'‪REPLACE(Name, 'a',‬‬ ‫‪as whereA‬‬ ‫‪,‬‬
‫)'‪STUFF(Name,1,4,'koko‬‬ ‫‪as To_Stuff ,‬‬
‫)‪SUBSTRING(Name ,1,4‬‬ ‫‪as Sub‬‬
‫‪From Teacher‬‬
‫‪Where Supervisee Is Null‬‬
‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪From teacher‬‬
‫‪Where Supervisee Is Null‬‬
‫‪Result‬‬

‫‪ NewName‬ھﺬه اﻟﺨﺎﻧﺔ ﺑﮭﺎ اﻻﺳﻢ ﻗﺒﻞ وﺑﻌﺪه ﻣﺴﺎﻓﺘﯿﻦ‬


‫‪ RightTrim‬ﻗﺪ ﺗﻢ ﺣﺬف اﻟﻤﺴﺎﻓﺎت ﻣﻦ ﯾﻤﯿﻦ اﻟﺠﻤﻠﺔ اﻟﺘﻲ ﺑﮭﺎ ﻣﺴﺎﻓﺘﯿﻦ ﯾﻤﯿﻨﺎ وﯾﺴﺎرا‬
‫‪ LeftTrim‬ﻗﺪ ﺗﻢ ﺣﺬف اﻟﻤﺴﺎﻓﺎت ﻣﻦ ﯾﺴﺎر اﻟﺠﻤﻠﺔ اﻟﺘﻲ ﺑﮭﺎ ﻣﺴﺎﻓﺘﯿﻦ ﯾﻤﯿﻨﺎ وﯾﺴﺎرا‬
‫اﻟﻤﺮﺗﺐ اﻟﻔﻌﻠﻲ ﻟﻠﻤﻌﻠﻤﯿﻦ‬ ‫‪Salary‬‬
‫اﻟﻤﺮﺗﺐ ﻣﺤﻮل إﻟﻲ ﻧﺺ وﻣﻘﺮب ﺑﺪون ﻋﻼﻣﺎت ﻋﺸﺮﯾﺔ‬ ‫‪Sal‬‬

‫‪ASCII , CHAR , UNICODE , NCHAR‬‬ ‫اﻟﺪوال‬


‫‪SQL‬‬
‫‪Select‬‬
‫)'‪ASCII('a‬‬ ‫‪as aa‬‬ ‫)'‪,ASCII('A‬‬ ‫‪as aA ,‬‬
‫)‪CHAR(97‬‬ ‫‪as a97‬‬ ‫)‪, CHAR(65‬‬ ‫‪as a65 ,‬‬
‫‪UNICODE('b') as ub‬‬ ‫)'‪, UNICODE('B‬‬ ‫‪as uB ,‬‬
‫‪NCHAR(98) as u98‬‬ ‫)‪, NCHAR(66‬‬ ‫‪as u66‬‬
‫‪Result‬‬

‫ﻣﺤﺎوﻟﺔ ﺗﻮﺿﯿﺢ اﻟﺪوال ‪ ASCII , CHAR , UNICODE , NCHAR‬اﻟﺨﺎﺻﺔ ﺑﺘﺸﻔﯿﺮ اﻟﺒﯿﺎﻧﺎت‬

‫‪SOUNDEX , DIFFERENCE‬‬ ‫اﻟﺪوال‬


‫‪SQL‬‬
‫‪Select SOUNDEX ('Eman'), SOUNDEX ('Iman') ,‬‬
‫)'‪SOUNDEX ('Saif'), SOUNDEX ('Seif‬‬
‫‪Go‬‬
‫‪Select DIFFERENCE ('Eman','Iman') ,‬‬
‫)'‪DIFFERENCE ('Saif','Seif‬‬
‫‪Go‬‬
‫‪Result‬‬

‫ﺗﺬﻛﺮ أن اﻟﺪاﻟﺔ ‪ SOUNDEX‬ﺗﻌﻄﻲ ﻛﻮد ‪ SOUNDEX‬ﻟﻠﺘﺸﺎﺑﮫ واﻟﺪاﻟﺔ ‪ DIFFERNCE‬ﺗﻌﻄﻲ‬


‫درﺟﺎت اﺧﺘﻼف ‪ ٠‬ﻣﺨﺘﻠﻒ إﻟﻲ ‪ ٤‬وھﻲ اﻟﻤﺘﺸﺎﺑﮭﺔ‬
‫ﻻﺣﻆ ﻓﻲ اﻟﻤﺜﺎل أن اﻟﻔﺮق ﺑﯿﻦ ‪ IMAN , EMAN‬ﻛﺎن ھﻨﺎك ﻓﺮق وﻟﻜﻦ ﺑﺪرﺟﺔ ﺑﺴﯿﻄﺔ وھﻲ ﻣﺘﺸﺎﺑﮭﺔ‬
‫وﻻﺣﻆ ﻓﻲ اﻟﻤﺜﺎل اﻵﺧﺮ ﺑﯿﻦ ‪ Saif , Seif‬أﻧﮫ ﻻ ﯾﻮﺟﺪ ﻓﺮق ﯾﺬﻛﺮ ﺑﯿﻨﮭﻤﺎ ﻓﻲ اﻟﻨﻄﻖ‬
‫ﻻ ﺗﻨﻈﺮ إﻟﻲ ﻛﻞ ھ ﺬه اﻟ ﺪوال ﺑﻌ ﯿﻦ اﻟﺒ ﺴﺎﻃﺔ ﻟﻘ ﺪ ﻋﺮﺿ ﺖ ھﻨ ﺎ ﻧﺘﺎﺋﺠﮭ ﺎ وﻟﻜ ﻦ أﻓﻜ ﺎرھﻢ أن ﺟﻤﻌ ﻮا ﻓ ﺴﺘﻜﻮن ﻟ ﯿﺲ ﻟﮭ ﺎ‬
‫ﺣﺪود ﻓﺘﻌﻮد ﻋﻠﯿﮭﻢ ﺛﻢ ﺣﺎول أﻧﺘﺎج ﺷﻲء ﻟﮫ ﻣﻌﻨﻲ ‪.‬‬

‫‪91‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻣﺜﺎل ‪ :‬ﻟﺘﻮﺿﯿﺢ اﻟﺘﺪاﺧﻞ واﻷھﻤﯿﺔ‬


‫ﻧﺮﯾﺪ ﻋﺮض أﺳﻤﺎ اﻟﻄﻠﺒﺔ أول ﺣﺮف ﻣﻦ أﺳﻤﺎﺋﮭﻢ ﺛ ﻢ )‪ (,‬ﺛ ﻢ أﺳ ﻢ اﻷب ﻓ ﻲ ﺣﻠ ﺔ اﻟﺤ ﺮوف اﻟﻌﻠﯿ ﺎ ورﻗ ﻢ اﻟﺘﻠﯿﻔ ﻮن ﻟﻤ ﻦ‬
‫ﯾﻜﻮﻧﻮا ﺑﻤﻨﻄﻘﺔ اﻟﻤﻨﯿﺐ ﻋﻠﻤﺎ ﺑﺎن ﻛﻮدھﺎ ‪ 528‬ﺑﻌﺪ ﺛﻼث أرﻗﺎم ﻟﻠﺒﻠﺪ ﺛﻢ ‪ -‬ھﺬه ھﻲ ﺑﺎدﺋﺔ أرﻗﺎم ھﺬه اﻟﻤﻨﻄﻘﺔ‬
‫‪SQL‬‬ ‫‪Result‬‬
‫)‪Select Left(FName,1)+','+Upper(LName‬‬
‫‪as Name, phone‬‬
‫‪from student‬‬
‫‪Where PatIndex('___-528%',Phone)=1‬‬
‫ﻻﺣﻆ أن اﻟﺸﺮط ھﻨﺎ أن ﯾﻜﻮن أول ﺛﻼث ﺣﺮوف ﻏﯿﺮ ﻣﻌﺮوﻓﺔ رﻣﺰ ﻟﮭﻢ ﺑ ﺎﻟﺮﻣﺰ _ ﺛ ﻢ ‪ -528‬وﺑﻌ ﺪ ذﻟ ﻚ أي رﻗ ﻢ ھ ﺬا‬
‫ﻋﻠﻲ ﺣﻘﻞ اﻟﺘﻠﯿﻔﻮن إذا ﻛﺎن =‪ ١‬ﻣﻌﻨﺎھﺎ أﻧﮫ ‪ True‬أي ﻣﻮﺟﻮد ﺑﺎﻟﻔﻌﻞ ﯾﻌﺮض ﻟﺬﻟﻚ اﻟﻨﺘﯿﺠﺔ ﻛﻤﺎ ﺗﺮي ‪.‬‬
‫وﺑﻤﺎ أﻧﻨﺎ ﺳﻮف ﻧﺘﺼﻞ ﻣﺒﺎﺷﺮة ﻓﻼ ﻧﺮﯾﺪ أن ﯾﻈﮭﺮ ﻛﻮد اﻟﺒﻠﺪ ﻓﻲ اﻟﺮﻗﻢ ﻓﯿﻤﻜﻨﻨﺎ ﻋﻤﻞ ذﻟﻚ ﻣﻦ ﺧﻼل اﻟﺪاﻟﺔ ‪Right‬‬
‫‪SQL‬‬ ‫‪Result‬‬
‫)‪Select Left(FName,1)+','+Upper(LName‬‬
‫‪as Name , Right(phone,8) as Phone‬‬
‫‪from student‬‬
‫‪Where PatIndex('___-528%',Phone)=1‬‬

‫وإذا أردﻧﺎ ﺗﻨﺴﯿﻖ اﻟﺸﻜﻞ ﺑﻀﺒﻂ اﻻﺳﻢ ﻟﯿﻜﻮن ﻋﻨﺪ اﻟﻜﻞ ‪ ٢٠‬ﺧﺎﻧ ﺔ ﻓﯿﻤﻜﻨﻨ ﺎ ﻋﻤ ﻞ ذﻟ ﻚ ﻣ ﻦ ﺧ ﻼل ﻋ ﺪ اﻟﺤ ﺮوف اﻟﻔﻌﻠﯿ ﺔ‬
‫اﻵن ﻣ ﻦ ﺧ ﻼل اﻟﺪاﻟ ﺔ ‪ 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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻣﺜﺎل اﺧﺮ ﻟﻠﺪوال ‪SOUNDEX , DIFFERENCE‬‬


‫ﻓﻲ ﻛﺜﯿﺮ ﻣﻦ اﻷﺣﯿﺎن ﯾﻘﻊ ﺑﺎﻟﺨﻄﺄ أن ﺷﺨﺺ ﺳﺠﻞ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻣﺤﻤﺪ ‪ Mouhamad‬وﺷﺨﺺ أﺧ ﺮ ﺳ ﺠﻠﮭﺎ‬
‫‪ Mohamad‬وأﺧ ﺮ ‪ Mohamed‬ﺑ ﻞ واﻷﺻ ﻌﺐ ﻓ ﻲ اﻟﻠﻐ ﺔ اﻟﻌﺮﺑﯿ ﺔ ﻓﻤﻨ ﺎ ﻣ ﻦ ﯾ ﺴﺠﻞ أﺣﻤ ﺪ ﺑ ﺎﻟﮭﻤﺰ وﻣﻨ ﺎ ﻣ ﻦ ﻻ‬
‫ﯾﺴﺠﻠﮭﺎ ﺑﺎﻟﮭﻤﺰ اﺣﻤﺪ وﻋﻨﺪ اﻟﺒﺤﺚ ﻻ ﺗﻜﻮن اﻟﻨﺘﺎﺋﺞ ﺳﻠﯿﻤﺔ وﻗﺪ رﺋﯿﻨﺎ ﻓﻲ ﻋﻤﻞ ‪ Soundex‬أﻧﮭﺎ ﺗﻌﻄﻲ ﻛﻮدا ﻣﺘﻘﺎرب‬
‫ﻟﻜﻞ ھﺬا ﻓﻲ ﯾﺴﮭﻞ ﻋﻠﯿﻨﺎ ھﺬا ﻣﮭﻤﺔ اﻟﺒﺤﺚ ﺑﺎﻟﻄﺒﻊ ﻧﻌ ﻢ أﻧﻈ ﺮ ﺳ ﻮف أﺑﺤ ﺚ ﻋ ﻦ أﺳ ﻢ ‪ Mohamed‬ﻋﻠﻤ ﺎ ﺑﺄﻧ ﮫ ﻟ ﺪﯾﻨﺎ‬
‫ﺑﺎﻟﻘﺎﻋﺪة ‪ ٢‬ﻃﻼب ‪ Mouhamad‬ھﻞ ﺳﯿﻔﻠﺢ اﻟﺒﺤﺚ ﻟﻠﻜﻠﻤﺎت ﻣﺘﺸﺎﺑﮭﺔ اﻟﻨﻄﻖ ؟؟‬
‫‪SQL‬‬ ‫‪Result‬‬
‫‪Select FName +' '+LName as Name‬‬
‫‪From Student‬‬
‫‪Where‬‬
‫)'‪soundex(FName)=soundex('mohamed‬‬
‫ﻟﻘﺪ ﺑﺤﺜﺎ ﺑﺎﻟﻜﻮد اﻟﻤﺘﺸﺎﺑﮫ أن ﯾﻜﻮن ﻛﻮد اﻻﺳﻢ اﻷول ﻣﺴﺎوﯾﺎ ﻟﻜﻮد اﻻﺳﻢ ‪Mohamed‬‬
‫وﻟﺘﻮﺿﯿﺢ اﻟﺪاﻟﺔ ‪DIFFERENCE‬‬
‫ﺳﻮف ﻧﻀﯿﻒ إﻟﻲ اﻟﻘﺎﻋﺪة اﻟﻄﺎﻟﺐ اﻟﺘﺎﻟﻲ‬
‫)‪Insert Into Student(ٍٍStudNo,FName,LName,Gender‬‬
‫)'‪Values(9999,'Saif','Saif El Deen','M‬‬
‫ﻋﻠ ﻲ أﺳ ﺎس أن ﯾﻜ ﻮن أﺳ ﻢ اﻟﻄﺎﻟ ﺐ وأﺳ ﻢ اﻷب ﻣﺨﺘﻠﻔ ﯿﻦ وﻟﻜ ﻦ درﺟ ﺔ اﻻﺧ ﺘﻼف ﺑ ﺴﯿﻄﺔ ﺣﯿ ﺚ ﺗﻜ ﻮن اﻟﺪاﻟ ﺔ‬
‫‪ DIFFERENCE‬ﻣ ﺴﺎوﯾﺔ إﻟ ﻲ ‪ ٤‬ﻛﻤ ﺎ ﻛﺎﻧ ﺖ اﻟﻨﺘﯿﺠ ﺔ ﻣ ﻦ ﻗﺒ ﻞ وﻧﺒﺤ ﺚ ﻋ ﻦ اﻟﻄ ﻼب اﻟ ﺬي ﯾﺨﺘﻠ ﻒ أﺳ ﻤﺎﺋﮭﻢ ﻋ ﻦ‬
‫أﺳﻤﺎء أﺑﺎﺋﮭﻢ ﺑﺪرﺟﺔ اﺧﺘﻼف ﺑﺴﯿﻄﺔ ﺗﺴﺎوي ‪ ) ٤‬اﻟﻤﺨﺘﻠﻒ ﻧﮭﺎﺋﯿﺎ ﯾﺼﻞ إﻟﻲ ‪( ٠‬‬
‫‪SQL‬‬ ‫‪Result‬‬
‫‪Select FName +' '+LName as Name‬‬
‫‪From Student‬‬
‫‪Where DIFFERENCE(FName,LName) = 4‬‬

‫وﺑﮭﺬا ﻧﻜﻮن ﻗﺪ وﺿﺤﻨﺎ أن ﻻ ﻧﺴﺘﻘﻞ ﺑﮭﺬه اﻟﺪوال اﻟﺒﺴﯿﻄﺔ وﻟﻜﻦ ﻧﻔﻜﺮ ﻓﻲ ﻛﯿﻔﯿﺔ اﻻﺳﺘﻔﺎدة ﻣﻨﮭﺎ ﻋﻨﺪﻣﺎ ﺗﻌﻤﻼ ﻣﻌﺎ‬

‫ﺛﺎﻧﯿﺎ ‪ :‬دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﻮارﯾﺦ واﻷوﻗﺎت ﻓﻲ ‪SQL Server‬‬


‫ﻟﻠﺸﮭﻮر واﻟﺴﻨﯿﻦ واﻷﯾﺎم واﻷوﻗﺎت وھﻜﺬا ﻟﻜﻞ ﻣﻨﮭﻢ اﺧﺘﺼﺎر ﻧﺴﺘﺨﺪﻣﮫ داﺧﻞ اﻟﺪوال اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﻮارﯾﺦ‬
‫واﻟﻮﻗﺖ ﻗﺒﻞ ﺳﺮد اﻟﺪوال ﺳﻮف ﻧﺮي اﻻﺧﺘﺼﺎرات أوﻻ ‪:‬‬

‫اﻻﺧﺘﺼﺎر‬ ‫ﻣﻌﻨﺎه‬ ‫ﺟﺰء اﻟﺘﺎرﯾﺦ‬


‫‪yy, yyyy‬‬ ‫اﻟﺴﻨﺔ‬ ‫‪Year‬‬
‫‪qq, q‬‬ ‫رﺑﻊ اﻟﺴﻨﺔ‬ ‫‪Quarter‬‬
‫‪mm, m‬‬ ‫اﻟﺸﮭﺮ‬ ‫‪Month‬‬
‫‪dy, y‬‬ ‫ﯾﻮم ﻣﻦ اﻟﺴﻨﺔ‬ ‫‪DayOfYear‬‬
‫‪dd, d‬‬ ‫اﻟﯿﻮم‬ ‫‪Day‬‬
‫‪wk, ww‬‬ ‫اﻷﺳﺒﻮع‬ ‫‪Week‬‬
‫‪hh‬‬ ‫اﻟﺴﺎﻋﺔ‬ ‫‪Hour‬‬
‫‪mi, n‬‬ ‫اﻟﺪﻗﯿﻘﺔ‬ ‫‪Minute‬‬
‫‪ss, s‬‬ ‫اﻟﺜﺎﻧﯿﺔ‬ ‫‪Second‬‬
‫‪ms‬‬ ‫ﻣﯿﻠﻲ ﺛﺎﻧﯿﺔ‬ ‫‪MilliSecond‬‬
‫‪dw‬‬ ‫ﯾﻮم ﻣﻦ اﻷﺳﺒﻮع‬ ‫‪WeekDay‬‬

‫اﻵن ﯾﻤﻜﻨﻨﺎ ﻋﺮض دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﻮارﯾﺦ واﻷوﻗﺎت ﻣﺴﺘﺨﺪﻣﯿﻦ اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ‬

‫‪93‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﻮارﯾﺦ واﻷوﻗﺎت ﻓﻲ ‪SQL Server‬‬


‫اﻟﺪاﻟﺔ ‪ Function‬اﻟﺸﻜﻞ اﻟﻌﺎم ‪Syntax‬‬
‫) ﺗﺎرﯾﺦ‪ ,‬ﻋﺪد‪ ,‬اﺧﺘﺼﺎر ﻟﻠﺘﺎرﯾﺦ ( ‪DATEADD‬‬ ‫‪DATEADD‬‬
‫ﺗﻌﯿﺪ ﺗﺎرﯾﺦ أو وﻗﺖ ﺟﺪﯾﺪ ﻧﺎﺗﺞ ﻣﻦ إﺿﺎﻓﺔ إﻟﻲ اﻟﺘﺎرﯾﺦ اﻟﻤﻮﺟﻮد ﺑﻨﻔﺲ اﻟﻌﺪد اﻟﻤﻮﺟﻮد وﻟﻜﻦ ﺑﻘﯿﻤﺔ اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ‬
‫ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل إن ﻛﺎن اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ ﯾﻤﺜﻞ ﺷﮭﺮ واﻟﻌﺪد ‪ ٢‬ﺳﻮف ﯾﻀﯿﻒ ﺷﮭﺮﯾﻦ ﻟﻠﺘﺎرﯾﺦ اﻟﻤﻮﺿﻮع وھﻜﺬا‬
‫وھﻲ ﻻ ﺗﺴﺘﺨﺪم اﻟﺠﺰء ‪WeekDay‬‬
‫) ﺗﺎرﯾﺦ اﻟﻨﮭﺎﯾﺔ ‪ ,‬ﺗﺎرﯾﺦ اﻟﺒﺪاﯾﺔ ‪ ,‬اﺧﺘﺼﺎر ﻟﻠﺘﺎرﯾﺦ ( ‪DATEDIFF‬‬ ‫‪DATEDIFF‬‬
‫ﺗﺮﺟﻊ ھﺬه اﻟﺪاﻟﺔ رﻗﻢ ﯾﻌﺒﺮ ﻋﻦ اﻟﻔﺮق ﺑﯿﻦ ﺗﺎرﯾﺦ اﻟﺒﺪاﯾﺔ وﺗﺎرﯾﺦ اﻟﻨﮭﺎﯾﺔ ﻋﻠﻲ ﺣﺴﺐ اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ أن ﻛﺎن ﻋﻠﻲ‬
‫ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﺷﮭﺮ ﺗﻌﻄﻲ اﻟﻔﺮق ﺑﺎﻟﺸﮭﻮر وھﻲ ﻻ ﺗﺴﺘﺨﺪم اﻟﺠﺰء ‪WeekDay‬‬
‫) اﻟﺘﺎرﯾﺦ ‪ ,‬اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ ( ‪DATENAME‬‬ ‫‪DATENAME‬‬
‫ﺗﻌﻄﻲ ھﺬه اﻟﺪاﻟﺔ اﻻﺳﻢ اﻟﺤﺮﻓﻲ ﻟﺠﺰء ﻣﻦ اﻟﺘﺎرﯾﺦ ﻋﻠﻲ ﺣﺴﺐ اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل إن ﻛﺎن ﺷﮭﺮ‬
‫ﺗﻌﻄﻲ ھﺬه اﻟﺪاﻟﺔ ﻋﻠﻲ ﺣﺴﺐ اﻟﺘﺎرﯾﺦ )ﯾﻨﺎﯾﺮ ‪ ،‬ﻓﺒﺮاﯾﺮ ‪ ،‬ﻣﺎرس ‪(...‬‬
‫) اﻟﺘﺎرﯾﺦ ‪,‬اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ ( ‪DATEPART‬‬ ‫‪DATEPART‬‬
‫ﺗﺮﺟﻊ ﺟﺰء ﻣﻦ اﻟﺘﺎرﯾﺦ ﻛﺮﻗﻢ ﻋﻠﻲ ﺣﺴﺐ اﺧﺘﺼﺎر اﻟﺘﺎرﯾﺦ ﻓﻠﻮ ﻛﺎن ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﺷﮭﺮ ﺗﺮﺟﻊ )‪(… ٣ ، ٢ ، ١‬‬
‫) ﺗﺎرﯾﺦ ( ‪DAY‬‬ ‫‪DAY‬‬
‫ﺗﺮﺟﻊ رﻗﻢ اﻟﯿﻮم ﻓﻲ اﻟﺘﺎرﯾﺦ اﻟﻤﻌﻄﻲ‬
‫)(‪GETDATE‬‬ ‫‪GETDATE‬‬
‫ﺗﺮﺟﻊ اﻟﺘﺎرﯾﺦ اﻟﺤﺎﻟﻲ ﻟﻠﻨﻈﺎم‬
‫)(‪GETUTCDATE‬‬ ‫‪GETUTCDATE‬‬
‫ﺗﺮﺟﻊ اﻟﺘﺎرﯾﺦ اﻟﺤﺎﻟﻲ ﻟﻠﺤﺎﺳﺐ ﻣﻨﺴﻖ ﺑﻄﺮﯾﻘﺔ ‪ UTC‬ﻋﻠﻲ ﺣﺴﺐ ‪Zone Setting‬‬
‫) ﺗﺎرﯾﺦ ( ‪MONTH‬‬ ‫‪MONTH‬‬
‫ﺗﺮﺟﻊ رﻗﻢ ﯾﻤﺜﻞ رﻗﻢ اﻟﺸﮭﺮ ﻓﻲ اﻟﺘﺎرﯾﺦ‬
‫) ﺗﺎرﯾﺦ ( ‪YEAR‬‬ ‫‪YEAR‬‬
‫ﺗﺮﺟﻊ رﻗﻢ ﯾﻤﺜﻞ اﻟﺴﻨﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺘﺎرﯾﺦ‬

‫اﺳﺘﺮﺟﻊ أﺳﻤﺎء اﻟﻤﻌﻠﻤﯿﻦ وﺗﺎرﯾﺦ ﺗﻌﯿﻨﮭﻢ ﻣﻜﺘﻮب ﯾﻮم ﺷﮭﺮ ﺳﻨﺔ وذﻟﻚ ﻟﻠﻤﻌﯿﯿﺘﯿﻦ اﻟﺠﺪد ﺧﻼل ھﺬه اﻟﺴﻨﺔ‬
‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select FName+' '+LName as Name‬‬
‫– ))(‪, (DatePart(yy,GetDate‬‬
‫‪DatePart(yy, BDate)) as Age‬‬
‫‪From Student‬‬
‫– ))(‪Where (DatePart(yy,GetDate‬‬
‫‪DatePart(yy, BDate)) >=21‬‬
‫'‪And Gender ='M‬‬
‫‪Grid Pane‬‬

‫ﻻ ﺣﻆ ﻓﻲ اﻟﺸﺮط أﻧﻨﺎ ﺷﺮﻃﻨﺎ أﯾﻀﺎ أن ﯾﻜﻮن اﻟﻨﻮع ذﻛﺮ وھﺬا ﻷﻧﮫ ورق ﺟﯿﺶ وﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ‬

‫أﻋﺮض ﺗﺎرﯾﺦ اﻟﯿﻮم وﺗﺎرﯾﺦ اﻟﯿﻮم ﻣﻀﺎف إﻟﯿﮫ ﺷﮭﺮﯾﻦ واﺳﺘﺮﺟﻊ رﻗﻢ اﻟﯿ ﻮم ورﻗ ﻢ اﻟ ﺸﮭﺮ ورﻗ ﻢ اﻟ ﺴﻨﺔ وأﻃ ﺮح ﻣ ﻦ‬
‫ﻛﻞ ﻣﻨﮭﻢ واﺣﺪ ووﺿﺢ اﻟﺘﺸﺎﺑﮫ ﺑﯿﻦ اﻟﺪاﻟﺔ ‪ 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‬‬

‫ﻻ ﺣ ﻆ أﻧﻨ ﺎ اﺳ ﺘﺨﺪﻣﻨﺎ اﻟﺪاﻟ ﺔ ‪ DatePart‬ﻟﻠﺤ ﺼﻮل ﻋﻠ ﻲ ﻧﻔ ﺲ ﻣ ﺎ ﺗﻨﺘﺠ ﮫ اﻟﺪاﻟ ﺔ ‪ Day‬وھ ﺬا أﯾ ﻀﺎ ﻣ ﻊ اﻟﺪاﻟ ﺔ‬


‫‪ Month‬واﻟﺪاﻟﺔ ‪ Year‬ﻓﮭﻲ ﻣﺘﻜﺎﻓﺌﺔ ﻣﻌﮭﻢ ﻋﻨﺪ ﺿﺒﻂ ﺧﺎﻧﺔ اﻻﺧﺘﺼﺎر ﻟﻠﺘﺸﺎﺑﮫ ﻣﻌﮭﻢ‬

‫‪Mathematical Functions‬‬ ‫ﺛﺎﻟﺜﺎ ‪ :‬اﻟﺪوال اﻟﺮﻗﻤﯿﺔ‬


‫واﻟﺮﻗﻢ ھﻮ أي رﻗﻢ ﺧﻠﯿﻂ ﻣﻦ ‪ ٠‬و ‪ ٩‬وﯾﻤﻜﻦ أن ﯾﺘﻢ ﻋﻠﯿﮫ ﻋﻤﻠﯿﺔ ﺣﺴﺎﺑﯿﺔ‬
‫دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻷرﻗﺎم داﺧﻞ ‪SQL Server‬‬
‫اﻟﺪاﻟﺔ ‪ Function‬اﻟﺸﻜﻞ اﻟﻌﺎم ‪Syntax‬‬
‫) ﻗﯿﻤﺔ رﻗﻤﯿﺔ ( ‪ABS‬‬ ‫‪ABS‬‬
‫ﺗﺮﺟﻊ اﻟﻘﯿﻤﺔ اﻟﻤﻄﻠﻘﺔ ﻟﻠﺮﻗﻢ)اﻟﻘﯿﻤﺔ اﻟﻤﻮﺟﺒﺔ(‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر ( ‪ACOS‬‬ ‫‪ACOS‬‬
‫ﻣﻘﺎﺑﻞ ﺟﯿﺐ اﻟﺘﻤﺎم واﻟﻘﯿﻤﺔ ﺑﺎﻟﺮادﯾﺎن‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪ASIN‬‬ ‫‪ASIN‬‬
‫ﻣﻘﺎﺑﻞ اﻟﺠﯿﺐ و اﻟﻘﯿﻤﺔ ﺑﺎﻟﺮادﯾﺎن‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪ATAN‬‬ ‫‪ATAN‬‬
‫ﻗﻮس ﻇﻞ اﻟﺰاوﯾﺔ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر ‪,‬ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪ATN2‬‬ ‫‪ATN2‬‬
‫ﻗﻮس ﻇﻞ اﻟﺰاوﯾﺔ اﻟﻘﯿﻤﺔ ﺑﺎﻟﺮادﯾﺎن وﺗﻌﻄﻲ رﻗﻢ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮫ ﻛﺴﻮر ﻣﺎﺑﯿﻦ اﻟﺮﻗﻤﯿﻦ اﻟﻤﻌﻄﯿﯿﻦ ﻟﻠﺪاﻟﺔ‬
‫) ﻗﯿﻤﺔ رﻗﻤﯿﺔ( ‪CEILING‬‬ ‫‪CEILING‬‬

‫‪95‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫أﺻﻐﺮ رﻗﻢ ﺻﺤﯿﺢ أﻛﺒﺮ ﻣﻦ أو ﯾﺴﺎوي اﻟﻘﯿﻤﺔ‬


‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪COS‬‬ ‫‪COS‬‬
‫ﺟﯿﺐ ﺗﻤﺎم اﻟﻘﯿﻤﺔ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪COT‬‬ ‫‪COT‬‬
‫ﻇﻞ اﻟﺘﻤﺎم‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ( ‪DEGREES‬‬ ‫‪DEGREES‬‬
‫وﺣﺪة ﻗﯿﺎس اﻟﺰاوﯾﺔ ﺑﺎﻟﺮادﯾﺎن‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪EXP‬‬ ‫‪EXP‬‬
‫‪ e‬ﻣﺮﻓﻮﻋﺔ ﻷس اﻟﻘﯿﻤﺔ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ( ‪FLOOR‬‬ ‫‪FLOOR‬‬
‫أﻛﺒﺮ ﻋﺪد ﺻﺤﯿﺢ أﺻﻐﺮ ﻣﻦ أو ﯾﺴﺎوي اﻟﻘﯿﻤﺔ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪LOG‬‬ ‫‪LOG‬‬
‫اﻟﻠﻮﻏﺎرﯾﺘﻢ اﻟﻄﺒﯿﻌﻲ ﻟﻠﻘﯿﻤﺔ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪LOG10‬‬ ‫‪LOG10‬‬
‫اﻟﻠﻮﻏﺎرﯾﺘﻢ ﻟﻸﺳﺎس ‪١٠‬‬
‫) (‪PI‬‬ ‫‪PI‬‬
‫ﺗﺮﺟﻊ ﻗﯿﻤﺔ اﻟﺜﺎﺑﺖ ‪ PI‬اﻟﻤﺴﺎوي ﻟــ ‪٧/٢٢‬‬
‫) اﻷس ‪,‬ﻗﯿﻤﺔ رﻗﻤﯿﺔ( ‪POWER‬‬ ‫‪POWER‬‬
‫اﻟﻘﯿﻤﺔ ﺗﻜﻮن ﻣﺮﻓﻮﻋﺔ إﻟﻲ اﻷس‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ( ‪RADIANS‬‬ ‫‪RADIANS‬‬
‫ﺗﺮﺟﻊ اﻟﻘﯿﻤﺔ ﺑﺎﻟﺮادﯾﺎن ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﻟﺮﻗﻢ ﻛﻮﺣﺪة ﻗﯿﺎس ﻟﻠﺰاوﯾﺔ‬
‫)(‪RAND‬‬ ‫‪RAND‬‬
‫ﺗﻨﺘﺞ ﻗﯿﻤﺔ ﻋﺸﻮاﺋﯿﺔ ﺗﻨﺤﺼﺮ ﻣﺎﺑﯿﻦ ‪ ٠‬و ‪١‬‬
‫) ] ‪ ٠‬أو ‪ [ , ١‬ﻃﻮل اﻟﻤﻮاﺿﻊ ‪ ,‬ﻗﯿﻤﺔ رﻗﻤﯿﺔ ( ‪ROUND‬‬ ‫‪ROUND‬‬
‫ﺗﺮﺟﻊ ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﻣﻘﺮﺑﺔ إﻟﻲ )ﻃﻮل اﻟﻤﻮاﺿﻊ ( أن ﻛﺎن ﻃﻮل اﻟﻤﻮاﺿﻊ ‪ ١‬إذن اﻟﺮﻗﻢ ﺳﻮف ﯾﻘﺮب إﻟﻲ أﻗﺮب رﻗﻢ‬
‫ﻋﺸﺮي ﻟﻮ ‪ ٢‬ﻷﻗﺮب رﻗﻤﯿﻦ ﻋﺸﺮﯾﯿﻦ ﻟﻮ ‪ ١-‬ﯾﻘﺮب اﻟﺮﻗﻢ اﻟﺼﺤﯿﺢ ﺑﻮﺿﻊ ﺻﻔﺮ ﻓﻲ ﺧﺎﻧﺔ اﻵﺣﺎد وھﻜﺬا أﻣﺎ اﻟﺠﺰء‬
‫اﻻﺧﺘﯿﺎري اﻟﺨﺎص ب ‪ ١‬أو ﺻﻔﺮ اﻻﻓﺘﺮاﺿﻲ ﻟﮫ ﺻﻔﺮ أي ﺗﻘﺮﯾﺐ وأن ﻛﺎن واﺣﺪ أو أﻛﺜﺮ ﯾﻌﻨﻲ أﻧﻨﺎ ﻻ ﻧﺮﯾﺪ ﺗﻘﺮﯾﺐ‬
‫اﻟﻘﯿﻤﺔ و أﻧﻤﺎ ﻧﺮﯾﺪ ﻗﺼﮭﺎ ﻣﺜﻼ ﻟﻮ ﻣﻮﺿﻮع رﻗﻢ ‪ ١‬ﻻ ﻧﻘﺮب إﻟﻲ أﻗﺮب رﻗﻢ ﻋﺸﺮي وإﻧﻤﺎ ﻧﺒﺘﺮ اﻟﺮﻗﻢ إﻟﻲ أول رﻗﻢ‬
‫ﻋﺸﺮي‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ( ‪SIGN‬‬ ‫‪SING‬‬
‫ﺗﻌﻄﻲ ‪ ١‬إذا ﻛﺎﻧﺖ اﻟﻘﯿﻤﺔ ﻣﻮﺟﺒﺔ و ‪ ١-‬إذا ﻛﺎﻧﺖ ﻏﯿﺮ ذﻟﻚ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪SIN‬‬ ‫‪SIN‬‬
‫ﺟﯿﺐ اﻟﻘﯿﻤﺔ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪SQUARE‬‬ ‫‪SQUARE‬‬
‫ﺗﻌﻄﻲ ﻣﺮﺑﻊ اﻟﻘﯿﻤﺔ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪SQRT‬‬ ‫‪SQRT‬‬
‫ﺗﻌﻄﻲ اﻟﺠﺰر اﻟﺘﺮﺑﯿﻌﻲ ﻟﻠﻘﯿﻤﺔ‬
‫)ﻗﯿﻤﺔ رﻗﻤﯿﺔ ﯾﻜﺎد أن ﯾﻜﻮن ﺑﮭﺎ ﻛﺴﻮر( ‪TAN‬‬ ‫‪TAN‬‬
‫ﺗﻌﻄﻲ ﻇﻞ اﻟﻘﯿﻤﺔ‬
‫اﻟ ﺪوال ‪ACOS ,ASIN ,ATAN , ATN2 , COS , COT ,DEGREES , EXP , LOG ,‬‬
‫‪LOG10 , RADIANS , SIN , TAN‬‬
‫ھﻲ دوال ﻧ ﺎدرا ﺟ ﺪا اﺳ ﺘﺨﺪﻣﮭﺎ ﻓ ﻲ اﻷﻋﻤ ﺎل اﻟﺤ ﺴﺎﺑﯿﺔ اﻟﺘﺠﺎرﯾ ﺔ وﻟﻜ ﻦ ﯾ ﺸﻊ اﺳ ﺘﺨﺪاﻣﮭﺎ ﺑﻜﺜ ﺮة ﻓ ﻲ اﻷﻋﻤ ﺎل اﻟﻌﻠﻤﯿ ﺔ‬
‫واﻟﻔﻨﯿﺔ وﻟﻜﻨﻨﺎ ﻋﺮﺿ ﻨﺎھﻢ ﻓﻘ ﻂ ﻻﺳ ﺘﻔﺎدة ﻣ ﻦ ﯾﺮﯾ ﺪ أن ﯾ ﺴﺘﺨﺪﻣﮭﻢ وﻻ داﻋ ﻲ ﻷن ﻧﺘ ﺪﺧﻞ ﻓ ﻲ ﺗﻔﺎﺻ ﯿﻠﮭﻢ ﺣﯿ ﺚ أن ﻣ ﻦ‬
‫ﯾﺤﺘﺎﺟﮭﻢ ﯾﻜﻮن داﺋﻤﺎ ﻣﺴﺘﻮﻋﺐ ﻛﯿﻔﯿﺔ ﻋﻤﻠﮭﻢ‬

‫‪96‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


SQL Server 2000 -- By Mr. Adel Sabour

.(‫ﺟﺪول ﯾﻮﺿﺢ ﻋﻤﻞ اﻟﺪوال )ﻣﻦ ﺧﻼل ﻣﺜﺎل وﻧﺘﯿﺠﺔ‬

Function Example Result


ABS SELECT ABS(-1.0), 1.0
ABS(0.0), .0
ABS(1.0) 1.0
CEILING SELECT CEILING(123.45), 124.00
CEILING(-123.45), -123.00
CEILING(0.0) 0.00
FLOOR SELECT FLOOR(123.45), 123
FLOOR(-123.45), -124
FLOOR(123.45) 123.0000
PI() SELECT PI() 3.14159265358979
Power Select Power(2,3) 8
RAND Select RAND() Between 0 and 1
ROUND SELECT ROUND(123.4545, 2) 123.4500
SELECT ROUND(123.45, -2) 100.00
SELECT ROUND(150.75, 0) 151.00
SELECT ROUND(150.75, 0, 1) 150.00
SIGN SELECT SIGN(146) 1
SELECT SIGN(-30) -1
SQUARE SELECT SQUARE ( 4 ) 16
SQRT SELECT SQRT(16) 4
‫ﺗﺘﺒﻊ ﻧﺘﺎﺋﺞ اﻟﺠﺪول اﻟﺴﺎﺑﻖ وﻋﻨﺪ ﻋﺪم ﻓﮭﻢ أي ﻧﻘﻄﺔ أرﺟﻊ ﻟﺸﺮﺣﮭﺎ ﻓﻲ ﺟﺪول اﻟﺪوال اﻟﺮﯾﺎﺿﯿﺔ‬

Conversion Functions ‫ دوال اﻟﺘﺤﻮﯾﻞ‬: ‫راﺑﻌﺎ‬


CAST ‫ اﻟﺪاﻟﺔ‬.١
CONVERT ‫ اﻟﺪاﻟﺔ‬.٢
SQL ٌ esult
R
Select
Cast(Name as Char(4) ) as WithCast,
CONVERT(Char(4) , Name) as WithConvert
From Teacher

‫ھﺬه ھﻲ ﻃﺮﯾﻘ ﺔ اﻟﺘﺤﻮﯾ ﻞ ﺑﻜ ﻼ ﻣ ﻦ اﻟﻨ ﻮﻋﯿﻦ وﻗ ﺪ ﺗﺤﺘ ﺎج إﻟ ﻲ ذﻟ ﻚ ﻓ ﻲ أﺣﯿ ﺎن ﻗﻠﯿﻠ ﺔ ﻟﻜﻨ ﻚ ﺗﺤﺘﺎﺟﮭ ﺎ ﻓﮭ ﺎ ھ ﻲ اﻟﻄﺮﯾﻘ ﺔ‬
( 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

PDF created with pdfFactory Pro trial version www.pdffactory.com


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Aggregating Functions‬‬ ‫ﺧﺎﻣﺴﺎ ‪ :‬دوال اﻟﺘﺠﻤﯿﻊ‬

‫‪Function‬‬ ‫‪Use‬‬
‫§‬ ‫‪AVG‬‬ ‫ﺗﺤﺴﺐ ﻣﺘﻮﺳﻂ اﻟﻘﯿﻢ ﻓﻲ ﺣﻘﻞ ﻋﺪدي )ﺗﮭﻤﻞ اﻟﻘﯿﻤﺔ ‪(null‬‬
‫§‬ ‫‪COUNT‬‬ ‫ﺗﺤﺴﺐ ﻋﺪد اﻟﺴﺠﻼت ﻓﻲ اﻟﺤﻘﻞ وأن وﺿﻌﻨﺎ * ﺗﺤﺴﺐ ﻋ ﺪد‬
‫اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول )ﺗﮭﻤﻞ اﻟﻘﯿﻤﺔ ‪(null‬‬
‫§‬ ‫‪MAX‬‬ ‫ﺗﺤﺪد أﻛﺒﺮ ﻗﯿﻤﺔ ﻓﻲ اﻟﺤﻘﻞ‬
‫§‬ ‫‪MIN‬‬ ‫ﺗﺤﺪد أﺻﻐﺮ ﻗﯿﻤﺔ ﻓﻲ اﻟﺤﻘﻞ‬
‫§‬ ‫‪SUM‬‬ ‫ﺗﺤﺴﺐ ﻣﺠﻤﻮع اﻟﻘﯿﻢ ﻓﻲ ﺣﻘﻞ ﻋﺪدي‬
‫§‬ ‫‪STDEV‬‬ ‫ﺗﺤﺴﺐ اﻻﻧﺤﺮاف اﻟﻤﻌﯿﺎري ﻟﺘﻌﺒﯿﺮ أو ﺣﻘﻞ رﻗﻤﻲ‬
‫§‬ ‫‪STDEVP‬‬ ‫ﺗﺤﺴﺐ ﻛﺜﺎﻓﺔ اﻻﻧﺤﺮاف اﻟﻤﻌﯿﺎري ﻟﻤﺠﻤﻮﻋﺔ ﻗﯿﻢ أو ﺣﻘﻞ‬
‫§‬ ‫‪VAR‬‬ ‫ﺗﺤﺴﺐ اﻟﺘﺒﺎﯾﻦ‬
‫§‬ ‫‪VARP‬‬ ‫ﺗﺤﺴﺐ ﻛﺜﺎﻓﺔ اﻟﺘﺒﺎﯾﻦ‬
‫‪Grouping ,Cube, Case , Rollup , Compute , Case‬‬
‫ﺷﻜﻞ ﯾﻮﺿﺢ ﻣﻌﻨﻲ ﺗﻠﻚ اﻟﻌﻤﻠﯿﺎت‬

‫ﻻﺣﻆ ﻓﻲ اﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ أﻧﻨﺎ اﺳ ﺘﻄﻌﻨﺎ ﺟﻤ ﻊ اﻟﻤﺮﺗﺒ ﺎت واﻟﺤ ﺼﻮل ﻋﻠ ﻲ ﻣﺘﻮﺳ ﻄﮭﺎ وﻋ ﺪد اﻟﻤ ﻮﻇﻔﯿﻦ إذا ﻋ ﺪدﻧﺎ اﻟﺤﻘ ﻞ‬
‫)اﻟﻤﺮﺗﺐ ( وإذا ﻋﺪدﻧﺎ اﻟﺤﻘﻞ اﻟﺨﺎص ﺑﻘﺴﻢ اﻟﻌﻤﻞ ﺳﻨﻼﺣﻆ أﻧﮫ ﺗﻢ إﯾﺠﺎد ﻋﺪد اﻟﻘ ﯿﻢ وﻟﻜ ﻦ ﺑ ﺪون اﻟﻘﯿﻤ ﺔ ‪ Null‬وﻻﺣ ﻆ‬
‫أﻧﻨﺎ ﻓﻲ اﺳﺘﻄﺎﻋﺘﻨﺎ أﯾﻀﺎ اﻟﻮﺻﻮل ﻷﻋﻠﻲ ﻣﺮﺗﺐ و أﻗﻞ ﻣﺮﺗﺐ دﻋﻨﺎ ﻧﻔﻌﻞ ذﻟﻚ ﻣﻦ ﺧﻼل ھﺬه اﻟﺪوال‬

‫) اﻟﻘﯿﻤﺔ أو اﻟﺤﻘﻞ ] ‪ ( [ Distinct | All‬اﻟﺪاﻟﺔ‬ ‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺪوال اﻟﺘﺠﻤﯿﻌﯿﺔ‬

‫ﻓﻲ اﻟﺸﻜﻞ اﻟﻌﺎم ﻷي داﻟﺔ ﺗﺠﻤﻌﯿﮫ ﻟﻮ ﻻﺣﻈﻨﺎ أﻧﮫ ﺑﺈﻣﻜﺎﻧﻨﺎ ﻛﺘﺎﺑﺔ ﻛﻠﻤﺔ ‪ All‬أي اﻟﻜﻞ أو ﻛﻠﻤﺔ ‪ Distinct‬ﺑﻤﻌﻨﻲ ﺑ ﺪون‬
‫ﺗﻜﺮار وھﺬا اﺧﺘﯿﺎري وﺗﻌﻨﻲ ﻣﺎ ﯾﻠﻲ ‪:‬‬
‫§ ‪ Distinct‬ﺗﺠﻌﻞ اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻲ اﻟﻘﯿﻢ ﻓﻲ اﻟﺤﻘﻞ وﻟﻜﻦ أن ﻟﻢ ﺗﺘﻜﺮر‬
‫ﺗﺠﻌﻞ اﻟﺪاﻟﺔ ﺗﻌﻤﻞ ﻋﻠﻲ ﻛﻞ اﻟﻘﯿﻢ وﻣﻦ ﺿﻤﻨﮭﺎ اﻟﻘﯿﻢ اﻟﻤﻜﺮرة وھﻲ اﻟﺤﺎﻟﺔ اﻻﻓﺘﺮاﺿﯿﺔ ‪.‬‬ ‫§ ‪All‬‬
‫§ ﻛﻞ اﻟﺪوال ﺗﺘﻼﺷﻲ اﻟﻘﯿﻤﺔ ‪ null‬إﻻ اﻟﺤﺎﻟﺔ اﻟﻮﺣﯿﺪة )*(‪.COUNT‬‬
‫§ ﻋﻨﺪ اﺳﺘﺨﺪام اﻷﻣﺮ ‪ Group By‬ﯾﺘﻢ ﻋﻤﻞ ﻓﺮز ﺗﻠﻘﺎﺋﻲ ﺗﺼﺎﻋﺪي ﻟﻘﯿﻢ اﻟﺤﻘﻞ اﻟﻤﺴﺘﺨﺪم‬

‫‪98‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫أﺳﺘﺮﺟﻊ أﻛﺒﺮ ﻣﺮﺗﺐ وأﻗﻞ ﻣﺮﺗﺐ وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت وﻣﺘﻮﺳﻂ اﻟﻤﺮﺗﺒﺎت وأول ﺗ ﺎرﯾﺦ ﺗﻌﯿ ﯿﻦ وآﺧ ﺮ ﺗ ﺎرﯾﺦ ﺗﻌﯿ ﯿﻦ ﻣ ﻦ‬
‫ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ‪.‬‬
‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻹﺻﺪار أﻣﺮ ﺣﺘﻰ ﯾﺘﻢ اﻟﺘﺠﻤﯿﻊ ﺑﻌﺪ ﺗﻘﺴﯿﻢ ﺣﻘﻞ ﻣﺎ ﻓﺌﺎت ھﻮ ﻣﻦ ﺧﻼل اﻷﻣﺮ ‪ 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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻣﺎذا ﻟﻮ أردﻧﺎ ﻋﺮض رﻗﻢ اﻟﻘﺴﻢ وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻟﻜﻞ ﻗﺴﻢ ﻟﻜﻞ ﺑﻠﺪ ؟؟ ﻟﻮ ﻓﻜﺮﻧﺎ ﻟﻠﺤﻈﺔ ﺳﻨﺮي أﻧﻨ ﺎ ﻧﺮﯾ ﺪ أن ﻧﺤ ﺴﺐ‬
‫ﻣﺠﻤ ﻮع اﻟﻤﺮﺗﺒ ﺎت ﻋﻠ ﻲ ﺣ ﺴﺐ رﻗ ﻢ اﻟﻘ ﺴﻢ وأﯾ ﻀﺎ ﻋﻠ ﻲ ﺣ ﺴﺐ اﻟﺒﻠ ﺪ وﯾﻤﻜﻨﻨ ﺎ ھ ﺬا ﻣ ﻦ ﺧ ﻼل اﻟﺠﻤﻠ ﺔ ‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﺠﻤﻠﺔ ‪ SELECT‬ﺑﻌﺪ إﺿﺎﻓﺔ اﻟﺠﺰء ‪Having‬‬


‫)اﻟﺤﻘﻞ (اﻟﺪاﻟﺔ اﻟﺘﺠﻤﯿﻌﯿﺔ ‪,‬اﻟﺤﻘﻮل ‪Select‬‬
‫اﺳﻢ اﻟﺠﺪول ‪From‬‬
‫] اﻟﺸﺮط ‪[ Where‬‬
‫] اﻟﺤﻘﻮل اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﺠﻤﯿﻊ ﻋﻠﻲ أﺳﺎﺳﮭﺎ ‪[ Group By‬‬
‫] اﻟﺸﺮط اﻟﺨﺎص ﺑﺎﻟﺪوال اﻟﺘﺠﻤﯿﻌﯿﺔ ‪[ HAVING‬‬
‫] اﻟﺤﻘﻮل اﻟﻤﺮاد ﻓﺮزھﺎ وﻃﺮﯾﻘﺔ اﻟﻔﺮز ‪[ Order By‬‬
‫وﻟﻜﻦ ﻣﺎ ھﻮ اﻻن اﻟﺘﺮﺗﯿﺐ اﻟﺼﺤﯿﺢ ﻟﺘﻨﻔﯿﺬ ﺗﻠﻚ اﻟﺠﻤﻠﺔ‬
‫‪ .١‬اﺧﺘﯿﺎر اﻟﺼﻔﻮف ﺑﻨﺎء ﻋﻠﻲ ﺟﻤﻠﺔ ‪Where‬‬
‫‪ .٢‬ﺗﺠﻤﯿﻊ ھﺬه اﻟﺼﻔﻮف ﺑﻨﺎء ﻋﻠﻲ ﺟﻤﻠﺔ ‪Group By‬‬
‫‪ .٣‬ﺗﻨﻔﯿﺬ ﻧﺘﺎﺋﺞ اﻟﺪوال)دوال اﻟﺘﺠﻤﯿﻊ ﻣﺜﻞ ‪ (Sum‬اﻟﺨﺎﺻﺔ ﺑﻜﻞ ﺗﺠﻤﯿﻌﮫ ‪Group By‬‬
‫‪ .٤‬اﺧﺘﯿﺎر وﺗﺠﻤﯿﻊ اﻟﻤﺠﻤﻮﻋﺎت ﺑﻨﺎء ﻋﻠﻲ ﺟﻤﻠﺔ ‪)Having‬ﺳﻮاء ﻣﻮﺟﻮدة ﻓﻲ ‪ Select‬أو ﻻ(‬
‫‪ .٥‬ﺗﺮﺗﯿﺐ اﻟﻤﺠﻤﻮﻋﺎت ﻣﻦ ﺧﻼل اﻟﺠﺰء ‪ Order By‬ﻋﻠﻲ أﺳ ﺎس أن ھ ﺬا اﻟﺠ ﺰء ﺳ ﻮف ﯾﺮﺗ ﺐ ﻋﻠ ﻲ أﺳ ﺎس‬
‫ﺣﻘﻞ ﺑﺪاﻟﺔ ﺗﺠﻤﯿﻌﯿﺔ ﻣﻮﺟﻮد ﻓﻲ ‪ Group By‬أو اﺳﺘﺨﺪام داﻟﺔ ﺗﺠﻤﯿﻊ ﺟﺪﯾﺪة ﯾﻘﻮم ﻋﻠﻲ أﺳﺎﺳﮭﺎ اﻟﺘﺮﺗﯿﺐ‪.‬‬

‫اﺳﺘﺮﺟﻊ رﻗﻢ اﻟﻘﺴﻢ واﻟﺒﻠﺪ وﻣﺠﻤﻮع اﻟﻤﺮﺗﺒﺎت ﻟﻜﻞ ﻗﺴﻢ ﻟﻜﻞ ﺑﻠﺪ ﻣﺮﺗﺒﺎ ﺣﺴﺐ اﻟﻘﺴﻢ ﺑﺸﺮط أن ﯾﻜﻮن ﻣﺠﻤ ﻮع اﻟﻤﺮﺗ ﺐ‬
‫أﻛﺒﺮ ﻣﻦ ‪ ٢٠٠٠‬و ﯾﻜﻮﻧﻮا ﻣﻦ اﻟﺮﺟﺎل‬
‫‪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‬‬

‫وﺑﺎﻟﻄﺒﻊ اﻟﺪوال ‪STDEV , STDEVP , VAR , VARP‬‬


‫ﯾﺘﻌﺎﻣﻠﻮن ﺑﻨﻔﺲ ﻣﻨﻄﻖ اﻟﺪوال اﻟﺘﺠﻤﯿﻌﯿﺔ اﻻﺧﺮي وﻟﻜﻨﮭﺎ دوال ﺗﺴﺘﺨﺪم ﻟﻌﻤﻞ ﺣﺴﺎﺑﺎت وﻣﻌﺎدﻻت رﯾﺎﺿﯿﺔ وإﺣ ﺼﺎﺋﯿﺔ‬
‫دﻗﯿﻘﺔ ﻓﻠﻚ أن ﺗﻌﺮﻓﮭﺎ ﻟﻜﻲ ﺗﺴﺘﺨﺪﻣﮭﺎ أن اﺗﻄﺮك اﻷﻣﺮ إﻟﻲ ذﻟﻚ ﻓﺠﺮﺑﮭﻢ ﻋﻠﻲ ﺣﻘﻞ اﻟﻤﺮﺗﺐ ﻟﺘﻌﻄﯿﻚ ﻗﯿﻤﮭﺎ ‪.‬‬

‫اﻟﺠﺰء ‪Comput‬‬
‫ﯾﺨﺘﺺ ﺑﺎل ‪ Query Analyzer‬وھﻮ ﯾﻘﻮم ﺑﺘﺠﻤﯿﻌﺎت ﻓﺮﻋﯿﺔ وإﺟﻤﺎﻟﯿﺔ‬
‫ﻣﺒ ﺪأﯾﺎ إذا ﺗ ﻢ ﻃﻠ ﺐ ﻣﻨ ﻚ أن ﺗﻈﮭ ﺮ أﺳ ﻢ اﻟﻤﻌﻠ ﻢ وﻣﺮﺗﺒ ﮫ وﻓ ﻲ اﻟﻨﮭﺎﯾ ﺔ إﺟﻤ ﺎﻟﻲ اﻟﻤﺮﺗﺒ ﺎت ﻓ ﺴﻮف ﯾﻘ ﻮم ﺑﮭ ﺬا اﻟﺠ ﺰء‬
‫‪ Comput‬ﻛﺎﻟﺘﺎﻟﻲ‬
‫‪Select name , salary‬‬
‫‪from teacher‬‬
‫)‪Compute sum(salary‬‬
‫ﻓﺘﺼﺒﺢ اﻟﻨﺘﯿﺠﺔ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫‪102‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫وﻻﺣﻆ ﻓﻲ اﻟﻨﺘﯿﺠﺔ اﻹﺟﻤﺎﻟﻲ ﺑﻌﺪ ﺗﻠﻚ اﻟﺒﯿﺎﻧﺎت اﻟﻜﺎﻣﻠﺔ‬


‫وﻟﻜﻦ دﻋﻨﺎ ﻧﻜﻮن أﻛﺜﺮ ﺗﺨﺼﺼﺎ‬
‫ﻓﻨﺤﻦ ﻧﺮﯾﺪ أن ﻧﺴﺘﺮﺟﻊ أﺳﻢ اﻟﻤﻌﻠﻢ وﻣﺮﺗﺒﮫ وﻗﺴﻤﮫ وھﺬا ﻋﻠﻲ أن ﯾﻜﻮن‬
‫ھﻨﺎك إﺟﻤﺎﻟﻲ ﻣﺮﺗﺒﺎت ﻋﻠﻲ ﺣﺴﺐ ﻛﻞ ﻗﺴﻢ‬
‫ﻓﻲ ھﺬا ھﻨﺎك ﺷﺮط ﻣﻦ ﺟﻤﻠﺔ ‪ Comput‬ﺣﺘﻲ ﺗﺠﻤﻊ ﻓﺮﻋﻲ ﻻﺑﺪ ﻣﻦ أن‬
‫اﻟﻌﻤﻮد اﻟﺬي ﺗﺠﻤﻊ ﻓﺮﻋﻲ ﻋﻠﻲ أﺳﺎﺳﮫ أن ﯾﻜﻮن ﻣﻮﺟﻮدا ﻓﻲ اﻟﺠﺰء‬
‫‪ Group By‬وﻣﻜﺘﻮب ﺑﻌﺪ ﻛﻠﻤﺔ ‪ Comput‬ﻛﻠﻤﺔ ‪ By‬ﺛﻢ أﺳﻢ اﻟﺤﻘﻞ‬
‫اﻟﺬي ﺳﻮف ﯾﺠﻤﻊ ﻋﻠﯿﮫ ﻓﺮﻋﻲ ﻟﻮ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻧﺮﯾﺪ أن ﻧﺠﻤﻊ ﻓﺮﻋﻲ‬
‫ﻟﻜﻞ ﻗﺴﻢ ﻛﻠﻲ ﻧﺘﺒﻊ اﻟﺘﺎﻟﻲ ﻋﻠﻲ ﻧﻔﺲ اﻟﻔﻜﺮ‪.‬‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select name , salary,‬‬
‫‪DeptWork‬‬
‫‪from teacher‬‬
‫‪Order by DeptWork‬‬
‫‪Compute Sum(Salary) by DeptWork‬‬

‫ﻻﺣﻆ أﻧﮫ ﺗﻢ اﻟﺘﺠﻤﯿﻊ ﺑﻌﺪ ﻛﻞ ﻗﺴﻢ إﺟﻤﺎﻟﻲ اﻟﻤﺮﺗﺒﺎت ﻓﻲ‬


‫ھﺬا اﻟﻘﺴﻢ وﻻﺣﻆ أﻧﮫ ﻟﯿﺲ ﺷﺮط ذﻛﺮ أﺳﻢ اﻟﺤﻘﻞ اﻟﺬي‬
‫ﺳﻮف ﯾﺘﻢ اﻟﺘﺠﻤﯿﻊ ﻋﻠﻲ أﺳﺎﺳﮫ ﻓﻲ اﻟﺠﺰء ‪Select‬‬
‫وﻟﻜﻨﮫ ﺷﺮط أن ﯾﺬﻛﺮ اﻟﺤﻘﻞ اﻟﺬي ﺳﻮف ﯾﺘﻢ اﻟﺘﺮﺗﯿﺐ‬
‫ﻋﻠﻲ أﺳﺎﺳﮫ أن ﯾﺬﻛﺮ ﻓﻲ ﻣﻨﻄﻘﺘﯿﻦ ‪:‬‬
‫‪ .١‬ﻓﻲ اﻟﺠﺰء ‪Order By‬‬
‫‪ .٢‬ﻓﻲ اﻟﺠﺰء ‪ Comput‬ﺑﻌﺪ ﻛﻠﻤﺔ ‪By‬‬

‫اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪With Rollup‬‬


‫ﻓ ﻲ اﻟﺠ ﺰء اﻟ ﺴﺎﺑﻖ ﻋﺮﺿ ﻨﺎ إﺟﻤ ﺎﻟﻲ ﻛ ﻞ ﻗ ﺴﻢ )إﺟﻤﺎﻟﯿ ﺎت ﻓﺮﻋﯿ ﺔ( ﻣ ﺎذا ﻟ ﻮ أردت إﺟﻤﺎﻟﯿ ﺎت ﻓﺮﻋﯿ ﺔ وإﺟﻤﺎﻟﯿ ﺎت ﻛﻠﯿ ﺔ‬
‫ﺑﻤﻌﻨﻲ ﻟﻮ اﻓﺘﺮﺿﻨﺎ أﻧﻨﺎ ﻧﺮﯾﺪ ﻋﺮض رﻗﻢ اﻟﻘﺴﻢ وإﺟﻤﺎﻟﻲ ﻓﺮﻋﻲ ﻟﻜﻞ ﻧﻮع )ذﻛﺮأو أﻧﺜﻲ( وﺑﻌﺪھﺎ إﺟﻤﺎﻟﻲ ﻣﺮﺗﺒﺎت اﻟﻘﺴﻢ‬
‫وﻣ ﺮوا ﺑﺒ ﺎﻗﻲ اﻷﻗ ﺴﺎم ﻟﻠﻮﺻ ﻮل إﻟ ﻲ اﻟﻨﮭﺎﯾ ﺔ ﺛ ﻢ ﻋ ﺮض إﺟﻤ ﺎﻟﻲ اﻟﻤﺮﺗﺒ ﺎت ) إذا ﻛﻨ ﺖ ﺗﺮﯾ ﺪ ﻋﻤ ﻞ إﺟﻤﺎﻟﯿ ﺎت ﻓﺮﻋﯿ ﺔ‬
‫وإﺟﻤﺎﻟﯿﺎت ﻛﻠﯿﮫ ﻓﺴﻮف ﺗﻜﻮن اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ With Rollup‬ھﻲ أﺳﮭﻞ وأھﻢ ﻃﺮﯾﻖ(‬
‫أوﻻ أﻋﺮض رﻗﻢ اﻟﻘﺴﻢ ﺛﻢ إﺟﻤﺎﻟﻲ ﻣﺮﺗﺒﺎﺗﮫ وﻓﻲ اﻟﻨﮭﺎﯾﺔ اﻇﮭﺮ اﻟﻤﺮﺗﺒﺎت اﻹﺟﻤﺎﻟﯿﺔ‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬
‫‪Select DeptWork ,‬‬
‫‪Sum(Salary) as Salary‬‬
‫‪From Teacher‬‬
‫‪Group By DeptWork with Rollup‬‬
‫‪Grid Pane‬‬

‫‪103‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻻﺣﻆ اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ 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‬ﺣﯿ ﺚ أﻧ ﮫ ﻟ ﻮ ﺗ ﻢ ﻋﻜ ﺲ اﻟﺘﺮﺗﯿ ﺐ ﺳ ﻮف ﯾ ﺘﻢ‬
‫ﺗﺮﺗﯿ ﺐ اﻟﻌ ﺮض ﻋﻠ ﻲ أن ﯾﻈﮭ ﺮ ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل ﻛ ﻞ اﻹﺟﻤﺎﻟﯿ ﺎت اﻟﻔﺮﻋﯿ ﺔ اﻟﺨﺎﺻ ﺔ ﺑﺎﻹﻧ ﺎث ﺛ ﻢ‬
‫اﻹﺟﻤﺎﻟﯿﺎت اﻟﻔﺮﻋﯿﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺬﻛﻮر ﻣﺮﺗﺒﮫ ﺣﺴﺐ اﻟﻘﺴﻢ‬

‫اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪With Cube‬‬


‫ﻣﺎذا ﻟﻮ أردﻧﺎ ﺗﻔﺼﯿﻞ أﻛﺜﺮ ﻋﻠﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل ﻟ ﻮ أردﻧ ﺎ ﻛﻤ ﺎ ﺳ ﺒﻖ إﻇﮭ ﺎر إﺟﻤ ﺎﻟﻲ اﻟﻤﺮﺗﺒ ﺎت ﻟﻺﻧ ﺎث وإﺟﻤ ﺎﻟﻲ ﻣﺮﺗﺒ ﺎت‬
‫اﻟ ﺬﻛﻮر ﻓ ﻲ ﻛ ﻞ ﻗ ﺴﻢ وإﺟﻤ ﺎﻟﻲ ﻣﺮﺗﺒ ﺎت اﻟﻘ ﺴﻢ وﻓ ﻲ اﻟﻨﮭﺎﯾ ﺔ إﺟﻤ ﺎﻟﻲ اﻟﻤﺮﺗﺒ ﺎت وﻟﻜ ﻦ ﺑﺰﯾ ﺎدة ﺗﻔ ﺼﯿﻞ وﺑﻌ ﺪھﺎ ﻋ ﺮض‬
‫إﺟﻤﺎﻟﻲ اﻟﻤﺮﺗﺒﺎت ﻟﻠﺬﻛﻮر وإﺟﻤﺎﻟﻲ اﻟﻤﺮﺗﺒﺎت ﻟﻺﻧﺎث ﻓﻲ اﻷﻗﺴﺎم ﻛﻠﮭﺎ اﻟﺤﻞ ھﻮ اﻟﻜﻠﻤﺔ ‪. With Cube‬‬
‫)إذا ﻛﻨ ﺖ ﺗﺮﯾ ﺪ ﻋﻤ ﻞ إﺟﻤﺎﻟﯿ ﺎت ﻓﺮﻋﯿ ﺔ ‪ II‬وإﺟﻤﺎﻟﯿ ﺎت ﻓﺮﻋﯿ ﺔ ‪ I‬وإﺟﻤﺎﻟﯿ ﺎت ﻛﻠﯿ ﮫ ‪ I‬وإﺟﻤﺎﻟﯿ ﺎت ﻛﻠﯿ ﮫ ﻟﻠﻔﺮﻋ ﻲ ‪I‬‬
‫ﻟﻺﺟﻤﺎﻟﯿﺎت اﻟﻔﺮﻋﯿﺔ ‪ II‬ﻓﺴﻮف ﺗﻜﻮن اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ With Cube‬ھﻲ أﺳﮭﻞ وأھﻢ ﻃﺮﯾﻖ(‬

‫‪104‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪Query Analyzer‬‬ ‫‪Result‬‬


‫‪Select DeptWork ,Gender,‬‬
‫‪Sum(Salary) as Salary‬‬
‫‪From Teacher‬‬
‫‪Group By‬‬
‫‪DeptWork , Gender with Cube‬‬

‫‪Grid Pane‬‬

‫ﻻﺣﻆ اﻟﺠﺰء اﻟﺠﺪﯾ ﺪ اﻟ ﺬي ﻇﮭ ﺮ ﻓ ﻲ اﻟﻨﺘﯿﺠ ﺔ وھ ﻮ اﻹﺟﻤﺎﻟﯿ ﺎت ﻟﻺﺟﻤﺎﻟﯿ ﺎت اﻟﻔﺮﻋﯿ ﺔ أﯾ ﻀﺎ ﯾﺎﻟﮭ ﺎ ﻣ ﻦ‬


‫ﻣﺘﻌ ﺔ وﻟﻜ ﻦ ﺗ ﺬﻛﺮ أن ﻗ ﺼﺪي ھﻨ ﺎ ﺑﺎﻹﺟﻤﺎﻟﯿ ﺎت اﻟﻔﺮﻋﯿ ﺔ ‪ II‬ھ ﻮ إﺟﻤ ﺎﻟﻲ اﻹﻧ ﺎث أو اﻟ ﺬﻛﻮر ﻓ ﻲ اﻟﻘ ﺴﻢ‬
‫واﻹﺟﻤﺎﻟﻲ اﻟﻔﺮﻋﻲ ‪ I‬ھﻮ إﺟﻤﺎﻟﻲ ﻣﺎ ﺑﺎﻟﻘﺴﻢ ﺣﯿﺚ أﻧﮫ ﻣﺴﺘﻮي أﻋﻠ ﻲ واﻹﺟﻤ ﺎﻟﻲ اﻟﻜﻠ ﻲ ﻟﻠﻔﺮﻋ ﻲ ‪ I‬ھ ﻮ‬
‫إﺟﻤﺎﻟﻲ اﻟﻔﺮﻋﻲ اﻟﺨﺎص ﺑﺎﻷﻗﺴﺎم واﻹﺟﻤﺎﻟﻲ اﻟﻜﻠﻲ ﻟﻠﻔﺮﻋﻲ ‪ II‬ﯾﻘﺼﺪ ﺑﮫ ھﻨ ﺎ إﺟﻤ ﺎﻟﻲ ﻟﻠ ﺬﻛﻮر وﻟﻺﻧ ﺎث‬
‫ھﺬا ﺑﺎﻟﻄﺒﻊ ﻣﻦ ﺟﺎﻧﺐ اﻟﻤﺮﺗﺒﺎت وھﺬه اﻟﺸﺠﺮة ﯾﻤﻜﻨﮭﺎ اﻟﺘﻔﺮع واﻟﺤﻞ ھﻮ ھﺬه اﻟﻜﻠﻤﺔ اﻟﺒﺴﯿﻄﺔ !!‬

‫اﻟﺪاﻟﺔ ‪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‬‬

‫ﻻﺣﻆ أﻧﮫ ﻗﺪ ﺗﻢ إﺧﺮاج رﻗﻢ ‪ ١‬اذا ﻛ ﺎن ھ ﺬا اﻟ ﺼﻒ ﯾﻨ ﺘﺞ ﻣ ﻦ ﺧ ﻼل ‪ With Rollup‬وھ ﺬا ﻋﻠ ﻲ أﺳ ﺎس أن‬


‫اﻟﺪاﻟ ﺔ ‪ Grouping‬ﺗﺨ ﺺ اﻟﺤﻘ ﻞ ‪ Gender‬ﻟ ﺬﻟﻚ أي ﺻ ﻒ ﯾﻨ ﺘﺞ ﺗﺠﻤﯿﻌ ﺔ ﻋﻠ ﻲ ﺣ ﺴﺐ اﻟﻨ ﻮع أو ﺗﺨ ﺼﮫ‬
‫ﺗﻨ ﺘﺞ ھ ﺬه اﻟﺪاﻟ ﺔ ‪ ١‬وﻻﺣ ﻆ أن وﺿ ﻌﻨﺎ ﺑ ﺪﻻ ﻣ ﻦ ‪ Gender‬ﻣ ﺜﻼ ‪ DeptWork‬ﻓ ﻼ ﺗﻨ ﺘﺞ ‪ ١‬إﻻ ﻓ ﻲ ﺣﺎﻟ ﺔ‬
‫اﻟﺘﺠﻤﯿﻌﺔ اﻟﻨﮭﺎﺋﯿﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻟﻘﺴﻢ ﻟﻜﻦ ﺑﺎﻗﻲ اﻟﺘﺠﻤﯿﻌﺎت ﻓﮭﻲ ﺗﺨﺺ اﻟﻨﻮع‬
‫وﻻﺣﻆ ﻓ ﻲ ‪ Grid Pane‬أﻧﻨ ﺎ إﺧﺘﺮﻧ ﺎ ‪ Expression‬أﻣ ﺎم اﻟﻌﻤ ﻮد اﻟﺨ ﺎص ﺑﺎﻟﺪاﻟ ﺔ ‪ Grouping‬ﻷﻧﮭ ﺎ‬
‫ﻋﺒﺎرة ﻋﻦ ﺗﻌﺒﯿﺮ ﻻ ﯾﺘﻢ ﻋﻠﯿﮫ أي ﻋﻤﻠﯿﺎت إﺣﺼﺎﺋﯿﺔ ﺧﺎﺻﺔ ﺑﮫ‬
‫وﻟﻜﻦ ﻣﺎ اﻷھﻤﯿﺔ ﻣﻦ ھﺬه اﻟﺪاﻟﺔ‬

‫‪105‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫اﻷھﻤﯿﺔ ﻣﻦ ھﺬه اﻟﺪاﻟﺔ ھﻲ ﺗﺤﺴﯿﻦ اﻟﺸﻜﻞ اﻟﻲ ﺣﺪ ﻣﺎ ﺑﺪﻻ ﻣﻦ ﻛﺘﺎﺑﺔ ‪ 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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻧﺮﺟﻊ إﻟﻲ ﻣﻮﺿﻮﻋﺎ اﻷﺳﺎﺳﻲ ﻋﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺪاﻟﺔ ‪ Grouping‬وﻛﯿﻔﯿﺔ ﺗﻨﺴﯿﻖ اﻟﺸﻜﻞ‬


‫ﻓﻲ اﻟﻤﺜﺎل اﻟﺨﺎص ﺑﺎﺳﺘﺮﺟﺎع أﺟﻤﺎﻟﻲ ﻣﺮﺗﺒ ﺎت اﻟ ﺬﻛﻮر واﻹﻧ ﺎث داﺧ ﻞ ﻛ ﻞ ﻗ ﺴﻢ وإﺟﻤ ﺎﻟﻲ اﻟﻤﺮﺗﺒ ﺎت ﺑﺎﻟﻘ ﺴﻢ وإﺟﻤ ﺎﻟﻲ‬
‫اﻟﻤﺮﺗﺒ ﺎت ﻋﻤﻮﻣ ﺎ ﺑﺎﺳ ﺘﺨﺪام اﻟﻜﻠﻤ ﺔ ‪ With Rollup‬وﻣ ﻊ اﻟﺪاﻟ ﺔ ‪ Grouping‬وﺑﺎﻟﺘﻨ ﺴﯿﻖ ﻣ ﻊ ‪ Case‬ﻋﻠ ﻲ أن‬
‫ﻧﺴﺘﺮﺟﻊ أﺳﻢ اﻟﻘﺴﻢ وﻟﯿﺲ رﻗﻤﮫ ﻣﻦ ﺧﻼل ﻋﻼﻗﺔ ﺧﺎرﺟﯿﺔ‬
‫‪Query Analyzer‬‬
‫‪Select‬‬
‫‪Case‬‬
‫'‪When (Grouping(DName)=1) Then 'All Departments‬‬
‫)'‪Else ISNULL(DName,'Unknown‬‬
‫‪End as DName ,‬‬

‫‪Case‬‬
‫'‪When (Grouping(Gender) =1) THEN 'Total‬‬
‫)'‪Else ISNULL(Gender,'0‬‬
‫‪End as Gender,‬‬
‫‪Sum(Salary) as Salary‬‬

‫‪From Teacher Left Outer Join Department‬‬


‫‪on‬‬ ‫‪DeptWork = DeptNo‬‬
‫‪Group By‬‬
‫‪DName, Gender with Rollup‬‬
‫‪Result‬‬

‫ﻻﺣﻆ أن اﻟﺠﻤﻠﺔ ﺑﮭﺎ ﻗﻄﻌﺘﯿﻦ ‪ Case‬اﻷول ﺗﺨﺘﺒﺮ أﺳ ﻢ اﻟﻘ ﺴﻢ ﺑﺎﻟﺪاﻟ ﺔ ‪ Grouping‬أن أﻧﺘﺠ ﺖ ‪ ١‬ﻓﻔ ﻲ ھ ﺬه اﻟﺤﺎﻟ ﺔ‬
‫ﻧﺤﻦ ﻓﻲ ﺣﺎﻟﺔ ﺗﺠﻤﯿﻊ ﻟﻸﻗﺴﺎم وﺳﻮف ﻧﻜﺘ ﺐ ‪ All Departments‬ﻛﻤ ﺎ ﻇﮭ ﺮ ﻣﻌﻨ ﺎ ﻓ ﻲ أﺳ ﻔﻞ اﻟﺠ ﺪول أﻣ ﺎ اﻟﺠ ﺰء‬
‫‪ Else‬ﻓﻤﻌﻨﺎه ﻟﻮ ﻟﻢ ﯾﻜﻦ اﻟﻨﺎﺗﺞ ﻣﻦ اﻟﺪاﻟﺔ ‪ ١ Grouping‬ﻓﻔﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻧﺤﻦ ﻓﻲ ﺣﺎﻟﺔ ﻋﺎدﯾ ﺔ )ﻟﯿ ﺴﺖ ﺗﺠﻤﯿﻌﯿ ﺔ(‬
‫ﻓﺄﺧﺘﺮت أن أﺧﺘﺒﺮ اﻟﻘﯿﻤﺔ ‪ Null‬ﻓﺈن ﻛﺎن اﻟﻘﺴﻢ ﻣﺤﺘﻮي ﻋﻠﻲ اﻟﻘﯿﻤﺔ ‪ Null‬ﻓﻤﻌﻨﺎھﺎ أﻧﮫ ﻏﯿﺮ ﻣﺤﺪد ﻓﺨﺼ ﺼﻨﺎ اﻟﻜﻠﻤ ﺔ‬
‫‪ Unknown‬ﻟﻸﻗﺴﺎم اﻟﻐﯿﺮ ﻣﻌﺮوﻓﺔ‬
‫ﻻﺣﻆ ﺟﻤﻠﺔ ‪ Case‬اﻟﺜﺎﻧﯿﺔ ﻓﮭﻲ ﺗﻌﻤﻞ ﻋﻠﻲ ﻧﻔﺲ ﻓﻜﺮ اﻷوﻟ ﻲ ﻓﻨﺨﺘﺒ ﺮ اﻟﺪاﻟ ﺔ ‪ Grouping‬ﻋﻠ ﻲ اﻟﺤﻘ ﻞ ‪Gender‬‬
‫ﻓﺈن ﻛﺎن ‪ ١‬ﻓﻤﻌﻨﺎه أﻧﮫ ﺣﻘﻞ ﺗﺠﻤﯿﻌﻲ ﻟﻠﻨﻮع )ذﻛﻮر وأﻧﺎث( ﻓﻔﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳ ﻮف ﻧﻜﺘ ﺐ اﻟﻜﻠﻤ ﺔ ‪ Total‬وإن ﻟ ﻢ ﯾﻜ ﻦ‬
‫‪ Else‬ﻓﻔ ﻲ ھ ﺬه اﻟﺤﺎﻟ ﺔ ﻧﺨﺘﺒ ﺮ ﻗﯿﻤ ﺔ ﺣﻘ ﻞ ‪ Gender‬ﻋﻠ ﻲ اﻟﻘﯿﻤ ﺔ ‪ Null‬إن ﻛﺎﻧ ﺖ ﻛ ﺬﻟﻚ ﯾ ﻀﻊ اﻟﻘﯿﻤ ﺔ ‪ ٠‬وﺑ ﺎﻟﻄﺒﻊ‬
‫ھﻨﺎك ﻗﯿﺪ ﯾﺆﻛﺪ أﻧﮫ ﻻﺑﺪ ﻣﻦ إدﺧﺎل ﻗﯿﻤﺔ ﻟﺤﻘﻞ اﻟﻨﻮع وﻟﻜﻦ أن ﻟﻢ ﺗﻜﺘﺐ ھﺬا اﻟﺤﻘﻞ ﺳﻮف ﺗﺨﺮج ‪Null‬‬
‫وﺑﻌﺪ اﻟﻘﻄﻌﺘﯿﻦ ‪ Case‬ﻧﻀﻊ ﻋﻨﻮان ﻣﺴﺘﻌﺎر ﻟﻤﺨﺮﺟﺎت اﻟﻘﻄﻌﺔ ‪ Case‬وﻻﺑﺪ أن ﯾﻜﻮن ھﺬا اﻷﺳﻢ اﻟﻤﺴﺘﻌﺎر ھﻮ أﺳﻢ‬
‫ﺣﻘﻞ ﻣﻮﺟﻮد ﻓﻲ أﺣﺪ اﻟﺠﺪوﻟﯿﻦ وأﯾﻀﺎ ﯾﺠﻤﻊ ﻓﻲ اﻟﺠﺰء ‪ Group by‬أي ﯾﺘﻢ ﻋﻠﯿﮫ ﻋﻤﻠﯿﺎت ﺗﺠﻤﯿﻌﯿﺔ أي أﻧﻨﺎ ﺳ ﺤﺒﻨﺎ‬
‫ﺟﺰء أﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺒﺎﺷﺮ ووﺿﻌﻨﺎ ﻋﻨﮫ ﻗﻄﻌﺔ ‪ Case‬وھﻜﺬا‬
‫أﻣﺎ ﺑﺎﻗﻲ اﻟﺠﻤﻠﺔ وﻛﯿﻔﯿﺔ اﺳ ﺘﺮﺟﺎع ﻣ ﻦ أﻛﺜ ﺮ ﻣ ﻦ ﺟ ﺪول ﺑﻄﺮﯾﻘ ﺔ اﻟ ﺮﺑﻂ اﻟﺨ ﺎرﺟﻲ اﻷﯾ ﺴﺮ واﻟﺠ ﺰء ‪ Rollup‬ﻓﻘ ﺪ ﺗ ﻢ‬
‫ﺷﺮﺣﮫ ﺳﺎﺑﻘﺎ ‪.‬‬

‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬


‫‪107‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬
‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع اﻟﻤﺘﻘﺪﻣﺔ ‪Advanced Select‬‬


‫ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻣﻊ ﺟﻤﻞ ‪.DDL‬‬ ‫‪-١‬‬
‫ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻣﻊ ﺟﻤﻞ ‪. DML‬‬ ‫‪-٢‬‬
‫ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع اﻟﻤﺘﻘﺪﻣﺔ ﻓﻲ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ ‪.‬‬ ‫‪-٣‬‬
‫ﺣﻔﻆ ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع ﻓﻲ اﻟﻜﺎﺋﻦ ‪. View‬‬ ‫‪-٤‬‬

‫أوﻻ ‪ :‬ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻣﻊ ﺟﻤﻞ ‪DDL‬‬


‫ﯾﻤﻜﻨﻨﺎ ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع إﻧﺸﺎء ﺟﺪول ﯾﺤﺘﻮي ﻋﻠﻲ ﺑﯿﺎﻧﺎت أو ﻻ ﻣﻦ ﺧﻼل اﻟﺠ ﺰء اﻟ ﺬي ﯾ ﺴﻤﻲ ‪Into‬وھ ﻮ‬
‫ﯾ ﺄﺗﻲ ﺑﻌ ﺪ اﻟﺠ ﺰء ‪ Select‬وﻗﺒ ﻞ اﻟﺠ ﺰء ‪ From‬ﻓ ﺴﻮف ﯾﻨ ﺸﺄ ﺟ ﺪول ﺑ ﻨﻔﺲ ﻣﻮاﺻ ﻔﺎت ﺟﻤﻠ ﺔ اﻻﺳ ﺘﺮﺟﺎع اﻟﻨﺎﺗﺠ ﺔ‬
‫ﺑﻤﻌﻨﻲ أن ﻧﺘﯿﺠﺔ اﻷﺳﺘﻌﻼم ﺳﻮف ﺗﺼﺒﺢ ﺟﺪول ﺑﻜﻞ ﺗﻔﺎﺻﯿﻠﮭﺎ وأﺳﻢ ھﺬا اﻟﺠﺪول ﻣﻮﺟﻮد ﺑﻌﺪ ﻛﻠﻤﺔ ‪Into‬‬
‫ﻋﻤﻞ ﺟﺪول ﯾﺤﺘﻮي ﻋﻠﻲ رﺗﺒﺖ اﻟﻤﻌﻠﻢ وأﺳﻤﮫ وﻣﺮﺗﺒﮫ وﻗﺴﻤﮫ ﺑﺠﻤﯿﻊ ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ ﺗﺤﺖ أﺳﻢ ‪.NewTeacher‬‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬
‫‪SELECT Rank , Name, Salary ,‬‬
‫‪DeptWork as Department‬‬
‫‪INTO newteacher‬‬
‫‪FROM teacher‬‬
‫‪Grid Pane‬‬

‫ﻻﺣﻆ اﻟﻨﺘﯿﺠﺔ أﻧﮫ ﻗﺪ ﺗﻢ إﻧﺘﺎج ﺟ ﺪول ﺟﺪﯾ ﺪ ﺑﺎﻷﺳ ﻢ ‪ NewTeacher‬وﻗ ﺪ ﺗ ﻢ ﺗ ﻀﻤﯿﻦ ‪ ١٠‬ﺻ ﻔﻮف‬
‫ﺑﺪاﺧﻠﮫ وﻻﺣ ﻆ ﻓ ﻲ ‪ Grid Pane‬ﻟﻌﻤ ﻞ ذﻟ ﻚ ﺑﻌ ﺪ إﺧﺘﯿ ﺎر اﻟﺤﻘ ﻮل ﻛﻤ ﺎ ﺗﺮﯾ ﺪ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس‬
‫وﻣ ﻦ اﻟﻘﺎﺋﻤ ﺔ ﻧﺨﺘ ﺎر ‪ Change Type‬وﻣﻨﮭ ﺎ ‪ Make Table‬ﺳ ﻮف ﯾﻈﮭ ﺮ ﻟﻨ ﺎ ﻣﺮﺑ ﻊ ﺣ ﻮاري‬
‫ﯾﺴﺄل ﻋﻦ أﺳﻢ اﻟﺠﺪول اﻟﺬي ﺗﺮﯾﺪ إﻧﺸﺎﺋﮫ ﻧﻜﺘﺐ أﺳﻢ اﻟﺠ ﺪول ﺛ ﻢ ﻧ ﻀﻐﻂ ‪ Ok‬ﻻﺣ ﻆ أﻧﻨ ﺎ وﺿ ﻌﻨﺎ أﺳ ﻢ‬
‫ﻣ ﺴﺘﻌﺎر ﻟﻠﺤﻘ ﻞ ‪ Deptwork‬ﺳ ﯿﻜﻮن ھ ﺬا اﻟﺤﻘ ﻞ ﻓ ﻲ اﻟﺠ ﺪول اﻟﺠﺪﯾ ﺪ ‪ Department‬ﻛﻤﺜ ﻞ‬
‫ﻣﺎﺳﺘﻨﺘﺠﮫ ﺟﻤﻠﺔ اﻹﺳﺘﺮﺟﺎع ﺗﻤﺎﻣﺎ‬
‫إذا أردﻧﺎ ﻋﻤﻞ ﺟﺪول ﺟﺪﯾ ﺪ وﻟﻜ ﻦ ﺑ ﺪون وﺿ ﻊ ﺑﯿﺎﻧ ﺎت ﺟﺪﯾ ﺪة ﺑﺪاﺧﻠ ﮫ ﯾﻤﻜﻨﻨ ﺎ وﺿ ﻊ ﺷ ﺮط ﻻﯾﻨﻔ ﺬ ﻓ ﻲ‬
‫اﻟﺠﺰء ‪ Where‬وﻟﯿﻜﻦ '‪ Gender='NO‬وھﺬا ﻻﯾﺤﺪث أﺑﺪا ﻓﯿﻨﺸﺄ اﻟﺠﺪول وﻟﻜﻦ ﺑﺪون ﺻﻔﻮف‪.‬‬
‫وﯾﻤﻜﻨﻨﺎ ﻋﻤﻞ أي ﺟﻤﻠﺔ إﺳ ﺘﺮﺟﺎع ﻛﺠ ﺪول ﺣﺘ ﻲ وﻟ ﻮ ﻛﺎﻧ ﺖ ﻣ ﻦ أﻛﺜ ﺮ ﻣ ﻦ ﺟ ﺪول أو أي ﺟﻤﻠ ﺔ ﻗ ﺪ ﺗ ﻢ‬
‫ﺷﺮﺣﮭﺎ أو ﺟﻤﻠﺔ ﻣﺜﻠﮭﺎ ‪.‬‬
‫وﻻﺣﻆ اﻧﻚ ﻟﻮ أﺳﺘﺮﺟﻌﺖ ﻓﻲ ﺟﻤﻠﺔ اﻹﺳﺘﺮﺟﺎع ﻣﺜﻼ ﺣﻘﻞ ﻋﻠﯿﮫ ﻗﯿﺪ ﺳ ﻮف ﯾ ﻮﻓﻲ ﺑ ﮫ وﯾﻜ ﻮن ﻣﻮﺟ ﻮد‬
‫ﻋﻠﻲ اﻟﺠﺪول اﻟﺠﺪﯾﺪ ‪.‬‬

‫ﺛﺎﻧﯿﺎ ‪ :‬ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻣﻊ ﺟﻤﻞ ‪. DML‬‬


‫‪ -١‬ﺟﻤﻠﺔ اﻹدﺧﺎل ‪Insert Statement‬‬
‫ﯾﻤﻜﻨﻨﺎ إن ﻧﺪﺧﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺟﺪول ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ اﺳﺘﺮﺟﺎع ﺑﯿﺎﻧﺎت ﺑﺸﺮوط ‪.‬‬
‫أ‪ -‬ﻻ ﻧﺴﺘﺨﺪم اﻟﺠﺰء ‪. Values‬‬
‫ب‪ -‬ﻋﺪد اﻟﺤﻘﻮل ﺑﺄﻧﻮاﻋﮭﺎ ﻋﻠﻲ اﻟﺘﺮﺗﯿﺐ ﺗﻤﺎﺛﻞ اﻟﺤﻘﻮل ﻓﻲ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ‪.‬‬

‫‪108‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﻣﺜﺎل ‪ :‬إدﺧﺎل ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ اﻹﻧﺎث ﻓﻲ ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ اﻟﺠﺪد اﻟﻤﻨﺸﺄ ﺣﺪﯾﺜﺎ )‪(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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫‪ -٢‬ﺟﻤﻠﺔ اﻟﺘﻌﺪﯾﻞ ‪Update Statement‬‬


‫ﯾﻤﻜﻨﻨﺎ ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺟﺪول ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ اﺳﺘﺮﺟﺎع )اﺳﺘﻌﻼم ﻓﺮﻋﻲ( ﻛﺎﻟﺘﺎﻟﻲ‬
‫ﻋﺪل راﺗﺐ اﻟﻤﻌﻠﻤﯿﻦ ﻓﻲ ﺟﺪول ‪ Teacher‬ﻟﻠﻤﻌﻠﻤﯿﻦ اﻟﻐﯿﺮ ﻣﺤﺪد ﻟ ﮫ أﻗ ﺴﺎم ﺑﺤﯿ ﺚ ﯾﻜ ﻮن راﺗ ﺒﮭﻢ ﻣﺜ ﻞ ﻣﺮﺗ ﺐ اﻟﻤﻌﻠ ﻢ‬
‫رﻗﻢ ‪٦٦٦٦‬‬
‫‪Query Analyzer‬‬ ‫‪Diagram Pane‬‬
‫‪Update Teacher‬‬
‫‪Set Salary =( Select Salary‬‬
‫‪From Teacher‬‬
‫)‪Where TeacherId=6666‬‬
‫‪Where DeptWork Is Null‬‬

‫‪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‬‬

‫‪Delete From NewTeacher‬‬


‫= ‪where Department‬‬
‫‪( Select Distinct Department‬‬
‫‪From NewTeacher‬‬
‫)'‪Where Name='Salwa‬‬

‫‪Grid Pane‬‬

‫‪Query Analyzer Result‬‬ ‫‪Enterprise Manager Result‬‬

‫ﻻﺣﻆ ﻓﻲ اﻹﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻗﺪ إﺳﺘﺨﺪﻣﻨﺎ اﻟﻜﻠﻤﺔ ‪ Distinct‬ﻷن ھﺬا اﻟﺠﺪول ﻟﯿﺲ ﻟﮫ ﻣﻔﺘﺎح رﺋﯿﺴﻲ وﻗﺪ أدﺧﻠﻨﺎ ﻓﯿ ﮫ‬
‫ﻣﻦ ﻗﻞ ﺑﯿﺎﻧﺎت ﻣﻜﺮرة وﻻﺣﻆ ﻓﻲ ‪ Diagram Pane‬أﻧﻨﺎ إﺧﺘﺮﻧﺎ ‪ Delete‬وﻗﺪ وﺿﻌﺔ أﯾﻘﻮﻧ ﺔ اﻟﻤ ﺴﺢ ﻋﻠ ﻲ ‪All‬‬
‫‪ Columns‬وھﺬا ﻷن اﻹﺳ ﺘﻌﻼم ﯾﺤ ﺬف اﻟ ﺼﻒ ﺑﺄﻛﻤﻠ ﮫ وﻟ ﯿﺲ ﺟ ﺰء ﻣﻨ ﮫ وﻓ ﻲ اﻟﺠ ﺰء ‪ Grid Pane‬ﻓ ﻲ اﻟﺤﻘ ﻞ‬
‫‪ Column‬ﻧﺨﺘ ﺎر اﻟﺤﻘ ﻞ اﻟ ﺬي ﺳ ﻮف ﻧ ﻀﻊ ﻋﻠﯿ ﮫ اﻟ ﺸﺮط وﻓ ﻲ اﻟﺨﺎﻧ ﺔ ‪ Criteria‬ﻧ ﻀﻊ ﺷ ﺮﻃﻨﺎ وھ ﻮ اﻹﺳ ﺘﻌﻼم‬
‫اﻟﻔﺮﻋ ﻲ وﻻﺣ ﻆ أﻧﻨ ﺎ ﯾﻤﻜﻨﻨ ﺎ إﺳ ﺘﺨﺪام ھ ﺬه اﻟﻄﺮﯾﻘ ﺔ ﻓ ﻲ اﻟﻤ ﺴﺢ اﻟﻤﺒﺎﺷ ﺮ ﻓﯿﻤﻜﻨﻨ ﺎ وﺿ ﻊ ﺷ ﺮط ﺑ ﺴﯿﻂ ﻓ ﻲ‬
‫اﻟﺠﺰء ‪ Criteria‬ﻟﯿﺼﺒﺢ ﻣﺴﺢ ﻣﺒﺎﺷﺮ‬

‫‪110‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺛﺎﻟﺜﺎ ‪ :‬ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع اﻟﻤﺘﻘﺪﻣﺔ ﻓﻲ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ ‪.‬‬


‫ھﻨﺎك أﻛﺜﺮ ﻣﻦ ﻧﻮع ﻟﻼﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ وھﻢ ‪:‬‬
‫‪ (١‬اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﯾﺮﺟﻊ ﻗﻄﻌﺔ ﺑﯿﺎﻧﺎت وﺣﯿﺪة ‪.‬‬
‫‪ (٢‬اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﯾﺮﺟﻊ ﻋﻤﻮد ﺑﯿﺎﻧﺎت ‪.‬‬
‫‪ (٣‬اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﯾﺮﺟﻊ أﻛﺜﺮ ﻣﻦ ﻋﻤﻮد ﺑﺎﻛﺜﺮ ﻣﻦ ﺻﻒ ﺑﯿﺎﻧﺎت )ﻻ ﯾﺪﻋﻤﮫ ‪(SQL Server 2000‬‬
‫ﻣﺜﺎل ﻋﻠﻲ اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﯾﺮﺟﻊ ﻗﻄﻌﺔ ﺑﯿﺎﻧﺎت وﺣﯿﺪة ‪.‬‬
‫اﺳﺘﺮﺟﻊ رﺗﺒﮫ و أﺳ ﻢ وﻣﺮﺗ ﺐ ﻛ ﻞ ﻣﻌﻠ ﻢ ﻋﻨ ﺪﻣﺎ ﯾﻜ ﻮن رﺗﺒﺘ ﮫ اﻟﺠﺎﻣﻌﯿ ﺔ ﻣﺜ ﻞ رﺗﺒ ﺖ اﻟﻤﻌﻠ ﻢ ‪ Awad Khalil‬وﻋﻨ ﺪﻣﺎ‬
‫ﯾﻜﻮن ﻣﺮﺗﺒﮫ أﻛﺒﺮ ﻣﻦ ﻣﺘﻮﺳﻂ اﻟﻤﺮﺗﺒﺎت‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬
‫‪Select Rank ,Name , Salary‬‬
‫‪From Teacher‬‬
‫= ‪Where Rank‬‬ ‫‪Dr‬‬
‫‪(Select Rank‬‬
‫‪From Teacher‬‬
‫)'‪Where Name='Awad Khalil‬‬
‫> ‪And Salary‬‬
‫‪(Select AVG(Salary)2781.6‬‬
‫)‪From Teacher‬‬
‫‪Grid Pane‬‬

‫ﻻﺣﻆ أﻧﮫ إﺳﺘﻌﻼم ﻗﺪ ﺗﻌﻮدﻧﺎ ﻋﻠﯿﮫ ﻣﻦ ﻗﺒﻞ وﻟﻜﻨﻨﺎ إﺳﺘﺨﺪﻣﻨﺎ ﻣﻌﮫ داﻟﺔ ﺗﺠﻤﯿﻌﯿﮫ ﻓﻘﻂ‬
‫ﻣﺜﺎل ﻋﻠﻲ اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﯾﺮﺟﻊ ﻋﻤﻮد ﺑﯿﺎﻧﺎت ‪.‬‬
‫ﯾﺴﺘﺨﺪم ﻣﻌﮫ ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ ﻷﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ ‪IN , ANY | SOME , ALL‬‬
‫ﻛﻤﺜﺎل إﺳﺘﺮﺟﻊ رﻗﻢ اﻟﻘﺴﻢ وأﻋﻠﻲ وأﻗﻞ وﻣﺘﻮﺳﻂ رواﺗﺒﮫ ﻋﻨﺪﻣﺎ ﯾﻜ ﻮن ﻣﺘﻮﺳ ﻂ ﻣﺮﺗﺒﺎﺗ ﮫ أﻛﺒ ﺮ ﻣ ﻦ أﻗ ﻞ ﻣﺮﺗ ﺐ ﻓ ﻲ أي‬
‫ﻗﺴﻢ ‪.‬‬
‫‪Query Analyzer‬‬ ‫‪Result‬‬

‫‪Select DeptWork , Min(Salary),‬‬


‫)‪Max(Salary) ,AVG(Salary‬‬
‫‪From Teacher‬‬
‫‪Group By DeptWork‬‬ ‫‪1650 , 1100 , 2000‬‬
‫‪HAVING Avg(Salary) >All‬‬
‫)‪(Select Min(Salary‬‬
‫‪From Teacher‬‬
‫) ‪Group By DeptWork‬‬
‫‪Grid Pane‬‬

‫ﻻﺣﻆ أﻧﮫ اﺳﺘﻌﻼم ﻗﺪ ﺗﻌﻮدﻧﺎ ﻋﻠﯿﮫ ﻣ ﻦ ﻗﺒ ﻞ وﻟﻜ ﻦ اﻟﺠﺪﯾ ﺪ أﻧﻨ ﺎ اﺳ ﺘﺨﺪﻣﻨﺎ اﻻﺳ ﺘﻌﻼم اﻟﻔﺮﻋ ﻲ ﻓ ﻲ اﻟﺠ ﺰء ‪Having‬‬
‫وھﺬا ﻷن اﻟﺸﺮط ھﻨﺎ ﻋﻠﻲ داﻟﺔ ﺗﺠﻤﯿﻌﯿﺔ واﺳﺘﺨﺪﻣﻨﺎ ﻋﻮاﻣﻞ اﻟﻤﻘﺎرﻧﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ أﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ واﻻﺳﺘﻌﻼم‬
‫اﻟﻔﺮﻋﻲ ھﻨﺎ ﯾﺮﺟﻊ أﻛﺜﺮ ﻣﻦ ﻗﯿﻤﺔ ﻛﻤﺎ ھ ﻮ ﻣﻮﺿ ﺢ ﻓ ﻲ اﻟ ﺸﻜﻞ وﻓ ﻲ اﻟﺠ ﺰء ‪ Grid Pane‬ﻻ ﻧﻨ ﺴﻲ ﺑﺎﻟ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ‬
‫اﻟﻤﺎوس واﺧﺘﯿﺎر ‪ Group By‬وﺿﺒﻂ ﺧﺼﺎﺋﺼﮭﺎ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ ووﺿﻊ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻓﻲ اﻟﺠﺰء ‪Criteria‬‬

‫‪111‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫راﺑﻌﺎ ‪ :‬ﺣﻔﻆ ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع ﻓﻲ اﻟﻜﺎﺋﻦ ‪. View‬‬


‫اﻟﻜﺎﺋﻦ ‪: View‬‬
‫ھﻮ ﻋﺒﺎرة ﻋﻦ ﺟﻤﻠﺔ اﺳ ﺘﻌﻼم ﻣﺤﻔﻮﻇ ﺔ ﺑﺎﺳ ﻢ وﺑﻌ ﺪ ذﻟ ﻚ ﯾﻤﻜﻨﻨ ﺎ اﻟﺘﻌﺎﻣ ﻞ ﻣﻌﮭ ﺎ ﻣﺜﻠﮭ ﺎ ﻣﺜ ﻞ اﻟﺠ ﺪول ﻣ ﻊ‬
‫ﺑﻌﺾ اﻟﺘﺤﻔﻈﺎت وﻟﻜﻦ ھﻲ ﻟﯿﺴﺖ ﻛﺎﺋﻦ ﯾﺤﺘﻔﻆ ﺑﺎﻟﺒﯿﺎﻧﺎت وﻟﻜﻦ ھ ﻲ ﻛ ﺎﺋﻦ ﯾﺤ ﺘﻔﻆ ﺑﺠﻤﻠ ﺔ اﻻﺳ ﺘﻌﻼم وﻋﻨ ﺪ اﻟﻨ ﺪاء ﻋﻠﯿ ﮫ‬
‫ﯾﻨﻔﺬ اﻟﺠﻤﻠﺔ اﻟﻤﺤﻔﻮﻇﺔ ﺳﻮاء ﻛﺎﻧﺖ ھﺬه اﻟﺠﻤﻠﺔ ﻋﻠﻲ ﺟﺪول أو أﻛﺜﺮ ‪.‬‬
‫أوﻻ ‪ :‬ﻟﻤﺎذا ﻧﺴﺘﺨﺪم اﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇﺔ‪.‬‬
‫§ ﻟﺘﻘﯿﺪ ﻋﻤﻠﯿﺎت اﻟﻮﺻﻮل ﻟﻠﺒﯿﺎﻧﺎت ﻣﻦ ﺧﻼل اﻟﻤﺴﺘﺨﺪﻣﯿﻦ ‪.‬‬
‫§ ﻟﺘﺴﮭﯿﻞ ﻋﻤﻠﯿﺎت اﻻﺳﺘﻌﻼم اﻟﻤﺘﻜﺮرة واﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﻌﻘﺪة ‪.‬‬
‫§ ﻻﺳﺘﻘﻼل اﻟﺒﯿﺎﻧﺎت ﻋﻦ ﻣﻨﺒﻌﮭﺎ اﻷﺻﻠﻲ )اﻟﺠﺪول أو اﻟﺠﺪاول( ‪.‬‬
‫§ ﻹﯾﺠﺎد أﻛﺜﺮ ﻣﻦ اﺳﺘﻌﻼم ﻣﺤﻔﻮظ ﺑﺄﻛﺜﺮ ﻣﻦ ﻃﺮﯾﻘﺔ ﻟﻨﻔﺲ اﻟﺒﯿﺎﻧﺎت ‪.‬‬
‫ﺛﺎﻧﯿﺎ ‪ :‬أﻧﻮاع اﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇﺔ واﻻﺧﺘﻼف ﻣﺎ ﺑﯿﻨﮭﻢ‪.‬‬
‫ھﻢ ﻧﻮﻋﺎن ‪:‬‬
‫‪ (١‬اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ اﻟﺒﺴﯿﻂ ‪Simple Views‬‬
‫‪ (٢‬اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ اﻟﻤﺮﻛﺐ ‪Complex Views‬‬
‫ﻣﻘﺎرﻧﺔ ﺑﯿﻨﮭﻢ‬
‫اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ اﻟﻤﺮﻛﺐ‬ ‫اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ اﻟﺒﺴﯿﻂ‬ ‫اﻟﻤﯿﺰة‬
‫ﺟﺪول أو أﻛﺜﺮ ﻣﻦ ﺟﺪول‬ ‫ﺟﺪول واﺣﺪ‬ ‫ﻋﺪد اﻟﺠﺪاول‬
‫ﯾﺘﻌﺎﻣﻞ وﻟﻜﻦ ﻓﻲ أوﻗﺎت ﻗﻠﯿﻠﺔ‬ ‫ﯾﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ‬ ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ ‪DML‬‬
‫)اﻟﺤﺬف واﻹﺿﺎﻓﺔ واﻟﺘﻌﺪﯾﻞ (‬
‫ﯾﺤﺘﻮي ﻋﻠﻲ دوال‬ ‫ﻻ ﯾﺤﺘﻮي ﻋﻠﻲ دوال‬ ‫اﺣﺘﻮاﺋﮫ ﻋﻠﻲ دوال‬
‫ﻻ ﯾﺤﺘﻮي ﻋﻠﻲ دوال إﺣﺼﺎﺋﯿﺔ ﯾﺤﺘﻮي ﻋﻠﻲ دوال إﺣﺼﺎﺋﯿﺔ‬ ‫اﺣﺘﻮاﺋﮫ ﻋﻠﻲ دوال إﺣﺼﺎﺋﯿﺔ‬

‫اﻷوﻗﺎت اﻟﺘﻲ ﯾﻤﻜﻦ ﻟﻼﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ اﻟﻤﺮﻛﺐ أن ﯾﺘﻌﺎﻣﻞ ﻣﻊ أواﻣﺮ ‪. DML‬‬


‫أوﻻ ‪ :‬ﯾﻤﻜﻨﻨﺎ اﻟﺤﺬف إن ﻛﺎن اﻻﺳﺘﻌﻼم ﻻ ﯾﺤﺘﻮي ﻋﻠﻲ اﻟﺘﺎﻟﻲ‬
‫‪ -‬أي دوال ﺗﺠﻤﯿﻌﯿﺔ إﺣﺼﺎﺋﯿﺔ ‪Group Functions‬‬
‫‪ -‬اﻟﺠﺰء ‪Group By Clause‬‬
‫‪ -‬اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ اﻟﺨﺎﺻﺔ ﺑﻌﺪم اﻟﺘﻜﺮار ‪Distinct‬‬
‫‪ -‬اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪ Top‬اﻟﺨﺎﺻﺔ ﺑﺎﺳﺘﺮﺟﺎع ﻋﺪد ﻣﻌﯿﻦ ﻣﻦ اﻟﺼﻔﻮف‬
‫ﺛﺎﻧﯿﺎ ‪ :‬ﯾﻤﻜﻨﻨﺎ اﻟﺘﻌﺪﯾﻞ وﻟﻜﻦ أن ﻛﺎن اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ﻻ ﯾﺤﺘﻮي ﻋﻠﻲ اﻟﺘﺎﻟﻲ‬
‫‪ -‬ﻧﻔﺲ اﻟﺸﺮوط اﻟﺨﺎﺻﺔ ﺑﺎﻟﺤﺬف ﺑﺎﻹﺿﺎﻓﺔ إﻟﻲ اﻟﺘﺎﻟﻲ‬
‫‪ -‬ﻋﻨﺪ وﺟﻮد ﺣﻘﻞ ﻣﺤﺴﻮب أو ﻣﻦ ﺧﻼل ﺗﻌﺒﯿﺮ ﻣﺎ ‪Expressions‬‬
‫ﺛﺎﻟﺜﺎ ‪ :‬ﯾﻤﻜﻨﻨﺎ اﻹﺿﺎﻓﺔ وﻟﻜﻦ أن ﻛﺎن اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ﻻ ﯾﺤﺘﻮي ﻋﻠﻲ اﻷﺗﻲ‬
‫‪ -‬ﻧﻔﺲ اﻟﺸﺮوط اﻟﺨﺎﺻﺔ ﺑﺎﻟﺤﺬف واﻟﺘﻌﺪﯾﻞ ﺑﺎﻹﺿﺎﻓﺔ إﻟﻲ اﻟﺘﺎﻟﻲ‬
‫‪ -‬وﺟﻮد ﺣﻘﻞ ﻋﻠﯿﮫ ﻗﯿﺪ ‪ Not Null‬ﻟﻢ ﯾﺴﺘﺮﺟﻊ ﺧﻼل اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪.‬‬

‫وﯾﻤﻜﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻣﻦ ﺧﻼل ‪Enterprise Manager Or Query Analyzer‬‬


‫ﻋﻠﻲ أﺳﺎس اﻟﺘﺮﺗﯿﺐ اﻟﺘﺎﻟﻲ ‪:‬‬
‫‪. Creating Views‬‬ ‫‪ .١‬ﻛﯿﻔﯿﺔ إﻧﺸﺎء اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ‬
‫‪ .٢‬ﻛﯿﻔﯿﺔ اﺳﺘﺮﺟﺎع ﺑﯿﺎﻧﺎت ﻣﻦ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪. Retrieve data through a view‬‬
‫‪ .٣‬ﻛﯿﻔﯿﺔ اﻟﻮﺻﻮل ﻟﻮﺻﻒ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪. Describe a View‬‬
‫‪ .٤‬ﻛﯿﻔﯿﺔ ﺗﻐﯿﺮ أﺳﻢ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪. Rename Views‬‬
‫‪. Altering Views‬‬ ‫‪ .٥‬ﻛﯿﻔﯿﺔ ﺗﻌﺪﯾﻞ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ‬
‫‪ .٦‬ﻛﯿﻔﯿ ﺔ اﻹدراج واﻟﺤ ﺬف واﻟﺘﻌ ﺪﯾﻞ اﻟﺒﯿﺎﻧ ﺎت ﻣ ﻦ ﺧ ﻼل اﻻﺳ ﺘﻌﻼم اﻟﻤﺤﻔ ﻮظ ‪Insert , Update and‬‬
‫‪. Delete data through a view‬‬
‫‪. Dropping Views‬‬ ‫‪ .٧‬ﻛﯿﻔﯿﺔ ﺣﺬف اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ‬

‫‪112‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫أوﻻ ‪ :‬ﻛﯿﻔﯿﺔ إﻧﺸﺎء اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪. Creating Views‬‬


‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻹﻧﺸﺎء اﺳﺘﻌﻼم ﻣﺤﻔﻮظ ‪Syntax‬‬
‫أﺳﻢ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪Create View‬‬
‫] )… ‪ ,‬أﺳﻢ اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ ‪ ,‬أﺳﻢ اﻟﺤﻘﻞ اﻷول ( [‬
‫‪AS‬‬
‫أي ﺟﻤﻠﺔ اﺳﺘﻌﻼم‬
‫] ‪[ With Check Option‬‬
‫ﺗﻔﺴﯿﺮ اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫ﻧﻜﺘﺐ اﻟﻜﻠﻤ ﺔ اﻷﺳﺎﺳ ﯿﺔ ‪ Create View‬وﺑﻌ ﺪھﺎ ﻧ ﻀﻊ أﺳ ﻤﺎ ﻟﻼﺳ ﺘﻌﻼم واﻟﺠ ﺰء اﻻﺧﺘﯿ ﺎري اﻟ ﺬي ﯾﻠﯿ ﮫ ﯾﻤﻜﻨﻨ ﺎ ﻣ ﻦ‬
‫ﺧﻼﻟﮫ ﺗﺤﺪﯾﺪ أﺳﻤﺎء اﻷﻋﻤﺪة ﻓﻲ ھﺬا اﻻﺳﺘﻌﻼم وأن ﻟﻢ ﯾﺴﺘﻌﻤﻞ ﺳﻮف ﺗﻜ ﻮن أﺳ ﻤﺎء ﺣﻘﻮﻟ ﮫ ﻣﺜ ﻞ اﻷﺳ ﻤﺎء ﻓ ﻲ ﺟﻤﻠ ﺔ‬
‫اﻻﺳ ﺘﺮﺟﺎع ﺳ ﻮاء ﻛﺎﻧ ﺖ اﻷﺳ ﻤﺎء اﻷﺻ ﻠﯿﺔ أو أﺳ ﻤﺎء ﻣ ﺴﺘﻌﺎرة وﺑﻌ ﺪھﺎ ﻧﻜﺘ ﺐ اﻟﻜﻠﻤ ﺔ اﻷﺳﺎﺳ ﯿﺔ ‪ AS‬وﺑﻌ ﺪھﺎ ﺟﻤﻠ ﺔ‬
‫اﻻﺳ ﺘﻌﻼم وھ ﻲ أي ﺟﻤﻠ ﺔ ﺗﺒ ﺪأ ب ‪ Select‬ﻛﻤ ﺎ ﻧﺮﯾ ﺪ واﻟﻜﻠﻤ ﺔ اﻷﺧﯿ ﺮة اﻻﺧﺘﯿﺎرﯾ ﺔ ‪With Check Option‬‬
‫ﺗﻀﺎف إذا أردﻧﺎ اﻟﺘﺰام اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ﺑﺠﻤﯿﻊ اﻟﻘﯿﻮد اﻟﻤﺮﺗﺒﻂ ﺑﮭﺎ اﻟﺠﺪول وھﺬا أﻓﻀﻞ ﻧﻀﻊ ھﺬه اﻟﺠﻤﻠﺔ ﻓﻲ ﺣﺎﻟﺔ‬
‫اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ اﻟﺒﺴﯿﻂ وإن أدﺧﻠﻨﺎ أي ﺷﺊ ﻻ ﯾﺠﻌﻞ اﻟﺠﺪول ﻣﺘﺎح ﻟﻌﻤﻠﯿﺎت ‪ DML‬ﻻ ﯾﻤﻜﻨﻨﺎ وﺿﻊ ھﺬه اﻟﺠﻤﻠﺔ ‪.‬‬
‫‪. Creating Views‬‬ ‫‪ .١‬ﻛﯿﻔﯿﺔ إﻧﺸﺎء اﻟـــ ‪View‬‬
‫‪Query Analyzer‬‬
‫‪Create View Teacher_1 as‬‬
‫‪Select Top 50 Percent * from Teacher‬‬
‫‪Enterprise Manager‬‬

‫ﻻﺣ ﻆ أﻧﻨ ﺎ ﻓ ﻲ اﻟﺠ ﺰء اﻟﺨ ﺎص ‪ 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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫إﻧﺸﺎء اﺳﺘﻌﻼم ﻣﺤﻔﻮظ ﺑﺎﻷﺟﺰاء اﻻﺧﺘﯿﺎرﯾﺔ‬


‫‪Query Analyzer‬‬
‫‪Create View Teacher_2‬‬
‫)‪( Code , Name , Salary , Dept , Super‬‬
‫‪AS‬‬
‫‪Select TeacherId , Name, Salary , DeptWork , Supervisee‬‬
‫‪From Teacher‬‬
‫‪With Check Option‬‬
‫‪Enterprise Manager‬‬

‫ﻻﺣﻆ أﻧﻨﺎ وﺿﻌﻨﺎ أﺳﻤﺎء ﺟﺪﯾﺪة ﺑﻌﺪ أﺳﻢ اﻻﺳ ﺘﻌﻼم اﻟﻤﺤﻔ ﻮظ وﻗﺒ ﻞ ﻛﻠﻤ ﺔ ‪ 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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪SQL Server 2000 -- By Mr. Adel Sabour‬‬

‫ﺑﯿﻤﯿﻦ اﻟﻤﺎوس وأﻧﺖ ﻓﻲ اﻟﺠﺰء ‪ 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‬‬

‫‪. Altering Views‬‬ ‫ﺧﺎﻣﺴﺎ ‪ :‬ﻛﯿﻔﯿﺔ ﺗﻌﺪﯾﻞ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ‬


‫ﻓﻲ ‪ Enterprise Manager‬ﻗﺪ ﺗﻌﻠﻤﻨﺎھﺎ ﺑﺎﻟﻮﻗﻮف ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻹﺳﺘﻌﻼم اﻟﻤﺮاد ﺛﻢ إﺧﺘﯿﺎر ‪Design‬‬
‫‪ View‬وﻣﻨﮭﺎ ﻧﻌﺪل ﻣﺎ ﯾﻠ ﺰم وﻓ ﻲ ‪ Query Analyzer‬ﻧ ﺴﺘﺨﺪم اﻟﻜﻠﻤ ﺔ ‪ Alter‬ﺑ ﺪﻻ ﻣ ﻦ ‪ Create‬وﻧ ﺬﻛﺮ أﺳ ﻢ‬
‫اﻻﺳﺘﻌﻼم اﻟﻤﻮﺟﻮد وﻧﻜﺘﺐ اﻟﺠﻤﻠﺔ اﻟﺠﺪﯾﺪة اﻟﺘﻲ ﻧﺮﯾﺪھﺎ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل‬

‫‪Alter View Teacher1‬‬


‫‪as‬‬
‫‪Select Top 5 * from Teacher‬‬

‫‪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‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


SQL Server 2000 -- By Mr. Adel Sabour

. Dropping Views ‫ ﻛﯿﻔﯿﺔ ﺣﺬف اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ‬: ‫ﺳﺎﺑﻌﺎ‬


Delete ‫ ﻛﻤ ﺎ ﺗﻌﻠﻤﻨ ﺎ ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ اﻻﺳ ﺘﻌﻼم اﻟﻤ ﺮاد ﺛ ﻢ ﻧﺨﺘ ﺎر‬Enterprise Manager ‫ﻓ ﻲ‬
‫ ﻟﻠﺤﺬف ﻛﺎﻟﺘﺎﻟﻲ‬Drop View ‫ ﻧﺴﺘﺨﺪم اﻟﻜﻠﻤﺔ‬Query Analyzer ‫ﻟﺤﺬف أﻣﺎ ﻓﻲ‬
Drop View Teacher1

SQL Server 2000 -- By Mr. Adel Sabour

116

PDF created with pdfFactory Pro trial version www.pdffactory.com


PDF created with pdfFactory Pro trial version www.pdffactory.com
‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫‪Introduction Into ASP.NET‬‬ ‫ﻣﻘﺪﻣﺔ ﻋﻦ ﺗﻘﻨﯿﺔ ‪ASP.NET‬‬

‫ﺗﻌﺘﻤ ﺪ ﻧﻤ ﺎذج ‪ 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‬إﻟﻲ اﻟﻌﻤﯿﻞ ﻟﺘﻌﺮض ﻛﺼﻔﺤﺔ ﺛﺎﺑﺘﺔ ﻋﺎدﯾﺔ ﻣﻦ وﺟﮭ ﺔ ﻧﻈ ﺮ اﻟﻌﻤﯿ ﻞ وﻟﻜﻨﮭ ﺎ ﺻ ﻔﺤﺎت ﺗﻔﺎﻋﻠﯿ ﺔ ﻣ ﻦ‬
‫وﺟﮭﺔ ﻧﻈﺮ اﻟﺨﺎدم ﻷﻧﮭﺎ ﻋﻨﺪﻣﺎ ﺗﻄﻠﺐ ﻣﺮة أﺧﺮي ﺗﺄﺗﻲ ﺑﺒﯿﺎﻧﺎت ﺟﺪﯾﺪة ﻣﻦ ﻧﻔﺲ اﻟﻤﻠﻒ ذاﺗﮫ ‪.‬‬

‫‪١١٧‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ﺛﺎﻟﺜﺎ ‪ :‬ﺗﻮﺿﯿﺢ اﻟﻌﻨﺎﺻﺮ اﻷﺳﺎﺳﯿﺔ‪:‬‬

‫‪ q‬اﻟﻄﺒﻘﺔ اﻷﺳﺎﺳﯿﺔ اﻷوﻟﻲ ‪:‬‬


‫ھ ﻲ ﻋ ﻦ اﻟﻌﻤﯿ ﻞ وﻛ ﻞ ﻣﺘﻄﻠﺒﺎﺗﮭ ﺎ ھ ﻲ ﻣ ﺴﺘﻌﺮض ﻣ ﻦ أي ﻧ ﻮع ﻋﻠ ﻲ ﺳ ﺒﯿﻞ اﻟﻤﺜ ﺎل‪Browser (Internet :‬‬
‫)‪Explorer – Netscape‬‬

‫‪ q‬اﻟﻄﺒﻘﺔ اﻟﺜﺎﻧﯿﺔ ‪:‬‬


‫وھ ﻲ اﻟﺨ ﺎدم وﻣﺘﻄﻠﺒﺎﺗ ﮫ وﺟ ﻮد ﺑﺮﻧ ﺎﻣﺞ ﺑ ﺴﯿﻂ ﯾ ﺴﻤﻲ ‪ Web Server‬ﻣﺜ ﻞ ‪Internet Information‬‬
‫)‪ Services(IIS‬ﻟﺘﻤﺜﯿﻞ اﻟﺨﺎدم وﺳﻮف ﻧﺮي ﻛﯿﻔﯿﺔ ﺗﺠﮭﯿﺰه ﻓﯿﻤﺎ ﺑﻌ ﺪ وﻣﻠﻔ ﺎت ‪ ASP.NET‬وﺑﻌ ﺾ اﻟﻤﻜﻮﻧ ﺎت‬
‫اﻟﺮﺋﯿﺴﯿﺔ ﺣﺴﺐ اﻟﻠﻐﺔ اﻟﻤﺴﺘﺨﺪﻣﺔ واﻟﻤﻜﺎﺗﺐ اﻟﻤﺘﻌﺎﻣﻠﺔ ﻟﮭﺎ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل اﺳﺘﺨﺪام ‪ADO.NET -ActiveX‬‬
‫‪ Data Objects‬وھﻮ اﻟﺒﺮﺗﻮﻛﻮل اﻷﺳﺎﺳﻲ ﻟﻠﻮﺻﻮل إﻟﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وﻣﻌﺎﻟﺠﺘﮭﺎ وﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﮫ ﻣﻦ ﺧﻼل‬
‫اﻟﻜﻮد أو ﻣﻦ ﺧﻼل اﻷدوات اﻟﺮﺳﻤﯿﺔ اﻟﺒﺴﯿﻄﺔ داﺧﻞ ‪ Visual Studio‬ﻛﻤﺎ ﺳﻨﺮي أن ﺷﺎء اﷲ ‪.‬‬

‫اﻟﻄﺒﻘﺔ اﻟﺜﺎﻟﺜﺔ ‪:‬‬ ‫‪q‬‬


‫وھﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﺼﻠﺔ ﺑﺎﻟﻤﻠﻔﺎت اﻟﻨﺸﻄﺔ )ﻣﻠﻔﺎت ‪ ( ASP.NET‬وﯾﻤﻜﻦ أن ﺗﻜﻮن ‪ Oracle‬أو ‪SQL‬‬
‫‪ Server‬أو ‪ Access‬وﯾﻜﻮن اﻟﻤ ﺰود اﻻﻓﺘﺮاﺿ ﻲ اﻟ ﺬي ﺗﻌﻤ ﻞ ﻣﻌ ﮫ ‪ VB.NET‬ھ ﻮ ‪Microsoft SQL‬‬
‫‪ Server‬اﻹﺻﺪار ‪ ٧‬وﻣﺎ ﯾﻠﯿ ﮫ وﺗ ﺴﺘﺨﺪم ‪ ADO.NET‬اﻟﻤﺨﺘ ﺼﺔ ﺑﺎﻟﺘﻌﺎﻣ ﻞ ﻣ ﺎﺑﯿﻦ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت وﺻ ﻔﺤﺎت‬
‫‪ SQL‬وﺗ ﺴﺘﺨﺪم اﻟﻜ ﺎﺋﻦ‬ ‫اﻟﻮﯾ ﺐ اﻟﻜ ﺎﺋﻦ ‪ SQLConnection‬ﻟﻠﻌﻤ ﻞ ﻣ ﻊ ‪Server‬‬
‫‪ OleDbConnection‬ﻟﻠﻌﻤ ﻞ ﻣ ﻊ أي ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت أﺧ ﺮي ‪ ،‬وﻗ ﺪ أﻇﮭ ﺮت اﻟﺪراﺳ ﺎت أن اﻟﻮﺻ ﻮل ﻟﻘﻮاﻋ ﺪ‬
‫ﺑﯿﺎﻧﺎت ‪ SQL Server‬ﻣ ﻦ ﺧ ﻼل ‪ VB.NET‬أﺳ ﺮع ﺑﻨ ﺴﺒﺔ ‪ %٧٠‬ﻣ ﻦ ﻗﻮاﻋ ﺪ اﻟﺒﯿﺎﻧ ﺎت اﻷﺧ ﺮى اﻟﺨﺎﺻ ﺔ ب‬
‫‪ OleDb‬اﻟﻘﯿﺎﺳﯿﺔ ‪.‬‬

‫‪١١٨‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫راﺑﻌﺎ ‪ :‬اﻹﻃﺎر اﻟﻌﺎم ﻟﺘﻮﺻﯿﻒ اﻟﺒﻨﺎء اﻷﺳﺎﺳﻲ ﻟﺒﯿﺌﺔ اﻟﺘﺸﻐﯿﻞ اﻟﺤﺎﺳﺐ واﻟﻌﻤﯿﻞ‪.‬‬

‫ﻻﺣ ﻆ ﻣﻌ ﻲ ﻓ ﻲ اﻟﺠ ﺰء اﻷﯾ ﺴﺮ ﻣ ﻦ اﻟ ﺸﻜﻞ وھ ﻮ اﻟﺠﺎﻧ ﺐ اﻟﻤﺨ ﺘﺺ ﺑﺎﻟﻌﻤﯿ ﻞ ‪ Client Side‬وھ ﻮ ﺣﺎﺳ ﺐ ﻟﺪﯾ ﮫ‬
‫ﻣﺘﺼﻔﺢ ‪ Browser‬ﻣﻦ أي ﻧﻮع ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜ ﺎل ‪ Internet Explorer‬أو ‪ Netscape‬ﯾ ﺼﺪر ھ ﺬا‬
‫اﻟﺤﺎﺳﺐ ﻃﻠﺐ ﯾﺪﻋﻲ ‪ Request‬وﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ أن ھ ﺬا اﻟﻄﻠ ﺐ ﻣﺤﺘ ﻮي ﻋﻠ ﻲ أﺳ ﻢ اﻟﻤﻮﻗ ﻊ وأﺳ ﻢ اﻟﺒﺮﻧ ﺎﻣﺞ‬
‫اﻟﻤﻄﻠﻮب )ﺻﻔﺤﺔ اﻟﻮﯾﺐ اﻟﻤﻌﺎﻟﺠﺔ ﻟﻠﺒﯿﺎﻧﺎت( وﺑﻌﺾ اﻟﻤﺘﻐﯿ ﺮات اﻟﺘ ﻲ ﺗﺤﻤ ﻞ اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ أدﺧﻠﮭ ﺎ اﻟﻤ ﺴﺘﺨﺪم أو‬
‫اﻟﺘﻲ ﺗﻌﺎﻣﻞ ﻣﻌﮭﺎ ‪.‬‬
‫وﻟﻮﺻﻮل ھﺬا اﻟﻄﻠﺐ إﻟﻲ ﺟﺎﻧﺐ اﻟﺨﺎدم ‪ Server Side‬ﯾﻜﻮن ھ ﺬا ﻣ ﻦ ﺧ ﻼل ﺷ ﺒﻜﺔ ‪ Network‬ﺳ ﻮاء ﻛﺎﻧ ﺖ‬
‫ھ ﺬه اﻟ ﺸﺒﻜﺔ ھ ﻲ ‪ Internet‬أو ‪ Intranet‬أو ﻣ ﻦ ﺧ ﻼل اﻟﺒﺮﺗﻮﻛ ﻮل ‪ TCP/IP‬أو أي ﺷ ﺒﻜﮫ ﺗﻜ ﺎﻓﺌﮭﻢ وﻣ ﻦ‬
‫ﺧﻼل ھﺬه اﻟﺸﺒﻜﺔ ﯾﺘﻢ اﻻﺗﺼﺎل ﺑﺎﻟﺨﺎدم ﻣﺮﺳﻼ إﻟﯿﮫ اﻟﺒﯿﺎﻧﺎت اﻟﺴﺎﺑﻖ ﺷﺮﺣﮭﺎ ﻋﻠﻲ اﻟﻄﻠﺐ ‪.‬‬
‫ﯾﻮﺟﺪ ﻋﻠﻲ اﻟﺨﺎدم ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﻠﻔ ﺎت ﯾﻨﻔ ﺬ اﻟﻤﻠ ﻒ اﻟﻤﻄﻠ ﻮب ﻣ ﻦ اﻟﻌﻤﯿ ﻞ وھ ﺬا اﻟﻤﻠ ﻒ اﻟ ﺬي ﯾﻨﺘﮭ ﻲ ﺑﺎﻻﻣﺘ ﺪاد‬
‫‪ .aspx‬ﻗﺪ ﯾﻜﻮن ﻣﺨﺘﺺ ﺑﺎﻻﺗﺼﺎل ﺑﻘﺎﻋﺪة ﺑﯿﺎﻧ ﺎت وأن ﻛ ﺎن ﻓﯿﺘ ﺼﻞ ﻣ ﻦ ﺧ ﻼل ﻛ ﺎﺋﻦ ﯾ ﺪﻋﻲ ‪Connection‬‬
‫‪ Object‬ﻟﯿﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻘﺎﻋﺪة ﺑﻜﻞ ﺗﻔﺎﺻﯿﻠﮭﺎ وﻓ ﻲ اﻟﻨﮭﺎﯾ ﺔ ﯾ ﺘﻢ اﻟﻌﻤ ﻞ ﻋﻠ ﻲ ﺣ ﺴﺐ اﻻﻛ ﻮاد اﻟﻤﻮﺟ ﻮدة وﻟﻜﻨﮭ ﺎ ﻻ‬
‫ﺗﺮﺳﻞ ﻣﺒﺎﺷﺮة إﻟ ﻲ اﻟﻌﻤﯿ ﻞ ﻷن اﻟﺒﯿﺎﻧ ﺎت اﻟﺘ ﻲ ﺑﮭ ﺎ ﻻ ﯾ ﺴﺘﻄﯿﻊ ﺗﻔ ﺴﯿﺮھﺎ اﻟﻤﺘ ﺼﻔﺢ اﻟﺨ ﺎص ﺑﺎﻟﻌﻤﯿ ﻞ ﻓﺘﺮﺳ ﻞ إﻟ ﻲ‬
‫ﻣﺘ ﺮﺟﻢ ﺧ ﺎص ﺑﺘﺤﻮﯾ ﻞ ھ ﺬا اﻷﻛ ﻮاد إﻟ ﻲ ﻟﻐ ﺔ ‪ HTML‬وﻗ ﺪ ﯾﻜ ﻮن ﻣﻌﮭ ﺎ ﻟﻐ ﺎت ﻣﺨﻄﻮﻃ ﺎت ‪Scripting‬‬
‫‪ Language‬وﯾﺮﺳﻠﮭﺎ ﻟﻠﻌﻤﯿﻞ ﻋﻠﻲ ھﯿﺌﺔ رد ‪. Response‬‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫‪١١٩‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫ﻋﻤﻠﯿﺔ اﻷﻋﺪاد ‪Visual Studio Setup‬‬

‫أوﻻ ‪ :‬ﺗﺠﮭﯿﺰ اﻟﺤﺎﺳﺐ اﻟﺸﺨﺼﻲ ﻟﯿﻌﻤﻞ ﻛﺨﺎدم ‪Web Server‬‬


‫)‪Internet Information Services (IIS‬‬

‫ﻟﻜﻲ ﻧﺴﺘﻄﯿﻊ أن ﻧﻌﻤﻞ وﻧﺘﻌﺎﻣﻞ ﻣﻊ ﺻ ﻔﺤﺎت ‪ ASP.NET‬اﻟﺨﺎﺻ ﺔ ﺑﻨ ﺎ ﻻﺑ ﺪ ﻣ ﻦ وﺟ ﻮد ‪ Server‬ﯾﺤﻤ ﻞ ﻋﻠﯿ ﮫ‬


‫اﻟﻤﻮﻗﻊ ﺛﻢ ﻧﺘﻌﺎﻣﻞ ﻣﻌﮫ ﻣﻦ ﺧﻼل ﻣﺘﺼﻔﺢ ﻣﺎ ﻟﻨﻤﺜﻞ اﻟﺠﺰء اﻟﺘﺠﺮﯾﺒﻲ ﻛﻌﻤﯿﻞ وﻟﺘﺠﮭﯿﺰ اﻟﺤﺎﺳﺐ اﻟﺸﺨ ﺼﻲ اﻟﺨ ﺎص‬
‫ﺑﻚ ﻟﻜﻲ ﯾﻌﻤﻞ ﻛﺨﺎدم ﯾﻮﺟﺪ ‪ software‬ﺑﺴﯿﻂ ﯾ ﺄﺗﻲ ﻣ ﻊ ﻧ ﺴﺨﺔ ال‪ windows‬وﺑ ﺎﻟﻄﺒﻊ اﻟﺤﺎﺳ ﺐ ﻟ ﺪﯾﻚ ﯾﻌﺘﺒ ﺮ‬
‫ﻋﻤﯿﻞ ﻷﻧﮫ ﻣﺤﺘ ﻮي ﻋﻠ ﻲ اﻷﻗ ﻞ ﻋﻠ ﻲ ‪ Internet Explorer‬وﻣ ﺎدام اﻟﺤﺎﺳ ﺐ اﻟﺨ ﺎص ﺑﻜ ﺴﻮف ﯾ ﺼﺒﺢ ﺧ ﺎدم‬
‫وﻋﻤﯿﻞ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗ ﺖ ‪ server and client‬إذن ﻧﺘﻔ ﻖ أﻧ ﮫ إذا ﻛﻨ ﺖ ﺗﻌﻤ ﻞ ﻋﻠ ﻲ ال‪ Hard Disk‬أو ﻣ ﻦ‬
‫ﺧ ﻼل ﺑﺮﻧ ﺎﻣﺞ ‪ Visual Studio‬ﻓﺄﻧ ﺖ ﺗﻌﻤ ﻞ ك‪ Server‬وﻋﻨ ﺪﻣﺎ ﺗﻌﻤ ﻞ ﻋﻠ ﻲ ال‪ browser‬ﺑﻜﺘﺎﺑ ﺔ أﺳ ﻢ‬
‫اﻟﺨﺎدم ﻛﻤﺎ ﺳﻨﺮي إذن أﻧﺖ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻋﻤﯿﻞ ‪.‬‬
‫ﻃﺮﯾﻘﺔ ﺗﺠﮭﯿﺰ اﻟﺤﺎﺳﺐ ﻛﺨﺎدم ﻋﻠﻲ وﯾﻨﺪوز ‪ XP‬ﻣﻦ ﺧﻼل ‪IIS‬‬

‫ﻣ ﻦ ﻗﺎﺋﻤ ﺔ ‪ Start‬أﺧﺘ ﺎر ‪ Control Panel‬أو ﻣ ﻦ ‪ Settings Control Panel‬ﺛ ﻢ أﺧﺘ ﺎر اﻷﯾﻘﻮﻧ ﺔ‬


‫اﻟﺨﺎﺻﺔ ‪ Add or Remove Programs‬ﺑﻀﻐﻄﺘﯿﻦ ﻋﻠﻲ اﻟﻤﺎوس ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ‪.‬‬

‫وﻣﻦ اﻟﺸﺎﺷﺔ ﻧﺨﺘﺎر ﻋﻠ ﻲ اﻟﺠﺎﻧ ﺐ اﻷﯾﻤ ﻦ ‪ Add/Remove Windows Components‬ﺳ ﻮف ﺗﻈﮭ ﺮ‬


‫ﻟﻨﺎ ﺷﺎﺷﺔ أﺧﺮي ﻧﺨﺘﺎر ﻣﻨﮭﺎ )‪ Internet Information Services(IIS‬ﺛﻢ ﻧﻀﻐﻂ ‪Next‬‬

‫‪١٢٠‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﻻﺣﻆ أﯾﻀﺎ أﻧﻨﺎ ﻣﺤﺪدﯾﻦ ‪ Internet Explorer‬أﯾﻀﺎ ﺳ ﻮف ﯾ ﺘﻢ اﻟﺘﺤﻤﯿ ﻞ وھ ﺬا ﻋﻠ ﻲ أﺳ ﺎس أﻧ ﻚ وﺿ ﻌﺖ‬


‫أﺳﻄﻮاﻧﺔ اﻟﻮﯾﻨﺪوز اﻟﺨﺎﺻﺔ ﺑﻚ ﻓﻲ ﻣﺸﻐﻞ اﻷﻗﺮاص ﺳﻮف ﯾﺒﺪأ ﻓﻲ اﻟﺘﺤﻤﯿﻞ ﺣﺘﻰ ﺗﻀﻐﻂ ‪Finish‬‬
‫وﺑﮭﺬا ﯾﻜﻮن اﻟﺤﺎﺳﺐ ﻟﺪﯾﻚ ﺑﻤﻘﺪوره اﻟﻌﻤﻞ ﻛﺨﺎدم وﯾﺐ و أﯾﻀﺎ ﻛﻌﻤﯿﻞ‬

‫واﻵن ﯾﻤﻜﻨﻨﺎ ﻋﻤﻞ ﻧﺸﺮ ﻟﻤﻠﻔﺎت ‪Visual Studio‬‬


‫ﺿﻊ أﺳﻄﻮاﻧﺔ ‪ DVD‬اﻟﺨﺎﺻﺔ ﺑﺎﻟﺒﺮﻧﺎﻣﺞ أو ﺟﮭﺰ ﺑﺮﻧﺎﻣﺞ ﺧﺎص ﺑﺎﻷﺳ ﻄﻮاﻧﺎت اﻟﻮھﻤﯿ ﺔ إن ﻟ ﻢ ﯾﻜ ﻦ ﻟ ﺪﯾﻚ ﻗ ﺎرئ‬
‫‪ DVD‬وﻛﺎﻧﺖ ﻟﺪﯾﻚ اﻟﻨﺴﺨﺔ ‪ .img‬أو ﻧﻮﻋﺎ أﺧﺮ ﻣﻀﻐﻮﻃﺎ ﻟﻠﺒﺮﻧ ﺎﻣﺞ أو أن ﻛ ﺎن اﻟﺒﺮﻧ ﺎﻣﺞ ﻟ ﺪﯾﻚ ﻋﻠ ﻲ أﻛﺜ ﺮ ﻣ ﻦ‬
‫اﺳﻄﻮاﻧﺔ ﺿﻊ اﻻﺳﻄﻮاﻧﺔ اﻷوﻟﻲ و ﺳﯿﻜﻮن اﻟﺒﺪاﯾﺔ ﻓﻲ اﻟﺘﺤﻤﯿﻞ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﺳﻮف ﺗﻨﺘﻈﺮ ﻗﻠﯿﻼ ﻓﺄﻧﮫ ﯾﺤﺎول ﻣﻌﺮﻓﺔ ھﻞ اﻟﺤﺎﺳﺐ ﻟﺪﯾﻚ ﻣﺠﮭﺰ ﺑﻜﻞ اﻹﻣﻜﺎﻧﯿ ﺎت ﻟﻜ ﻲ ﯾ ﺘﻢ ﺗﺤﻤﯿ ﻞ ‪.NET 2003‬‬
‫أم ﻻ وأن ﻛ ﺎن ھﻨ ﺎك ﺑﻌ ﺾ اﻹﻣﻜﺎﻧﯿ ﺎت اﻟﻐﯿ ﺮ ﺟ ﺎھﺰة ﻓ ﺴﻮف ﯾﺘﻄﻠ ﺐ ﻣﻨ ﻚ إدﺧ ﺎل اﻻﺳ ﻄﻮاﻧﺔ اﻟﺨﺎﺻ ﺔ ﺑﮭ ﺬا أو‬
‫اﻻﺳﺘﻜﻤﺎل إن ﻛﺎن اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻲ ‪ DVD‬ﻟﯿﻜﻮن اﻟﺸﻜﻞ ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﻧﺪﺧﻞ اﻻﺳﻄﻮاﻧﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻻﺣﺘﯿﺎﺟﺎت‬


‫وﻧﻀﻐﻂ ‪ OK‬ﻟﻠﺘﺤﻤﯿﻞ ﻛﺎﻟﺸﻜﻞ اﻟﺴﺎﺑﻖ‬
‫وﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﺑﮭﺎ اﺗﻔﺎﻗﯿﺔ اﻟﺘﺤﻤﯿﻞ‬
‫ﻧﺨﺘﺎر ‪ I Agree‬وﺑﻌﺪھﺎ ﻧﻀﻐﻂ‬
‫‪Continue‬‬

‫‪١٢١‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ﺳﻮف ﯾﻈﮭﺮ إﻟﯿﻚ اﻻﺣﺘﯿﺎﺟﺎت اﻟﺨﺎﺻﺔ ﺑﻌﻤﻠﯿﺔ اﻟﺘﺤﻤﯿﻞ أﺿﻐﻂ ‪ Install Now‬ﻟﺒﺪأ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻤﯿﻞ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬
‫اﻟﺴﺎﺑﻖ وأﻧﺘﻈﺮ ﺣﺘﻰ ﯾﺤﻤﻞ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫أﻧﺘﻈﺮ ﻗﻠﯿﻼ ﺣﺘﻰ ﯾﻨﺘﮭﻲ ﻣﻦ ﻋﻤﻠﯿﺔ اﻹﻋﺪاد ﺛﻢ أﺿﻐﻂ ‪ Done‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﺑﻌﺪھﺎ أﺧﺘﺎر اﻟﺠﺰء اﻟﺜﺎﻧﻲ ﻣﻦ ﻋﻤﻠﯿﺔ اﻟﺘﺠﮭﯿﺰ ‪ Visual Studio .NET‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫‪١٢٢‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫أﻧﺘﻈﺮ ﻟﻠﺘﺤﻤﯿﻞ وأن ﻛﻨﺖ ﺗﺴﺘﺨﺪم أﻛﺜﺮ ﻣﻦ أﺳﻄﻮاﻧﺔ ﻓﻘﺪ ﯾﻄﻠﺐ ﻣﻨﻚ إدﺧﺎل اﻻﺳ ﻄﻮاﻧﺔ اﻟﺘ ﻲ ﺗﻠﯿﮭ ﺎ ﻛﺎﻟﺘ ﺎﻟﻲ أدﺧ ﻞ‬
‫اﻻﺳﻄﻮاﻧﺔ اﻟﺘﻲ ﺗﻠﯿﮭﺎ ﺛﻢ أﺿﻐﻂ ‪ OK‬ﻟﺒﺪأ اﻟﺘﺤﻤﯿﻞ‬
‫ﺛﻢ ﯾﺒﺪأ ﻓﻲ اﻟﺘﺤﻤﯿﻞ‬

‫ﻓﺴﻮف ﺗﻈﮭﺮ ﻟﻚ ﺷﺎﺷ ﺔ اﺗﻔﺎﻗﯿ ﮫ ﺗﺜﺒﯿ ﺖ ‪ Visual Studio 2003‬أﺧﺘ ﺮ ‪ I Agree‬وأﻛﺘ ﺐ أﺳ ﻤﻚ ﺛ ﻢ أﺿ ﻐﻂ‬
‫‪ Continue‬ﻟﻼﺳﺘﻤﺮار ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻓﯿﻈﮭﺮ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻟﺘﺤﺪﯾﺪ أي اﻟﻠﻐﺎت اﻟﺘ ﻲ ﺳ ﻮف ﯾ ﺘﻢ ﺗﺤﻤﯿﻠﮭ ﺎ وﺑﻌ ﺾ اﻹﻣﻜﺎﻧﯿ ﺎت اﻷﺧ ﺮى ﯾﻤﻜﻨ ﻚ اﺧﺘﯿ ﺎر ﻣ ﺎ‬
‫ﺗ ﺸﺎء وﻟﻜﻨﻨ ﺎ ﻟ ﻦ ﻧﺨﺘ ﺎر إﻻ ‪ Visual Basic.NET‬ﻣ ﻦ اﻟﻠﻐ ﺎت ﻛﻤ ﺎ ﯾﻤﻜﻨﻨ ﺎ اﺧﺘﯿ ﺎر ﻣﻜ ﺎن اﻟﺘﺤﻤﯿ ﻞ أذا أردﻧ ﺎ‬
‫وﯾﻤﻜﻨﻨﺎ رؤﯾﺔ ﺷﻜﻞ رﺳﻮﻣﻲ ﯾﺴﺎﻋﺪﻧﺎ ﻓﻲ ﻣﻌﺮﻓﺔ ھﻞ ﯾﻤﻜﻦ اﻟﺘﺤﻤﯿﻞ داﺧﻞ ال ‪ Partition‬أم ﻻ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫‪١٢٣‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ﺳﯿﺒﺪأ ﻓﻲ ﻋﻤﻠﯿﺔ ﻧﺸﺮ اﻟﻤﻠﻔﺎت واﻟﺘﺤﻤﯿﻞ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﻗﺪ ﯾﻄﻠﺐ ﻣﻨﻚ ﺧﻼل ھﺬه اﻟﻌﻤﻠﯿﺔ ﺗﻐﯿﺮ اﻷﺳﻄﻮاﻧﺔ وھﻜﺬا ﺣﺘﻰ ﯾﻨﺘﮭﻲ ﻣﻦ ﻋﻤﻠﯿﺔ اﻟﺘﺤﻤﯿﻞ وﯾﻈﮭﺮ ﻟﻚ أﻧﮫ ﻻ ﯾﻮﺟﺪ‬
‫أﺧﻄﺄ أو ﯾﻌﺮض اﻷﺧﻄﺎء ﻟﯿﻜﻮن اﻟﺸﻜﻞ اﻟﻌﺎم اﻟﻨﮭﺎﺋﻲ ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﻟﻔﺘﺢ اﻟﺒﺮﻧﺎﻣﺞ ‪Start>>Microsoft Visual Studio .NET 2003 >> Microsoft Visual‬‬
‫‪ Studio .NET 2003‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫‪١٢٤‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour

‫ﻟﯿﻜﻮن اﻟﺸﻜﻞ اﻷﺳﺎﺳﻲ اﻟﻤﺒﺪﺋﻲ ﻟﻠﺸﺎﺷﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ ﻛﺎﻟﺘﺎﻟﻲ‬

‫ ﻛﺎﻟﺘﺎﻟﻲ‬File>>New>>Project ‫ أو ﻣﻦ ﻗﺎﺋﻤﺔ‬New Project ‫ ﺛﻢ‬Projects ‫ﻧﺨﺘﺎر‬

‫ وﻓ ﻲ‬ASP.NET Web Application ‫ وﻧﺨﺘﺎر‬Visual Basic ‫ﺗﻈﮭﺮ ﻟﻨﺎ ﺷﺎﺷﺔ ﻧﺨﺘﺎر ﻣﻨﮭﺎ ﻣﺸﺎرﯾﻊ‬
‫ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬Ok ‫ ﻧﺤﺪد ﻓﻮﻟﺪر اﻟﻤﺸﺮوع ﺛﻢ ﻧﻀﻐﻂ‬Location ‫اﻟﺨﺎﻧﺔ‬

١٢٥

PDF created with pdfFactory Pro trial version www.pdffactory.com


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ﺛﻢ ﯾﻈﮭﺮ اﻹﻃﺎر اﻟﻌﺎم ﻟﻤﺸﺮوع اﻟﻮﯾﺐ اﻟﺨﺎص ﺑﺘﻘﻨﯿﺔ ‪ ASP.NET‬وھﻲ ﻣﻨﺴﻘﺔ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬

‫وﻓﻲ اﻟﺤﻘﯿﻘﺔ اﻟﺸﺎﺷﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ ﻣﻘﺴﻤﺔ ﺑﻄﺮﯾﻘﺔ ﻣﺤﻜﻤﺔ ﻓﯿﻤﻜﻨﻚ اﺳ ﺘﺨﺪام اﻟ ﺰر ‪ Auto Hide‬ﻟﻠ ﺘﺤﻜﻢ‬
‫ﻓﻲ إﻇﮭﺎر وإﺧﻔﺎء أي اﻟﺸﺎﺷﺔ أو ﻣﻦ ﻗﺎﺋﻤﺔ ‪ View‬وﻧﺨﺘﺎر ﻣ ﺎ ﻧﺮﯾ ﺪ أن ﻧﻈﮭ ﺮه ﻣ ﻦ ﺷﺎﺷ ﺔ ﺣ ﺴﺐ أﺳ ﻤﮭﺎ ﻛﻤ ﺎ‬
‫ﺳﻨﺮي وﻟﻜﻦ ﻟﻌﻞ ﻣﻦ أھﻢ اﻟﺸﺎﺷﺎت‬
‫‪Solution Explorer‬‬
‫وﯾﻮﺟﺪ ﺑﮭﺎ ﻣﻠﻔﺎت اﻟﻤﺸﺮوع اﻟﺤﺎﻟﻲ‬
‫‪Properties‬‬
‫وﯾﻮﺟﺪ ﺑﮭﺎ ﺧﻮاص اﻟﻜﺎﺋﻦ اﻟﻤﻨﺸﻂ اﻟﺤﺎﻟﻲ أن وﺟﺪ‬
‫‪Toolbox‬‬
‫وﯾﻮﺟﺪ ﺑﮭﺎ اﻷدوات اﻟﻤﺘﺎح اﺳﺘﺨﺪاﻣﮭﺎ ﻣﻘﺴﻤﺔ ﻟﻌﺪة ﻓﺌﺎت‬
‫‪Server Explorer‬‬
‫وﺑﮭﺎ ﯾﺘﻢ اﻻﺗﺼﺎل ﺑﺨﺎدم اﻟﻮﯾﺐ وﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت‬

‫وﻓ ﻲ ﻣﻨﺘ ﺼﻒ اﻟ ﺸﺎﺷﺔ ﺗﻮﺟ ﺪ ﺻ ﻔﺤﺔ اﻓﺘﺮاﺿ ﯿﮫ أﻧ ﺸﺄھﺎ اﻟﺒﺮﻧ ﺎﻣﺞ وھ ﻲ‪ WebForm1.aspx‬وﺑﺄﺳ ﻔﻠﮭﺎ‬
‫ﺗﺒﻮﯾﺒﺘﺎن ‪ HTML‬ﻓﮭﻲ ﺗﻔﺘﺢ ﻣﻜﺎن اﻷﻛ ﻮاد واﻟﺠﺎﻧ ﺐ اﻵﺧ ﺮ ‪ Design‬ﻓﮭ ﻲ ﺗﻔ ﺘﺢ ﺟﺎﻧ ﺐ اﻟﺘ ﺼﻤﯿﻢ ﻟﻠﻤﻠ ﻒ ﻛﻤ ﺎ‬
‫ﻧﺮي‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫‪١٢٦‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫‪Working with Web Form Controls‬‬ ‫اﻟﻌﻤﻞ ﻣﻊ ﻋﻨﺎﺻﺮ ﺗﺤﻜﻢ ﻧﻤﻮذج ‪Web‬‬
‫ﻧﻌﻤﻞ ﻣﻦ ﺧﻼل اﻟﺸﺎﺷﺔ ‪ Toolbox‬وﺑﺎﻟﻄﺒﻊ ھﻨﺎك أﻛﺜﺮ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ ﻓﻲ ﻧﻤﻮذج ‪Web‬‬
‫ﻣﻦ ھﺬه اﻟﻤﺠﻤﻮﻋﺎت اﻟﻤﺠﻤﻮﻋﺔ‬
‫‪Web Forms‬‬
‫وھﻲ اﻟﻤﺠﻤﻮﻋﺔ اﻟﻘﯿﺎﺳﯿﺔ و ﺑﮭﺎ ﻋﻨﺎﺻﺮ ﺗﺤﻜﻢ اﻟﺨﺎدم )أي أﻧﮭ ﺎ ﺗﻨﻔ ﺬ ﻋﻠ ﻲ اﻟﺨ ﺎدم وﻟ ﯿﺲ اﻟﻌﻤﯿ ﻞ ( وﻧﻈ ﺮا ﻟﮭ ﺬا‬
‫ﻓﯿﻤﻜﻨﻨﺎ أن ﻧﺮﺑﻂ ﻛﻮد ‪ VB.NET‬ﺑﮭﺎ ﻷﻧﮭﺎ ﺗﻨﻔﺬ ﻋﻠﻲ اﻟﺨﺎدم وأھﻢ ﻣﺎ ﯾﻠﻲ ‪:‬‬

‫وﺻﻒ ﻣﺒﺴﻂ‬ ‫ﻋﻨﺼﺮ اﻟﺘﺤﻜﻢ‬


‫ﻋﻨﺼﺮ ﻋﻨﻮﻧﮫ‬ ‫‪Label‬‬
‫ﻋﻨﺼﺮ ﻣﺮﺑﻊ ﻧﺺ‬ ‫‪TextBox‬‬
‫ﻗﺎﺋﻤﺔ ﻣﻨﺴﺪﻟﺔ‬ ‫‪DropDownList‬‬
‫ﻣﺮﺑﻊ ﯾﻀﻢ ﻗﺎﺋﻤﺔ ﻣﻦ اﻻﺧﺘﯿﺎرات‬ ‫‪ListBox‬‬
‫ﻋﻨﺼﺮ ﺻﻮرة‬ ‫‪Image‬‬
‫ﻋﻨﺼﺮ ﯾﻌﺮض إﻋﻼﻧﺎت‬ ‫‪AdRotator‬‬
‫ﺧﺎﻧﺔ اﺧﺘﯿﺎر‬ ‫‪CheckBox‬‬
‫ﻗﺎﺋﻤﺔ ﺧﺎﻧﺎت اﺧﺘﯿﺎر‬ ‫‪CheckBoxList‬‬
‫ﺗﻘﻮﯾﻢ )ﻻﺧﺘﯿﺎر اﻟﺘﻮارﯾﺦ(‬ ‫‪Calendar‬‬
‫زر أﻣﺮ‬ ‫‪Button‬‬
‫ﻋﻨﺼﺮ ﯾﺸﺒﮫ اﻻرﺗﺒﺎط أﻟﺘﺸﻌﺒﻲ ﻟﻜﻨﮫ ﯾﻌﺎﻣﻞ ﻣﻌﻤﻞ زر اﻷﻣﺮ‬ ‫‪LinkButton‬‬
‫زر ﯾﻌﺮض ﺻﻮرة‬ ‫‪ImageButton‬‬
‫ﻋﻨﺼﺮ ارﺗﺒﺎط ﺗﺸﻌﺒﻲ‬ ‫‪HyperLink‬‬
‫ﻋﻨﺼﺮ ﻹﺿﺎﻓﺔ ﺟﺪول‬ ‫‪Table‬‬
‫ﻋﻨﺼﺮ ﻟﻮﺣﺔ‬ ‫‪Panel‬‬
‫ﻋﻨﺼﺮ اﺧﺘﯿﺎر ﻣﻮﺣﺪ‬ ‫‪RadioButton‬‬
‫ﻣﺠﻤﻮﻋﺔ اﺧﺘﯿﺎرات ﯾﺨﺘﺎر ﻣﻨﮭﻢ اﺧﺘﯿﺎر واﺣﺪ‬ ‫‪RadioButtonList‬‬
‫ﻋﻨﺼﺮ ﻟﻌﺮض ﺑﯿﺎﻧﺎت ﻣﻦ ‪ Data Set‬ﺑﺎﺳﺘﺨﺪام ﻋﻨﺎﺻﺮ ‪HTML‬‬ ‫‪Repeater‬‬
‫ﻋﻨﺼﺮ ﯾﻌﺮض اﻟﺒﯿﺎﻧﺎت أﻗﻮي ﻣﻦ اﻟﻌﻨﺼﺮ ‪Repeater‬‬ ‫‪DataList‬‬
‫ﻋﻨﺼﺮ ﻟﻌﺮض اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺷﻜﻞ ﺟﺪول‬ ‫‪DataGrid‬‬

‫‪HTML‬‬ ‫وھﺬه ﻣﻦ أھﻢ اﻟﻤﺠﻤﻮﻋﺎت وﺗﻮﺟﺪ ﻣﺠﻤﻮﻋﺎت أﺧﺮي ﻣﺜﻞ‬


‫وﺻﻒ ﻣﺒﺴﻂ‬ ‫ﻋﻨﺼﺮ اﻟﺘﺤﻜﻢ‬
‫)‪ Input(Button‬ﻋﻨﺼﺮ زر أﻣﺮ‬
‫)‪ Input(Reset‬ﻋﻨﺼﺮ زر أﻣﺮ ﻟﻤﺴﺢ اﻟﻤﺤﺘﻮﯾﺎت‬
‫)‪ Input(Submit‬ﻋﻨﺼﺮ زر أﻣﺮ ﻣﺨﺘﺺ ﺑﻨﻘﻞ اﻟﺒﯿﺎﻧﺎت إﻟﻲ اﻟﺨﺎدم‬
‫)‪ Input(Text‬ﻋﻨﺼﺮ ﻣﺮﺑﻊ ﻧﺺ‬
‫)‪ Input(File‬ﻋﻨﺼﺮ ﺧﺎص ﺑﻨﻘﻞ اﻟﻤﻠﻔﺎت وﻋﻤﻞ ‪Upload‬‬
‫)‪ Input(Password‬ﻋﻨﺼﺮ ﻣﺮﺑﻊ ﻧﺺ ﻣﺨﻔﻲ ﻛﺮﻣﺰ ﺳﺮي‬
‫)‪ Input(CheckBox‬ﻋﻨﺼﺮ ﻟﺨﺎﻧﺎت اﻻﺧﺘﯿﺎر‬
‫)‪ Input(Radio‬ﻋﻨﺼﺮ اﺧﺘﯿﺎر ﻣﻮﺣﺪ‬
‫)‪ Input(Hidden‬ﻋﻨﺼﺮ ﻣﺮﺑﻊ ﻧﺺ ﻣﺨﻔﻲ ﻻ ﯾﻈﮭﺮ‬
‫‪ TextArea‬ﻣﺮﺑﻊ ﻧﺺ ﯾﻤﻜﻦ أن ﯾﺤﺘﻮي ﻋﻠﻲ أﻛﺜﺮ ﻣﻦ ﺳﻄﺮ‬
‫‪ Table‬ﺟﺪول‬
‫‪ Image‬ﺻﻮرة‬
‫‪ Select‬ﻋﻨﺼﺮ ﻗﺎﺋﻤﺔ ﻣﻨﺴﺪﻟﺔ‬
‫‪ Horizontal Rule‬ﺧﻂ‬

‫‪١٢٧‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وھﻲ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ اﻟﻘﯿﺎﺳﯿﺔ اﻟﺨﺎﺻﺔ ﺑﻠﻐﺔ ‪ HTML‬اﻟﺘﻲ ﺗﻨﻔﺬ ﻓﻲ ﺟﺎﻧﺐ اﻟﻌﻤﯿﻞ وﯾﻤﻜﻨﻨﺎ أن ﻧﺠﻌﻠﮭ ﺎ ﺗﻨﻔ ﺬ ﻋﻠ ﻲ‬
‫ﺟﺎﻧﺐ اﻟﺨﺎدم ﺑﺈﺿﺎﻓﺔ اﻟﻌﺒﺎرة "‪ runat="server‬داﺧﻞ اﻟﻜﻮد وھﺬا ﻟﺮﺑﻂ ﺷﻔﺮة ‪ VB.NET‬ﺑﮭﺎ ‪.‬‬

‫وﻣﻦ اﻟﻤﺠﻤﻮﻋﺎت اﻟﺘﻲ ﻻﻏﻨﻲ ﻋﻨﮭﺎ أﯾﻀﺎ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻘﻖ ﻣﻦ اﻟﺼﺤﺔ ﻣﻦ اﻟﺠﺰء ‪ Web Forms‬أﯾﻀﺎ‬
‫‪Validation Controls‬‬
‫ﯾﻤﻜﻨﻚ ﻣﻦ ﺧﻼل ھﺬه اﻟﻌﻨﺎﺻﺮ اﻟﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ اﻟﺒﯿﺎﻧﺎت ﻋﻨﺪ اﻟﻌﻤﯿﻞ وﻗﺒﻞ وﺻ ﻮل اﻟﺒﯿﺎﻧ ﺎت إﻟ ﻲ وﺣ ﺪة اﻟﺨﺪﻣ ﺔ‬
‫وھﺬا ﯾﻮﻓﺮ ﻛﺜﯿﺮا ﻋﻠﻲ اﻻﻧﺘﺮﻧﺖ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل أن ﻛﺎن ھﻨﺎك ﻣﺮﺑﻊ ﻧﺺ ﻻﺑﺪ ﻣﻦ إدﺧﺎل ﺑﯿﺎﻧﺎت ﻓﯿﮫ وﻟﯿﺲ ھﺬا‬
‫ﻓﻘﻂ وﻟﻜﻦ ﺗﺼﻞ أﻟﻲ أﻋﻘﺪ ﻣﻦ ذﻟﻚ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل اﻟﺘﺄﻛﺪ ﻣ ﻦ أن اﻟﻤ ﺴﺘﺨﺪم أدﺧ ﻞ ﻋﻨ ﻮان أﯾﻤﯿ ﻞ ﺻ ﺤﯿﺢ دون‬
‫أﺧﻄﺄ وﻏﯿﺮ ذﻟﻚ اﻟﻜﺜﯿﺮ‬
‫وﺻﻒ ﻣﺒﺴﻂ‬ ‫ﻋﻨﺼﺮ اﻟﺘﺤﻘﻖ‬
‫‪ RequiredFieldValidator‬ﯾﺘﺄﻛ ﺪ ﻣ ﻦ أن اﻟﻤ ﺴﺘﺨﺪم ﻗ ﺪ أدﺧ ﻞ ﺑﯿﺎﻧ ﺎت ﻓ ﻲ اﻟﺤﻘ ﻞ اﻟﻤﻮﺿ ﻮع‬
‫ﻋﻠﯿﮫ ھﺬا اﻟﻌﻨﺼﺮ‬
‫‪ CompareValidator‬ﯾﺘﺄﻛﺪ ﻣﻦ ﺧﻼل اﻟﻤﻘﺎرﻧﺔ ﺑﻘﯿﻤﺔ ﺛﺎﺑﺘﺔ أو ﻣﻦ ﺧﻼل اﻟﻤﻘﺎرﻧﺔ ﺑﺤﻘﻞ‬
‫أﺧ ﺮ أن اﻟﺤﻘ ﻞ اﻟﻤﻮﺿ ﻮع ﻋﻠﯿ ﮫ ﻋﻨ ﺼﺮ اﻟﺘﺤﻘ ﻖ ﯾﻨﻔ ﺬ ﺷ ﺮط‬
‫اﻟﻤﻘﺎرﻧﺔ ﻗﺒﻞ اﻻﻧﺘﻘﺎل إﻟﻲ وﺣﺪة اﻟﺨﺪﻣﺔ‬
‫‪ RangeValidator‬ﯾﺘﺄﻛ ﺪ ﻣ ﻦ أن اﻟﻤ ﺴﺘﺨﺪم أدﺧ ﻞ ﻗﯿﻤ ﺔ ﻣﺤ ﺼﻮرة ﻣ ﺎ ﺑ ﯿﻦ ﻗﯿﻤﺘ ﯿﻦ‬
‫ﺗﺤﺪدھﻢ أﻧﺖ ﻛﺤﺪ أﻋﻠﻲ وأدﻧﻲ‬
‫‪ RegularExpressionValidator‬ﯾﺘﺄﻛﺪ ﻣﻦ أن اﻟﻤﺴﺘﺨﺪم ﻗﺪ أدﺧﻞ ﻗﯿﻤﺔ ﺗﻮاﻓﻖ ﺗﻨﻈ ﯿﻢ ﻣﻌ ﯿﻦ )ﻣ ﺜﻼ‬
‫إدﺧﺎل ﻋﻨﻮان ﺑﺮﯾﺪ إﻟﻜﺘﺮوﻧﻲ ‪ ،‬أو رﻗﻢ ﺗﻠﯿﻔﻮن ‪ ..‬اﻟﺦ (‬
‫‪ CustomValidator‬ﯾﺘﺄﻛﺪ ﻣﻦ أن اﻟﻤﺴﺘﺨﺪم ﻗﺪ أدﺧﻞ ﻗﯿﻤﺔ ﺗﻮاﻓﻖ ﺗﻌﺒﯿﺮ أن ﺗﺤﺪده ﻟﮫ‬
‫‪ ValidationSummary‬ﻋﻨﺼﺮ ﻣﻦ ﺧﻼﻟﮫ ﯾﻤﻜﻨﻨﺎ ﺗﻨﺴﯿﻖ اﻷﺧﻄﺎء اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺼﻔﺤﺔ‬
‫ﺣﺘﻰ ﺗﻈﮭﺮ ﻟﻠﻤﺴﺘﺨﺪم ﺑﺸﻜﻞ ﻣﻨﺴﻖ‬

‫وﻣﻦ أھﻢ اﻟﻌﻨﺎﺻﺮ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ھﻲ اﻟﻌﻨﺎﺻﺮ‬


‫‪Data‬‬
‫و ﺑﮭﺎ ﺑﻌﺾ اﻟﻌﻨﺎﺻﺮ اﻟﻤﺮﺋﯿﺔ ﻟﻜﺎﺋﻨﺎت ‪ ADO.NET‬اﻟﺨﺎﺻ ﺔ ﺑ ﺮﺑﻂ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت ﺑﻤﻠﻔ ﺎت اﻟﻮﯾ ﺐ وﻓﯿﻤ ﺎ ﯾﻠ ﻲ‬
‫ﺳﻮف ﻧﻌﺮض ﻣﻠﺨﺼﺎ ﻟﻜﺎﺋﻨﺎت ‪ADO.NET‬‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫‪١٢٨‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫‪Data Access with ADO.NET‬‬ ‫اﻟﻮﺻﻮل ﻟﻠﺒﯿﺎﻧﺎت ﻣﻦ ﺧﻼل ‪ADO.NET‬‬

‫ﻛﻤﺎ ذﻛﺮﻧﺎ ﻣﻦ ﻗﺒﻞ أن ‪ 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‬‬

‫واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﯾﻮﺿﺢ أھﻢ اﻟﻜﺎﺋﻨﺎت وأﻛﺜﺮھﺎ ﺷﯿﻮﻋﺎ ﻓﻲ ‪ ADO.NET‬ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت‬

‫‪١٢٩‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ﻛ ﺎن ذﻟ ﻚ ھ ﻮ ﻋﺒ ﺎرة ﻋ ﻦ ﻋ ﺮض ﻟﻜﺎﺋﻨ ﺎت ‪ ADO.NET‬ﻋﺎﻣ ﺔ وﻟﻜ ﻦ ﻣ ﺎزال ﺑ ﺎﻟﻄﺒﻊ أﺳ ﮭﻞ ﻃﺮﯾﻘ ﺔ ﻟﻠﻔﮭ ﻢ ھ ﻲ‬


‫ﺗﻄﺒﯿ ﻖ ﻣﺜ ﺎل وﺗﻤﺘﻠ ﻚ ‪ VB.NET‬اﻟﻌﺪﯾ ﺪ ﻣ ﻦ اﻷدوات اﻟﻤﺮﺋﯿ ﺔ ﻟﻠﻌﻤ ﻞ ﻣ ﻊ ﻗﻮاﻋ ﺪ اﻟﺒﯿﺎﻧ ﺎت ﺑ ﺸﻜﻞ ﺳ ﮭﻞ وﻣﻤﺘ ﻊ‬
‫ﻓﺴﻮف ﻧﺴﺘﺨﺪم ﻣﻨﮭﻢ ﻃﺮﯾﻘﺔ ‪Server Explorer‬‬
‫اﺳﺘﺨﺪام ﻣﺘﺼﻔﺢ اﻟﺨﺎدم ﻟﻠﻮﺻﻮل ﻟﻠﺒﯿﺎﻧﺎت ‪Server Explorer‬‬
‫ﻟﻠﻌﻤ ﻞ ﻣ ﻊ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ﻧﺤﺘ ﺎج إﻟ ﻲ اﺗ ﺼﺎل ﺑﮭ ﺎ وﯾ ﺴﻤﺢ ﻟﻨ ﺎ ﻣﺘ ﺼﻔﺢ اﻟﺨ ﺎدم ‪ Server Explorer‬ﺑﻌﻤ ﻞ‬
‫اﺗﺼﺎﻻت ﻣﻊ أﻛﺜﺮ ﻣﻦ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت أن ﻟ ﻢ ﯾﻜ ﻦ ﻇ ﺎھﺮا ﯾﻤﻜﻨ ﻚ إﻇﮭ ﺎره ﺑﺎﻟ ﻀﻐﻂ ‪ Ctrl+Alt+S‬أو ﻣ ﻦ ﻗﺎﺋﻤ ﺔ‬
‫‪ View >> Server Explorer‬ﺛﻢ أﺿﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ ‪ Data Connection‬وأﺧﺘ ﺎر ‪Add‬‬
‫‪ Connection‬ﻹﺿﺎﻓﺔ اﺗﺼﺎل ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وﻻﺣﻆ أﻧﮫ ﻗﺪ ﺗ ﻢ اﻻﺗ ﺼﺎل ﺑﺠﮭ ﺎزك ﻣﺒﺎﺷ ﺮة اﻓﺘﺮاﺿ ﯿﺎ وھﻨ ﺎ أﺳ ﻤﮫ ‪ 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‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫‪١٣٠‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﯾﻤﻜﻨﻚ اﻟﻀﻐﻂ ﻋﻠ ﻲ ‪ Advanced‬ﻟﺮؤﯾ ﺔ ﻣﺠﻤﻮﻋ ﺔ ﻣ ﻦ اﻟﺨ ﺼﺎﺋﺺ أو اﻟ ﻀﻐﻂ ﻋﻠ ﻲ ‪ Provider‬ﻻﺧﺘﯿ ﺎر‬


‫ﻧﻮع ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت آﺧﺮ ﻏﯿﺮ ‪SQL Server‬‬
‫ﻓﺘﻈﮭﺮ اﻟﻘﺎﻋﺪة ﻓﻲ ﻣﺘﺼﻔﺢ اﻟﺨﺎدم ‪ Server Explorer‬ﻛﺎﻟﺘﺎﻟﻲ‬
‫ﻻﺣﻆ ﻇﮭﻮر اﻟﺠﺪاول ﻛﻤﺎ ﺗﻌﻮدﻧﺎ ﻋﻠﯿﮭﺎ ﻣﻦ ﻗﺒﻞ وأﻧﮫ ﻗﺪ ﺗﻢ اﻻﺗﺼﺎل ﺑﺎﻟﻔﻌﻞ‬
‫ﯾﻤﻜﻨﻚ ﺗﺼﻔﺢ اﻟﺠﺪاول واﻟﺤﻘﻮل واﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇﺔ و اﻹﺟﺮاءات و‬
‫اﻟﺪوال أن وﺟﺪ ﻓﻲ ھﺬا اﻟﺒﻨﺎء اﻟﺸﺠﺮي وﯾﻤﻜﻨﻚ ﺣﺬف أي اﺗﺼﺎل ﺑﻀﻐﻂ‬
‫ﯾﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻻﺗﺼﺎل واﺧﺘﯿﺎر ‪ Delete‬أو ﺗﻌﺪﯾﻞ أﺳﻢ اﻻﺗﺼﺎل ﻣﻦ‬
‫ﺧﻼل ‪ Rename‬ﻗﻢ اﻵن ﺑﺴﺤﺐ ﺟﺪول ‪ Teacher‬ﻣﻦ ﻣﺘﺼﻔﺢ اﻟﺨﺎدم‬
‫وإﻟﻘﺎءه ﻋﻠﻲ اﻟﻨﻤﻮذج اﻟﺮﺋﯿﺴﻲ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬

‫‪SqlConnection‬‬ ‫وﺑﻌ ﺪ إﺳ ﻘﺎﻃﮫ ﻋﻠ ﻲ اﻟﻨﻤ ﻮذج ﺳ ﯿﻘﻮم ‪ VB.NET‬ﺑﺈﻧ ﺸﺎء اﻟﻜ ﺎﺋﻨﯿﻦ‬
‫‪ ,SqlDataAdapter‬ﺗﻠﻘﺎﺋﯿﺎ وﻗﺪ ﻗﺪ ﺗﻢ أﻧ ﺸﺎء ﻧ ﺴﺦ ﻣ ﻦ ھ ﺬﯾﻦ اﻟﻜ ﺎﺋﻨﯿﻦ وﺳ ﻤﯿﺎ ‪sqlConnection1 ,‬‬
‫‪ sqlDataAdapter1‬ﻛﻤﺎ ﯾﻈﮭﺮان ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ أﺿﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ ‪ sqlDataAdapter‬ﻣﻼﺋﻢ‬

‫اﻟﺒﯿﺎﻧﺎت وأﺧﺘﺎر ‪ Generate Dataset‬ﻟﻺﻧﺸﺎء ﻛﺎﺋﻦ ﻣﺠﻤﻮﻋﺔ ﺑﯿﺎﻧﺎت ﻓﯿﻈﮭﺮ ﻟﻜﻞ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻣﻦ اﻟﺨﺎﻧﺔ ‪ New‬ﻧﺘﺮك اﻻﺳﻢ اﻻﻓﺘﺮاﺿﻲ أو ﻧﻐﯿﺮه‬


‫وﻧﺘﺄﻛﺪ ﻣﻦ اﺧﺘﯿﺎرﻧﺎ ﻟﻠﺠﺪول ‪ Teacher‬اﻟﻤﺮﺗﺒﻂ‬
‫ﺑﻤﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت ‪ sqlDataAdapter1‬وﻧﺘﺄﻛﺪ‬
‫ﻣﻦ اﺧﺘﯿﺎرﻧﺎ ‪Add this dataset to the‬‬
‫‪ Designer‬ﻟﻈﮭﻮره أﺳﻔﻞ اﻟﺸﺎﺷﺔ ﻛﺎﻟﺘﺎﻟﻲ ﻋﻨﺪ‬
‫اﻟﻀﻐﻂ ﻋﻠﻲ ‪Ok‬‬

‫‪١٣١‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﯾﻤﻜﻨﻚ اﻟﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ اﻟﻜﺎﺋﻦ ‪ 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‬ﺑﺎﻟﺒﯿﺎﻧ ﺎت ﻣ ﻦ ﺧ ﻼل ﻣﻼﺋ ﻢ‬


‫اﻟﺒﯿﺎﻧﺎت ‪ DataAdapter‬وھﺬا ﻣﻦ ﺧﻼل اﻟﺨﺎﺻﯿﺔ ‪ Fill‬وﻧﺮﯾﺪ أن ﯾﺘﻢ ھﺬا ﻋﻨﺪ ﺑﺪاﯾﺔ ﺗﺤﻤﯿﻞ اﻟﻨﻤﻮذج ﻓﻨﻀﻐﻂ‬
‫ﺑﺎﻟﻤﺎوس ﺿﻐﻄﺘﯿﻦ ﻣﺘﻮاﻟﯿﺘﯿﻦ ﻓﻲ أي ﺟﺰء ﻣﻦ اﻟﺸﺎﺷﺔ ‪ WebForm1.aspx‬ﺑﺸﺮط أن ﯾﻜ ﻮن ﺧ ﺎﻟﻲ وﻧﻜﺘ ﺐ‬
‫اﻟﻜﻮد اﻟﺘﺎﻟﻲ‬

‫وﯾﻌﻨﻲ )(‪ DataSet11.Clear‬ھﻮ ﻣ ﺴﺢ ﻣﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت اﻟﺤﺎﻟﯿ ﺔ أﻣ ﺎ اﻟ ﺴﻄﺮ اﻟ ﺬي ﯾﻠﯿ ﮫ ﻓ ﻨﻤﻸ ﻣﺠﻤﻮﻋ ﺔ‬
‫اﻟﺒﯿﺎﻧ ﺎت ‪ DataSet‬ﻣ ﻦ ﺧ ﻼل ﻣﻼﺋ ﻢ ﺑﯿﺎﻧ ﺎت ﺟ ﺪول ‪ Teacher‬وھ ﺬا ﻣ ﻦ ﺧ ﻼل اﻟﺨﺎﺻ ﯿﺔ ‪ Fill‬أﻣ ﺎ اﻟﺠ ﺰء‬
‫)(‪ Page.DataBind‬ﻓﮭﻮ ﺧﺎص ﺑﺮﺑﻂ اﻟﻌﻨﺎﺻﺮ اﻟﻤﻮﺟﻮدة ﻋﻠﻲ اﻟ ﺸﺎﺷﺔ ﺑﺎﻟﺒﯿﺎﻧ ﺎت ﻟﺘﺤ ﺪﯾﺜﮭﺎ وﻛ ﺎن ﺑﺈﻣﻜﺎﻧﻨ ﺎ‬
‫رﺑ ﻂ ﻛ ﻞ ﻋﻨ ﺼﺮ ﻋﻠ ﻲ ﺣ ﺪه وﻟﻜ ﻦ ھ ﺬا ﻗ ﺪ ﯾﻜ ﻮن ﻃ ﻮﯾﻼ ﻓ ﻲ ﺑﻌ ﺾ اﻷﺣﯿ ﺎن ﻓﯿﻤﻜﻨﻨ ﺎ ﻛﺘﺎﺑ ﺔ‬
‫)(‪ DataGrid1.DataBind‬وھﻜﺬا ﻣﻊ ﺑﺎﻗﻲ اﻟﻌﻨﺎﺻﺮ وﻟﻜﻦ ﻋﻨﺪ رﺑﻂ اﻟﺼﻔﺤﺔ ﯾﺘﻢ رﺑﻂ ﺟﻤﯿﻊ اﻟﻌﻨﺎﺻﺮ اﻟﺘﻲ‬
‫ﻋﻠﯿﮫ وﻻ ﺗﻘﻠﻞ ﻣﻦ اﻟﺴﺮﻋﺔ ﺷﺊ ﻓﺴﻮف ﻧﺴﺘﺨﺪﻣﮭﺎ داﺋﻤﺎ‬

‫‪١٣٢‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﻟﻀﺒﻂ ﺷ ﻜﻞ اﻟ ﺸﺒﻜﺔ ﯾﻤﻜﻨﻨ ﺎ اﺧﺘﯿ ﺎر ‪ Property Builder‬أو ‪ Auto Format‬أﺳ ﻔﻞ ﺷﺎﺷ ﺔ اﻟﺨ ﺼﺎﺋﺺ‬
‫ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻋﻨﺪ اﺧﺘﯿﺎر ‪ Property Builder‬ﺗﻜﻮن ﺷﺎﺷﺘﮫ اﻟﺮﺋﯿﺴﯿﺔ ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﺗﻼﺣﻆ أن اﻟﺠﺰء اﻷﯾﺴﺮ ﻣﻦ اﻟﺸﺎﺷﺔ ﻣﻘﺴﻢ إﻟﻲ أﻛﺜ ﺮ ﻣ ﻦ ﻓﺌ ﺔ واﻟﺠ ﺰء اﻷﯾﻤ ﻦ ﯾﻤﻜﻨ ﻚ ﺗﻐﯿ ﺮ ﺧﻮاﺻ ﮫ ﻟﻌﻤ ﻞ ﺷ ﻜﻞ‬
‫أﻓﻀﻞ وﻟﻌﻞ ﻣﻦ أھﻢ اﻟﺨﻮاص ﻓﻲ اﻟﺠ ﺰء ‪ 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‬‬

‫‪١٣٣‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﻣﻦ اﻟﺸﺎﺷﺔ ‪ 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 Adapter‬ﺑﺄﻧﻔﺴﻨﺎ‬
‫ﻟﻔ ﺘﺢ ﻣﻠ ﻒ ﺟﺪﯾ ﺪ ﻏﯿ ﺮ ‪ WebForm1.aspx‬ﯾﻤﻜﻨ ﻚ ذﻟ ﻚ ﻣ ﻦ ﺧ ﻼل اﻟﻘﺎﺋﻤ ﺔ ‪Project >> Add Web‬‬
‫‪ Form‬ﻓﺘﻈﮭﺮ اﻟﺸﺎﺷﺔ اﻟﺘﺎﻟﯿﺔ ﻧﺨﺘﺎر أﺳﻢ ﻟﻠﺸﺎﺷﺔ اﻟﺠﺪﯾﺪة ﺛﻢ ﻧﻀﻐﻂ ‪OK‬‬

‫ﻣ ﻦ ﺻ ﻨﺪوق اﻷدوات ‪ Toolbox‬ﻣ ﻦ اﻟﺠ ﺰء ‪ Data‬ﺳ ﻮف ﻧ ﻀﻐﻂ ﻣ ﺮﺗﯿﻦ ﻋﻠ ﻲ اﻟﻌﻨ ﺼﺮ‬


‫‪ OleDbDataAdapter‬ﻷﻧﻨ ﺎ اﺳ ﺘﺨﺪﻣﻨﺎ اﻟﻤ ﺮة اﻟ ﺴﺎﺑﻘﺔ ‪ sqlDataAdapter‬وﺳ ﻮف ﯾ ﺆدي ذﻟ ﻚ إﻟ ﻲ‬
‫ﻇﮭﻮر اﻟﻤﻌ ﺎﻟﺞ اﻟﺨ ﺎص ﺑﺈﻋ ﺪادات ﻣﻼﺋ ﻢ اﻟﺒﯿﺎﻧ ﺎت ‪ Data Adapter Wizard‬أوﻻ ﺳ ﻮف ﺗﻈﮭ ﺮ ﻟ ﻚ ﺷﺎﺷ ﺔ‬
‫ﺗﺮﺣﯿ ﺐ دﻋ ﻚ ﻣﻨﮭ ﺎ ﺛ ﻢ أﺿ ﻐﻂ ‪ Next‬ﺛ ﻢ ﺗﻈﮭ ﺮ ﻟ ﻚ اﻟ ﺸﺎﺷﺔ ‪Choose Your Data Connection‬‬
‫ﻓﺘﻈﮭ ﺮ ﻟﻨ ﺎ ھ ﺬه اﻟ ﺸﺎﺷﺔ اﻟﺘﻮﺿ ﯿﺤﯿﺔ اﻟﺨﺎﺻ ﺔ ﺑﺎﺧﺘﯿ ﺎر ﻧﻈ ﺎم اﻻﺗ ﺼﺎل اﻻﻓﺘﺮاﺿ ﻲ اﻵن ھ ﻮ‬
‫‪ Complete.School.dbo‬وھﻮ أﺳﻢ اﻟﺤﺎﺳﺐ ﺛﻢ أﺳﻢ اﻟﻘﺎﻋﺪة ﺛﻢ أﺳﻢ ﻣﺎﻟﻚ اﻟﻘﺎﻋﺪة وھﻮ ﻧﺎﺗﺞ ﻣﻦ ﻋﻤﻠﯿ ﺔ‬
‫اﻻﺗﺼﺎل اﻷوﻟﻲ وﯾﻤﻜﻨﻨﺎ اﻟﻀﻐﻂ ﻋﻠﻲ ‪ New Connection‬ﻟﻌﻤﻞ اﺗﺼﺎل ﺟﺪﯾﺪ وﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﺳﻮف ﯾﻈﮭﺮ‬

‫‪١٣٤‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫اﻟﺸﺎﺷﺔ ‪ Data Link Properties‬اﻟﺘﻲ ﺳﺒﻖ اﻟﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﯾﻤﻜﻨﻨﺎ اﻵن اﺳﺘﺨﺪام ﻧﻔﺲ اﻻﺗﺼﺎل ﺛﻢ اﻟﻀﻐﻂ‬
‫‪Next‬‬

‫وﻣﻨﮭﺎ ﺳﻮف ﺗﻈﮭﺮ اﻟﺸﺎﺷﺔ ‪ Choose a Query Type‬ﻻﺧﺘﯿﺎر ﻧﻤﻂ أو ﻧ ﻮع اﻻﺳ ﺘﻌﻼم وﯾﻮﺟ ﺪ أﻛﺜ ﺮ ﻣ ﻦ‬
‫ﻧ ﻮع أوﻟﮭ ﻢ ھ ﻮ ﺟﻤﻠ ﺔ ‪ SQL‬واﻻﺧﺘﯿ ﺎر اﻟﺜ ﺎﻧﻲ واﻟﺜﺎﻟ ﺚ ﺧﺎﺻ ﯿﻦ ب ‪ Procedures‬وھ ﻲ ﻋﺒ ﺎرة ﻋ ﻦ ﺟﻤ ﻞ‬
‫ﻣﺨﺰﻧﺔ داﺧﻞ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﯾﻤﻜﻨﻨﺎ ﺗﻨﻔﯿﺬھﺎ ﻣﻦ أي ﻣﻜﺎن ﻋﻠﻲ اﻟﻘﺎﻋﺪة وﻟﻜﻨﻨﺎ ﻟﻢ ﻧﺘﻜﻠﻢ ﺣﺘﻰ اﻵن ﻋﻠﻲ ھﺬا اﻟﺠﺰء‬
‫ﺳﻮف ﻧﺨﺘﺎر ‪ Use SQL Statement‬ﺛﻢ ﻧﻀﻐﻂ ‪Next‬‬

‫‪١٣٥‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ﺳ ﻮف ﺗﻈﮭ ﺮ ﻟﻨ ﺎ ﺷﺎﺷ ﺔ ‪ Generate the SQL Statements‬ﯾﻤﻜﻨ ﻚ ﻛﺘﺎﺑ ﺔ ﺟﻤﻠ ﺔ اﻻﺳ ﺘﻌﻼم ﻛﻤ ﺎ‬
‫ﺗﻌﻠﻤﻨﺎھﺎ ﻣﻦ ﻗﺒ ﻞ ﻓ ﻲ ﻣﺮﺑ ﻊ اﻟ ﻨﺺ اﻟﻤﻮﺟ ﻮد ﻓ ﻲ ﻣﻨﺘ ﺼﻒ اﻟ ﺸﺎﺷﺔ أو اﻟ ﻀﻐﻂ ﻋﻠ ﻲ اﻟ ﺰر ‪Query Builder‬‬
‫ﻹﻇﮭﺎر ﻣﺴﺎﻋﺪ ﻟﺒﻨﺎء ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﻓﺄﺿﻐﻂ ﻋﻠﯿﮫ‬

‫ﺳﻮف ﯾﻈﮭﺮ ﻟﻨﺎ اﻟﺸﻜﻞ اﻟﺘ ﺎﻟﻲ وھ ﻮ ‪ Add Table‬وھ ﻮ ﯾ ﺸﺒﮫ ﻣ ﺎ ﺗﻌﻠﻤﻨ ﺎه ﻓ ﻲ ‪ SQL Server‬ﻓﻨﺨﺘ ﺎر أﺳ ﻢ‬
‫اﻟﺠﺪول ‪ Teacher‬ﺛﻢ ﻧﻀﻐﻂ ‪Add‬‬
‫وﻣﺒﻌﺪھﺎ ﻧﺨﺘﺎر ‪Close‬‬
‫ﺳﻮف ﯾﻈﮭﺮ ﻟﻨﺎ ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬
‫ھﻮ ﺑﻨﺎء اﻻﺳﺘﻌﻼﻣﺎت اﻟﺬي ﺗﻌﻠﻤﻨﺎه ﻣﻦ ﻗﺒﻞ ﻓﻲ‬
‫‪ SQL Server‬ﻣﻊ اﻷﺷﻜﺎل ‪ Pans‬ﻧﻌﻢ‬
‫ﺣﺘﻰ اﻟﻘﺎﺋﻤﺔ ﻓﻠﻨﺎ أن ﻧﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ‬
‫ﻣﻦ ﻗﺒﻞ ﺑﻜﻞ ﺗﻔﺎﺻﯿﻞ ﻣﺎ ذﻛﺮﻧﺎ‬
‫ﻧﻜﻮن ﺑﮫ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم اﻟﻤﻄﻠﻮﺑﺔ ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﺑﻌﺪھﺎ ﻧﻀﻐﻂ ﻋﻠﻲ ‪ OK‬ﻟﺘﻈﮭﺮ ﻟﻨﺎ ﺟﻤﻠﺔ‬


‫اﻻﺳﺘﺮﺟﺎع ‪ Select‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ‬

‫وﯾﻤﻜﻨﻨﺎ رؤﯾﺔ ﺟﻤﻠﺔ ‪ SQL‬ﻣﻜﺘﻮﺑﺔ ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ وﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻞ اﻟﺰر ‪ Advanced Options‬ﺳﯿﻈﮭﺮ‬
‫ﻟﻨﺎ ﻋﺪة اﺧﺘﯿﺎرات اﻻﺧﺘﯿﺎر اﻷول ﯾﻔﯿﺪ ﺑﺄﻧﮫ ﺳﻮف ﯾﺘﻢ أﻧﺘ ﺎج أﻣ ﺮ اﻹﺿ ﺎﻓﺔ واﻟﺘﻌ ﺪﯾﻞ واﻟﺤ ﺬف ﺗﻠﻘﺎﺋﯿ ﺎ ﺑﻨ ﺎءا ﻋﻠ ﻲ‬
‫ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع اﻟﺘﻲ ﺗﻢ ﻋﻤﻠﮭﺎ اﻵن ) ﺗﺬﻛﺮ أﻧﮫ ﻟﻮ ﻛﺎﻧﺖ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﺟﻤﻠ ﺔ ﻣﻌﻘ ﺪة وﻣ ﻦ أﻛﺜ ﺮ ﻣ ﻦ ﺟ ﺪول‬
‫ﻣﺜﻼ وﻻ ﯾﻨﻄﺒﻖ ﻋﻠﯿﮭﺎ اﻟ ﺸﺮوط اﻟﻤﻮﺿ ﺤﺔ ﻓ ﻲ اﻟﺠ ﺰء اﻟﺨ ﺎص ﺑﺎﻻﺳ ﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇ ﺔ وأﻧﻮاﻋﮭ ﺎ ﻓ ﻲ ‪SQL‬‬
‫‪ Server‬ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ ﻟﻦ ﯾﻜﻮن ھﺬا اﻻﺧﺘﯿﺎر ﻣﺘ ﺎح ( وأن اﻻﺧﺘﯿ ﺎر اﻟﺜ ﺎﻧﻲ ﯾﻔﯿ ﺪ ﺑﺘﻌ ﺪﯾﻞ ﺟﻤﻠ ﺔ ‪Update ,‬‬
‫‪ Delete‬ﻟﻜﻲ ﯾﻜﺘﺸﻔﻮا ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻣﻨ ﺬ ﺗﺤﻤﯿ ﻞ اﻟﺒﯿﺎﻧ ﺎت داﺧ ﻞ اﻟﻜ ﺎﺋﻦ ‪ DataSet‬ﻣ ﺎ اﻟ ﺬي ﺗﻐﯿ ﺮ وھ ﺬا‬
‫اﻻﺧﺘﯿﺎر ﯾﺴﺎﻋﺪ ﺑﺎﻟﻄﺒﻊ ﺣﯿﻨﻤﺎ ﯾﻜﻮن اﻟﺘﻌﺪﯾﻞ أو اﻟﻤﺴﺢ ﻛﺜﯿﺮ ﻓﻲ ھﺬه اﻟﺼﻔﺤﺔ وﻟﺪي أﻛﺜ ﺮ ﻣ ﻦ ﻣ ﺴﺘﺨﺪم وﻻ أرﯾ ﺪ‬
‫أن ﯾﺤﺪث أﺧﻄﺎ ﻓﻤﻦ اﻟﻤﻤﻜﻦ أن ﯾﻌﺪل اﺛﻨﺎن ﻗﯿﻤﮫ ﻣﺮة واﺣﺪة واﻻﺧﺘﯿﺎر اﻷﺧﯿﺮ ﺧ ﺎص ﺑﻨ ﺸﯿﻂ ﻣﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت‬
‫داﺋﻤﺎ ﺑﺎﻟﺒﯿﺎﻧﺎت اﻟﺤﺪﯾﺜﺔ ﻋﻨﺪ ﺣﺪوث أي ﺗﻐﯿﯿﺮ وﺑﻌﺪھﺎ أﺿﻐﻂ ‪ Ok‬ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫‪١٣٦‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﺑﻌﺪ اﻟﻀﻐﻂ ﻋﻠﻲ ‪ OK‬واﻻﺧﺘﯿﺎرات ﻛﻤﺎ ھ ﻲ ﯾﻤﻜﻨ ﻚ اﻟ ﻀﻐﻂ ﻋﻠ ﻲ ‪ Next‬ﻓﺘﻈﮭ ﺮ ﻟ ﻚ اﻟ ﺸﺎﺷﺔ اﻟﺘﺎﻟﯿ ﺔ وﺗﻌﻄﯿ ﻚ‬
‫ﺗﻘﺮﯾﺮ ﻋﻦ ﻧﺘﺎﺋﺞ اﻻﺳﺘﻌﻼم وﻗﺪراﺗﮫ ﻛﺎﻟﺘﺎﻟﻲ‬

‫أﺿﻐﻂ ‪ Finish‬ﻟﺘﺤﻤﯿﻞ اﻟﺒﯿﺎﻧ ﺎت ﻋﻠ ﻲ ‪ Data Adapter‬وﻟﻌﻤ ﻞ ‪ Connection‬ﻓ ﻲ ھ ﺬه اﻟ ﺼﻔﺤﺔ واﻵن‬


‫ﻛﻤ ﺎ ﺗﻌﻠﻤﻨ ﺎ ﻣ ﻦ ﻗﺒ ﻞ ﯾﻤﻜﻨﻨ ﺎ اﻟﻮﻗ ﻮف ﻋﻠ ﻲ ‪ DataAdapter1‬وﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻧﺨﺘ ﺎر ‪Generate‬‬
‫‪ DataSet‬ﻓﺘﻈﮭﺮ ﻟﻨ ﺎ اﻟ ﺸﺎﺷﺔ ‪ Generate Dataset‬ﻧ ﻀﻐﻂ ﻣﻨﮭ ﺎ ﻋﻠ ﻲ ‪ Ok‬ﻛﻤ ﺎ ﺳ ﺒﻖ ﺛ ﻢ ﻣ ﻦ ﺻ ﻨﺪوق‬
‫اﻷدوات ﻣ ﻦ اﻟﺠ ﺰء ‪ Web Forms‬ﻧﺨﺘ ﺎر ‪ DataGrid‬وﻓ ﻲ اﻟﺨﺎﺻ ﯿﺔ ‪ ID‬ﻟﮭ ﺎ ﻧ ﺴﻤﯿﮭﺎ ‪grdTeacher‬‬
‫وﻧﻀﺒﻂ اﻟﺨﺎﺻﯿﺔ ‪ DataSource‬ﻟﮭﺎ إﻟﻲ ‪ DataSet11‬وﻧﻀﺒﻂ اﻟﺨﺎﺻﯿﺔ ‪ DataMember‬ﻋﻠﻲ اﻟﺠﺪول‬
‫‪ Teacher‬ﺛﻢ ﺑﻌﺪ ذﻟﻚ ﻣﻦ ﺻﻨﺪوق اﻷدوات ﻧﺨﺘ ﺎر ‪ Button‬وﻧ ﻀﺒﻂ اﻟﺨﺎﺻ ﯿﺔ ‪ ID‬ﻟ ﮫ ﻟﺘﻜ ﻮن ‪BtnLoad‬‬
‫واﻟﺨﺎﺻﯿﺔ ‪ Text‬ﻟﺘﻜﻮن ‪ Load‬وﻧﻀﻐﻂ ﻣﺮﺗﯿﻦ ﻋﻠﻲ اﻟﺰر ﻟﻨﻔﺘﺢ ﺷﺎﺷﺔ اﻟﻜﻮد وﻧﻜﺘﺐ ﺑﮭﺎ اﻷﻣﺮ اﻟﺘﺎﻟﻲ اﻟﺬي ﺗﻢ‬
‫ﺷﺮﺣﮫ ﺳﺎﺑﻘﺎ ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﻣﻦ ﺷﺎﺷ ﺔ ‪ Solution Explorer‬ﻧ ﻀﻐﻂ ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس ﻋﻠ ﻲ ‪ MyForm.aspx‬وﻧﺨﺘ ﺎر ‪Set AS‬‬
‫‪ Start Page‬ﻟﺘﻜﻮن ھﻲ ﺻﻔﺤﺔ اﻟﺒﺪء ﻋﻦ اﻟﺘﺸﻐﯿﻞ ﺛﻢ أﺿ ﻐﻂ ‪ Ctrl+F5‬ﻟﯿﻈﮭ ﺮ اﻟ ﺸﻜﻞ اﻟﺘ ﺎﻟﻲ ﻋﻨ ﺪ اﻟ ﻀﻐﻂ‬
‫ﻋﻠﻲ زر ‪Load‬‬

‫‪١٣٧‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وھﺬا ﻣﻠﺨﺺ ﺑﺎﻟﺨﻄﻮات اﻟﺘﻲ أﺗﺒﻌﻨﺎھﺎ‬


‫‪ .١‬ﻋﻤﻞ اﺗﺼﺎل ﺑﺎﻟﻘﺎﻋﺪة ‪ Connection‬ﺟﺪﯾﺪ أو اﺗﺼﺎل ﻣﻮﺟﻮد ﻣﻦ ﻗﺒﻞ‪.‬‬
‫‪ .٢‬ﺳﺤﺐ اﻟﻜﺎﺋﻦ ‪ OleDbDataAdapter‬أو ‪ SqlDataAdapter‬ﻟﻺﻧﺸﺎء ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت‪.‬‬
‫‪ .٣‬اﺳ ﺘﺨﺪام ‪ Data Adapter Configuration Wizard‬ﻣﻌ ﺎﻟﺞ إﻋ ﺪاد ﻣﻼﺋ ﻢ اﻟﺒﯿﺎﻧ ﺎت ‪Data‬‬
‫‪ Adapter‬وإﻧﺸﺎء ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ‪. SQL Select‬‬
‫‪ .٤‬ﺗﻮﻟﯿﺪ ﻣﺠﻤﻮﻋﺔ ﺑﯿﺎﻧﺎت ‪.Generate Dataset‬‬
‫‪ .٥‬رﺑﻂ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﺑﻌﻨﺼﺮ اﻟﺘﺤﻜﻢ ‪. DataSource , DataMember‬‬
‫‪ .٦‬ﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ‪ Dataset‬ﺑﺎﻟﺒﯿﺎﻧﺎت ﻣﻦ ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت ‪ Data Adapter‬ﻣﻦ ﺧﻼل اﻟﻜﻮد ‪.‬‬

‫ﯾﻤﻜﻨﻨﺎ إﺿﺎﻓﺔ ‪ sqlDataAdapter‬ﺟﺪﯾﺪة وﺑﻨﻔﺲ اﻟﺨﻄﻮات اﻟﺴﺎﺑﻘﺔ ﻧﺮﺑﻄﮭﺎ ﺑﺠﺪول ‪ Department‬ﻋﻠ ﻲ‬


‫ﺳﺒﯿﻞ اﻟﻤﺜﺎل وﻋﻨﺪ اﻟﻀﻐﻂ ﻋﻠﯿﮭﺎ ﺛﻢ اﺧﺘﯿﺎر ‪ Generate Dataset‬ﺳﻮف ﺗﻈﮭﺮ ﻧﻔﺲ ‪ Dataset‬ﻛﺎﻟﺘﺎﻟﻲ‬

‫ﻧﺤﺪد اﻟﺠﺪول اﻟﺠﺪﯾﺪ وﻣﻌﮫ اﻟﻘﺪﯾﻢ ﺛﻢ ﻧﻀﻐــــــــﻂ‬


‫‪ OK‬ﻟﺘﺤﺘﻮي ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧـــــــﺎت ‪Dataset‬‬
‫ﻋﻠﻲ اﻟﺠﺪوﻟﯿﻦ ﻣﻌﺎ وﯾﻤﻜﻨﻨﺎ إﺿﺎﻓﺔ ‪DataGrid‬‬
‫ﺟﺪﯾﺪة وﻧﻀﺒﻂ اﻟﺨﺎﺻﯿﺔ ‪ DataSource‬ﻋﻠﻲ‬
‫‪ DataSet11‬أﯾﻀﺎ وﻟـﻜــــــــــــــﻦ اﻟﺨﺎﺻــــــﯿﺔ‬
‫‪ DataMember‬ﻧﻀﺒﻄﮭﺎ ﻋﻠﻲ اﻟﺠﺪول اﻟﺠﺪﯾﺪ‬
‫‪ Deaprtment‬وﻓﻲ اﻟﻜﻮد ﻧــــــﺰود ﺟﻤﻠﺔ ﻣﻠﺊ‬
‫‪ Dataset‬ﻣﻦ ‪ Data Adapter‬اﻟﺠﺪﯾﺪة ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﺑﻌﺪھﺎ أﺿﻐﻂ ﻋﻠﻲ ‪ Ctrl+F5‬ﻟﺘﺤﺼﻞ ﻋﻠﻲ ﺟﺪوﻟﯿﻦ ﯾﻌﻤﻼن ﻋﻠﻲ ﻧﻔﺲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻛﺎﻟﺘﺎﻟﻲ‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬


‫‪١٣٨‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫رﺑﻂ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ ﺑﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ‪Binding Controls to Database‬‬


‫ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜ ﺎل رﺑ ﻂ ﻋﻨ ﺼﺮ ﺗﺤﻜ ﻢ ﻣﺮﺑ ﻊ ﻧ ﺺ ﺑﺤﻘ ﻞ داﺧ ﻞ ﺟ ﺪول ﻣ ﺜﻼ ﺑﺤﻘ ﻞ أﺳ ﻢ اﻟﻤﻌﻠ ﻢ وﻋﻨ ﺪ‬
‫اﻟﺘﺠﻮل داﺧﻞ ﺑﯿﺎﻧﺎت اﻟﺴﺠﻼت ﺑﺎﻟﺠﺪول ﯾﺘﻐﯿﺮ ﻗﯿﻤﺘﮫ ﺑﺎﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺗﻨﺎﺳﺒﮫ ﻓﻲ ﺻﻒ اﻟﺒﯿﺎﻧﺎت اﻵن أو ﻋﻨﺪﻣﺎ ﻧﺮﺑﻂ‬
‫ﻋﻨﺼﺮ اﻟﺘﺤﻜﻢ ‪ DataGrid‬ﻛﻤﺎ ﺳﺒﻖ وﺗﻌﻠﻤﻨ ﺎ ﺑﺠ ﺪول ﻓ ﻲ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت وﻟﻜ ﻦ ھﻨ ﺎك ﻓ ﺮق ﻓ ﻲ اﻟﺤ ﺎﻟﺘﯿﻦ ﻓﮭ ﺬا‬
‫ﯾﺮﺑﻂ ﺣﻘﻞ وذاك ﯾﺮﺑﻂ ﺟﺪول وﻣﻦ ھﺬا اﻟﻤﻨﻄﻠﻖ ﯾﺘﻀﺢ أن ھﻨﺎك أﻧﻮاع ﻟﻠﺮﺑﻂ‬
‫أوﻻ ‪ :‬اﻟﺮﺑﻂ اﻟﺒﺴﯿﻂ ‪Simple Binding‬‬
‫وﯾﺴﻤﺢ ھﺬا اﻟﻨﻮع ﺑﺈﻇﮭﺎر ﻋﻨﺼﺮ ﺑﯿﺎﻧﺎت واﺣﺪ ﻣﺜﻼ ﻗﯿﻤﮫ أﺣﺪ اﻟﺤﻘﻮل ﻣﻦ ﺟﺪول ﻣﺎ داﺧﻞ ﻋﻨﺼﺮ ﺗﺤﻜﻢ واﻟﺠﺪﯾ ﺪ‬
‫ﻓﻲ ھﺬا اﻧﮫ ﻣﻦ ﺧﻼل ‪ ASP.NET‬ﻣﻊ ‪ ADO.NET‬ﯾﻤﻜﻨ ﻚ رﺑ ﻂ أي ﺧﺎﺻ ﯿﺔ ﺑﺤﻘ ﻞ ﻓ ﻲ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ﺳ ﻮاء‬
‫ﻛ ﺎن ﺧﺎﺻ ﯿﺔ ‪ Text‬ﻟﻌﻨ ﺼﺮ ﻣﺮﺑ ﻊ ﻧ ﺺ أو ﺣﺘ ﻰ ﺣﺠﻤ ﮫ أو اﻟ ﺼﻮرة أو ﻟ ﻮن اﻟﺨﻠﻔﯿ ﺔ واﻟﻜﺜﯿ ﺮ ﻣ ﻦ اﻟﺨ ﺼﺎﺋﺺ‬
‫اﻷﺧﺮى ﻋﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﻟﺮﺑﻂ ﻋﻨﺼﺮ ﺻﻨﺪوق ﻧﺺ ‪ TextBox‬ﺑﺤﻘﻞ ﻣﺎ ﻣﻦ ﺟﺪول ﻧﺘﺒﻊ اﻵﺗﻲ‬
‫ﻧﻨﺸﺊ ﻣﻠﻒ ﺟﺪﯾ ﺪ ﻣ ﻦ ﻗﺎﺋﻤ ﺔ ‪ Project>>Add Web Form‬وﻣ ﻦ اﻟ ﺸﺎﺷﺔ أﺧﺘ ﺮ ‪ Web Form‬وﻓ ﻲ‬
‫ﺧﺎﻧ ﺔ ‪ Name‬أﻋﻄ ﻲ أﺳ ﻢ ﻟﻠﻨﻤ ﻮذج وﻟ ﯿﻜﻦ ‪ FormTeacher.aspx‬وأﺿ ﻐﻂ ‪ Open‬وﻣ ﻦ ﺻ ﻨﺪوق‬
‫اﻟﺨﺼﺎﺋﺺ أﺿﻐﻂ ﻣﺮﺗﯿﻦ ﺑﺎﻟﻤﺎوس ﻋﻠﻲ ‪ Textbox‬ﻟﯿﻮﺿﻊ ﻋﻠﻲ ‪ Web Form‬وﺳﻮف ﻧ ﺮﺑﻂ ھ ﺬا اﻟﻌﻨ ﺼﺮ‬
‫ﺑﺤﻘﻞ رﻗﻢ اﻟﻤﻌﻠﻢ ﻓﻨﺴﺤﺐ ﻣﻦ ﺟ ﺪول اﻷدوات ‪ Toolbox‬ﻣ ﻦ اﻟﺠ ﺰء ‪ Data‬اﻟﻌﻨ ﺼﺮ ‪sqlDataAdapter‬‬
‫ﻟﻌﻤ ﻞ ﻣﻼﺋ ﻢ ﻟﻠﺒﯿﺎﻧ ﺎت واﻻﺗ ﺼﺎل ﺑﺎﻟﻘﺎﻋ ﺪة ﻓﯿﻈﮭ ﺮ ﻟﻨ ﺎ ﻣﻌ ﺎﻟﺞ اﺗ ﺼﺎل ﻣﻼﺋ ﻢ اﻟﺒﯿﺎﻧ ﺎت ‪Data Adapter‬‬
‫‪ Configuration Wizard‬اﻟﺬي ﺗﻌﻤﻠﻨﺎ ﻣﻌﮫ ﻣﻦ ﻗﺒﻞ ﻧﺘﺒﻊ ﻧﻔﺲ اﻟﺨﻄﻮات اﻟ ﺴﺎﺑﻘﺔ ﻋﻠ ﻲ أن ﯾ ﺘﻢ اﺳ ﺘﺮﺟﺎع‬
‫ﻛﺎﻓﺔ ﺣﻘﻮل ﺟﺪول اﻟﻤﺪرس)اﻟﻤﻌﻠﻢ(‬
‫وﺑﻌﺪھﺎ ﻧﻀﻐﻂ ﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ ‪ sqlDataAdapter1‬أﺳﻔﻞ اﻟﻨﻤﻮذج وﻧﺨﺘﺎر ‪Generate Dataset‬‬
‫وﻣ ﻦ اﻟﻤﺮﺑ ﻊ اﻟﺤ ﻮاري ‪ Generate Dataset‬ﻧﺘ ﺮك اﻹﻋ ﺪادات اﻻﻓﺘﺮاﺿ ﯿﺔ وﻧ ﻀﻐﻂ ‪ Ok‬وﺑﮭ ﺬا ﻧﻜ ﻮن ﻗ ﺪ‬
‫أﻧﺸﺄﻧﺎ اﺗﺼﺎل ﺑﺎﻟﻘﺎﻋﺪة وﻋﻤﻞ ﻣﻼﺋﻢ ﻟﻠﺒﯿﺎﻧﺎت وﺑﻌﺪھﺎ أﻧﺸﺄﻧﺎ ﻣﺠﻤﻮﻋ ﺔ ﺑﯿﺎﻧ ﺎت ‪ Dataset‬ﻟﻠﺠ ﺪول ‪Teacher‬‬
‫وﻧﺤﻦ اﻵن ﺟﺎھﺰﯾﻦ ﻟﻠﻌﻤﻞ وھﺬا ﻣﺎ ﺗﻢ ﺷﺮﺣﮫ ﺳﺎﺑﻘﺎ‬
‫ﻧﻘﻒ ﻋﻠﻲ اﻟﻌﻨﺼﺮ ‪ TextBox1‬وﻧﻐﯿ ﺮ اﻟﺨﺎﺻ ﯿﺔ ‪ ID‬ﻟﺘﻜ ﻮن ‪ txtTeacherId‬وﺑﻌ ﺪھﺎ اﻟﺨﺎﺻ ﯿﺔ اﻟﻤ ﺴﺌﻮﻟﺔ‬
‫ﻋﻦ رﺑﻂ اﻟﺒﯿﺎﻧﺎت ‪ Data Bindings‬ﻧﻀﻐﻂ ﻋﻠﯿﮭﺎ ﻣﺮﺗﯿﻦ ﻓﯿﻈﮭﺮ ﻟﻨﺎ اﻟﻤﺮﺑﻊ اﻟﺤﻮاري اﻟﺘﺎﻟﻲ‬

‫ﻧﺨﺘﺎر ﻣﻦ ‪ Bindable Properties‬اﻟﺨﺎﺻﯿﺔ اﻟﺘﻲ ﻧﺮﯾﺪ رﺑﻄﮭﺎ وھﻲ اﻵن ‪ Text‬وﻟﺪﯾﻨﺎ ﺧﯿﺎران ﻓﻲ اﻟﺠﺰء‬
‫اﻷﯾﻤ ﻦ ‪ simple binding‬و ‪ custom binding expression‬اﻷول ﻟﻼﺧﺘﯿ ﺎر ﻟﻌﻤ ﻞ اﻻرﺗﺒ ﺎط‬
‫واﻟﺜﺎﻧﻲ ﻟﻜﺘﺎﺑﺔ اﻟﺘﻌﺒﯿﺮ اﻟﻨﺎﺗﺞ ﻋﻨﮫ اﻻرﺗﺒ ﺎط ﻧﺨﺘ ﺎر اﻻﺧﺘﯿ ﺎر اﻷول وﻣﻨ ﮫ ﻧﺨﺘ ﺎر ‪ Dataset11‬وﻣﻨﮭ ﺎ اﻟﺠ ﺪول‬
‫‪ Teacher‬وﻣﻨﮭ ﺎ ]‪ DefaultView>>DefaultView.[0‬ﻟﻠﻮﺻ ﻮل ﻟﺤﻘ ﻮل اﻟﺠ ﺪول ﺛ ﻢ ﻧﺨﺘ ﺎر اﻟﺤﻘ ﻞ‬
‫اﻟﻤﺮاد ﺛﻢ ﻧﻀﻐﻂ ‪ ok‬وﺑﮭﺬا ﻧﻜﻮن رﺑﻄﻨﺎ اﻟﺨﺎﺻﯿﺔ ‪ Text‬ﺑﺤﻘﻞ رﻗﻢ اﻟﻤﻌﻠﻢ ﺑﺠ ﺪول اﻟﻤﻌﻠ ﻢ ﻧﻜ ﺮر ھ ﺬه اﻟﺨﻄ ﻮات‬
‫ﻣﻊ ﺑﺎﻗﻲ اﻟﺤﻘﻮل ﻋﻠﻲ أن ﻧﺨﺘﺎر ﻋﻨﺎﺻﺮ ﺗﺤﻜﻢ ‪ Label‬ﻟﺘﻮﺿﯿﺢ ﻣﺎ ﯾﻘﻮم ﺑﮫ اﻟﺤﻘﻞ‬

‫‪١٣٩‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﻣﻦ ‪ Solution Explorer‬ﻧﺨﺘ ﺎر ‪ FormTeacher‬ﺑﯿﻤ ﯿﻦ اﻟﻤ ﺎوس وﻧﺨﺘ ﺎر ‪View In Browser‬‬


‫ﻟﯿﻜﻮن اﻟﺸﻜﻞ ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﺗﻼﺣﻆ أن اﻟﻌﻨﺎﺻﺮ أﺧﺮﺟﺖ اﻟﻨﺘﺎﺋﺞ ﻣﻦ اﻟﺠﺪول وﻟﻜﻦ ﻷول ﺣﻘﻞ ﺑﺎﻟﺠﺪول‬


‫وﻧﺴﺘﻄﯿﻊ أﯾﻀﺎ ﻋﻤﻞ ذﻟﻚ اﻟﺮﺑﻂ اﻟﺒﺴﯿﻂ ﻣﻦ ﺧﻼل اﻟﻜﻮد وذﻟﻚ ﻣﻦ ﺧﻼل اﺳﺘﺨﺪام اﻟﺨﺎﺻﯿﺔ ‪DataBindings‬‬

‫‪.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‬‬

‫ﺛﺎﻧﯿﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﻤﺮﻛﺐ )اﻟﻤﻌﻘﺪ( ‪Complex Binding‬‬


‫ﻟﻮ ﻻﺣﻈﻨﺎ ﻓﻲ اﻟﺮﺑﻂ اﻟﺒﺴﯿﻂ أﻧﻨﺎ ﻧﺮﺑﻂ ﻗﻄﻌﺔ ﺑﯿﺎﻧﺎت واﺣﺪة ﻓﻲ ﺻﻒ ﻣﺎ وﻟﻜﻦ ﻓﻲ اﻟﺮﺑﻂ ﻣﻦ اﻟ ﻨﻤﻂ اﻟﻤﺮﻛ ﺐ ﻓﮭ ﻮ‬
‫ﯾﺴﻤﺢ ﻟﻨ ﺎ ﺑ ﺮﺑﻂ أﻛﺜ ﺮ ﻣ ﻦ ﺣﻘ ﻞ وﺻ ﻒ ﻓ ﻲ ﻣ ﺮة واﺣ ﺪة ﺑﻌﻨ ﺼﺮ وﻗ ﺪ رأﯾﻨ ﺎ ذﻟ ﻚ ﻣ ﻦ ﻗﺒ ﻞ ﻋﻨ ﺪﻣﺎ رﺑﻄﻨ ﺎ اﻟﻌﻨ ﺼﺮ‬
‫‪ DataGrid‬ﺑﺠﺪول ﻛﺎﻣﻞ ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وأﻛﺜﺮ اﻟﺨﺼﺎﺋﺺ اﻟﺸﺎﺋﻌﺔ ﻟﺮﺑﻂ اﻟﺒﯿﺎﻧﺎت )ﻓﻲ ﻣﻌﻈﻢ اﻟﻌﻨﺎﺻﺮ(‬
‫‪ : DataSource‬ﻧﻘﻮم ﻣﻦ ﺧﻼﻟﮭﺎ ﺑﻀﺒﻂ ﻣﺼﺪر اﻟﺒﯿﺎﻧﺎت ‪.‬‬
‫‪ : DataMember‬ﻧﻘ ﻮم ﻣ ﻦ ﺧﻼﻟﮭ ﺎ ﺑ ﻀﺒﻂ ﻋﻨ ﺼﺮ ﻣ ﻦ ﻋﻨﺎﺻ ﺮ ﻣ ﺼﺪر اﻟﺒﯿﺎﻧ ﺎت اﻟﻤﻮﺟ ﻮد ﻓ ﻲ ﺧﺎﺻ ﯿﺔ‬
‫‪.DataSource‬‬
‫‪ : DataKeyField‬ﻧﻘ ﻮم ﻣ ﻦ ﺧﻼﻟﮭ ﺎ ﺗﺤﺪﯾ ﺪ اﻟﻤﻔﺘ ﺎح اﻟﺮﺋﯿ ﺴﻲ ﻓ ﻲ ﻣ ﺼﺪر اﻟﺒﯿﺎﻧ ﺎت اﻟﻤﺤ ﺪد ﻓ ﻲ اﻟﺨﺎﺻ ﯿﺔ‬
‫‪.DataSource‬‬
‫‪ : DataTextField‬ﻧﻘﻮم ﻣﻦ ﺧﻼﻟﮭﺎ ﺑﺘﺤﺪﯾﺪ أﺳﻢ اﻟﺤﻘﻞ ﻣﻦ ﻣﺼﺪر اﻟﺒﯿﺎﻧﺎت‬
‫‪ : DataTextFormatString‬ﻧﻘﻮم ﻣﻦ ﺧﻼﻟﮭﺎ ﺗﺤﺪﯾﺪ ﺗﻨﺴﯿﻖ ﻋﺮض اﻟﻘﯿﻤﺔ‪.‬‬
‫‪ : DataValue‬ﯾﺴﺘﺨﺪم ﻓﻲ اﻟﻌﻨﺎﺻﺮ اﻟﺘﻲ ﻟﮭﺎ ﻗﯿﻤﺔ ﻇﺎھﺮة ﻟﻠﻤﺴﺘﺨﺪم وﻗﯿﻤﺔ داﺧﻠﯿﮫ ﯾﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻓﻤﺜﻼ ﻗﺎﺋﻤﺔ‬
‫ﻗﺎﺋﻤﺔ ﻣﻨﺴﺪﻟﺔ ﺗﻌﺮض أﺳﻢ اﻟﻘﺴﻢ وﻟﻜﻦ ﻋﻨﺪ إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﯾﺪﺧﻞ ﻓﻲ اﻟﺠﺪول اﻟﺮﻗﻢ وھﻲ اﻟﻘﯿﻤﺔ‬
‫اﻟﺪاﺧﻠﯿﺔ واﺳﻢ اﻟﻘﺴﻢ ھﻲ اﻟﻘﯿﻤﺔ اﻟﻈﺎھﺮة‪.‬‬
‫ﻓﻌﻠﻲ ﺳﺒﯿﻞ اﻟﻤﺜﺎل ﯾﻤﻜﻨﻨﺎ رﺑﻂ ‪ DataGrid‬ﻛﻤﺎ ﻓﻌﻠﻨﺎ ﻣﻦ ﻗﺒﻞ وﻟﻜﻦ ھﺬه اﻟﻤﺮة ﻣﻦ ﺧﻼل اﻟﻜﻮد ﻣﺒﺎﺷﺮة ﺑ ﻀﺒﻂ‬
‫اﻟﺨﻮاص ﻣﻦ اﻟﻜﻮد وھﺬا ﺑﺎﻟﻄﺒﻊ ﺑﻌﺪ ﺿﺒﻂ اﻻﺗﺼﺎل وﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت وﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ‬

‫‪١٤٠‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫‪DataGrid1.DataSource = DataSet11‬‬
‫"‪DataGrid1.DataMember = "Teacher‬‬
‫)(‪DataSet11.Clear‬‬
‫)‪SqlDataAdapter1.Fill(DataSet11‬‬
‫)(‪Page.DataBind‬‬
‫ﻛﻤﺎ ﻓﻌﻠﻨﺎ ﻣﻦ ﻗﺒﻞ ﻓﻲ اﻟﺤ ﺪث ‪ Form_Load‬ﻧﻜﺘ ﺐ ھ ﺬا اﻟﻜ ﻮد ﻓﮭ ﻮ ﯾ ﻀﺒﻂ اﻟﺨﺎﺻ ﯿﺔ ‪ DataSource‬ﻋﻠ ﻲ‬
‫ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﺛﻢ ﻧﻀﺒﻂ اﻟﺨﺎﺻﯿﺔ ‪ DataMember‬ﻋﻠﻲ اﻟﺠ ﺪول اﻟ ﺬي ﺳ ﻮف ﺗ ﺄﺗﻲ ﻣﻨ ﮫ اﻟﺒﯿﺎﻧ ﺎت وﺑ ﺎﻗﻲ‬
‫اﻟﻜﻮد ﻛﻤﺎ ﺳﺒﻖ وﺷﺮﺣﻨﺎه‬
‫وﻟﻌﻤﻞ ﻣﺜﺎل ﺗﻮﺿﯿﺤﻲ ﻟﻄﺮﯾﻘﺘﻲ اﻟﺮﺑﻂ اﻟﺒﺴﯿﻄﺔ واﻟﻤﺮﻛﺒﺔ ﻧﺘﺒﻊ اﻵﺗﻲ‬

‫اﻟﺘﺠﻮل ﻓﻲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ‪Navigating In Dataset‬‬


‫ﺗﻀﺎف ﺑﻌﺾ اﻷزرار اﻟﺘﻲ ﯾﻤﻜﻨﻨﺎ ﻣﻦ ﺧﻼﻟﮭﺎ اﻻﻧﺘﻘﺎل إﻟﻲ اﻷﻣﺎم واﻟ ﻲ اﻟﺨﻠ ﻒ واﻟ ﺴﺠﻞ اﻟﺘ ﺎﻟﻲ واﻟ ﺴﺠﻞ اﻟ ﺴﺎﺑﻖ‬
‫ﻟﻠﺘﺠﻮل داﺧﻞ اﻟﺼﻔﻮف وھﺬا ﻣﺎ ﯾﻌﺮف ب ‪ Data Control‬ﻗﺪﯾﻤﺎ وﺗﻜﻤﻦ اﻟﻤ ﺸﻜﻠﺔ ﻓ ﻲ أن ﻣﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت‬
‫‪ Dataset‬ﻻ ﺗﺤ ﺎﻓﻆ ﻋﻠ ﻲ رﻗ ﻢ اﻟ ﺼﻒ اﻟﺤ ﺎﻟﻲ ﻟﻠﺒﯿﺎﻧ ﺎت ﻟ ﺬﻟﻚ ﺳ ﻮف ﻧ ﺴﺘﺨﺪم اﻟﻜ ﺎﺋﻦ ‪ Dataview‬ﻣ ﺸﺎھﺪ‬
‫اﻟﺒﯿﺎﻧ ﺎت ﺣﺘ ﻰ ﻻ ﯾﻜ ﻮن أﯾ ﻀﺎ ﺣﻤ ﻼ ﻋﻠ ﻲ ﺗﻄﺒﯿﻘ ﺎت اﻟﻮﯾ ﺐ وﺳ ﻮف ﻧ ﺴﺘﺨﺪم اﻟﺨﺎﺻ ﯿﺔ ‪ RowFilter‬ﻟ ﮫ وذﻟ ﻚ‬
‫ﻻﺧﺘﯿﺎر اﻟﺼﻒ اﻟﺬي ﻧﺮﯾﺪ اﻟﻌﻤﻞ ﻣﻌﮫ اﻟﺘﻲ ﺳﻮف ﺗﻌﺮض‬
‫وﻟﺘﻄﺒﯿﻖ ھﺬا اﻟﻤﺜﺎل أﻧﺸﺎء ﻧﻤﻮذج ﺟﺪﯾﺪ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ و أﻧﺸﺎء ﻣﻼﺋﻢ ﺑﯿﺎﻧ ﺎت ‪ Data Adapter‬وأرﺑﻄ ﮫ ﺑﺠ ﺪول‬
‫‪ Department‬وﻗ ﻢ ﺑﺈﻧ ﺸﺎء ‪ Dataset‬وﺑﻌ ﺪ ذﻟ ﻚ ﻷﻧﻨ ﺎ ﺳ ﻮف ﻧ ﺴﺘﺨﺪم ﻣ ﺸﺎھﺪ اﻟﺒﯿﺎﻧ ﺎت ‪Data View‬‬
‫ﺳﻮف ﻧﺴﺤﺐ اﻟﻌﻨﺼﺮ ‪ DataView‬ﻣﻦ اﻟﺠﺰء ‪ Data‬ﻓﻲ ﺻ ﻨﺪوق اﻷدوات وﻧ ﻀﺒﻂ اﻟﺨﺎﺻ ﯿﺔ ‪Table‬ﻋﻠ ﻲ‬
‫‪ Dataset11.Department‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ‬
‫وﺑﻌﺪ ذﻟﻚ ﻧﻀﯿﻒ ﺛﻼث ﻋﻨﺎﺻﺮ ‪ TextBox‬وﺛﻼث ﻋﻨﺎﺻﺮ ‪Label‬‬
‫وأرﺑﻌﺔ أزرار ﻟﻠﺘﻨﻘﻞ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﻣﻦ اﻟﺨﺎﺻﯿﺔ ‪ DataBindings‬ﻟﻜﻞ ﻋﻨﺼﺮ ‪TextBox‬‬


‫ﻧﻀﺒﻂ ﺑﮭﺎ اﻟﺤﻘﻞ اﻟﻤﻘﺎﺑﻞ ﻟﮭﺎ وﻟﻜﻦ ﻣﻦ ‪DataView1‬‬
‫وﻟﯿﺲ ‪ Dataset1‬ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫وھﻜﺬا ﻣﻊ ﺑﺎﻗﻲ اﻟﺤﻘﻮل وﺑﺎﻗﻲ ﻋﻨﺎﺻـــــــﺮ‬


‫‪ TextBox‬وﻧﻀﯿﻒ اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻟﺘﺤﻤﯿﻞ‬
‫اﻟﺒﯿﺎﻧﺎت ﺑﺪاﺧﻞ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎه‬
‫ﻣﻦ ﻗﺒﻞ وﻋﻨﺪ اﻟﻮﻗﻮف داﺧـــــﻞ اﻟﻨﺎﻓـــــــﺬة‬
‫‪ Solution Explorer‬وﺑﯿﻤﯿﻦ اﻟﻤﺎوس‬
‫ﻧﺨﺘﺎر ‪ View In Browser‬ﯾﻜﻮن اﻟﺸﻜﻞ‬
‫ﻛﺎﻟﺘﺎﻟﻲ وھﻮ ﯾﻌﺮض أو ﺻﻒ ﺑـــﯿﺎﻧﺎت ﻓﻘﻂ‬

‫‪١٤١‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫واﻵن ﻧﺒﺪأ اﻟﻌﻤﻞ ﻟﺤﻔ ﻆ ﻣﻮﻗﻌﻨ ﺎ ﻣ ﻦ ﺿ ﻤﻦ اﻟ ﺴﺠﻼت وﻟﮭ ﺬا ﺳ ﻮف ﻧﻨ ﺸﺊ ﻣﺘﻐﯿ ﺮ وﻧ ﺴﻤﯿﮫ ‪ 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‬‬

‫‪١٤٢‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وھﺬا ھﻮ اﻟﻜﻮد اﻟﻜﺎﻣﻞ ﻟﻼﻧﺘﻘﺎل إﻟﻲ اﻷﻣﺎم ﺧﻄﻮة‬

‫اﻟﻜ ﻮد اﻟﻤﺤ ﺪد ھ ﻮ اﻟﺠﺪﯾ ﺪ اﻟ ﺬي ﺗ ﻢ إﺿ ﺎﻓﺘﮫ ﻓﻠﻘ ﺪ اﺳ ﺘﻠﻤﻨﺎ أوﻻ ﻓ ﻲ اﻟﻤﺘﻐﯿ ﺮ ‪ Index‬اﻟﻘﯿﻤ ﺔ اﻟﻤﻮﺟ ﻮدة ﻓ ﻲ‬
‫‪ ViewState‬وزودﻧ ﺎ ﻋﻠﯿﮭ ﺎ واﺣ ﺪ ﻷﻧﻨ ﺎ ﻧﺮﯾ ﺪ اﻟﺘﻘ ﺪم ﻟﻸﻣ ﺎم واﻟ ﺸﺮط اﻟ ﺬي ﯾﻠﯿﮭ ﺎ اﻟﺨ ﺎص ﺑﺎﺧﺘﺒ ﺎر ھ ﻞ ﻗﯿﻤ ﺔ‬
‫‪ Index‬أﻛﺒﺮ ﻣﻦ ﻋﺪد اﻟﺼﻔﻮف ) أﻧﻘﺼﻨﺎ واﺣﺪ ﻷن اﻷﺳﻠﻮب ‪ Count‬ﯾﻌﺪ اﻟﺤﻘﻮل ﺑﺪاﯾﺔ ﻣﻦ ‪١‬وﻧﻌﻤﻞ ﻧﺤﻦ ﻣﻊ‬
‫اﻷﺳﻠﻮب ) ? (‪ Rows‬ﺑﺪاﯾﺔ ﻣﻦ اﻟﺼﻒ ﺻﻔﺮ ( ﻓ ﺈن ﻛ ﺎن اﻛﺒ ﺮ ﻧ ﻀﺒﻄﮫ ﻋﻠ ﻲ رﻗ ﻢ آﺧ ﺮ ﺻ ﻒ وﺑﮭ ﺬا ﻻ ﯾﺤ ﺪث‬
‫ﺧﻄﺄ‬
‫وﻟﻼﻧﺘﻘﺎل ﻟﻠﺨﻠﻒ ﺧﻄﻮة ﻧﺘﺒﻊ ﻧﻔﺲ اﻟﻜﻮد وﻟﻜﻦ ﻧﺨﺘﺒﺮ ﻟ ﻮ ﻛ ﺎن ‪ Index‬أﻗ ﻞ ﻣ ﻦ اﻟ ﺼﻔﺮ ﻷﻧﻨ ﺎ ﻧﺮﺟ ﻊ وﻧﻘ ﻞ ﺣﺘ ﻰ‬
‫اﻟﺼﻔﺮ ﻟﯿﻜﻮن اﻟﻜﻮد ﻛﺎﻣﻼ ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﻟﻠﻮﺻﻮل إﻟﻲ آﺧﺮ ﺣﻘﻞ ﻧﻌﺘﻤﺪ ﻓﻲ ھﺬا ﻋﻠﻲ اﻟﺨﺎﺻﯿﺔ ‪ Count‬ﻓﮭ ﻲ ﺗﻌﯿ ﺪ ﺑﻌ ﺪ ﻃ ﺮح واﺣ ﺪ ﻣﻨﮭ ﺎ ﻓﮭﺮﺳ ﺖ آﺧ ﺮ‬
‫ﺻﻒ ﺑﯿﺎﻧﺎت وﺑﺬﻟﻚ ﯾﻤﻜﻨﻨﺎ اﻟﻮﺻﻮل وﺑﺪون ﺗﺤﻘﻖ ﻛﺎﻟﺘﺎﻟﻲ‬

‫إﺿﺎﻓﺔ ﺳﺠﻼت داﺧﻞ اﻟﻘﺎﻋﺪة ‪Adding Records Into Database‬‬


‫ﺳﻮف ﻧﺒﻨﻲ ﺷﺎﺷﺔ ﻛﺎﻟﺘﺎﻟﻲ‬
‫ﺑﮫ ﺛﻼث ‪ TextBox‬ﻟﻺدﺧﺎل ﺛﻼث ﺣﻘﻮل ﺑﮭﻢ وزر ‪ Add‬ﻟﻺﺿﺎﻓﺔ ﻣﺎ ﺗﻢ‬
‫ﻛﺘﺎﺑﺘﮫ أﻣﺎ اﻟﻌﻨﺼﺮ ‪ Label‬اﻟﻤﺴﻤﻲ ‪ LblMsg‬ﻓﺴﻮف ﻧﺨﺼﺼﮫ ﻟﻈﮭﻮر‬
‫رﺳﺎﺋﻞ اﻹﻋﻼم ﺑﺎﻟﺨﻄﺄ أو اﻷﻋﻼم ﺑﺎﻹﺿﺎﻓﺔ‬
‫اﻟﻔﻜﺮة ‪ :‬ﺑﻌﺪ ﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ‪ DataSet‬ﺑﺎﻟﺒﯿﺎﻧﺎت ﻣﻦ ﻣﻼﺋﻢ‬
‫اﻟﺒﯿﺎﻧﺎت أﺻﺒﺤﺖ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻣﺤﻤﻠﺔ ﺑﺎﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﻓﻲ اﻟﺠﺪول‬
‫وھﻲ ﻣﺜﻠﮫ ﺗﻤﺎﻣﺎ ﻓﺴﻮف ﻧﺘﻌﺎﻣﻞ ﻣﻌﮭﺎ ﻓﻲ إﺻﺪار أﻣﺮ إﺿﺎﻓﺔ ﺻﻒ إﻟﯿﮭﺎ‬
‫وھﺬا ﻣﻦ ﺧﻼل ﺗﺤﺪﯾﺪ أﺳﻢ اﻟﺠﺪول ﻷن ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻗﺪ ﺗﺤﺘﻮي ﻋﻠﻲ‬
‫أﻛﺜﺮ ﻣﻦ ﺟﺪول وﻟﻜﻦ ﻣﺎ ھﻮ اﻟﺼﻒ اﻟﺬي ﺳﻮف ﯾﻀﺎف ؟ ﺳﻮف ﻧﻌﺮف‬
‫ﻣﺘﻐﯿﺮ ﻣﻦ اﻟﻨﻮع ﺻﻒ وﯾﺄﺧﺬ ﺻﻔﺎ ﺟﺪﯾﺪا ﻓﺎرﻏﺎ ﻻ ﯾﺤﺘﻮي إﻻ ﻋﻠﻲ‬
‫أﺳﻤﺎء اﻟﺤﻘﻮل ﻟﻠﺠﺪول أي أﻧﻨﺎ اﺳﺘﻨﺴﺨﻨﺎ ﺻﻒ ﻟﯿﻜﻮن اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﻠﺠﻤﻠﺔ‬
‫ﻛﺎﻟﺘﺎﻟﻲ‬
‫‪Dim myrow as DataRow‬‬
‫‪").NewRow‬أﺳﻢ اﻟﺠﺪول"(‪myrow = DataSet11.Tables‬‬

‫وﺑﻌﺪ ذﻟﻚ ﻧﻀﯿﻒ إﻟﻲ ھﺬا اﻟﺼﻒ ﻛﻞ ﺣﻘﻞ ﻣﻮﺟﻮد ﻓﻲ اﻟﺠﺪول وﻗﯿﻤﺔ اﻟﺠﺪﯾﺪة ﻛﺎﻟﺘﺎﻟﻲ‬
‫اﻟﻘﯿﻤﺔ اﻟﺠﺪﯾﺪة = )"أﺳﻢ اﻟﺤﻘﻞ "(‪myrow.Add‬‬

‫‪١٤٣‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﺑﻌ ﺪ ذﻟ ﻚ ﻟﻘ ﺪ أﺻ ﺒﺢ ھ ﺬا اﻟ ﺼﻒ ﻣﻤﻠ ﻮء ﺑﺎﻟﺒﯿﺎﻧ ﺎت وﻟﻜ ﻦ ﻻ ﻋﻼﻗ ﺔ ﻟ ﮫ ﺑﻤﺠﻤﻮﻋ ﺔ اﻟﺒﯿﺎﻧ ﺎت ﻓﻌﻠﯿﻨ ﺎ إﺻ ﺪار أﻣ ﺮ‬


‫ﻟﻤﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﺑﺈﺿﺎﻓﺔ ﺻﻒ وﻧﺴﻨﺪ ﻟﮫ اﻟﻤﺘﻐﯿﺮ ﻣﻦ اﻟﻨﻮع اﻟﺼﻒ اﻟﻤﺤﻤﻞ ﺑﺎﻟﺒﯿﺎﻧﺎت ﺣﺎﻟﯿﺎ ﻟﯿﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ‬
‫)‪").Rows.Add(myrow‬أﺳﻢ اﻟﺠﺪول"(‪DataSet11.Tables‬‬
‫وﺑﮭﺬا ﯾﻜﻮن اﻟﺼﻒ ﻗﺪ ﺿﯿﻒ ﺑﺎﻟﻔﻌﻞ إﻟﻲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت وﻟﻜﻦ ﻻ ﺗﻨﺴﻲ أن ھﺬا ﻟﯿﺲ ﻏﺮﺿ ﻨﺎ ﺑ ﻞ ﻏﺮﺿ ﺎ ھ ﻮ‬
‫إﺿﺎﻓﺔ ھﺬا اﻟﺼﻒ إﻟﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﻟﯿﺲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻓﻤﻦ ﯾﻤﺜﻞ اﻵن ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت أﻧﮫ ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت‬
‫‪ Data Adapter‬ﻓﻼﺑﺪ ﻣﻦ إﺻﺪار أﻣﺮ ﻟﻤﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺘﺤﺪﯾﺚ ﻟﻠﺒﯿﺎﻧﺎت ﻣﻦ ﺣﯿﺚ ﻣﻘﺎرﻧﺔ ﻛﻼ ﻣ ﻦ ﻣﺠﻤﻮﻋ ﺔ‬
‫اﻟﺒﯿﺎﻧﺎت و اﻟﺠﺪول ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﻣﻨﮭﺎ ﯾﻀﯿﻒ اﻟﺼﻔﻮف اﻟﻤﻮﺟﻮدة ﻓﻲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت واﻟﻐﯿﺮ ﻣﻮﺟ ﻮدة‬
‫ﻓﻲ اﻟﺠﺪول ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻟﯿﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ‬
‫)"أﺳﻢ اﻟﺠﺪول" ‪SqlDataAdapter1.Update(DataSet11,‬‬
‫وﺑﮭﺬا ﺗﻜﻮن ﻗﺪ ﺗﻤﺖ ﻋﻤﻠﯿﺔ اﻹﺿﺎﻓﺔ ﻟﻌﻤﻞ ذﻟ ﻚ ﺗﺤ ﺖ اﻟ ﺰر ‪ Add‬ﻟﻺﺿ ﺎﻓﺔ ﺟ ﺪول اﻟﻘ ﺴﻢ ﯾﻜ ﻮن اﻟ ﺸﻜﻞ اﻟﻤﺒ ﺪﺋﻲ‬
‫ﻟﻠﻜﻮد ﻛﺎﻟﺘﺎﻟﻲ‬
‫‪Dim myrow As DataRow‬‬
‫)(‪DataSet11.Clear‬‬
‫)‪SqlDataAdapter1.Fill(DataSet11‬‬
‫‪myrow = DataSet11.Tables("Department").NewRow‬‬

‫‪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‬وﺳﻮف ﻧﺴﺘﺨﺪﻣﮭﺎ ﻓﻲ‬
‫ﻋﺮﺿﮭﺎ ﻟﻠﻤﺴﺘﺨﺪم وﺑﮭﺬا ﻟﻦ ﯾﺨﻄﺄ ﺑﮭﺎ وﯾﻤﻜﻨﻨﺎ إﺗﺒــــــﺎع‬
‫ﻃﺮق ﻛﺜﯿﺮة ﻟﺘﺄﻛﺪ ﻣﻦ ﺻﺤﺔ اﻟﺒﯿﺎﻧﺎت وﻟﻜﻦ ھﺬا ھﻮ أﺑﺴﻂ‬
‫اﻟﺤﻠﻮل أوﻻ وﻟﻨﺎ ﺑﻌﺪ ذﻟﻚ أن ﻧﺘﻌﻤﻖ ﻓﻲ ھﺬا‪..‬‬
‫وﯾﻜﻮن اﻟﻜﻮد ﺑﺎﻟﻜﺎﻣﻞ اﻵن ﻛﺎﻟﺘﺎﻟﻲ‬

‫‪١٤٤‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫واﻟﺠﺰء اﻟﻤﺤﺪد ﻓﻘﻂ ھﻮ اﻟﺬي ﺗﻢ إﺿﺎﻓﺘﮫ ﻧﻌ ﺮض ﻓ ﻲ ﺣﺎﻟ ﺔ اﻟﻮﺻ ﻮل إﻟ ﻲ آﺧ ﺮ اﻟﻜ ﻮد ﻓ ﻲ ھ ﺬه اﻟﺤﺎﻟ ﺔ ﻟ ﻦ ﯾﻜ ﻮن‬
‫ھﻨﺎك أﺧﻄﺎء وﻟﻦ ﯾﻨﻔﺬ اﻟﺠﺰء ‪ Catch‬ﻓﻨﻌﺮض رﺳﺎﻟﺔ ﻟﻠﻤﺴﺘﺨﺪم ﺗﻔﯿﺪ ﺑﺄن اﻟﻘﺴﻢ ﻗ ﺪ أﺿ ﯿﻒ وﻓ ﻲ ﺣﺎﻟ ﺔ ﺣ ﺪوث‬
‫ﺧﻄﺄ ﻓﺴﻮف ﯾﻨﻔﺬ اﻟﺠﺰء ﻣﺎﺑﯿﻦ ‪ Catch‬و ‪ End Try‬وھﻮ ﻋﺮض اﻟﺮﺳﺎﻟﺔ اﻟﻤﺤﺘﻮﯾﺔ ﻋﻠﻲ اﻟﺨﻄﺄ‬
‫ﺟﺮب ﻓﻲ إﺿﺎﻓﺔ ﺳﺠﻞ ﺻﺎﻟﺢ وأﺣﺼﻞ ﻋﻠﻲ رﺳﺎﻟﺔ اﻹﺿﺎﻓﺔ وﺟﺮب ﺑﯿﺎﻧﺎت ﺧﻄﺄ ﻟﺘﺤﺼﻞ ﻋﻠﻲ رﺳﺎﻟﺔ اﻟﺨﻄﺄ‬

‫ﺣﺬف ﺳﺠﻼت ﻣﻦ داﺧﻞ اﻟﻘﺎﻋﺪة ‪Deleting Records From Database‬‬


‫أﻧﻨﺎ ﻧﺮﯾﺪ إﻇﮭﺎر ﻗﺎﺋﻤﺔ ﺑﮭﺎ أﺳﻤﺎء اﻷﻗﺴﺎم وﻋﻨﺪﻣﺎ ﯾﺨﺘﺎر اﻟﻤﺴﺘﺨﺪم أي ﻗ ﺴﻢ ﺛ ﻢ اﻟ ﻀﻐﻂ ﻋﻠ ﻲ اﻟ ﺰر ‪Remove‬‬
‫ﯾﺤﺬف ھﺬا اﻟﻘﺴﻢ أﺳﺘﻌﯿﻦ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻓﻲ اﻟﺘﺼﻤﯿﻢ‬
‫ﻟﻘﺪ ﺳﺤﺒﻨﺎ اﻟﻌﻨﺼﺮ ‪ DropDownList‬ﻟﻌـــــــــﺮض‬
‫أﺳﻤﺎء اﻷﻗﺴﺎم ﻣﻦ ﺧﻼﻟﮫ وﻟﻜﻨﻨﺎ ﻓﻲ أﻛﺜﺮ اﻷﺣﯿــــــــﺎن‬
‫ﻋﻨﺪ ﻋﻤﻠﯿﺎت اﻹﺿﺎﻓﺔ ﻣﺜﻼ ﻧﺮﯾﺪ أن ﯾﻈﮭﺮ ﻟﻠﻤﺴﺘﺨـــﺪم‬
‫أﺳﻢ اﻟﻘﺴﻢ وﻟﻜﻦ ﯾﺴﺠﻞ ﻋﻨﮫ رﻗﻢ اﻟﻘﺴﻢ داﺧﻞ اﻟﻘﺎﻋﺪة‬
‫وﺗﺘﯿﺢ ‪ DropDownList‬أن ﺗﻌﺮض ﺷﯿﺌﺎ ﻣﻦ‬
‫ﺧﻼل اﻟﺨﺎﺻﯿﺔ ‪ DataTextField‬وأﯾﻀﺎ ﺗﺨﺰن‬
‫ﺷﯿﺌﺎ آﺧﺮ ﯾﻤﻜﻨﻨﺎ اﻻﺳﺘﻔﺎدة ﺑﯿﮫ ﻓﻲ اﻟﺨﺎﺻﯿﺔ ‪DataValueField‬‬
‫وﻟﻠﻌﻠﻢ اﻟﮭﺎم أن اﻟﻌﻨﺎﺻﺮ اﻟﻤﻮﺿﻮﻋﺔ داﺧﻞ ھﺬه اﻟﻘﺎﺋﻤﺔ ﺗﺮﺗﺐ أول ﻋﻨﺼﺮ ﯾﺄﺧﺬ اﻟﻘﯿﻤﺔ ﺻﻔﺮ واﻟﺜﺎﻧﻲ ﯾﺄﺧﺬ ‪ ١‬إﻟﻲ‬
‫آﺧﺮه وھﺬا ﻣﺎ ﯾﻤﺜﻞ ﻟﻨﺎ رﻗﻢ اﻟﺼﻒ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ؟؟‪.‬‬
‫ﻧﻀﺒﻂ ﺧﺼﺎﺋﺺ ‪ DropDownList‬ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬
‫‪ DataSource‬ﻣﺼﺪر اﻟﺒﯿﺎﻧﺎت ھﻮ ‪Dataset11‬‬
‫‪ DataMember‬ﺟﺪول اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺿﻤﻦ اﻟﻤﺼﺪر‬
‫‪ DataTextField‬اﻟﺤﻘﻞ اﻟﻤﻌﺮوض ﻣﻦ ﺧﻼل اﻟﻘﺎﺋﻤﺔ‬
‫‪ DataValueField‬اﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ اﻟﻤﺮﺗﺒﻄﺔ ﺑﻜﻞ ﻗﯿﻤﺔ ﻇﺎھﺮة‬

‫‪١٤٥‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ﻓﻲ ﺣﺪث ‪ 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‬وﺗﺨﻄﻲ ﺣﺪوث ﺧﻄﺄ ﻟﯿﻜﻮن اﻟﻜﻮد ﻛﺎﻣﻼ ﻛﺎﻟﺘﺎﻟﻲ‬

‫‪١٤٦‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ﻧﻤﻮذج رﺋﯿﺴﻲ‪/‬ﺗﻔﺼﯿﻞ ﺑﺎﺳﺘﺨﺪام وﺳﺎﺋﻂ اﻻﺳﺘﻌﻼﻣﺎت‬


‫‪Form Master/Detail With Parameterized SQL Queries‬‬
‫أﻧﻨﺎ ﻧﺮﯾﺪ أﻇﮭﺎر ﻗﺎﺋﻤﺔ ﻣﻨﺴﺪﻟﺔ ﺑﮭﺎ أﺳ ﻤﺎء اﻷﻗ ﺴﺎم وﻗﯿﻤﮭ ﺎ ھ ﻲ أرﻗ ﺎم اﻷﻗ ﺴﺎم وھ ﺬا ﺑ ﺎﻟﻄﺒﻊ ﻣ ﻦ ﺟ ﺪول اﻷﻗ ﺴﺎم‬
‫وأﺳﻔﻞ اﻟﻘﺎﺋﻤﺔ اﻟﻤﻨﺴﺪﻟﺔ ﻧﻨﺸﺊ ﺷﺒﻜﺔ ﺑﯿﺎﻧﺎت ﺗﺤﺘﻮي ﻋﻠﻲ ﺟﻤﯿﻊ اﻟﻤﻮﻇﻔﯿﻦ وﻟﻜﻨﻨ ﺎ ﻧﺮﯾ ﺪ ﻋﻨ ﺪ اﺧﺘﯿ ﺎر اﻟﻘ ﺴﻢ ﻣ ﻦ‬
‫اﻟﻘﺎﺋﻤﺔ ﺗﻈﮭﺮ ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ اﻟﻌﺎﻣﻠﯿﻦ ﺑﮭﺬا اﻟﻘﺴﻢ ﻓﻘﻂ ﻓﯿﻌﺘﺒﺮ اﻟﻘﺴﻢ ھﻮ اﻟﺮﺋﯿﺴﻲ وﺗﻔﺎﺻﯿﻠﮫ ﺗﻌﺮض ﻓﻲ ﺟﺪول‬
‫اﻟﻤﻌﻠﻤﯿﻦ ﻋﻨﺪﻣﺎ ﯾﻜﻮن ﺣﻘﻞ ‪ Deptwork‬ﻓﻲ ﺟﺪول اﻟﻤﻌﻠﻤﯿﻦ ﻣﺴﺎوي اﻟﻘﺴﻢ اﻟﺬي ﺗﻢ اﺧﺘﯿ ﺎره ﻟﻌﻤ ﻞ ذﻟ ﻚ ﻧﺘﺒ ﻊ‬
‫اﻷﺗــــــﻲ‬
‫ﺳ ﺤﺐ ‪ SqlDataAdpter‬ﻣ ﻦ ﺻ ﻨﺪوق اﻷدوات ﻣ ﻦ اﻟﺠ ﺰء ‪ Data‬وأﺗﺒ ﻊ ﺧﻄ ﻮات ‪Data Adapter‬‬
‫‪ Configuration Wizard‬ﻟﺘﺴﺘﺮﺟﻊ ﻛﺎﻓﺔ ﺣﻘﻮل ﺟ ﺪول اﻟﻘ ﺴﻢ ‪ department‬ﺛ ﻢ ﻗ ﻢ ﺑ ﺴﺤﺐ ‪Data‬‬
‫‪ Adapter‬أﺧﺮي وذﻟﻚ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺠﺪول ‪ Teacher‬ﻓﻨﺴﺘﺮﺟﻊ ﻛﺎﻓﺔ اﻟﺤﻘ ﻮل وﻟﻜ ﻦ ﺑ ﺸﺮط أن ﯾﻜ ﻮن ﺣﻘ ﻞ‬
‫‪ deptwork‬ﻣﺴﺎوﯾﺎ ﻟﻠﻘﯿﻤﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻘﺎﺋﻤ ﺔ اﻟﻤﻨ ﺴﺪﻟﺔ وﻟﻜ ﻦ ﻻ ﯾﻤﻜﻨﻨ ﺎ ﺗﺤﺪﯾ ﺪ ھ ﺬه اﻟﻘﯿﻤ ﺔ وﻧﺤ ﻦ ﻧﻜﺘ ﺐ‬
‫ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻓﺎﻟﺤﻞ ھﻮ إﻧﺸﺎء وﺳﯿﻂ أو ﻣﻌﺎﻣﻞ أو ﻣﺘﻐﯿﺮ ﯾﺘﻢ ﺿﺒﻄﮫ أﺛﻨ ﺎء اﻟﺘﻨﻔﯿ ﺬ وﻟﻌﻤ ﻞ ذﻟ ﻚ وﻧﺤ ﻦ ﻧﻜﺘ ﺐ‬
‫ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻛﺎﻟﺘﺎﻟﻲ‬
‫ﻧﻀﻊ ﻓﻲ اﻟﺠﺰء ‪( = ? ) Criteria‬‬
‫أو ﻓﻲ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﺑﺪل وﺿﻊ اﻟﻘﯿﻤﺔ ﻛﻤﺎ ھﻮ‬
‫ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ وﻻ ﺗﻨﺴﻲ أن ھﺬا ﻣﻌﻨــــــــــــــﺎه‬
‫ھﻮ أن ﻗﯿﻤﺔ ﺣﻘﻞ ‪ DeptWork‬ﻧﺮﯾﺪ ﺿﺒﻄﮭﺎ‬
‫أﺛﻨﺎء اﻟﺘﻨﻔﯿﺬ ﻧﻀﻐﻂ ‪ Ok‬وﻧﻜﻤﻞ ﺑﺎﻗﻲ اﻟﺨﻄﻮات‬
‫وﺑﯿﻤﯿﻦ اﻟﻤﺎوس ﻋﻠﻲ ‪SqlDataAdapter1‬‬
‫ﺛﻢ اﺧﺘﯿﺎر ‪ Generate DataSet‬وأﯾﻀﺎ ﻣﻊ‬
‫‪ SqlDataAdapter2‬وﻧﺤﺪد اﻟﺠﺪوﻟﯿﻦ ﻟﻨﻔﺲ‬
‫‪ Dataset‬ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ‬

‫ﺛﻢ أﺳﺘﻌﯿﻦ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻟﻀﺒﻂ اﻟﻨﻤﻮذج‬

‫وﺑﻌﺪ ذﻟﻚ أﺿﺒﻂ ﺧﺼﺎﺋﺺ ‪ DropDownList‬ﻛﻤﺎ ﯾﻠﻲ‬

‫وﻧﻀﺒﻂ أﯾﻀﺎ ﺧﻮاص ﺷﺒﻜﺔ اﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ ﯾﻠﻲ‬


‫ﻣﻠﺨﺼﺎ ﻟﺘﻠﻚ اﻟﺨﻮاص اﻟﮭﺎﻣﺔ ﻛﻤﺎ اﺳﺘﺨﺪﻣﻨﺎھﺎ ﻣﻦ ﻗﺒﻞ ‪:‬‬

‫‪ DataSource‬وھﻮ ﻣﺼﺪر اﻟﺒﯿﺎﻧﺎت‬


‫‪ DataMember‬أﺳﻢ اﻟﺠﺪول اﻟﻤﺘﻌﺎﻣﻞ ﻣﻌﮫ‬
‫‪ DataTextField‬اﻟﻘﯿﻤﺔ اﻟﻤﺮﺋﯿﺔ ﻟﻠﻘﺎﺋﻤﺔ اﻟﻤﻨﺴﺪﻟﺔ‬
‫‪ DataValueField‬اﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ ﻟﻜﻞ ﻋﻨﺼﺮ ﻓﻲ اﻟﻘﺎﺋﻤﺔ‬

‫‪١٤٧‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫و اﻟﻤﮭﻤﺔ اﻵن ھﻮ ﻣﻠﺊ ‪ Dataset‬ﺑﺎﻟﺒﯿﺎﻧ ﺎت ﻣ ﻦ ‪ Data Adapter‬وﻟﻜ ﻦ ﻣﻼﺋ ﻢ اﻟﺒﯿﺎﻧ ﺎت اﻟﻤﺨ ﺘﺺ ﺑﺠ ﺪول‬
‫اﻟﻤﻌﻠﻤﯿﻦ ‪ SqlDataAdapter2‬ﯾﺮﯾﺪ إرﺳﺎل ﻗﯿﻤﺔ ﻟﻠﻮﺳﯿﻂ اﻟﻤﻜﻮن داﺧﻞ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﺑﮫ وﻟﻌﻤﻞ ذﻟﻚ‬
‫ﻧﺘﺒﻊ ﻣﺎ ﯾﻠﻲ‬
‫اﻟﻘﯿﻤﺔ = ‪).Value‬رﻗﻢ اﻟﻮﺳﯿﻂ(‪SqlDataAdapter2.SelectCommand.Parameters‬‬

‫وﻻﺣﻆ أن اﻟﻮﺳﯿﻂ ﯾﺄﺧﺬ رﻗﻢ وھﺬا اﻟﺮﻗﻢ ﻣﻔﮭﺮس ﺣﯿﺚ أﻧﮫ ﯾﺒﺪأ ﻣﻦ ﺻﻔﺮ ﻻﺣﻆ ذﻟﻚ أن ﻛﺎن ﻟﺪﯾﻚ أﻛﺜﺮ ﻣﻦ وﺳﯿﻂ‬
‫وأن ﻛﺎن وﺳﯿﻂ واﺣﺪ ﻓﺒﻄﺒﻊ ﯾﺄﺧﺬ رﻗﻢ أول وﺳﯿﻂ وھﻮ ‪ ٠‬ﺛﻢ ﺗﻀﻊ اﻟﻘﯿﻤﺔ اﻟﻤﺮداة‬
‫واﻵن ﻟﺒﺪأ ﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻧﺘﺒﻊ ﻛﻤﺎ ﺳﺒﻖ اﻟﻜﻮد اﻟﺘﺎﻟﻲ ﻓﻲ ‪Form_Load‬‬

‫وﻻﺣﻆ أن اﻟﻘﯿﻤﺔ اﻟﻤ ﺴﻨﺪة ﻟﻠﻮﺳ ﯿﻂ ﺗ ﺄﺗﻲ ﻣ ﻦ اﻟﻘﺎﺋﻤ ﺔ ‪ DDLDept‬ﻣ ﻦ اﻟﺨﺎﺻ ﯿﺔ ‪ SelectedValue‬وھ ﻲ‬
‫اﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ ﻟﻜﻞ ﻋﻨﺼﺮ)رﻗ ﻢ اﻟﻘ ﺴﻢ( ﺑﺎﻟﻘﺎﺋﻤ ﺔ وﻟ ﯿﺲ اﻟﻘﯿﻤ ﺔ اﻟﻈ ﺎھﺮة وھ ﻲ أﺳ ﻢ اﻟﻘ ﺴﻢ وﻗ ﺪ ﺗ ﻢ إﺳ ﻨﺎد ھ ﺬا‬
‫اﻟﺘﻌﺒﯿﺮ ﻣﺎ ﺑﯿﻦ أﻗﻮاس اﻟﺪاﻟﺔ ‪ Val‬ﻟﺘﺤﻮﯾﻞ اﻟﻘﯿﻤﺔ إﻟﻲ ﻗﯿﻤﺔ رﻗﻤﯿﺔ وھﺬا ﻷن اﻟﺤﻘﻞ اﻟﻤﺮﺳﻞ إﻟﯿﮫ اﻟﻘﯿﻤﺔ ھﻮ ﺣﻘﻞ‬
‫رﻗﻤﻲ وﺑﻌﺪ ذﻟﻚ أﺗﺒﻌﻨﺎ اﻟﻄﺮﯾﻘﺔ اﻟﻘﺪﯾﻤﺔ ﻟﻀﺒﻂ اﻟﺒﯿﺎﻧﺎت‬
‫وﻋﻨﺪ ﺗﺸﻐﯿﻞ اﻟﻨﻤﻮذج واﺧﺘﯿﺎر أي ﻗﯿﻤﺔ ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﻤﻨﺴﺪﻟﺔ ﻻ ﯾﺤﺪث ﺷﻲ ﻷن ھﺬه اﻷﻛﻮاد ﺗﻨﻔﺬ ﻓﻘ ﻂ ﻓ ﻲ ﺣ ﺪث‬
‫اﻟﺘﺤﻤﯿﻞ ﻷول ﻣﺮة ﻓﻘﻂ وﻟﻜﻨﻨﺎ ﻧﺮﯾﺪ ﻋﻤﻞ ذﻟﻚ ﻋﻨﺪ ﻛﻞ ﻣﺮة ﯾﺘﻢ ﻓﯿﮭﺎ ﺗﻐﯿﺮ اﻟﻘﯿﻤ ﺔ اﻟﺘ ﻲ ﯾﺨﺘﺎرھ ﺎ اﻟﻤ ﺴﺘﺨﺪم داﺧ ﻞ‬
‫اﻟﻘﺎﺋﻤﺔ ﻓﻨﻀﻐﻂ ﻋﻠﻲ اﻟﻘﺎﺋﻤﺔ ﻣﺮﺗﯿﻦ ﺑﺎﻟﻤﺎوس ﻟﯿﻔﺘﺢ ﻟﻨﺎ اﻟﺤﺪث ‪ SelectedIndexChanged‬وھﺬا اﻟﺤﺪث‬
‫ﯾﻨﻔﺬ اﻟﻜﻮد اﻟﺬي ﺑﺪاﺧﻠﮫ ﻛﻠﻤﺎ ﺗﻐﯿﺮت اﻟﻘﯿﻤﺔ ﻓﻲ اﻟﻘﺎﺋﻤﺔ وﻧﻜﺘﺐ ﺑﮫ اﻟﻜﻮد اﻟﺘﺎﻟﻲ‬

‫اﻟﻜﻮد ﻻ ﯾﺲ ﻏﺮﯾﺒﺎ ﺑﺎﻟﻤﺮة ﻓﻨﺤﻦ ﻧﺮﺳﻞ اﻟﻘﯿﻤﺔ اﻟﻤﻮﺟﻮدة ﺣﺎﻟﯿﺎ ﻓﻲ اﻟﻘﺎﺋﻤﺔ اﻟﻲ اﻟﻮﺳﯿﻂ وﻣ ﻦ ﺛ ﻢ ﻧﻤ ﻸ ﻣﺠﻤﻮﻋ ﺔ‬
‫اﻟﺒﯿﺎﻧ ﺎت وﻟﻜ ﻦ ﻻﺣ ﻆ ﻓ ﻲ أﺧ ﺮ اﻟﻜ ﻮد أﻧﻨ ﺎ ﻟ ﻢ ﻧﻜﺘ ﺐ )(‪ Page.DataBind‬وﻟﻜ ﻦ ﻛﺘﺒﻨ ﺎ‬
‫)(‪ dataGrid1.DataBind‬وھﺬا ﻷﻧﻨﺎ ﻟﻮ رﺑﻂ ﺑﯿﺎﻧﺎت ﺟﺪﯾ ﺪة ﻟﻠﻘﺎﺋﻤ ﺔ ﺳ ﻮف ﺗ ﻀﺒﻂ ﻋﻠ ﻲ أول ﻗ ﺴﻢ وﻟ ﯿﺲ‬
‫آﺧﺮ ﻗﺴﻢ أﺧﺘﺎره اﻟﻤﺴﺘﺨﺪم ﻟﻮ ﺟﺮﺑﻨﺎ اﻵن ھﺬا ﻟﻦ ﯾﺤﺪث أﯾﻀﺎ ﺷﺊ ﻋﻨﺪ اﺧﺘﯿﺎر أﺣﺪ اﻟﻌﻨﺎﺻﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ وﯾﺮﺟﻊ‬
‫ھﺬا إﻟﻲ أﻧﮫ ﻋﻨﺪ اﺧﺘﯿﺎر أﺣﺪ اﻟﻌﻨﺎﺻﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ ﻻ ﯾﺬھﺐ اﻟﻨﻤﻮذج إﻟﻲ اﻟﺨ ﺎدم ﻟﺘﻨﻔﯿ ﺬ اﻷواﻣ ﺮ أي أﻧ ﮫ ﻻ ﯾﺤ ﺪث‬
‫اﻟﺤﺪث ‪ submit‬وﻟﺠﻌﻞ اﻟﻘﺎﺋﻤﺔ ﻋﻨﺪ اﻻﺧﺘﯿﺎر ﺗﺬھﺐ إﻟﻲ اﻟﺨﺎدم ‪ Server‬ﻟﺘﻨﻔﯿﺬ اﻷواﻣﺮ اﻟﻤﻮﺟﻮدة داﺧ ﻞ ھ ﺬا‬
‫اﻟﺤ ﺪث ﻧﻘ ﻒ ﻋﻠ ﻲ اﻟﻘﺎﺋﻤ ﺔ اﻟﻤﻨ ﺴﺪﻟﺔ وﻧﺨﺘ ﺎر ‪ properties‬وﻧﺨﺘ ﺎر ﻣ ﻦ اﻟﺨ ﺼﺎﺋﺺ اﻟﺨﺎﺻ ﯿﺔ‬
‫‪ AutoPostBack‬ﻋﻠﻲ اﻟﻘﯿﻤﺔ ‪ True‬وﺑﮭﺬا ﺗﺬھﺐ ﺑﻄﺮﯾﻘﺔ ﺗﻠﻘﺎﺋﯿ ﺔ إﻟ ﻲ اﻟﺨ ﺎدم وﻣﻨﮭ ﺎ ﯾﻨﻔ ﺬ اﻟﻜ ﻮد اﻟﺨ ﺎص‬
‫ﺑﮭﺎ ﺟﺮب أﻻن ﻓﻠﻘﺪ وﺻﻠﻨﺎ إﻟﻲ ﻣﺎ ﻧﺮﯾﺪه ﻛﻤﺎ ھﻮ ﻣﻮﺿﺢ ﺑﺎﻟﺸﻜﻞ‬

‫‪١٤٨‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫اﻟـﺒﺤــﺚ ‪Search‬‬
‫ﯾﻤﻜﻨﻨ ﺎ اﻟﺒﺤ ﺚ ﺑ ﻨﻔﺲ ﻓﻜ ﺮ وﺳ ﺎﺋﻂ اﻻﺳ ﺘﻌﻼﻣﺎت ﺳ ﻮف ﻧﻨﻔ ﺬ ﺑﺎﺣ ﺚ ﺑ ﺴﯿﻂ ﻓ ﻲ ﺟ ﺪول اﻟﻤﻌﻠﻤ ﯿﻦ ﻋ ﻦ ﺣﻘ ﻞ اﻻﺳ ﻢ‬
‫ﻓﻨﺨﻄﻂ ﻛﻤﺎ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬
‫وﻋﻨﺪ ﺳﺤﺐ وإدراج ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت ‪Data Adapter‬‬
‫ﻧﻀﺒﻂ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﻛﺎﻟﺘﺎﻟﻲ‬

‫* ‪SELECT‬‬
‫‪FROM Teacher‬‬
‫? ‪WHERE Name LIKE‬‬

‫ﻋﻠﻲ أن ﺗﻜﻮن ﺟﻤﻠﺔ ‪ Like‬ھﻲ ﻣﺎ ﺳﻮف ﯾﺘﻢ إﺳﻨﺎده ﻣـــــﻦ‬


‫اﻟﻨﻤﻮذج ﺛﻢ ﻧﻀﺒﻂ ﺧﻮاص ﺷﺒﻜﺔ اﻟﺒﯿﺎﻧﺎت ‪DataSource‬‬
‫‪ DataSet11‬و اﻟﺨﺎﺻﯿﺔ ‪ DataMember‬ﻋﻠــــــــــــــﻲ‬
‫‪ Teacher‬وﻧﻘﻮم ﺑﺒﺮﻣﺠﺔ زر اﻟﺒﺤﺚ ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﻗﺪ اﺳﺘﺨﺪﻣﻨﺎ ﻋﻼﻣﺎت ‪ %‬ﻛﻤﺎ ﻧﻌﻠ ﻢ ﻟﻠﺒﺤ ﺚ ﻋ ﻦ أي أﺳ ﻢ ﻣﺘ ﺸﺎﺑﮫ ﻣ ﻊ ﻣ ﺎ ﯾﻜﺘﺒ ﮫ اﻟﻤ ﺴﺘﺨﺪم وھ ﺬا ﺑ ﺪون ﻋﻼﻣ ﺎت‬
‫ﺗﻨﺼﯿﺺ أوﻟﻲ وﻻ أﺧﯿﺮة وﯾﻤﻜﻨﻨﺎ ﻓﻲ ﻧﺺ اﻟﺒﺤﺚ أﯾﻀﺎ إدراج ﻋﻼﻣﺘﻲ ‪ %‬أو _ ﻛﻤﺎ ﻧﺮي‬

‫ﺗﻌﺪﯾﻞ ﺻﻒ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪Update Record In Database‬‬


‫ﻓﻲ ھ ﺬا اﻟﻤﺜ ﺎل ﻧﺮﯾ ﺪ أن ﻧﻮﺿ ﺢ ﻋﻤﻠﯿ ﺔ اﻟﺘﻌ ﺪﯾﻞ وأﯾ ﻀﺎ اﻻﺣﺘﻜ ﺎك ﺑﻌﻨﺎﺻ ﺮ ﺟﺪﯾ ﺪة وﻟﺘﺒ ﺴﯿﻂ اﻟﻤﺜ ﺎل ﺳ ﻮف ﻧﻌ ﺪل‬
‫ﺑﯿﺎﻧﺎت ﺟﺪول اﻟﻘﺴﻢ أﻧﻈﺮ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬
‫اﻟﻔﻜﺮة ھﻨﺎ ھﻲ أوﻻ ﻧﺮﯾﺪ ﻋﺮض أﺳﻤﺎء اﻷﻗﺴﺎم داﺧــــﻞ‬
‫اﻟﻌﻨﺼﺮ ‪ ListBox‬وﺗﻜﻮن اﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ ﻟﻜﻼ ﻣﻨﮭـــﻢ‬
‫ھﻲ رﻗﻢ اﻟﻘﺴﻢ وﺑﺎﻟﻄﺒﻊ ﯾﻌﺘﺒﺮ ﺗﺮﺗﯿﺐ اﻷﻗﺴﺎم داﺧـــــــــﻞ‬
‫اﻟﻘﺎﺋﻤﺔ ﯾﻌﺒﺮ ﻋﻦ رﻗﻢ اﻟﺼﻒ داﺧﻞ اﻟﺠﺪول ﻓﻲ اﻟﻘﺎﻋــﺪة‬
‫ﻛﻤﺎ رأﯾﻨﺎ ﻣﻦ ﻗﺒﻞ ﻓﻲ ﻣﺜﺎل اﻟﺤﺬف ﻣﻊ اﻟﻘﺎﺋﻤﺔ اﻟﻤﻨﺴﺪﻟﺔ‬
‫وھﻨﺎ ﺑﻨﻔﺲ اﻟﻔﻜﺮ‬
‫ﺛﺎﻧﯿﺎ ﻧﺮﯾﺪ ﻋﻨﺪ اﺧﺘﯿﺎر اﻟﻤﺴﺘﺨﺪم أي ﻋﻨﺼﺮ ﻣﻦ ﻋﻨﺎﺻــﺮ‬
‫ﯾﺘﻢ اﻟﻮﺻﻮل ﻟﻮﺣﺪة اﻟﺨﺪﻣﺔ ‪ Sever‬وﺗﺤﺪﯾﺚ اﻟﻘﯿﻤـــــﺔ‬
‫اﻟﻤﻮﺟﻮدة داﺧﻞ ‪ TextBox‬اﻟﻤﺴـــــﻤﻲ ‪txtDName‬‬
‫ﺑﺤﯿﺚ ﯾﻌﺮض أﺳﻢ اﻟﻘﺴــﻢ وﻓﻲ ‪RadioButtonList‬‬
‫اﻟﺘﻲ ﺗﻌﺮض أﺳﻤﺎء اﻟﻤﻌﻠﻤﯿﻦ ﻛﻠﮭﻢ واﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ ھﻲ‬
‫أرﻗﺎﻣﮭﻢ واﻟﺨﺎﺻﯿــــﺔ ‪ Selectedvalue‬وھﻲ اﻟﻘﯿﻤﺔ‬
‫اﻟﻤﺨﺘﺎرة ﺗﻜﻮن ﻛﺎﻟﺘﺎﻟﻲ ﻋﻨﺪ اﺧﺘﯿﺎر ﻣﻦ اﻟﻘﺎﺋﻤﺔ أﺳﻢ ﻗﺴﻢ‬
‫وﯾﻈﮭﺮ أﺳﻢ اﻟﻘﺴﻢ ﻓـــــﻲ ﻣﺮﺑﻊ اﻟﻨﺺ ﻋﻠﻲ ﺣﺴﺐ اﻟﻘﺴﻢ‬
‫اﻟﻤﺨﺘﺎر أﯾﻀﺎ ﯾﺘﻢ اﺧﺘﯿـــﺎر أﺳﻢ اﻟﻤﻌﻠﻢ ﻣﻦ أزرار اﻟﺮادﯾﻮ‬
‫ﻋﻠﻲ ﺣﺴﺐ رﻗﻢ اﻟﻤﻌﻠﻢ اﻟﻤﺪﯾﺮ‬

‫‪١٤٩‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫وﺑﻌﺪ ذﻟﻚ ﻋﻨﺪ ﺗﻌﺪﯾﻞ أﺳﻢ اﻟﻘﺴﻢ أو اﺧﺘﯿﺎر ﻣﺪﯾﺮ ﻏﯿﺮ اﻟﻤﺪﯾﺮ اﻟﻤﻮﺟﻮد واﻟﻀﻐﻂ ﻋﻠﻲ اﻟﺰر ‪ Modify‬ﯾﺘﻢ ﺗﺤﺪﯾﺚ‬
‫وﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت وﻓﻘﺎ ﻟﻢ ﺗﻢ ﺗﻌﺪﯾﻠﮫ‬
‫أوﻻ ﺗ ﺼﻤﯿﻢ اﻟﻨﻤ ﻮذج اﻟﻌﻨ ﺼﺮ اﻟ ﺬي ﺳ ﻮف ﯾ ﺘﻢ ﻋ ﺮض أﺳ ﻤﺎء اﻷﻗ ﺴﺎم ھ ﻮ ‪ ListBox‬ﻧ ﺴﺤﺒﮫ ﻣ ﻦ اﻟﺠ ﺰء‬
‫‪ WebForms‬ﻣ ﻦ ﺻ ﻨﺪوق اﻷدوات واﻟﻌﻨ ﺼﺮ اﻟ ﺬي ﺳ ﯿﺘﻢ ﻓﯿ ﮫ ﻋ ﺮض أﺳ ﻤﺎء اﻟﻤﻌﻠﻤ ﯿﻦ ھ ﻮ‬
‫‪ RadioButtonList‬ﻧﻘ ﻮم أﯾ ﻀﺎ ﺑ ﺴﺤﺒﮫ ﻣ ﻦ اﻟﺠ ﺰء ‪ WebForms‬ﻣ ﻦ ﺻ ﻨﺪوق اﻷدوات ‪Toolbox‬‬
‫وﯾ ﺘﻢ ﺳ ﺤﺐ ﺑ ﺎﻗﻲ اﻟﻌﻨﺎﺻ ﺮ ﻛﻤ ﺎ ﺗﻌﻠﻤﻨ ﺎ ﻣ ﻦ ﻗﺒ ﻞ واﻟﺠ ﺰء اﻟﺨ ﺎص ﺑﺎﻟﺒﯿﺎﻧ ﺎت ‪ Data‬ﻣ ﻦ ﺻ ﻨﺪوق اﻷدوات ﻧﻘ ﻮم‬
‫ﺑﺴﺤﺐ ‪ SqlDataAdapter‬وﺿﺒﻄﮭﺎ ﻟﻼﺳﺘﺮﺟﺎع ﻛﺎﻓ ﺔ ﺑﯿﺎﻧ ﺎت اﻷﻗ ﺴﺎم وﺑﻌ ﺪ ذﻟ ﻚ أﺧ ﺮاج ﻣﺠﻤﻮﻋ ﺔ ﺑﯿﺎﻧ ﺎت‬
‫‪ Dataset‬ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ وﻧﻘﻮم أﯾﻀﺎ ﺑﻌﻤﻠﯿﺔ ﺳﺤﺐ ﺟﺪﯾﺪة ﻟﻠﻌﻨﺼﺮ ‪ SqlDataAdapter‬وﺿﺒﻄﮫ ﻋﻠﻲ‬
‫اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ ﺑﯿﺎﻧﺎت اﻟﻤﻌﻠﻤﯿﻦ وأﯾﻀﺎ ﻣﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﺑﮭﺬا وﺗ ﻢ إﺿ ﺎﻓﺔ ﻣﻼﺋ ﻢ ﺑﯿﺎﻧ ﺎت ﻟﺠ ﺪول اﻟﻤﻌﻠﻤ ﯿﻦ‬
‫ھﺬا ﻷﻧﻨﺎ ﻧﺮﯾﺪ ﻋﺮض أﺳﻤﺎء اﻟﻤﻌﻠﻤﯿﻦ وﻟﯿﺲ أرﻗﺎﻣﮭﻢ وﻟﻜﻦ ﻣﻊ اﻻﺣﺘﻔﺎظ ﺑﺎﻷرﻗﺎم وﺳﻮف ﻧﻀﯿﻒ ﻣﺸﮭﺪ ﺑﯿﺎﻧ ﺎت‬
‫‪ DataView‬وھﺬا ﻷﻧﻨﺎ ﻧﺮﯾﺪ ﻋﻨﺪ اﺧﺘﯿﺎر أﺣﺪ اﻷﻗﺴﺎم ﻣﻦ اﻟﻘﺎﺋﻤﺔ ﻋﻤﻞ ﺗﺤﺪﯾﺪ أو ﺗﺼﻔﯿﮫ ﻟﺼﻒ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮاد‬
‫اﻵن ﻣ ﻦ اﻟﺨﺎﺻ ﯿﺔ ‪ Table‬ﻧ ﻀﺒﻄﮭﺎ ‪ Dataset11.Department‬ﻛﻤ ﺎ ﺗﻌﻠﻤﻨ ﺎ ﻓ ﻲ ﻣﺜ ﺎل اﻟﺘﺠ ﻮل ﻓ ﻲ‬
‫ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت وﺑﻌﺪ أن ﺗﻢ ﺗﺤﺪﯾﺪ ﻛﻞ ﻣﺎ ﻧﺤﺘﺎﺟﮫ ﻣﻦ ﺟﺰء اﻟﺒﯿﺎﻧﺎت وﺗﺼﻤﯿﻢ اﻟﻨﻤﻮذج ﻧﺒﺪأ‬
‫ﺛﺎﻧﯿﺎ رﺑﻂ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ‬
‫ﻋﻨﺼﺮ اﻟﻘﺎﺋﻤﺔ أﯾﺴﺮ اﻟﺸﺎﺷﺔ ﻧﻀﺒﻂ ﺧﻮاﺻﮭﺎ ﻛﻤﺎ ﯾﻠﻲ‬
‫ﺿﺒﻂ ﻣﺼﺪر اﻟﺒﯿﺎﻧﺎت واﻟﺠﺪول اﻟﺬي ﺗﺘﻌﺎﻣﻞ ﻣﻌﮫ واﻟﺤﻘﻞ اﻟﻈﺎھﺮ ﻟﻠﻤﺴﺘﺨﺪم‬
‫وﺣﻘﻞ اﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﻲ ﻟﻜﻞ ﻋﻨﺼﺮ ﺑﺎﻟﻘﺎﺋﻤﺔ وﻣﻤﯿﺰ اﻟﻌﻨﺼﺮ) اﻻﺳﻢ ( ‪ID‬‬
‫وﻣﺮﺑﻊ اﻟﻨﺺ ﯾﻀﺒﻂ ﻛﺎﻟﺘﺎﻟﻲ ﻣﻦ ﺧﺎﺻﯿﺔ ‪DataBindings‬‬

‫ﻛﻤﺎ ﻧﺮي ﻧﺤﺪد اﻟﺨﺎﺻﯿﺔ ‪Text‬‬


‫ﻟﺮﺑﻄﮭﺎ ب ]‪DataView1.[0‬‬
‫ﻣﻊ اﻟﺤﻘﻞ ‪ DName‬ﺛﻢ ‪OK‬‬
‫وھﺬا ﺑﺎﻟﻄﺒﻊ رﺑﻂ ﺑﺴﯿﻂ وھـــــﻮ‬
‫اﻟﺮﺑﻂ اﻟﺒﺴﯿﻂ اﻟﻮﺣﯿﺪ ﻓﻲ اﻟﻤﺜﺎل‬

‫وﺑﻌﺪ ذﻟﻚ ‪RadioButtonList‬‬


‫ﺳﻮف ﯾﺮﺑﻂ ھﺬا اﻟﻌﻨﺼﺮ ﺑﺄﺳﻤﺎء‬
‫اﻟﻤﻌﻠﻤﯿﻦ وﻗﯿﻤﺘﮫ أرﻗﺎﻣﮭﻢ وﺳﻮف‬
‫ﯾﺤﺪد ﻣﻨﮭﻢ ﻣﻦ ھﻮ ﻣﺪﯾﺮ ﻟﮭـــــــﺬا‬
‫اﻟﻘﺴﻢ وﻧﻀﺒﻂ ﺧﺼﺎﺋﺺ اﻟﻌﻨﺼـﺮ‬
‫ﻛﺎﻟﺘﺎﻟﻲ‬
‫وﺑﮭﺬا ﻧﻜﻮن ﻗﺪ رﺑﻄﻨﺎ ﻛﻞ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ ﻟﺪﯾﻨﺎ وﻧﺒﺪأ ﻋﻨﺪ ﺗﺤﻤﯿﻞ اﻟﻨﻤــــــــــﻮذج‬
‫ﯾﻤﻠﺊ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﻣﻼﺋﻢ ﺑﯿﺎﻧﺎت ﺟﺪول اﻟﻘﺴﻢ ‪SqlDataAdapter1‬‬
‫وﻣﻼﺋﻢ ﺑﯿﺎﻧﺎت ﺟﺪول اﻟﻤﻌﻠﻢ ‪ SqlDataAdapter2‬ورﺑﻂ ﻋﻨﺎﺻﺮ اﻟﺸﺎﺷــــــﺔ‬
‫وھﺬا ﻓﻲ أول ﻣﺮة ﺗﺤﻤﯿﻞ ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﻋﻨﺪ ﺗﺤﺪﯾﺪ ﻋﻨﺼﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ ‪) lstUpdate‬أي ﻋﻨﺪﻣﺎ ﯾﺘﻐﯿﺮ رﻗﻢ اﻟﻌﻨﺼﺮ اﻟﻤﺨﺘﺎر ﻓﻲ اﻟﻘﺎﺋﻤﺔ( ﻧﺮﯾﺪ أوﻻ أن‬
‫ﻧﺤﺘﻔﻆ ﺑﺮﻗﻢ اﻟﻌﻨﺼﺮ اﻟﺬي أﺧﺘﺎره اﻟﻤﺴﺘﺨﺪم وذﻟﻚ ﻟﻌﺮﺿﮫ ﻣﻨﺸﻄﺎ ﻛﻤﺎ ھﻮ ﺑﻌﺪ اﻟﺮﺟﻮع ﻣﻦ وﺣﺪة اﻟﺨﺪﻣﺔ وﺑﻌﺪ‬

‫‪١٥٠‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫ذﻟﻚ ﻧﻤﻸ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ‪ 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‬ﻋﻠ ﻲ ‪ ٣‬ﻟﻌ ﺮض ﺛ ﻼث أﻋﻤ ﺪة ﻓ ﻲ ﻛ ﻞ ﺻ ﻒ وﺑﻌ ﺪ ذ‪١‬ﻟ ﻚ ﺻ ﻒ‬
‫ﺟﺪﯾﺪ ﻟﯿﻜﻮن ﻛﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫واﻵن ﺟﺎء دور زر اﻟﺘﻌﺪﯾﻞ وھﻮ ﺑﻜﻞ ﺑﺴﺎﻃﺔ ﯾﻌﺪ ﻗﯿﻤ ﺔ أﺳ ﻢ اﻟﻘ ﺴﻢ أذا ﻗ ﺎم اﻟﻤ ﺴﺘﺨﺪم ﯾﺘﻐﯿ ﺮ ھ ﺬه اﻟﻘﯿﻤ ﺔ وأﯾ ﻀﺎ‬
‫ﺗﺤﺪﯾﺚ رﻗﻢ اﻟﻤﺪﯾﺮ ﺑﺎﻟﺮﻗﻢ اﻟﺠﺪﯾﺪ أذا أﺧﺘﺎر اﻟﻤﺴﺘﺨﺪم ﻣﺪﯾﺮا أﺧﺮ ﻣﻦ اﻟﻤﺪﯾﺮﯾﻦ‬

‫‪١٥١‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪Visual Studio 2003(ASP.NET) – By Mr. Adel Sabour‬‬

‫‪Dim myrow As DataRow‬‬


‫)(‪DataSet11.Clear‬‬
‫)‪SqlDataAdapter1.Fill(DataSet11‬‬

‫)‪myrow = DataSet11.Tables("Department").Rows(lstUpdate.SelectedIndex‬‬
‫‪myrow.Item("DName") = txtDName.Text‬‬
‫‪myrow.Item("Manager") = rblManager.SelectedValue‬‬
‫)"‪SqlDataAdapter1.Update(DataSet11, "Department‬‬

‫_ ‪lblMsg.Text = "Department Number : " & lstUpdate.SelectedValue‬‬


‫"‪& " Is Updated Now.‬‬
‫)(‪DataSet11.Clear‬‬
‫)‪SqlDataAdapter1.Fill(DataSet11‬‬
‫)‪SqlDataAdapter2.Fill(DataSet11‬‬
‫)(‪Page.DataBind‬‬
‫أوﻻ ﺗﻢ ﺗﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ ﻣﻦ اﻟﻨﻮع ‪ DataRow‬وﻣﺴﺤﻨﺎ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت وﻣﻠﯿﻨﺎھﺎ ﺑﺎﻟﺒﯿﺎﻧﺎت ﻣﻦ ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت‬
‫اﻟﺨﺎص ﺑﺎﻟﻘﺴﻢ وﻛﻤﺎ ﻧﻌﻠﻢ ﻻﺑﺪ ﻣﻦ إﺳﻨﺎد ﺻﻒ اﻟﺒﯿﺎﻧﺎت ﻟﮭﺬا اﻟﻜﺎﺋﻦ ﻋﻦ ﻃﺮﯾﻖ ﺗﺤﺪﯾﺪ رﻗﻢ اﻟﺼﻒ وھﻮ ﻛﻤﺎ ذﻛﺮﻧﺎ‬
‫ﻣﻦ ﻗﺒﻞ ﯾﻤﺜﻞ اﻟﺮﻗﻢ اﻟﻤﻔﮭﺮس ﻓﻲ اﻟﻘﺎﺋﻤﺔ ﺣﯿﺚ أن أول ﺻ ﻒ ﯾﻈﮭ ﺮ ﻓ ﻲ اﻟﻘﺎﺋﻤ ﺔ ﻛ ﺄول ﺑﻨ ﺪ واﻟﺜ ﺎﻧﻲ ﯾﻈﮭ ﺮ اﻟﺒﻨ ﺪ‬
‫اﻟﺜﺎﻧﻲ ﻓﻨﺴﺘﻐﻞ ذﻟﻚ ﻓﻲ ﺗﺤﺪﯾﺪ رﻗﻢ اﻟﺼﻒ وﺑﻌﺪ ذﻟﻚ ﻧﺤﺪد ﻟﺼﻒ اﻟﺒﯿﺎﻧﺎت ﻟﻜﻞ ﺣﻘﻞ ﻓﯿﮫ اﻟﻘﯿﻤ ﺔ اﻟﺠﺪﯾ ﺪ وﺑﻌ ﺪ ذﻟ ﻚ‬
‫ﻧﺤﺪث اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ ﻣﻼﺋﻢ اﻟﺒﯿﺎﻧﺎت ‪ SqlDataAdapter1‬ﺑﺎﻟﺒﯿﺎﻧﺎت اﻟﺤﺪﯾﺜﺔ ﻓﻲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧ ﺎت‬
‫‪ Dataset11‬ﻟﺒﯿﺎﻧﺎت ﺟﺪول اﻟﻘﺴﻢ وﺑﻌﺪ ذﻟﻚ إﻇﮭﺎر رﺳﺎﻟﺔ ﻟﻠﻤﺴﺘﺨﺪم ﺗﺨﺒﺮه ﺑﺄﻧﮫ ﺗ ﻢ ﺗﻌ ﺪﯾﻞ اﻟﺒﯿﺎﻧ ﺎت ﻟﻠﻘ ﺴﻢ ؟‬
‫وﻧﺬﻛﺮ رﻗﻤﮫ ﻣﻦ اﻟﻘﯿﻤﺔ اﻟﺪاﺧﻠﯿﺔ ﻟﻜﻞ ﺑﻨﺪ ﻓﻲ اﻟﻘﺎﺋﻤﺔ وﺑﻌﺪ ذﻟ ﻚ ﻟﻺﻇﮭ ﺎر اﻟﺒﯿﺎﻧ ﺎت اﻟﺤﺪﯾﺜ ﺔ ﻛﺎﻣﻠ ﺔ ﻧﻤ ﻸ ﻣﺠﻤﻮﻋ ﺔ‬
‫اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺒﯿﺎﻧﺎت اﻟﺠﺪﯾﺪة وﻧﺮﺑﻂ ﻋﻨﺎﺻﺮ اﻟﺒﯿﺎﻧﺎت ﺑﮭﺎ ) ﻻﺣﻆ أﻧﻨﺎ ﻻ ﻧﺘﯿﺢ ﺗﻌﺪﯾﻞ رﻗﻢ اﻟﻘﺴﻢ وھﺬا اﻟﻤﻔ ﻀﻞ ﻷﻧ ﮫ‬
‫اﻟﻤﻔﺘﺎح اﻟﺮﺋﯿﺴﻲ ﻟﮭﺬا اﻟﺠﺪول وھﻮ ﻣﺎ ﯾﺘﻢ اﻟﺘﺤﺪﯾﺚ واﻟﺘﻌﺪﯾﻞ ﻋﻠﻲ أﺳﺎﺳﮫ ( ﺣﺎول اﻵن ﺗﺸﻐﯿﻞ اﻟﻨﻤﻮذج وﺗﻌﺪﯾﻞ‬
‫أﺳﻢ اﻟﻘﺴﻢ أو ﻣﺪﯾﺮ اﻟﻘﺴﻢ ﺳﻮف ﯾﺘﻢ ذﻟﻚ ﺑﺪون ﻣﺸﺎﻛﻞ وﻟﻜﻦ إذا ﺗﻢ ﺗﻌﺪﯾﻞ أﺳﻢ اﻟﻘﺴﻢ ﺑﺎﺳ ﻢ ﻣﻮﺟ ﻮد ﻣ ﻦ ﻗﺒ ﻞ أو‬
‫وﺿﻊ ﻣﺪﯾﺮ ﻟﻘﺴﻢ وھﻮ ﻣﺪﯾﺮ ﻟﻘﺴﻢ آﺧﺮ ﺳﻮف ﯾﺤ ﺪث ﺧﻄ ﺄ وﻟﺘﻼﺷ ﻲ ھ ﺬا اﻟﺨﻄ ﺄ ﻧ ﻀﻊ اﻟﺠ ﺰء ‪Try – Catch‬‬
‫ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ ﻗﺒﻞ ﻟﻌﺮض اﻷﺧﻄﺎء ﻟﯿﻜﻮن اﻟﻜﻮد ﻛﺎﻣﻼ ﻟﺰر اﻟﺘﻌﺪﯾﻞ ﻛﺎﻟﺘﺎﻟﻲ‬

‫وﻛ ﺎن ھ ﺬا ﻟﻤﺤ ﺔ ﺳ ﺮﯾﻌﺔ ﻟ ﺮﺑﻂ اﻟﺒﯿﺎﻧ ﺎت ﻓ ﻲ ﻗﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت ﺑﻤﻠﻔ ﺎت اﻟﻮﯾ ﺐ واﺳ ﺘﺨﺪﻣﻨﺎ ﻗﺎﻋ ﺪة ﺑﯿﺎﻧ ﺎت ‪SQL‬‬
‫‪ Server‬ﻛﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻷﺳﺎﺳﯿﺔ وﺗﻢ ﻋﺮض اﻟﻨﻤﺎذج اﻟﺨﺎﺻﺔ ﺑﺎﻟﻮﯾ ﺐ ﺑﺘﻘﻨﯿ ﺔ ‪ ASP.NET‬اﻟﻤﻜﺘﻮﺑ ﺔ ﺑﻠﻐ ﺔ‬
‫‪ VB.NET‬وﺗﻢ رﺑﻂ اﻟﻘﺎﻋﺪة ﺑﺎﻟﻨﻤﺎذج ﻋﻦ ﻃﺮﯾﻖ اﻟﺒﺮوﺗﻮﻛﻮل اﻷﺳﺎﺳ ﻲ ﻟـ ـ ‪ .NET Framework‬اﻟﺨ ﺎص‬
‫ﺑﺮﺑﻂ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وھﻮ ‪ADO.NET‬‬
‫‪Visual Studio (ASP.NET) -- By Mr. Adel Sabour‬‬

‫‪١٥٢‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫وﺑﮭﺬا ﻧﻜﻮن ﻗﺪ اﻧﺘﮭﯿﻨﺎ واﻟﺤﻤﺪ ﷲ ﻣﻦ اﻟﺠﺰء اﻷول ﻣﻦ ھﺬا اﻟﻜﺘﺎب ﻟﻘﺪ ﺗﻌﻠﻤﻨﺎ اﻟﻜﺜﯿﺮ وﻟﻜﻨﮫ ﻟﯿﺲ ﻛﻞ ﺷﺊ وﺳﻨﺮي‬
‫اﻟﻤﺰﯾﺪ أن ﺷﺎء اﷲ ﻓﻲ اﻟﺠﺰء اﻟﺜﺎﻧﻲ ﻣﻦ ھﺬا اﻟﻜﺘﺎب ‪.‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫اﻟﻤﺤــــﺘــﻮﯾـــــﺎت‬
‫اﻟﺼﻔﺤﺔ‬ ‫اﻟﻤﻮﺿﻮع‬
‫أوﻻ ‪SQL Server :‬‬

‫إﻋﺪاد اﻟﺒﺮﻧﺎﻣﺞ ‪SQL Server Setup‬‬


‫‪١‬‬ ‫أوﻻ ‪ :‬ﻛﯿﻔﯿﺔ إﻋﺪاد ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪SQL Server 2000‬‬
‫‪٦‬‬ ‫ﺛﺎﻧﯿﺎ ‪ :‬ﻛﯿﻔﯿﺔ ﻓﺘﺢ اﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻋﻤﻠﯿﺔ ﺗﺼﻤﯿﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪Database Design‬‬
‫‪٧‬‬ ‫ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت)ﻣﺪرﺳﺔ(‬
‫‪٧‬‬ ‫اﻹﺣﺘﯿﺎﺟﺎت اﻟﻤﻌﻠﻮﻣﺎﺗﯿﺔ‬
‫‪٨‬‬ ‫اﻟﻤﺴﺘﻮي اﻷول ﻟﺘﺼﻤﯿﻢ اﻟﺒﯿﺎﻧﺎت ‪ER‬‬
‫‪٨‬‬ ‫اﻟﻤﺴﺘﻮي اﻟﺜﺎﻧﻲ ﻟﺘﺼﻤﯿﻢ اﻟﺒﯿﺎﻧﺎت ‪Relational‬‬
‫‪٩‬‬ ‫اﻟﻤﺴﺘﻮي اﻟﺜﺎﻟﺚ ﻟﺘﺼﻤﯿﻢ اﻟﺠﺪاول‬
‫‪١٠‬‬ ‫أﻧﻮاع اﻟﺒﯿﺎﻧﺎت ‪Data Types‬‬
‫‪١١‬‬ ‫اﻟﻘﯿﻮد ‪Constraints‬‬
‫‪١٢‬‬ ‫اﻟﻌﻼﻗﺎت ‪Relationships‬‬
‫أﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻋﻠﻲ اﻷداة ‪Enterprise Manager‬‬
‫‪١٣‬‬ ‫إﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت‬
‫‪١٤‬‬ ‫ﺣﺬف ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت‬
‫‪١٥‬‬ ‫ﻛﯿﻔﯿﺔ إﻧﺸﺎء اﻟﺠﺪاول‬
‫‪١٦‬‬ ‫إﻧﺸﺎء ﺟﺪاول ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﻟﻤﺪرﺳﺔ‬
‫‪٢٥‬‬ ‫اﻟﻌﻼﻗﺎت ﻣﻦ ﺧﻼل ‪Diagram‬‬
‫‪٢٩‬‬ ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت‬
‫‪٣٠‬‬ ‫إﺿﺎﻓﺔ ﺑﯿﺎﻧﺎت‬
‫‪٣١‬‬ ‫ﺗﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت‬
‫‪٣١‬‬ ‫ﺣﺬف اﻟﺒﯿﺎﻧﺎت‬
‫‪٣٢‬‬ ‫اﻷﺷﻜﺎل ‪Panes‬‬
‫ﻋﻤ ﻞ ﻧ ﺴﺨﺔ اﺣﺘﯿﺎﻃﯿ ﺔ ﻟﻘﺎﻋ ﺪة اﻟﺒﯿﺎﻧ ﺎت وﻛﯿﻔﯿ ﺔ اﺳ ﺘﺮﺟﺎﻋﮭﺎ وﻧﻘ ﻞ اﻟﺒﯿﺎﻧ ﺎت ﺑ ﯿﻦ‬
‫ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت‬
‫‪٣٣‬‬ ‫ﻋﻤﻞ ﻧﺴﺨﺔ اﺣﺘﯿﺎﻃﯿﺔ ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬
‫‪٣٦‬‬ ‫ﻛﯿﻔﯿﺔ اﺳﺘﺮﺟﺎع ﻧﺴﺨﺔ اﺣﺘﯿﺎﻃﯿﺔ ﻟﻘﺎﻋﺪة ﺑﯿﺎﻧﺎت‬
‫‪٣٧‬‬ ‫ﻧﻘﻞ اﻟﺒﯿﺎﻧﺎت ﺑﯿﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺘﻠﻔﺔ ‪DTS‬‬
‫‪٤١‬‬ ‫ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺤﻮﻟﺔ‬
‫‪٤١‬‬ ‫ﺣﻔﻆ ‪DTS Package‬‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻷداة ‪Query Analyzer‬‬
‫‪٤٢‬‬ ‫ﻟﻐﺔ ﺗﻌﺮﯾﻒ اﻟﺒﯿﺎﻧﺎت ‪DDL‬‬
‫‪٤٢‬‬ ‫ﻛﯿﻔﯿﺔ اﻷﺗﺼﺎل ب ‪Query Analyzer‬‬
‫‪٤٣‬‬ ‫إﻧﺸﺎء وﺣﺬف ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت‬
‫‪٤٤‬‬ ‫ﺗﻌﺪﯾﻞ أﺳﻢ اﻟﻘﺎﻋﺪة‬
‫‪٤٤‬‬ ‫اﻟﺠﺪاول‬
‫‪٤٤‬‬ ‫إﺿﺎﻓﺔ ﺟﺪول‬
‫‪٤٥‬‬ ‫ﺗﻌﺮﯾﻒ اﻟﻘﯿﻮد‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪٤٧‬‬ ‫إﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت)ﻣﺪرﺳﺔ(‬
‫‪٤٩‬‬ ‫ﺗﻌﺪﯾﻞ اﻟﺠﺪاول‬
‫‪٥١‬‬ ‫ﺣﺬف اﻟﺠﺪاول‬
‫‪٥٢‬‬ ‫ﻟﻠﻮﺻﻮل ﻟﻤﻌﻠﻮﻣﺎت ﺣﻮل اﻟﺠﺪاول‬
‫ﻟﻐﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت )‪Data Manipulation Language (DML‬‬
‫‪٥٤‬‬ ‫ﺟﻤﻠﺔ اﻹﺿﺎﻓﺔ‬
‫‪٥٥‬‬ ‫ﺟﻤﻠﺔ اﻟﺘﻌﺪﯾﻞ‬
‫‪٥٧‬‬ ‫ﺟﻤﻠﺔ اﻟﺤﺬف‬
‫‪٥٨‬‬ ‫اﻟﺘﺤﻜﻢ ﻓﻲ اﻟﺤﻔﻆ واﻟﺘﺮاﺟﻊ ﻋﻦ اﻟﺠﻤﻞ اﻟﻤﻨﻔﺬة ‪Transaction Control‬‬
‫ﺑﻨﺎء ﺟﻤﻠﺔ اﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ‪Retrieving Data Statement Structure‬‬
‫‪٦٠‬‬ ‫ﻛﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻷﺳﺎﺳﯿﺔ ﻻﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت‬
‫‪٦٠‬‬ ‫اﺳﺘﺮﺟﺎع ﻛﺎﻓﺔ اﻟﺤﻘﻮل ‪Selecting All Columns‬‬
‫‪٦٢‬‬ ‫اﺳﺘﺮﺟﺎع ﺣﻘﻮل ﻣﻌﯿﻨﮫ ‪Selecting Specific Columns‬‬
‫‪٦٢‬‬ ‫اﺳﺘﺨﺪام اﻟﺘﻌﺒﯿﺮات اﻟﺮﯾﺎﺿﯿﺔ وأوﻟﻮﯾﺎت ﺗﻨﻔﺬھﺎ ‪Arithmetic Expression & Precedence‬‬
‫‪٦٣‬‬ ‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻘﯿﻤﺔ اﻟﺨﺎﻟﯿﺔ ‪Null Value‬‬
‫‪٦٤‬‬ ‫اﺳﺘﺨﺪام ﻋﻨﺎوﯾﻦ ﻣﺴﺘﻌﺎرة ‪Using Column Aliases‬‬
‫‪٦٤‬‬ ‫ﻣﻌﺎﻣﻞ دﻣﺞ اﻟﺒﯿﺎﻧﺎت واﻟﺤﻘﻮل ‪Concatenation Operator‬‬
‫‪٦٤‬‬ ‫إﻟﻐﺎء ﺗﻜﺮار اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺼﻔﻮف ‪Eliminating Duplicate Rows‬‬
‫‪٦٥‬‬ ‫اﺳﺘﺮﺟﺎع ﺻﻔﻮف ﻣﺤﺪدة وﺗﺮﺗﯿﺒﮭﺎ ‪Restricting and Sorting Data‬‬
‫‪٦٥‬‬ ‫ﻋﻮاﻣﻞ اﻟﻤﻘﺎرﻧﺔ ‪Comparison Operators‬‬
‫‪٦٦‬‬ ‫اﻟﻤﻌﺎﻣﻼت = ‪<! ، >! ، => ، =< ، > ، < ، =! ، <> ،‬‬
‫‪٦٧‬‬ ‫اﻟﻤﻌﺎﻣﻞ )ﻣﺎﺑﯿﻦ ( ‪… Between … And‬‬
‫‪٦٨‬‬ ‫اﻟﻘﯿﻤﺔ اﻟﻔﺎرﻏﺔ أو ﻟﯿﺴﺖ ﻓﺎرﻏﺔ ‪IS [ NOT ] NULL‬‬
‫‪٦٨‬‬ ‫ﻣﻌﺎﻣﻞ اﻟﻤﻤﺎﺛﻠﺔ أو ﻋﺪم اﻟﻤﻤﺎﺛﻠﺔ ‪[NOT] LIKE‬‬
‫‪٦٩‬‬ ‫ﻣﻌﺎﻣﻞ )ﻣﻮﺟﻮد ﻣﺎﺑﯿﻦ( ‪IN‬‬
‫‪٦٩‬‬ ‫‪ ANY‬أي )‪(Some‬‬
‫‪٧٠‬‬ ‫‪ All‬اﻟﻤﻌﺎﻣﻞ ﻛـــــﻞ‬
‫‪٧١‬‬ ‫]‪NOT] EXISTS‬ﻣﻮﺟﻮد أو ﻏﯿﺮ ﻣﻮﺟﻮد‬
‫‪٧٢‬‬ ‫اﻟﻌﻮاﻣﻞ اﻟﻤﻨﻄﻘﯿﺔ ‪Logical Operators‬‬
‫‪٧٣‬‬ ‫أوﻟﻮﯾﺎت اﻟﺘﻨﻔﯿﺬ ﻟﻠﻌﻮاﻣﻞ ‪Operators Precedence‬‬
‫‪٧٥‬‬ ‫اﻟﺘﺪاﺧﻞ ﻣﻊ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ‬
‫‪٧٦‬‬ ‫اﻟﺘﺮﺗﯿﺐ اﻟﺘﺼﺎﻋﺪي واﻟﺘﻨﺎزﻟﻲ ﻟﻠﺒﯿﺎﻧﺎت ‪Data Sorting‬‬
‫ﻋﺮض اﻟﺒﯿﺎﻧﺎت ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول ‪Displaying Data From Multiple Tables‬‬
‫‪٧٨‬‬ ‫أﻧﻮاع اﻟﺮﺑﻂ ‪Types Of Joins‬‬
‫‪٧٩‬‬ ‫اﻟﺮﺑﻂ أو اﻟﻨﺎﺗﺞ اﻟﻜﺮﺗﯿﺰي )‪Cartesian Product (CROSS JOIN‬‬
‫‪٨٠‬‬ ‫اﻟﺮﺑﻂ اﻟﻤﺘﺴﺎوي ‪Equal Join‬‬
‫‪٨٢‬‬ ‫اﻟﺮﺑﻂ اﻟﻐﯿﺮ ﻣﺘﺴﺎوي ‪Non-equal join‬‬
‫‪٨٣‬‬ ‫اﻟﺮﺑﻂ اﻟﺪاﺧﻠﻲ ‪Inner Join‬‬
‫‪٨٤‬‬ ‫اﻟﺮﺑﻂ اﻟﺨﺎرﺟﻲ ‪Outer join‬‬
‫‪٨٧‬‬ ‫اﻟﺮﺑﻂ اﻟﺬاﺗﻲ ‪Self Join‬‬
‫‪Functions‬‬ ‫اﻟــــــــــــــﺪوال‬
‫‪٨٨‬‬ ‫‪String Functions‬‬ ‫دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻨﺼﻮص‬
‫‪٩٣‬‬ ‫دوال اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﻮارﯾﺦ واﻷوﻗﺎت ‪Date and Time Functions‬‬
‫‪٩٥‬‬ ‫‪Mathematical Functions‬‬ ‫اﻟﺪوال اﻟﺮﻗﻤﯿﺔ‬
‫‪٩٧‬‬ ‫‪Conversion Functions‬‬ ‫دوال اﻟﺘﺤﻮﯾﻞ‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪٩٨‬‬ ‫‪Aggregating Functions‬‬ ‫دوال اﻟﺘﺠﻤﯿﻊ‬
‫‪١٠٠‬‬ ‫اﻟﺠﺰء ‪Group By‬‬
‫‪١٠٢‬‬ ‫اﻟﺠﺰء ‪Having‬‬
‫‪١٠٢‬‬ ‫اﻟﺠﺰء ‪Compute‬‬
‫‪١٠٣‬‬ ‫اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪With Rollup‬‬
‫‪١٠٤‬‬ ‫اﻟﻜﻠﻤﺔ اﻷﺳﺎﺳﯿﺔ ‪With Cube‬‬
‫‪١٠٥‬‬ ‫اﻟﺪاﻟﺔ ‪Grouping‬‬
‫‪١٠٦‬‬ ‫اﻟﺪاﻟﺔ ‪Case‬‬
‫ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع اﻟﻤﺘﻘﺪﻣﺔ ‪Advanced Select‬‬
‫‪١٠٨‬‬ ‫ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻣﻊ ﺟﻤﻞ ‪DDL‬‬
‫‪١٠٨‬‬ ‫ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ﻣﻊ ﺟﻤﻞ ‪DML‬‬
‫‪١٠٨‬‬ ‫ﺟﻤﻠﺔ اﻹدﺧﺎل ‪Insert Statement‬‬
‫‪١١٠‬‬ ‫ﺟﻤﻠﺔ اﻟﺘﻌﺪﯾﻞ ‪Update Statement‬‬
‫‪١١٠‬‬ ‫ﺟﻤﻠﺔ اﻟﺤﺬف ‪Delete Statement‬‬
‫‪١١١‬‬ ‫ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع اﻟﻤﺘﻘﺪﻣﺔ ﻓﻲ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﯿﺔ‬
‫‪١١٢‬‬ ‫ﺣﻔﻆ ﺟﻤﻞ اﻻﺳﺘﺮﺟﺎع ﻓﻲ اﻟﻜﺎﺋﻦ ‪View‬‬
‫‪١١٢‬‬ ‫أﻧﻮاع اﻟﻜﺎﺋﻦ ‪View‬‬
‫‪١١٢‬‬ ‫ﻣﻘﺎرﻧﺔ ﺑﯿﻦ أﻧﻮاع اﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇﺔ‬
‫‪١١٢‬‬ ‫ﺷﺮوط ﺗﻌﺎﻣﻞ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﺤﻔﻮﻇﺔ اﻟﻤﺮﻛﺒﺔ ﻣﻊ ‪DML‬‬
‫‪١١٣‬‬ ‫‪Creating Views‬‬ ‫ﻛﯿﻔﯿﺔ إﻧﺸﺎء اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ‬
‫‪١١٤‬‬ ‫ﻛﯿﻔﯿﺔ اﺳﺘﺮﺟﺎع ﺑﯿﺎﻧﺎت ﻣﻦ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪Retrieve data through a view‬‬
‫‪١١٥‬‬ ‫ﻛﯿﻔﯿﺔ اﻟﻮﺻﻮل ﻟﻮﺻﻒ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪Describe a View‬‬
‫‪١١٥‬‬ ‫ﻛﯿﻔﯿﺔ ﺗﻐﯿﺮ أﺳﻢ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪Rename Views‬‬
‫‪١١٥‬‬ ‫ﻛﯿﻔﯿﺔ ﺗﻌﺪﯾﻞ اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ ‪Altering Views‬‬
‫‪١١٥‬‬ ‫ﻛﯿﻔﯿﺔ اﻹدراج واﻟﺤﺬف واﻟﺘﻌﺪﯾﻞ اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺧﻼل اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ‬
‫‪١١٦‬‬ ‫‪Dropping Views‬‬ ‫ﻛﯿﻔﯿﺔ ﺣﺬف اﻻﺳﺘﻌﻼم اﻟﻤﺤﻔﻮظ‬
‫ﺛﺎﻧﯿﺎ ‪ASP.NET (ADO.NET) :‬‬

‫‪ASP.NET‬‬ ‫ﻣﻘﺪﻣﺔ ﻋﻦ ﺗﻘﻨﯿﺔ ‪Introduction Into ASP.NET‬‬


‫‪١١٧‬‬ ‫ﺗﻮﺻﯿﻒ ﺑﯿﺌﺔ اﻟﺘﺸﻐﯿﻞ ﺑﯿﻦ اﻟﺨﺎدم واﻟﻌﻤﯿﻞ ‪Client / Server Architecture‬‬
‫‪١١٧‬‬ ‫أوﻻ ‪ :‬ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺼﻔﺤﺎت اﻟﺜﺎﺑﺘﺔ‬
‫‪١١٧‬‬ ‫ﺛﺎﻧﯿﺎ ‪ :‬ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺼﻔﺤﺎت اﻟﻨﺸﻄﺔ )اﻟﺪﯾﻨﺎﻣﯿﻜﯿﺔ(‬
‫‪١١٨‬‬ ‫ﺛﺎﻟﺜﺎ ‪ :‬ﺗﻮﺿﯿﺢ اﻟﻌﻨﺎﺻﺮ اﻷﺳﺎﺳﯿﺔ‬
‫‪١١٩‬‬ ‫راﺑﻌﺎ ‪ :‬اﻹﻃﺎر اﻟﻌﺎم ﻟﺘﻮﺻﯿﻒ اﻟﺒﻨﺎء اﻷﺳﺎﺳﻲ ﻟﺒﯿﺌﺔ اﻟﺘﺸﻐﯿﻞ اﻟﺤﺎﺳﺐ واﻟﻌﻤﯿﻞ‬
‫ﻋﻤﻠﯿﺔ اﻷﻋﺪاد ‪Visual Studio Setup‬‬
‫‪١٢٠‬‬ ‫أوﻻ ‪ :‬ﺗﺠﮭﯿﺰ اﻟﺤﺎﺳﺐ اﻟﺸﺨﺼﻲ ﻟﯿﻌﻤﻞ ﻛﺨﺎدم ‪Web Server‬‬
‫‪١٢١‬‬ ‫ﺛﺎﻧﯿﺎ ‪:‬ﺗﺠﮭﯿﺰ ‪Visual Studio .Net 2003‬‬
‫‪١٢٥‬‬ ‫اﻟﺸﺎﺷﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ‬
‫‪Web‬‬ ‫اﻟﻌﻤ ﻞ ﻣ ﻊ ﻋﻨﺎﺻ ﺮ ﺗﺤﻜ ﻢ ﻧﻤ ﻮذج ‪Working with Web Form‬‬
‫‪Controls‬‬
‫‪١٢٧‬‬ ‫اﻟﻌﻨﺎﺻﺮ اﻟﻘﯿﺎﺳﯿﺔ ‪Web Forms‬‬
‫‪١٢٧‬‬ ‫ﻋﻨﺎﺻﺮ ‪HTML‬‬
‫‪١٢٨‬‬ ‫ﻋﻨﺎﺻﺮ اﻟﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ اﻟﺒﯿﺎﻧﺎت ‪Validation Controls‬‬
‫‪Data Access with‬‬ ‫اﻟﻮﺻ ﻮل ﻟﻠﺒﯿﺎﻧ ﺎت ﻣ ﻦ ﺧ ﻼل ‪ADO.NET‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬


‫‪ADO.NET‬‬
‫‪١٢٩‬‬ ‫ﻛﺎﺋﻨﺎت ‪ADO.NET‬‬
‫‪١٣٠‬‬ ‫اﺳﺘﺨﺪام ﻣﺘﺼﻔﺢ اﻟﺨﺎدم ﻟﻠﻮﺻﻮل ﻟﻠﺒﯿﺎﻧﺎت ‪Server Explorer‬‬
‫‪١٣١‬‬ ‫ﻣﺜﺎل ﺷﺒﻜﺔ اﻟﺒﯿﺎﻧﺎت ‪DBGrid‬‬
‫‪١٣٤‬‬ ‫اﻟﻮﺻﻮل ﻟﺒﯿﺎﻧﺎت ﻣﺤﺪدة ﻣﻦ ﺟﺪول‬
‫رﺑﻂ ﻋﻨﺎﺻﺮ اﻟﺘﺤﻜﻢ ﺑﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ‪Binding Controls to Database‬‬
‫‪١٣٩‬‬ ‫أوﻻ ‪ :‬اﻟﺮﺑﻂ اﻟﺒﺴﯿﻂ ‪Simple Binding‬‬
‫‪١٣٩‬‬ ‫ﻣﺜﺎل ﻋﻠﻲ اﻟﺮﺑﻂ اﻟﺒﺴﯿﻂ‬
‫‪١٤٠‬‬ ‫ﺛﺎﻧﯿﺎ ‪ :‬اﻟﺮﺑﻂ اﻟﻤﺮﻛﺐ )اﻟﻤﻌﻘﺪ( ‪Complex Binding‬‬
‫‪١٤١‬‬ ‫اﻟﺘﺠﻮل ﻓﻲ ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت ‪Navigating In Dataset‬‬
‫‪١٤٣‬‬ ‫إﺿﺎﻓﺔ ﺳﺠﻼت داﺧﻞ اﻟﻘﺎﻋﺪة ‪Adding Records Into Database‬‬
‫‪١٤٥‬‬ ‫ﺣﺬف ﺳﺠﻼت ﻣﻦ داﺧﻞ اﻟﻘﺎﻋﺪة ‪Deleting Records From Database‬‬
‫‪١٤٧‬‬ ‫ﻧﻤﻮذج رﺋﯿﺴﻲ‪/‬ﺗﻔﺼﯿﻞ ﺑﺎﺳﺘﺨﺪام وﺳﺎﺋﻂ اﻻﺳﺘﻌﻼﻣﺎت‬
‫‪Form Master/Detail With Parameterized SQL Queries‬‬
‫‪١٤٩‬‬ ‫اﻟـﺒﺤــﺚ ‪Search‬‬
‫‪١٤٩‬‬ ‫ﺗﻌﺪﯾﻞ ﺻﻒ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ‪Update Record In Database‬‬

‫وﺑﮭﺬا ﻧﻜﻮن ﻗﺪ اﻧﺘﮭﯿﻨﺎ واﻟﺤﻤﺪ ﷲ ﻣﻦ اﻟﺠﺰء اﻷول ﻣﻦ ھﺬا اﻟﻜﺘﺎب ﻟﻘﺪ ﺗﻌﻠﻤﻨﺎ اﻟﻜﺜﯿﺮ وﻟﻜﻨﮫ ﻟﯿﺲ ﻛﻞ ﺷﺊ وﺳﻨﺮي‬
‫اﻟﻤﺰﯾﺪ أن ﺷﺎء اﷲ ﻓﻲ اﻟﺠﺰء اﻟﺜﺎﻧﻲ ﻣﻦ ھﺬا اﻟﻜﺘﺎب ‪.‬‬

‫‪PDF created with pdfFactory Pro trial version www.pdffactory.com‬‬

You might also like