Professional Documents
Culture Documents
ﻫﺬا ﺷﺮح ﻟﺒﺮﻧﺎﻣﺞ أو ﻟﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت SQL SERVERﺳﺄﻗﻮم ﺑﻌﺮﺿﻬﺎ ﻋﻠﻰ ﺷﻜﻞ
دروس وﻣﻨﺎﻗﺸﺎت وﻛﺬﻟﻚ رﺑﻂ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﻠﻐﺔ ﺑﺮﻣﺠﺔ واﺳﺘﺪﻋﺎﺋﻬﺎ واﻟﻌﻤﻠﯿﺎت ﻋﻠﯿﻬ ﺎ
وﺳ ﺘﻜﻮن ﻟﻐ ﺔ اﻟﻔﯿﺠ ﻮال ﺑﯿ ﺰك ﻫ ﻲ اﻟﻠﻐ ﺔ اﻟﺘ ﻲ ﺳ ﺄﻋﺘﻤﺪ ﺑﺎﻟﺸ ﺮح ﻋﻠﯿﻬ ﺎ ﻟﺴ ﻬﻮﻟﺘﻬﺎ
واﻧﺘﺸﺎرﻫﺎ وﻟﺘﻌﻢ اﻟﻔﺎﺋﺪة ﺑﺸﻜﻞ اﻛﺒﺮ و اﻟﻔﻜﺮة واﺣﺪة ﺗﻘﺮﯾﺒﺎ ﺑﯿﻦ ﻛﻞ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ
وﻟﻠﻌﻠﻢ أﻧﻬﺎ ﻟﯿﺲ ﻣﻦ إﻧﺘﺎﺟﻲ اﻟﺨﺎص ﺑﻞ ﻓﯿﻬﺎ ﻗﺴﻢ ﻛﺒﯿﺮ ﺟﻤﻌﺘ ﻪ ﻣ ﻦ ﻣﺨﺘﻠ ﻒ اﻷﻣ ﺎﻛﻦ ﻋﺒ ﺮ
اﻻﻧﺘﺮﻧﯿﺖ واﻷﺻﺪﻗﺎء واﻟﺨﺒﺮة اﻟﺬاﺗﯿﺔ وﻏﯿﺮﻫﻢ
ﻛﻤﺎ اﻧﻪ ﺣﻘﻮق اﻟﻨﺴﺦ واﻟﻨﻘﻞ ﻣﻔﺘﻮﺣﺔ ﻟﻠﺠﻤﯿﻊ ﻓﻬﻲ ﻟﻠﻔﺎﺋﺪة اﻟﻌﺎﻣﺔ .
أﺧﯿﺮا إن ﻛﻨﺖ ﻗﺪ أﺻﺒﺖ ﻓﻲ ﺷﻲء ﻓﻬﺬا ﻣﻦ اﷲ وان ﻛﻨﺖ ﻗﺪ أﺧﻄﺌﺖ ﻓﻲ ﺷﻲء ﻓﻬﺬا ﻣﻦ
ﻧﻔﺴﻲ وﻣﻦ اﻟﺸﯿﻄﺎن .
15/7/2000
GOLD NOIL
ﺻﺪﻕ ﺍﷲ ﺍﻟﻌﻈﻴﻢ
اﻷول:
ﯾﺘﺤﺪث ﻋﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت SQL SERVERﺑﺸﻜﻞ ﻋﺎم وﯾﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ
ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ
اﻟﺜﺎﻧﻲ:
ﯾﺘﻄﺮق إﻟﻰ اﺳﺘﺨﺪام ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻣﻊ أﺣﺪى اﻟﻠﻐﺎت اﻟﺒﺮﻣﺠﺔ وﻫﻲ ﺳﺘﻜﻮن
اﻟﻔﯿﺠﻮال ﺑﯿﺰك 6
ﻫﺬه اﻟﻤﻘﺪﻣﺔ ﻛﻨﺖ ﻓﻲ ﺣﯿﺮة ﻣﻦ أﻣﺮي ﻗﺒﻞ ﻛﺘﺎﺑﺘﻬﺎ ﻓﺄﻧﺎ ﻣﻦ اﺷﺪ اﻟﻤﻌﺎرﺿﯿﻦ ﻟﻠﻤﻘﺎرﻧﺎت
ﺑﯿﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ أو ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت أو ....،،،
وﻟﻢ أﺗﺪﺧﻞ ﻓﻲ ﻣﻘﺎرﻧﺔ أي ﻣﻨﺘﺠﯿﻦ ﻗﺒﻞ اﻵن ﻻﻧﻲ أﺛﻖ ﺑﺎن ﻣﻬﻤﺎ ﻛﺎﻧﺖ اﻟﻠﻐﺔ أو اﻟﺒﺮﻧﺎﻣﺞ
ﺑﯿﻦ ﯾﺪي ﻗﻮي وأﻧﺎ ﻏﯿﺮ أﻫﻞ ﻟﻠﻌﻤﻞ ﻋﻠﻰ ﻫﺬا اﻟﺒﺮﻧﺎﻣﺞ ﻓﻠﻦ ﯾﻜﻮن اﻧﺘﺎﺟﻲ ﻣﺜﻞ ﻣﻦ ﻫﻢ أﻫﻞ
اﻟﻌﻠﻢ واﻟﺨﺒﺮة وﯾﻌﻤﻠﻮن ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ﺑﺴﯿﻂ
وﻻ أﺟﺪ اﻓﻀﻞ ﻗﻮﻻ ﻣﻦ ﺗﻌﻠﯿﻖ وﺟﺪﺗﻪ ﻟﺪى أﺣﺪ اﻻﺧﻮة ﻓﻲ اﻟﻤﻨﺘﺪى وﻫﻮ
) ﻻ ﺗﺴﺄل ﻣﺎذا ﺗﻔﻌﻞ ﻟﻚ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ ﺗﻠﻚ ﺑﻞ اﺳﺄل ﻣﺎذا ﺗﺴﺘﻄﯿﻊ أن ﺗﻔﻌﻞ ﺑﻬﺎ ( ﻟﺬﻟﻚ
أرﺟﻮ أن ﻻ ﯾﺤﻤﻞ ﻋﻠﻲ أﺣﺪ ﻣﻦ ﻫﻮاة أو ﻣﺒﺮﻣﺠﻲ اوراﻛﻞ أو ﻏﯿﺮﻫﺎ ﻓﻜﻞ واﺣﺪ وﺣﺴﺐ
ﻣﺎﯾﺮاه ﻣﻦ ﻣﻨﻈﻮره اﻟﺨﺎص وﺣﺴﺐ ﺣﺎﺟﺘﻪ .
ﻓﺮﺑﻤﺎ ﯾﻜﻮن ﻣﺒﺮﻣﺞ ﻣﺘﻤﺮس ﺑﺎﻟﺒﯿﺰك ﻗﺎدر ﻋﻠﻰ إﻧﺘﺎج ﺑﺮﻧﺎﻣﺞ ﯾﻌﺠﺰ ﻋﻨﻪ ﻣﺒﺮﻣﺞ ﻫﺎوي
ﺑﺎﻟﺴﻲ ﺷﺎرب أو اﻟﻔﯿﺠﻮال ﺳﻲ ،
ﻫﺬا اﻟﻤﺜﺎل راﯾﺘﻪ ﺑﺄم ﻋﯿﻨﻲ وﻟﯿﺲ ﻣﻦ ﻣﺤﺾ اﻟﺨﯿﺎل .
ﺗﻜﻮن اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻣﺨﺰﻧﺔ ﻓﻲ ﻋﺪة ﺟﺪاول Tablesوﻛﻞ ﺟﺪول ﯾﺘﻜﻮن ﻣﻦ ﺻﻔﻮف
Rowsوأﻋﻤﺪة Coloumnsﻛﺎﻷﺗﻲ:
اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﯾﺘﻜﻮن ﻣﻦ ﺛﻼﺛﺔ ﺻﻔﻮف وﻋﺎﻣﻮدﯾﻦ ،وﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻓﺈﻧﻨﺎ ﻧﺴﻤﻲ اﻟﺼﻔﻮف
ﺑﺎﻟﺴﺠﻼت Recordsوﻧﺴﻤﻲ اﻷﻋﻤﺪة ﺑﺎﻟﺤﻘﻮل Fields
اﻟﺤﻘﻞ :ﻫﻮ اﻟﺬي ﺗﺨﺰن ﻓﯿﻪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺘﺸﺎﺑﻬﺔ ﻣﻦ ﺣﯿﺚ اﻟﻨﻮع ) ﻣﺜﻞ ﺣﻘﻞ اﻻﺳﻢ( ) أو ﺣﻘﻞ
اﻟﻮﻇﯿﻔﺔ(
ﻣﺜﺎل:
اﻟﻮﻇﯿﻔﺔ اﻻﺳﻢ
ﻣﺒﺮﻣﺞ ﺧﺎﻟﺪ اﻷﺣﻤﺪي
ﻋﺎﻣﻞ ﻣﺤﻤﺪ ﻋﺒﺪا ﷲ
ﻣﺤﻠﻞ ﻧﻈﻢ ﻛﻤﺎل اﻟﺤﺮﺑﻲ
ﻟﻘﺪ ﺑﺪء ﻇﻬﻮر ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ ﺑﺸﻜﻞ ﻣﻜﺜﻒ ﻓﻲ ﻧﻬﺎﯾﺔ اﻟﺜﻤﺎﻧﯿﻨﺎت ،ﻃﺒﻌﺎ ﻫﻲ ﻣﻮﺟﻮدة
ﺑﻄﺮﯾﻘﺔ أو ﺑﺄﺧﺮى ﻣﻨﺬ ﻓﺘﺮة أﻃﻮل وﻟﻜﻦ اﺳﺘﺨﺪاﻣﻬﺎ اﻗﺘﺼﺮ إﻟﻰ ﺑﻌﺾ اﻟﻤﺆﺳﺴﺎت اﻟﻀﺨﻤﺔ ﻓﻘﻂ
ﻟﻘﺪ ﻛﺎن اﻟﺠﻤﯿﻊ ﻗﺒﻞ ذﻟﻚ ﯾﺴﺘﺨﺪم اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺻﻨﻌﺖ ﺑﻠﻐﺎت اﻟﺒﺮﻣﺠﺔ اﻟﻌﺎدﯾﺔ واﻟﺘﻲ ﻛﺎﻧﺖ ﺗﺨﺰن
ﺑﯿﺎﻧﺎﺗﻬﺎ ﻓﻲ ﻣﻠﻔﺎت ﺧﺎﺻﺔ ﺑﻬﺎ ،واﻟﻤﺸﻜﻠﺔ اﻷﺳﺎﺳﯿﺔ ﻓﻲ ﺗﻠﻚ اﻟﺒﺮاﻣﺞ ﻛﺎﻧﺖ ﻣﺤﺪودﯾﺔ اﺳﺘﺨﺪام
اﻟﺒﯿﺎﻧﺎت ،اﻋﻨﻲ اﻧﻚ ﻻ ﺗﺴﺘﻄﯿﻊ اﻻﺳﺘﻌﻼم ﻋﻦ اﻟﺒﯿﺎﻧﺎت ﺑﻄﺮﯾﻘﺔ أﺧﺮى ﻏﯿﺮ اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ ﺻﻤﻢ ﺑﻬﺎ
اﻟﺒﺮﻧﺎﻣﺞ
ﻛﻤﺜﺎل :ﻟﻨﻔﺘﺮض ﺑﺄﻧﻚ ﺗﺴﺘﺨﺪم ﺑﺮﻧﺎﻣﺞ ﺻﻤﻢ ﺑﻮاﺳﻄﺔ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺎ ﻟﯿﺨﺰن ﺑﯿﺎﻧﺎﺗﻪ ﻓﻲ ﻣﻠﻔﺎت
ﺧﺎﺻﺔ ﺑﻪ وﻟﯿﺲ ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ،وﻛﺎن اﺣﺪ ﻓﺮوع ﺑﺮﻧﺎﻣﺠﻚ ﻫﻮ اﻻﺳﺘﻌﻼم ﻋﻦ اﻟﺒﻀﺎﺋﻊ ،ﻣﻬﻤﺎ
ﺗﺘﻌﺐ ﻓﻲ ﺗﺼﻤﯿﻢ ﻫﺬا اﻻﺳﺘﻌﻼم ،ﻓﻘﺪ ﺗﺠﺪ دوﻣﺎ ﻣﻦ ﯾﺄﺗﻲ ﻟﻚ ﺑﻔﻜﺮة ﺟﺪﯾﺪة ﻻﺳﺘﻌﻼم ﻣﺎ
ﻓﻘﺪ ﯾﻄﻠﺐ اﻟﺸﺨﺺ ﻛﻞ اﻟﺒﻀﺎﺋﻊ اﻟﺘﻲ ﺗﻢ اﺳﺘﻼﻣﻬﺎ ﻓﻲ ﺗﺎرﯾﺦ ﻣﻌﯿﻦ ،ﻣﻦ ﻣﻮرد ﻣﻌﯿﻦ وﺗﻢ ﺑﯿﻌﻬﺎ ﻓﻲ
ﺗﺎرﯾﺦ ﻣﻌﯿﻦ إﻟﻰ زﺑﻮن ﻣﻌﯿﻦ ،ﻗﺪ ﯾﻜﻮن ﺑﺮﻧﺎﻣﺞ ﻗﺎدر ﻋﻠﻰ اﻟﻘﯿﺎم ﺑﺬﻟﻚ ،وﻟﻜﻨﻪ ﻗﺪ ﯾﻌﻘﺪ اﻻﺳﺘﻌﻼم
وﯾﻀﺎف إﻟﻰ اﻻﺳﺘﻌﻼم اﻟﺴﺎﺑﻖ ﺗﺮﺗﯿﺐ اﻟﺒﻀﺎﺋﻊ ﺣﺴﺐ ﺗﺎرﯾﺦ اﻻﺳﺘﻼم ﻣﺜﻼ ﻓﻘﺪ ﻻ ﺗﻜﻮن وﺿﻌﺖ ﺗﻠﻚ
اﻟﻤﻤﯿﺰة ﻓﻲ ﺑﺮﻧﺎﻣﺠﻚ ﻋﻨﺪ ﺗﺼﻤﯿﻤﻪ ،وﻟﺬﻟﻚ ﻓﻠﻦ ﯾﺘﻤﻜﻦ اﻟﻤﺴﺘﺨﺪم اﻟﻨﻬﺎﺋﻲ اﻟﺤﺼﻮل ﻋﻠﻰ ﻃﻠﺒﻪ
ﺑﺎﻟﻀﺒﻂ
وﻣﻦ ﻫﻨﺎ ﺑﺪﺋﺖ ﻓﻜﺮة ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻋﺎﻣﺔً ،وﻛﺎﻧﺖ اﻟﻔﻜﺮة إﯾﺠﺎد ﻃﺮﯾﻘﺔ ﻣﻮﺣﺪة ﻟﺤﻔﻆ اﻟﺒﯿﺎﻧﺎت ،
وإﯾﺠﺎد ﺑﺮﻧﺎﻣﺞ ﻗﺎدر ﻋﻠﻰ ﺟﻤﯿﻊ أﻧﻮاع اﻻﺳﺘﻌﻼﻣﺎت ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،ﻓﻠﻮ ﻓﺸﻞ ﺑﺮﻧﺎﻣﺞ اﻟﺴﺎﺑﻖ ،
ﻓﺒﺈﻣﻜﺎن اﻟﻤﺴﺘﺨﺪم ﻓﺘﺢ ﻣﻠﻒ اﻟﺒﯿﺎﻧﺎت ﻋﻦ ﻃﺮﯾﻖ ﺑﺮﻧﺎﻣﺞ اﻻﺳﺘﻌﻼم اﻟﺮﺋﯿﺴﻲ اﻟﺬي ﯾﺄﺗﻲ ﻣﻊ ﻗﺎﻋﺪة
اﻟﺒﯿﺎﻧﺎت وإﺟﺮاء ﻛﻞ اﻻﺳﺘﻌﻼﻣﺎت اﻟﺘﻲ ﯾﺤﻠﻢ ﺑﻬﺎ
وﻟﻜﻦ ﻣﻊ زﯾﺎدة ﺣﺠﻢ اﻟﻤﺆﺳﺴﺎت وﺑﺪاﯾﺔ ﻇﻬﻮر ﺷﺒﻜﺎت اﻟﻜﻮﻣﺒﯿﻮﺗﺮ ،أﺻﺒﺤﺖ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت
ﺑﺤﺎﺟﺔ إﻟﻰ أن ﺗﻌﻤﻞ ﻋﻠﻰ أﻛﺜﺮ ﻣﻦ ﺟﻬﺎز ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ،ﻓﺘﻄﻮرت ﺑﺮاﻣﺞ إدارة ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت
وأﺻﺒﺤﺖ ﻗﺎدرة ﻋﻠﻰ ﻓﺘﺢ ﻧﻔﺲ اﻟﻤﻠﻔﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﺠﻬﺎز اﻟﻤﺮﻛﺰي ﻣﻦ ﻋﺪة أﺟﻬﺰة ﻛﻮﻣﺒﯿﻮﺗﺮ
ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ وﻣﻦ أﻣﺜﻠﺘﻬﺎ
DBase
Paradox
وﻏﯿﺮﻫﻤﺎ وﻟﻘﺪ ﺣﻞ اﻟﺴﺎﺑﻖ ﺑﻌﺾ اﻟﻤﺸﺎﻛﻞ وﻟﻜﻦ ﻟﯿﺲ ﻛﻠﻬﺎ ،ﻻن ﻣﻊ زﯾﺎدة ﺣﺠﻢ اﻟﺒﯿﺎﻧﺎت وزﯾﺎدة
ﻋﺪد اﻷﺟﻬﺰة اﻟﻤﺘﺼﻠﯿﻦ ﺑﺎﻟﺸﺒﻜﺔ أﺻﺒﺢ ﺻﻌﺐ إدارة ﻣﻠﻔﺎت ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻋﻠﻰ اﻟﺠﻬﺎز
اﻟﻤﺮﻛﺰي ،ﻛﻤﺎ أن أﻣﻨﻬﺎ ﻛﺎن ﻣﻌﺮض ﻟﻠﺨﻄﺮ داﺋﻤﺎ ،ﻓﺒﺎﻣﻜﺎن اﻟﺠﻤﯿﻊ اﻟﻮﺻﻮل إﻟﻰ اﻟﻤﻠﻒ اﻟﻤﺮﻛﺰي
اﻟﺬي ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﺒﯿﺎﻧﺎت وﯾﻌﺒﺚ ﺑﻪ ،أو ﺣﺘﻰ أن ﯾﺼﻞ إﻟﻰ ﺑﯿﺎﻧﺎت ﻻ ﺻﻼﺣﯿﺔ ﻟﻪ ﺑﺎﺳﺘﺨﺪاﻣﻬﺎ
ﻛﻤﺎ أن اﻻﺳﺘﻌﻼﻣﺎت اﻟﻤﺘﺰاﯾﺪة ﻋﻠﻰ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت زادت ﻣﻦ اﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺸﺒﻜﺔ ﻓﻜﻤﺎ ﺗﻌﻠﻢ ﯾﺘﻄﻠﺐ
اﻻﺳﺘﻌﻼم ﻋﻦ ﺷﺨﺺ ﻣﺎ ،ﯾﺘﻄﻠﺐ اﻟﺒﺤﺚ ﻓﻲ ﻛﻞ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺣﺘﻰ إﯾﺠﺎده ﺑﻬﺎ
ﻓﻌﻠﻰ ﺳﺒﯿﻞ اﻟﻤﺜﺎل :ﻟﻮ ﻛﺎن ﻟﺪﯾﻚ ﺟﺪول ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﺑﻪ ﻣﻌﻠﻮﻣﺎت ﻋﻦ ﻋﺸﺮة أﻻف ﻧﻮع ﻣﻦ
اﻟﺒﻀﺎﺋﻊ وﻃﻠﺒﺖ أن ﻣﻦ ﺟﻬﺎزك ﻛﻞ اﻟﺒﻀﺎﺋﻊ اﻟﺘﻲ اﺳﺘﻠﻤﺖ ﻓﻲ ﺗﺎرﯾﺦ ﻣﻌﯿﻦ ،ﻓﻌﻠﯿﺎ ﺳﯿﻘﻮم ﺟﻬﺎزك
ﺑﺈﺣﻀﺎر اﻟﻌﺸﺮة أﻻف ﺳﺠﻞ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت إﻟﻰ ﺟﻬﺎز وذﻟﻚ ﻋﺒﺮ اﻟﺸﺒﻜﺔ وﺳﯿﻔﻠﺘﺮﻫﻢ وﯾﻔﺮز
اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ
وﻟﻜﻨﻪ ﺿﻐﻂ ﻋﻠﻰ اﻟﺸﺒﻜﺔ ﺑﺎﻟﺤﺼﻮل ﻋﻠﻰ ﻛﻞ ﺗﻠﻚ اﻟﻤﻌﻠﻮﻣﺎت ﻣﻌﺎ ،ﻃﺒﻌﺎ اﻟﺸﺒﻜﺔ ﻗﺪ ﺗﺘﺤﻤﻞ ﻃﻠﺐ أو
ﻃﻠﺒﯿﻦ ﻣﻌﺎ ،وﻟﻜﻦ ﻣﺎذا ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺒﻨﻮك ﻣﺜﻼ ،ﻫﻨﺎك أﻻف اﻟﺴﺠﻼت وﻋﺸﺮات اﻟﻌﻤﻠﯿﺎت ﻓﻲ ﻧﻔﺲ
اﻟﻮﻗﺖ
وﻟﺬﻟﻚ ﺑﺪﺋﺖ اﻟﺤﺎﺟﺔ إﻟﻰ ﺗﻄﻮﯾﺮ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻌﺎدﯾﺔ ،وﻣﻦ ﻫﻨﺎ ﻇﻬﺮت ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ
،ﻓﻬﻲ ﻋﺒﺎرة ﻋﻦ ﺑﺮﻧﺎﻣﺞ ﯾﻌﻤﻞ ﺑﺪاﺧﻞ اﻟﺠﻬﺎز اﻟﻤﺮﻛﺰي وﯾﺨﺰ اﻟﺒﯿﺎﻧﺎت ﻓﯿﻪ أﯾﻀﺎ وﻟﻜﻦ اﻻﺧﺘﻼف
ﺑﯿﻨﻬﺎ وﺑﯿﻦ اﻟﺴﺎﺑﻖ ذﻛﺮه أن ﻃﻠﺐ اﻟﺒﯿﺎﻧﺎت ﻻ ﯾﺘﻢ إﻻ ﻣﻦ ﺧﻼل اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﯾﻌﻤﻞ ﻓﻲ اﻟﺠﻬﺎز
اﻟﻤﺮﻛﺰي واﻟﺬي ﯾﺴﻤﻰ ﻣﺤﺮك ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ ،وﺑﺬﻟﻚ ﯾﻜﻮن ﻗﺪ ﺗﻢ ﻓﺼﻞ اﻟﻤﺴﺘﺨﺪم
اﻟﻨﻬﺎﺋﻲ ﻋﻦ اﻟﻤﻠﻒ اﻟﺮﺋﯿﺴﻲ ﻟﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت
ﻓﻠﻮ ﻛﻨﺖ ﺑﺤﺎﺟﺔ إﻟﻰ اﺳﺘﻌﻼم ﻣﻌﯿﻦ ،ﻓﺴﯿﻘﻮم ﺑﺮﻧﺎﻣﺠﻚ ﺑﻄﺒﻞ ذﻟﻚ اﻻﺳﺘﻌﻼم ﻣﻦ ﻣﺤﺮك ﻗﻮاﻋﺪ
اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ اﻟﻤﻮﺟﻮد ﻓﻲ اﻟﺠﻬﺎز اﻟﻤﺮﻛﺰي ،ﺣﯿﺚ ﺑﺪوره ﺳﯿﻘﻮم ﻫﻮ ﺑﺎﻻﺳﺘﻌﻼم وﻣﻦ ﺛﻢ
ﻛﻤﺎ أن ﻣﺤﺮك ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﺮﺋﯿﺴﯿﺔ ﻣﺴﺌﻮل ﻋﻦ ﺣﻤﺎﯾﺔ اﻟﺒﯿﺎﻧﺎت ،ﻗﺒﻞ ﻛﺎن اﻟﺠﻤﯿﻊ ﯾﺴﺘﻄﯿﻊ
اﻟﻮﺻﻮل إﻟﻰ ﻛﻞ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ،وﻟﻜﻦ ﺑﺎﺳﺘﺨﺪام اﻟﻨﻈﺎم اﻟﺠﺪﯾﺪ ،أﺻﺒﺢ ﻓﻘﻂ ﻣﻦ ﻟﺪﯾﻬﻢ ﺻﻼﺣﯿﺔ
اﻟﻮﺻﻮل ﻗﺎدرﯾﻦ ﻋﻠﻰ ذﻟﻚ ،ﻛﻤﺎ أﺻﺒﺢ ﺑﺈﻣﻜﺎن ﻣﺪﯾﺮ اﻟﺸﺒﻜﺔ إﻋﻄﺎء ﺻﻼﺣﯿﺎت ﻣﺨﺘﻠﻔﺔ ﻟﻠﻤﺴﺘﺨﺪﻣﯿﻦ
،ﻓﻘﺪ ﯾﻤﻨﻊ ﻣﺴﺘﺨﺪم ﻣﻦ إﺿﺎﻓﺔ ﺑﻀﺎﻋﺔ ﺟﺪﯾﺪة ﻋﻠﻰ ﺟﺪول اﻟﺒﻀﺎﻋﺔ وﯾﺴﻤﺢ ﻟﻪ ﺑﺎﻟﻨﻈﺮ ﻋﻠﯿﻬﺎ ﻓﻘﻂ ،
وﻗﺪ ﯾﻤﻨﻌﻪ ﻧﻬﺎﺋﯿﺎ ﻣﻦ اﻟﻮﺻﻮل إﻟﻰ ﺟﺪول اﻟﻤﻮردﯾﻦ ﻣﺜﻼ ،أو ﻓﻘﻂ ﻋﻠﻰ ﺟﺰء ﻣﻦ ﺟﺪول اﻟﻤﻮردﯾﻦ
ﻣﺜﻞ ﻋﻨﺎوﯾﻨﻬﻢ أو أرﻗﺎم ﻫﻮاﺗﻔﻬﻢ ﻣﺜﻼ
ﻛﻤﺎ أن ﻣﺤﺮك ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ أﺻﺒﺢ ﯾﻘﻮم ﺑﻌﻤﻠﯿﺎت اﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ واﻟﺤﻔﺎظ ﻋﻠﻰ
اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﻟﺘﻠﻒ اﺗﻮﻣﺎﺗﯿﻜﯿﺎ ،وذﻟﻚ ﺑﻔﺤﺼﻬﺎ ﺑﺎﺳﺘﻤﺮار وﻧﺴﺨﻬﺎ ﻋﻠﻰ أﺷﺮﻃﺔ اﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ
وإﻋﻼم ﻣﺪﯾﺮ اﻟﻨﻈﺎم ﺑﺄﯾﺔ ﻣﺸﺎﻛﻞ ﺻﻐﯿﺮة ﺑﺪاﺧﻠﻬﺎ
وﻫﻜﺬا اﺳﺘﻤﺮ ﺗﻄﻮر ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ إﻟﻰ ﯾﻮﻣﻨﺎ ﻫﺬا وﻇﻬﺮ اﻟﻌﺪﯾﺪ ﻣﻨﻬﺎ ﻓﻲ اﻟﺴﻮق ﻣﺜﻞ
Oracle 8
SQL Server 7
IBM DB2
SYbase
Informix
Borland IntraBase
ﻋﻨﺪﻣﺎ ﻗﺮرت ﻗﺒﻞ ﺛﻼﺛﺔ ﺳﻨﻮات اﻋﺘﻤﺎد ﻧﻈﺎم ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت ﻣﺮﻛﺰﯾﺔ ﻻﺳﺘﺨﺪﻣﻬﺎ ﻓﻲ ﻋﻤﻠﻲ ،ﻛﺎن
ﯾﺠﺐ أن اﺧﺘﺎر ﺑﯿﻦ اﺷﻬﺮ اﻷﻧﻈﻤﺔ اﻟﻤﺘﻮﻓﺮة ﻓﻲ اﻷﺳﻮاق ،وﻛﺎﻧﺖ ﻓﻲ ﺗﻠﻚ اﻟﻔﺘﺮة
Microsoft SQL Server
و
Oracle
ﻃﺒﻌﺎ اﻟﺨﯿﺎر ﻛﺎن ﺻﻌﺒﺎ ،ﺧﺼﻮﺻﺎ ﻷﻧﻪ ﯾﺘﻄﻠﺐ وﻗﺘﺎ ﻛﺒﯿﺮا ﻟﺘﺘﻘﻦ اﺳﺘﺨﺪام ﻧﻈﺎم ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت
ﻣﺮﻛﺰﯾﺔ ،وﻻ ﯾﻮﺟﺪ ﻟﺪي وﻗﺖ ﻷﺗﻘﻦ اﺳﺘﺨﺪام ﻧﻈﺎﻣﯿﻦ ﻣﻌﺎ ،وﻟﺬﻟﻚ ﻛﺎن ﻋﻠﻰ اﻻﺧﺘﯿﺎر ﺑﻌﻨﺎﯾﺔ
ﻟﻘﺪ ﻛﺎﻧﺖ ﻣﻌﻈﻢ اﻟﻤﻘﺎرﻧﺎت ﺳﺎﺑﻘﺎ ﺗﺘﻌﻠﻖ ﺑﺴﺮﻋﺔ أداء ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ واﻟﺤﺠﻢ
اﻟﺒﯿﺎﻧﺎت اﻷﻗﺼﻰ اﻟﻤﻤﻜﻦ أن ﺗﺴﺘﻮﻋﺒﻪ ،وﻟﻜﻦ ﻣﻊ ﺗﻄﻮر اﻟﺘﻜﻨﻮﻟﻮﺟﯿﺎ اﻟﻤﺴﺘﺨﺪﻣﺔ ﺑﻬﺎ ،أﺻﺒﺤﺖ
اﻟﻔﺮوق ﻓﻲ اﻟﺴﺮﻋﺔ ﺑﯿﻦ اﻟﻨﻈﻢ اﻟﻤﺨﺘﻠﻔﺔ ﺿﺌﯿﻠﺔ ﻟﻠﻐﺎﯾﺔ ،ﻛﻤﺎ أن ﺣﺠﻢ اﻟﺘﺨﺰﯾﻦ وﺻﻞ إﻟﻰ اﻟﺤﺪود
اﻟﻘﺼﻮى ﻟﺴﻌﺔ اﻟﺘﺨﺰﯾﻦ ﻓﻲ ﺟﻬﺎزك ،أي ﺑﻤﻌﻨﻰ أﺧﺮ ﺗﺴﺘﻄﯿﻊ ﺗﺨﺰﯾﻦ ﺑﯿﺎﻧﺎت ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
ﺣﺘﻰ ﯾﻤﺘﻠﺊ اﻟﻘﺮص اﻟﺼﻠﺐ أو اﻷﻗﺮاص اﻟﺼﻠﺒﺔ اﻟﻤﻮﺟﻮدة ﻓﻲ ﺟﻬﺎزك ﻣﻬﻤﺎ ﻛﺎﻧﺖ ﺳﻌﺘﻬﺎ
ذﻟﻚ ﻻن اﻟﻨﻈﻢ اﻟﺠﺪﯾﺪة ﺗﺴﺘﺨﺪم ﺗﻜﻨﻮﻟﻮﺟﯿﺎ ﻣﻌﻘﺪة ﻟﺤﻔﻆ واﺳﺘﺮﺟﺎع اﻟﺒﯿﺎﻧﺎت ،ﺣﯿﺚ ﺗﺴﺘﻐﻞ اﻟﻤﻌﺎﻟﺞ
ووﺳﺎﺋﻂ اﻟﺘﺨﺰﯾﻦ ﻷﻗﺼﻰ ﺣﺪ ﻣﻤﻜﻦ
وﻣﻊ ذﻟﻚ ﻓﻬﻨﺎك اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﻨﻘﺎط اﻟﺘﻲ ﺟﻌﻠﺘﻨﻲ أﻓﻀﻞ أﺣﺪﻫﻤﺎ ﻋﻦ اﻷﺧﺮ وﻣﻦ أﻫﻤﻬﺎ
ﺳﻬﻮﻟﺔ ﺗﻌﻠﻢ اﺳﺘﺨﺪام اﻟﻨﻈﺎم ودرﺟﺔ ﺗﻌﻘﯿﺪه وﺳﺮﻋﺔ ﺑﻨﺎء و إدارة ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﻪ
ﺗﻠﻜﻔﺔ اﻟﻨﻈﺎم ) ﺗﻠﻜﻔﺔ اﻟﺸﺮاء ،اﻟﺘﺮﻛﯿﺐ ،اﻟﺼﯿﺎﻧﺔ ،اﻻﺳﺘﺨﺪام ﻋﺒﺮ اﻟﺸﺒﻜﺔ ،وﻏﯿﺮﻫﻤﺎ(
ﺳﻬﻮﻟﺔ ﺗﻌﻠﻢ اﺳﺘﺨﺪام اﻟﻨﻈﺎم ودرﺟﺔ ﺗﻌﻘﯿﺪه وﺳﺮﻋﺔ ﺑﻨﺎء وإدارة ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﻪ
ﻋﻨﺪﻣﺎ ﺣﺼﻠﺖ ﻋﻠﻰ اﻟﻨﺴﺦ اﻟﺘﺠﺮﯾﺒﯿﺔ ﻣﻦ اﻟﻨﻈﺎﻣﯿﻦ اﻟﺴﺎﺑﻘﯿﻦ ورﻛﺒﺖ ﻛﻞ ﻣﻨﻬﻨﺎ ﻋﻠﻰ ﺟﻬﺎزي وﺑﺪﺋﺖ
اﻻﺧﺘﺒﺎرات ﻋﻠﯿﻪ ،وﺟﺪت ﺻﻌﻮﺑﺔ ﻛﺒﯿﺮة ﻓﻲ اﻟﺘﻌﻮد ﻋﻠﻰ اﺳﺘﺨﺪام اوراﻛﻞ ،ﻓﺒﺪء ﺑﺎﻟﻨﺴﺒﺔ ﻟﻲ ﻛﻨﻈﺎم
ﺿﺨﻢ وﻣﻌﻘﺪ ،ﺣﺘﻰ أﻧﻨﻲ واﺟﻬﺖ ﻣﺸﺎﻛﻞ ﻓﻲ اﺳﺘﺨﺪاﻣﻪ ﻷول ﻣﺮة ﻓﻘﺪ ﻃﻠﺐ ﻣﻨﻲ اﺳﻢ اﻟﻤﺴﺘﺨﺪم
وﻛﻠﻤﺔ اﻟﺴﺮ واﻟﺬي ﺗﻄﻠﺐ ﻣﻨﻲ أﺳﺒﻮﻋﺎ ﻹﯾﺠﺎدﻫﻢ ،اﻋﺘﻘﺪ ﺑﺄﻧﻪ ﻛﺎن ﯾﻔﺘﺮض أن ﺗﻮزﻋﻬﻢ اوراﻛﻞ ﻣﻊ
اﻟﻨﺴﺨﺔ اﻟﺘﺠﺮﯾﺒﯿﺔ
ﺛﻢ ﺑﺪﺋﺖ أواﺟﻪ اﻟﻤﺼﺎﻋﺐ واﺣﺪة ﺗﻠﻮ اﻷﺧﺮى ،ﻓﻠﻘﺪ ﺑﺪء ﻟﻲ اﻟﻨﻈﺎم ﻏﺮﯾﺒﺎ وﻣﺨﺘﻠﻒ ﻗﻠﯿﻼ ﻋﻦ
وﯾﻨﺪوس ،وﻗﺪ ﺻﻌﻘﺖ ﻋﻨﺪﻣﺎ ﻓﻬﻤﺖ أﻧﻨﻲ ﺑﺤﺎﺟﺔ إﻟﻰ اﺳﺘﺨﺪام ﻟﻐﺔ
SQL
ﻣﺒﺎﺷﺮة ﻹﻧﺸﺎء اﻟﺠﺪاول واﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت ،ﺑﺎﻟﻄﺒﻊ ﺗﻮﻓﺮ اوراﻛﻞ ﺑﻌﺾ اﻟﺒﺮﻣﺠﯿﺎت اﻹﺿﺎﻓﯿﺔ
اﻟﯿﻮم ﻟﻠﻘﯿﺎم ﺑﺬﻟﻚ ،وﻟﻜﻨﻨﻲ ﻟﻢ اﻋﺘﺎد ﻋﻠﯿﻬﺎ ﺑﺎﻟﻘﺪر اﻟﻜﺎﻓﻲ ،ﺣﺘﻰ أﻧﻨﻲ ﻟﻢ اﻋﻠﻢ ﻓﻲ ذﻟﻚ اﻟﻮﻗﺖ أﯾﻦ
ﺗﺨﺰن اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﻘﺮص اﻟﺼﻠﺐ ،وﻛﯿﻒ اﺻﻨﻊ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة واﻟﻜﺜﯿﺮ ﻣﻦ اﻷﺳﺌﻠﺔ اﻷﺧﺮى
اﻟﺘﻲ ﻟﻢ أﺳﺘﻄﯿﻊ إﯾﺠﺎد إﺟﺎﺑﺔ ﻣﺒﺎﺷﺮة ﻋﻠﯿﻬﺎ ،ﻓﺎﻧﺎ اﻋﻠﻢ ﻣﻨﺬ ﺗﻌﻠﯿﻤﻲ ﻓﻲ اﻟﺠﺎﻣﻌﺔ أن اوراﻛﻞ ﻫﻮ
أﻓﻀﻞ ﻧﻈﻢ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﻮﺟﻮدة ،وﺗﺬﻛﺮت ﻋﻨﺪﻫﺎ
Unix
واﻟﺬي ﻛﺎن ﯾﺤﺎول اﻟﺠﻤﯿﻊ إﻗﻨﺎﻋﻨﺎ ﺑﺄﻧﻪ اﻷﻓﻀﻞ ،ﻫﻮ ﺻﺤﯿﺢ اﻷﻓﻀﻞ ﻓﻲ ﻧﻈﻢ اﻟﺘﺸﻐﯿﻞ ،وﻟﻜﻨﻪ
وﻟﻜﻦ اﻷﻣﺮ اﺧﺘﻠﻒ ﻛﺜﯿﺮا ﻋﻨﺪﻣﺎ رﻛﺒﺖ اﻟﻨﺴﺨﺔ اﻟﺴﺎﺑﻘﺔ ﻓﻲ ذﻟﻚ اﻟﻮﻗﺖ ﻣﻦ
SQL Server
وﻛﺎﻧﺖ ، ٦٫٥ﻟﻘﺪ ارﺗﺤﺖ ﻛﺜﯿﺮا ﻣﻨﺬ أول ﺗﺸﻐﯿﻞ ﻟﻲ ﻟﺬﻟﻚ اﻟﺒﺮﻧﺎﻣﺞ ،ﻓﻮﺟﺪ ﺑﺄﻧﻨﻲ أﺳﺘﻄﯿﻊ اﻟﻘﯿﺎم
ﺑﻤﻌﻈﻢ اﻟﻌﻤﻠﯿﺎت ﻋﻦ ﻃﺮﯾﻖ ﺑﺮﻧﺎﻣﺞ واﺣﺪ ﻓﻘﻂ ،ﻓﻔﺮﻗﺖ ﺑﺴﻬﻮﻟﺔ ﺑﯿﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺘﻠﻔﺔ
وﻣﻜﺎن ﺗﺨﺰﯾﻨﻬﺎ وﻃﺮق اﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ اﻟﺨﺎص ﺑﻬﺎ واﻟﻜﺜﯿﺮ ﻣﻦ اﻷﻣﻮر ﻏﯿﺮﻫﺎ ،وﻋﻨﺪﻣﺎ ﻃﻮرت
اﻟﻨﻈﺎم إﻟﻰ اﻟﻨﺴﺨﺔ اﻟﺴﺎﺑﻌﺔ ورﺋﯿﺖ اﻟﺘﻐﯿﺮات اﻟﻀﺨﻤﺔ واﻟﺘﺴﻬﯿﻼت اﻟﺘﻲ وﺟﺪﺗﻬﺎ ﺑﻪ ،ازدادت
ﺳﻌﺎدﺗﻲ ﻛﺜﯿﺮا
ﻓﺄﻧﺎ ﻗﺎدر ﻋﻦ ﻃﺮﯾﻖ ﺑﺮﻧﺎﻣﺞ اﻹدارة
Microsoft SQL Server 2000 Enterprise Manager
اﻟﻘﯿﺎم ﺑﻜﻞ اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ارﻏﺐ ﺑﻬﺎ ﺑﺴﻬﻮﻟﺔ وﺳﺮﻋﺔ ﻋﺎﻟﯿﺔ ،ﺣﯿﺚ ﯾﻘﺪم ﻟﻲ ﻛﻞ ﻣﺎ اﺣﺘﺎج ﻟﺼﻨﺎﻋﺔ
اﻟﺠﺪاول واﻻﺳﺘﻌﻼﻣﺎت واﻟﺒﺮاﻣﺞ اﻟﺼﻐﯿﺮة وﻏﯿﺮﻫﺎ ،ﻛﻤﺎ أﻧﻨﻲ أﺳﺘﻄﯿﻊ أن اﺟﻌﻠﻪ ﺑﺎن ﯾﻘﻮم ﺑﺎﻟﻌﺪﯾﺪ
ﻣﻦ اﻷﻣﻮر اﻷﺧﺮى أﺗﻮﻣﺎﺗﯿﻜﯿﺎ ،ﻣﺜﻞ ﻓﺤﺺ اﻟﺒﯿﺎﻧﺎت ﻛﻞ ﻟﯿﻠﺔ وﻧﺴﺨﻬﺎ اﺣﺘﯿﺎﻃﯿﺎ وإﺧﺒﺎري ﻋﻦ ذﻟﻚ
ﯾﻮﻣﯿﺎ ﻋﻦ ﻃﺮﯾﻖ اﻟﺒﺮﯾﺪ اﻹﻟﻜﺘﺮوﻧﻲ ،وذﻟﻚ ﻓﻲ ﺣﺎل ﺗﻮاﺟﺪي ﻓﻲ ﻣﻜﺎن ﺑﻌﯿﺪ ،ﺑﻞ أﻛﺜﺮ ﻣﻦ ذﻟﻚ ،
ﻓﺒﺎﺳﺘﻄﺎﻋﺘﻲ ﺗﻮﺟﯿﻪ اﻷواﻣﺮ إﻟﯿﻪ ﻣﺒﺎﺷﺮة ﻋﻦ ﻃﺮﯾﻖ اﻟﺒﺮﯾﺪ اﻹﻟﻜﺘﺮوﻧﻲ وذﻟﻚ إن ﻛﻨﺖ ﻣﺴﺎﻓﺮ ﻣﺜﻼ.
وﻟﻘﺪ اﻛﺘﺸﻔﺖ أﯾﻀﺎ أن اﻟﺒﺮﻧﺎﻣﺞ ﻗﺎﺑﻞ ﻻﺳﺘﺨﺪام اﻟﻠﻐﺔ اﻹﻧﺠﻠﯿﺰﯾﺔ ،ﻓﺒﻤﺠﺮد ﺑﺎن ﺗﻘﻮم ﺑﺘﻮﺻﯿﻒ
اﻟﺠﺪاول ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وﺷﺮﺣﻬﺎ ﻟﻠﻨﻈﺎم ،ﻓﺄﻧﺖ ﻗﺎدر ﻋﻠﻰ ﺗﻮﺟﯿﻪ اﻷﺳﺌﻠﺔ إﻟﯿﻪ ﺑﺎﻟﻠﻐﺔ اﻹﻧﺠﻠﯿﺰﯾﺔ
ﻣﺒﺎﺷﺮة ،ﻓﺘﺴﺘﻄﯿﻊ أن ﺗﺴﺄﻟﻪ ﺑﻠﻐﺔ إﻧﺠﻠﯿﺰﯾﺔ ﻃﺒﯿﻌﯿﺔ أن ﯾﻌﺮض ﻟﻚ أﺻﻨﺎف اﻟﺒﻀﺎﺋﻊ ،أو ﻣﻌﻠﻮﻣﺎت
ﻋﻦ اﻟﻤﻮردﯾﻦ ،أو ﻣﺎ ﯾﺸﺎﺑﻪ ذﻟﻚ ،وذﻟﻚ ﻋﻦ ﻃﺮﯾﻖ ال
English Query Language
اﻟﻤﺮﻓﻘﺔ ﺑﺎﻟﻨﻈﺎم ﻧﻔﺴﻪ
أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻮﺛﺎﺋﻖ اﻟﺘﻌﻠﯿﻤﯿﺔ ﻓﻘﺪ أرﻓﻘﺖ ﻣﺎﯾﻜﺮوﺳﻮﻓﺖ ﻣﺎ ﯾﺰﯾﺪ ﻋﻦ ١٠أﻻف ﺻﻔﺤﺔ ﻣﻦ اﻟﻜﺘﺐ ﻣﻊ
ذﻟﻚ اﻟﻨﻈﺎم ﻋﻠﻰ ﻗﺮص اﻟﻠﯿﺰر وذﻟﻚ ﻋﻦ ﻃﺮﯾﻖ
SQL Server Books On-Line
ﻛﻤﺎ وﺟﺪت اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﻮﺛﺎﺋﻖ ﻓﻲ ﻣﻮاﻗﻊ ﻣﺎﯾﻜﺮوﺳﻮﻓﺖ ﻋﻠﻰ اﻧﺘﺮﻧﺖ ﻣﺜﻞ
ﺗﻠﻜﻔﺔ اﻟﻨﻈﺎم ) ﺗﻠﻜﻔﺔ اﻟﺸﺮاء ،اﻟﺘﺮﻛﯿﺐ ،اﻟﺼﯿﺎﻧﺔ ،اﻻﺳﺘﺨﺪام ﻋﺒﺮ اﻟﺸﺒﻜﺔ ،وﻏﯿﺮﻫﻤﺎ(
وﺑﺎﻟﻤﻨﺎﺳﺒﺔ اﻟﯿﻮم اﻟﺘﻜﻠﻔﺔ ﻫﻲ اﻟﻌﺎﻣﻞ اﻷول اﻟﺬي ﯾﺴﺘﺨﺪﻣﻪ اﻟﻤﻘﺎرﻧﻮن ﺑﯿﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺘﻠﻔﺔ
،ﻓﺎﻟﺴﻌﺮ ﻋﺎﻣﻞ أﺳﺎﺳﻲ وﯾﺆﺛﺮ ﻛﺜﯿﺮا ﻓﻲ اﺧﺘﯿﺎر اﻹدارة ﻟﻨﻈﺎم ﻣﺎ ﻋﻮﺿﺎ ﻋﻦ ﻧﻈﺎم آﺧﺮ وﻫﺬا ﻣﺎ
ﯾﺤﺪث ﻓﻲ ﻣﻌﻈﻢ اﻟﻤﺆﺳﺴﺎت اﻟﻜﺒﯿﺮة ،ﻓﻠﻮ ﻋﺮﺿﺖ ﻋﻠﻰ اﻟﻤﺪﯾﺮ ﻧﻈﺎﻣﯿﻦ ،أﺣﺪﻫﻤﺎ ﯾﻜﻠﻒ ﺛﻼﺛﺔ أﻻف
دوﻻر واﻵﺧﺮ ﻗﺪ ﯾﺼﻞ إﻟﻰ ﻋﺸﺮة آﻻف دوﻻر واﻻﺛﻨﯿﻦ ﻗﺎدرﯾﻦ ﻋﻠﻰ ﻋﻤﻞ اﻟﻌﻤﻞ ﻧﻔﺴﻪ ،ﻓﻠﻦ ﯾﺘﺮدد
ﺑﺎﺧﺘﯿﺎر اﻷرﺧﺺ
ﻗﺪ ﯾﺘﺪﺧﻞ اﻟﺒﻌﺾ وﯾﻘﻮل ﺑﺎن اﻟﺠﻮدة واﻷداء ﻣﻬﻤﯿﻦ ﻟﻠﻐﺎﯾﺔ ،وأﻧﺎ أواﻓﻘﻬﻢ اﻟﺮأي ﻓﻲ ذﻟﻚ ،وﻟﻜﻦ
ﻋﻠﻰ اﻟﺠﻤﯿﻊ أن ﯾﺘﺬﻛﺮ ﺑﺎن اﻟﻌﺎﻣﻠﯿﻦ اﻟﺴﺎﺑﻘﯿﻦ ﻻ ﯾﺘﺠﺰءوا ﻋﻦ اﻟﺘﻜﻠﻔﺔ إﻃﻼﻗﺎ ،ﻓﺎن ﻟﻢ ﯾﻜﻦ اﻟﻨﻈﺎم
ﺟﯿﺪ ﻓﻘﺪ ﺗﻀﻄﺮ إﻟﻰ دﻓﻊ ﻣﺒﺎﻟﻎ ﺿﺨﻤﺔ ﻟﺼﯿﺎﻧﺘﻪ وﺗﺪرﯾﺐ اﻟﻤﻮﻇﻔﯿﻦ ﻟﻠﻌﻤﻞ ﻋﻠﯿﻪ ،ﻛﻤﺎ أن اﻟﻮﻗﺖ
اﻟﺬي ﺳﺘﺴﺘﻐﺮﻗﻪ ﻓﻲ ذﻟﻚ ﯾﻜﻠﻒ ﻣﺒﺎﻟﻎ أﯾﻀﺎ
ﻟﻦ ﺗﻼﺣﻆ ﻫﻨﺎ ﻓﺮق ﻛﺒﯿﺮ ﻓﻲ اﻟﺴﻌﺮ ﻋﻨﺪ زﯾﺎرﺗﻚ ﻟﻤﻮﻗﻊ اوراﻛﻞ اﻟﺠﺪﯾﺪ ﻓﻲ إﻧﺘﺮﻧﺖ ،وﻟﻜﻦ ﺗﺬﻛﺮ ﺑﺄﻧﻚ
ﺗﻘﺎرن ﻧﻈﺎﻣﯿﻦ ﺑﻤﻤﯿﺰات ﻣﺨﺘﻠﻔﺔ ،ﻓﺎن ﺣﺎوﻟﺖ ﻣﺴﺎواة اﻟﻤﻤﯿﺰات ﻓﻲ ﻛﻼ ﻣﻨﻬﻢ ﻓﺴﺘﺠﺪ ﺑﺎن اوراﻛﻞ
ﺳﯿﺮﺗﻔﻊ ﺳﻌﺮه ﻛﺜﯿﺮا ﻋﻜﺲ ﻣﺎﯾﻜﺮوﺳﻮﻓﺖ
SQL Server 2000
واﻟﺬي ﺗﺤﺼﻞ ﻋﻠﯿﻪ وﻋﻠﻰ ﻛﻞ ﻣﻤﯿﺰاﺗﻪ ﺑﺎﻟﺘﻜﻠﻔﺔ ذاﺗﻬﺎ ،ﺣﯿﺚ ﻻ ﺗﻮﺟﺪ أﺳﻌﺎر ﻣﺨﺒﺌﺔ ﺑﺪاﺧﻠﻪ
ﻛﻤﺎ أن اوراﻛﻞ ﺗﻘﺪم ﺧﺪﻣﺎت ﻣﺪﻓﻮﻋﺔ ﻟﻠﺼﯿﺎﻧﺔ ،ﻋﻜﺲ ﻣﺎﯾﻜﺮوﺳﻮﻓﺖ اﻟﺘﻲ ﺗﻘﺪم ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت
واﺳﻌﺔ ﻋﻠﻰ اﻧﺘﺮﻧﺖ ﺗﺤﺘﻮي ﻋﻠﻰ أﻻف اﻟﻤﺸﺎﻛﻞ وﺣﻠﻮﻟﻬﺎ ،ﻛﻤﺎ أﻧﻬﺎ ﺗﺼﺪر ﺑﺮاﻣﺞ ﺻﯿﺎﻧﺔ وﺗﻄﻮﯾﺮ
ﻣﻦ ﻣﺮﺗﯿﻦ ﺣﺘﻰ ﺛﻼﺛﺔ ﻣﺮات ﻛﻞ ﻋﺎم وذﻟﻚ ﻣﺠﺎﻧﺎ
ﺑﺪون ﺣﺘﻰ أن ﺗﺴﺄﻟﻚ إن ﻛﻨﺖ ﺗﺴﺘﺨﺪم ﻧﺴﺨﺔ أﺻﻠﯿﺔ ﻣﻦ اﻟﻨﻈﺎم أو ﺣﺘﻰ ﻣﻨﺴﻮﺧﺔ
ﻛﻞ اﻟﻨﻘﺎط اﻟﺴﺎﺑﻘﺔ ﺗﻠﻚ ﺗﺆﺛﺮ ﻛﺜﯿﺮا ﻋﻠﻰ ﻋﻤﻠﯿﺔ اﺧﺘﯿﺎرك ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﻄﻠﻮﺑﺔ
ﻫﻨﺎك ﺑﻌﺾ اﻷﻣﻮر اﻷﺧﺮى اﻟﺘﻲ ﺗﺰﻋﺠﻨﻲ ﻋﻨﺪ اوراﻛﻞ ﻣﺜﻞ ﺳﯿﺎﺳﺔ اﻟﺘﺮﺧﯿﺺ ﻣﺜﻼ ،ﻓﯿﺤﻖ ﻻوراﻛﻞ
أن ﺗﺰورك ﻣﺮة ﻋﻠﻰ اﻷﻗﻞ ﻟﺘﺪﻗﯿﻖ ﻋﻤﻠﻚ ،وﻋﻠﯿﻚ ﻓﺘﺢ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎﺗﻚ ﻟﻬﺎ ﻟﻠﻨﻈﺮ ﻓﯿﻬﺎ ،ﻛﻤﺎ ﺗﻤﻨﻌﻚ
اوراﻛﻞ إﺟﺮاء أﯾﺔ ﻣﻘﺎرﻧﺎت ﻋﻠﻰ ﺳﺮﻋﺔ أﻧﻈﻤﺘﻬﺎ ﺑﺪون اﻟﺮﺟﻮع إﻟﯿﻬﺎ
ﻋﻜﺲ ﻣﺎﯾﻜﺮوﺳﻮﻓﺖ واﻟﺘﻲ ﺗﺴﻤﺢ ﻓﻲ ﺳﯿﺎﺳﺔ اﻟﺘﺮﺧﯿﺺ ﻟﺪﯾﻬﺎ ﺗﻮزﯾﻊ اﻟﻨﻈﺎم اﻟﻤﺼﻐﺮ ﻣﻦ
SQL Server 2000
واﻟﻤﺴﻤﻰ
أﺟﺰاء
Microsoft SQL Server 2000
وﺑﻌﺾ اﻟﻤﻌﻠﻮﻣﺎت ﻋﻨﻬﺎ
ﯾﺘﻜﻮن ﺑﺮﻧﺎﻣﺞ
Microsoft SQL Server 2000
ﻣﻦ ﻋﺪة أﺟﺰاء ﻣﻬﻤﺔ ﻣﺘﺮاﺑﻄﺔ ﻣﻊ ﺑﻌﻀﻬﺎ اﻟﺒﻌﺾ ،ﻣﺜﻞ ﻣﺤﺮك ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ،ﻣﻠﻔﺎت اﻟﺘﺼﻠﯿﺢ ،
ﺷﺎﺷﺔ اﻹدارة واﻟﻤﺮاﻗﺒﺔ وﻏﯿﺮﻫﺎ ﻣﻦ اﻷﺟﺰاء واﻟﺘﻲ ﺳﺄﺣﺎول أن أﺷﺮح ﻣﻌﻈﻤﻬﺎ ﻓﻲ ﻣﻘﺎﻟﻲ ﻫﺬا
واﻷﺟﺰاء ﻫﻲ
وﻫﻮ اﻟﺒﺮﻧﺎﻣﺞ اﻷﺳﺎﺳﻲ اﻟﺬي ﯾﻘﻮم ﺑﺈدارة اﻟﻨﻈﺎم ﺑﺎﻟﻜﺎﻣﻞ ،ﻓﻤﻨﻪ ﺗﺴﺘﻄﯿﻊ إﻧﺸﺎء ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ،
وﻧﺴﺨﻬﺎ اﺣﺘﯿﺎﻃﯿﺎً وإﻧﺸﺎء اﻟﺠﺪاول واﻻﺳﺘﻌﻼﻣﺎت ،وإﻋﻄﺎء اﻟﺼﻼﺣﯿﺎت وﻏﯿﺮﻫﺎ ﻣﻦ اﻷﻣﻮر
وﯾﻘﻮم ذﻟﻚ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺘﺼﻨﯿﻒ أﺟﺰاء اﻟﻨﻈﺎم إﻟﻰ ﻛﺎﺋﻨﺎت وﺧﺼﺎﺋﺺ ﻟﺘﻠﻚ اﻟﻜﺎﺋﻨﺎت وذﻟﻚ ﻓﻲ ﺷﻜﻞ
ﻣﺸﺎﺑﻪ ﻟﺸﻜﻞ ﻣﺴﺘﻜﺸﻒ اﻟﻮﯾﻨﺪوس ،وذﻟﻚ ﻟﺘﺴﻬﯿﻞ اﺳﺘﺨﺪاﻣﻪ ﻣﻦ ﻣﻌﻈﻢ اﻟﻤﺴﺘﺨﺪﻣﯿﻦ
ﯾﺤﺪد اﻟﺒﺮوﺗﻮﻛﻮﻻت اﻟﺘﻲ ﯾﻤﻜﻦ ﻟﻤﺤﺮك ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻣﻦ اﺳﺘﺨﺪاﻣﻬﺎ ﻟﺘﻮزﯾﻊ اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ اﻟﺸﺒﻜﺔ
اﻟﺪاﺧﻠﯿﺔ وﻋﻠﻰ إﻧﺘﺮﻧﺖ
إن رﻏﺒﺖ ﺑﺈﺻﺪار اﻷواﻣﺮ ﻣﺒﺎﺷﺮةً إﻟﻰ ﻣﺤﺮك ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ ﻋﻦ ﻃﺮﯾﻖ ﻟﻐﺔ
Transact SQL
ﻓﻬﺬا ﻫﻮ اﻟﺒﺮﻧﺎﻣﺞ اﻟﺬي ﺳﯿﺴﺎﻋﺪك ﻓﻲ اﻟﻘﯿﺎم ﺑﺬﻟﻚ ،وﻟﻜﻦ ﻻ ﯾﻘﺘﺼﺮ ﻋﻤﻠﻪ ﻋﻠﻰ ﻫﺬا ﻓﻘﻂ ،ﻓﻬﻮ ﻗﺎدر
ﻋﻠﻰ اﺣﺘﺴﺎب اﻟﻮﻗﺖ اﻟﻤﺨﺼﺺ ﻹﺟﺮاء ﺗﻠﻚ اﻷواﻣﺮ ،وإن ﻛﺎﻧﺖ أواﻣﺮ ﻣﻌﻘﺪة ﻓﻬﻮ ﻗﺎدر ﻋﻠﻰ
ﺗﻔﻜﯿﻜﻬﺎ ورﺳﻢ ﺧﺮﯾﻄﺔ رﺳﻮﻣﯿﺔ ﻟﻄﺮﯾﻘﺔ ﺗﻨﻔﯿﺬﻫﺎ واﻟﻮﻗﺖ اﻟﺬي ﺳﺘﺄﺧﺬه ﻛﻞ ﺧﻄﻮة ﺑﻬﺎ ،وﺑﺬﻟﻚ
ﺳﯿﺴﺎﻋﺪك ﺑﺈﻋﺎدة ﻛﺘﺎﺑﺔ اﻷواﻣﺮ ﻟﺘﺠﻌﻠﻬﺎ أﻓﻀﻞ و أﺳﺮع
وﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺿﺨﻤﺔ ﻣﻦ اﻟﻜﺘﺐ واﻟﻤﺮاﺟﻊ ﺣﻮل ﻛﻞ ﻣﺎ ﯾﺘﻌﻠﻖ ﺑﺬﻟﻚ اﻟﻨﻈﺎم ﺑﺎﻟﺘﻔﺼﯿﻞ ،ﺣﻮاﻟﻲ
ﻋﺸﺮة آﻻف ﺻﻔﺤﺔ إن ﺣﺎوﻟﺖ ﻃﺒﺎﻋﺘﻬﺎ ،أن ﻛﻨﺖ ﻻ ﺗﺼﺪق ذﻟﻚ ﻓﺤﺎول ،ﻣﺎ ﻋﻠﯿﻚ إﻻ وان ﺗﻀﻐﻂ
ﻋﻠﻰ زر اﻟﻄﺒﺎﻋﺔ أﻋﻠﻰ اﻟﺒﺮﻧﺎﻣﺞ وﻣﻦ ﺛﻢ ﺗﺠﻠﺲ ﺑﺠﺎﻧﺐ اﻟﻄﺎﺑﻌﺔ وﺗﻨﺘﻈﺮ
ﻛﻤﺎ أن ﻫﻨﺎك ﺛﻼﺛﺔ ﻛﺎﺋﻨﺎت ﻣﺨﺼﺼﯿﻦ ﻟﺒﺮﻣﺠﺔ اﻟﻨﻈﺎم ،وﺗﺴﺘﻄﯿﻊ ﺑﻮاﺳﻄﺘﻬﻢ اﻟﻘﯿﺎم ﺑﻜﻞ ﻣﺎ ﯾﻘﻮم ﺑﻪ
ﺑﺮﻧﺎﻣﺞ اﻹدارة اﻟﻤﺮﻛﺰي وذﻟﻚ ﺑﻜﻞ ﺳﻬﻮﻟﺔ ،ﺣﯿﺚ ﺗﺴﺘﻄﯿﻊ ﺻﻨﺎﻋﺔ ﺑﺮﻧﺎﻣﺞ إدارة ﺧﺎص ﺑﻚ ﻟﻮ
رﻏﺒﺖ ﺑﺬﻟﻚ
ﻣﻦ اﻟﻀﺮوري اﻟﺘﺤﺪث ﻗﻠﯿﻼً ﻋﻦ ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻗﺒﻞ ﺑﺪﺋﻚ ﺑﺎﺳﺘﺨﺪام ﺑﺮﻧﺎﻣﺞ
Microsoft SQL Server 2000
ﺣﯿﺚ ﺳﺄﺣﺎول أن اﺷﺮح ﻃﺮﯾﻘﺔ ﻋﻤﻞ ذﻟﻚ اﻟﻤﺤﺮك وأﺟﺰاﺋﻪ وﺣﺪوده اﻟﻘﺼﻮى ،اﻋﺘﻘﺪ ﺑﺎن ذﻟﻚ
ﻣﻌﻠﻮﻣﺎت ﻣﻬﻤﺔ ﻋﻠﻰ اﻟﺠﻤﯿﻊ أن ﯾﻌﺮﻓﻬﺎ ،أو ﻋﻠﻰ اﻷﻗﻞ ﯾﻌﺮف اﻟﻘﻠﯿﻞ ﻋﻨﻬﺎ
ﯾﺘﻜﻮن اﻟﻤﺤﺮك اﻟﺨﺎص ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﺛﻼﺛﺔ ﺑﺮاﻣﺞ ﻣﻌﺘﻤﺪة ﻋﻠﻰ ﺑﻌﻀﻬﺎ اﻟﺒﻌﺾ ،ﻣﻊ اﻟﻌﻠﻢ
أﯾﻀﺎً اﻧﻪ ﻗﺎدر ﻋﻠﻰ اﻻﺳﺘﻐﻨﺎء ﻋﻨﻬﺎ واﻟﻌﻤﻞ ﻟﻮﺣﺪه ،وﻟﻜﻦ ذﻟﻚ ﺳﯿﻘﻠﻞ ﻣﻦ ﻣﻤﯿﺰاﺗﻪ ﻗﻠﯿﻼُ ،واﻷﺟﺰاء
ﻫﻲ
ﺑﺮﻧﺎﻣﺞ إدارة ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،وﻫﻮ ﯾﺨﺘﻠﻒ ﻋﻦ اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﺨﺼﺺ ﻹدارة ﻛﻞ اﻟﻨﻈﺎم ،
ﻓﺼﺮاﺣﺔً أﻧﺖ ﻟﻦ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ذﻟﻚ اﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺷﺮةً ،ﻓﻬﻮ ﯾﺘﻤﯿﺰ ﺑﺒﻌﺾ اﻟﺬﻛﺎء اﻻﺻﻄﻨﺎﻋﻲ وﻫﻮ
ﻣﺨﺼﺺ ﻟﺘﻨﻔﯿﺬ اﻟﻌﻤﻠﯿﺎت اﻟﻤﺠﺪوﻟﺔ ﺣﺴﺐ ﺗﻮﻗﯿﺖ ﻣﻌﯿﻦ ﺑﺪاﺧﻞ ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،ﻣﺜﻞ
إﺻﻼﺣﻬﺎ وﻓﺤﺼﻬﺎ وإﺟﺮاء اﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﯿﺔ ﻣﻨﻬﺎ ،وﻛﺘﺎﺑﺔ اﻟﺘﻘﺎرﯾﺮ ﺣﻮل ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﻏﯿﺮﻫﺎ
أﻧﺎ ﺷﺨﺼﯿﺎ اﺳﻤﯿﻪ اﻟﻄﯿﺎر اﻵﻟﻲ
Autopilot
وﻫﻮ ﯾﺴﺎﻋﺪﻧﻲ ﻛﺜﯿﺮا ﻓﻲ إدارة ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،وﺑﺎﻟﻤﻨﺎﺳﺒﺔ ﻫﻮ ﻣﺎ ﯾﻤﯿﺰ ﻧﻈﺎﻣﻨﺎ ﻋﻦ اﻷﻧﻈﻤﺔ
اﻷﺧﺮى اﻟﻤﻮﺟﻮدة ﻓﻲ اﻷﺳﻮاق
وﻫﻮ ﻣﺨﺼﺺ ﻟﺮﺑﻂ ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﻤﺤﺮﻛﺎت أﺧﺮي وﺗﻘﺴﯿﻢ اﻟﺤﻤﻞ ﺑﯿﻨﻬﻢ وﺗﻨﻔﯿﺬ ﻋﻤﻠﯿﺎت
ﻣﻌﻘﺪة ﺑﯿﻨﻬﻢ
ﺑﺎﻟﻨﺴﺒﺔ ﻟﻤﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ ﻓﻬﻮ ﯾﺴﺘﺨﺪم ﺛﻼﺛﺔ ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت ﻓﻲ ﻋﻤﻠﻪ أﻫﻤﻬﻤﺎ ﻗﺎﻋﺪة
اﻟﺒﯿﺎﻧﺎت
Master
واﻟﺘﻲ ﯾﺨﺰن ﺑﻬﺎ اﻟﻤﻌﻠﻮﻣﺎت اﻷﺳﺎﺳﯿﺔ ﻋﻦ ﻛﻞ اﻟﻨﻈﺎم ،ﻣﺜﻞ أﻣﺎﻛﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻷﺧﺮى ،أﺳﻤﺎء
اﻟﺠﺪاول اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﯿﻬﺎ ،وأﻣﻮر أﺧﺮى ﻋﺪﯾﺪة ،ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺗﻠﻚ ﻫﻲ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺻﻐﯿﺮة ،
وﻟﻜﻦ ﻓﻘﺪاﻧﻬﺎ ﯾﺆدي ﻋﻠﻰ ﻓﻘﺪان اﻟﻨﻈﺎم ﻛﻠﻪ ،أي ﻓﻘﺪان ﻛﻞ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت وﻛﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺑﻬﺎ ،
ﻟﺬﻟﻚ ﯾﺠﺐ ﻧﺴﺨﻬﺎ اﺣﺘﯿﺎﻃﯿﺎ دوﻣﺎً
ﺛﺎﻧﻲ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻣﺴﺘﺨﺪﻣﺔ ﻣﻦ اﻟﻤﺤﺮك ﻫﻲ
Tempdb
وﯾﺴﺘﺨﺪﻣﻬﺎ اﻟﻤﺤﺮك ﻛﻤﺨﺰن ﺗﺨﺰﯾﻦ ﻣﺆﻗﺖ ،وذﻟﻚ ﻓﻲ ﺣﺎل ﻗﯿﺎﻣﻪ ﺑﻌﻤﻠﯿﺎت ﻃﻮﯾﻠﺔ ،وﻫﻲ ﻏﯿﺮ
ﻣﻬﻤﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻨﺎ ،ﻓﻬﻮ ﯾﻘﻮم ﺑﻤﺴﺢ ﻣﺤﺘﻮﯾﺎﺗﻬﺎ ﻣﺌﺎت اﻟﻤﺮات ﯾﻮﻣﯿﺎ
ﺛﺎﻟﺚ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻫﻲ
Model
وﯾﺴﺘﺨﺪﻣﻬﺎ اﻟﻨﻈﺎم ﻋﻨﺪ إﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة ،ﺣﯿﺚ ﯾﻘﻮم ﺑﻨﺴﺦ ﻣﺤﺘﻮﯾﺎﺗﻬﺎ إﻟﻰ ﻗﺎﻋﺪة
اﻟﺒﯿﺎﻧﺎت اﻟﺠﺪﯾﺪة ،وﻫﻲ ﻻ ﺗﻬﻤﻨﺎ أﯾﻀﺎ وﻻ ﯾﺠﺐ ﻧﺴﺨﻬﺎ اﺣﺘﯿﺎﻃﯿﺎ ،إﻻ إذا ﻛﻨﺎ ﻋﺪﻟﻨﺎ ﻋﻠﯿﻬﺎ ،ﺣﯿﺚ
ﻧﺴﺘﻄﯿﻊ اﻋﺘﻤﺎد ﻣﻮاﺻﻔﺎت ﻗﯿﺎﺳﯿﺔ ﻟﻜﻞ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة ﻧﺼﻨﻌﻬﺎ ،وﻧﺴﺘﻄﯿﻊ ﺗﺨﺰﯾﻦ ﺗﻠﻚ
اﻟﻤﻮاﺻﻔﺎت ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺗﻠﻚ وﻣﻦ ﺛﻢ ﻧﺼﻨﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﺨﺎﺻﺔ ﺑﻨﺎ
ﻛﻤﺎ ﺳﻨﻼﺣﻆ ﻣﺴﺘﻘﺒﻼً ﻋﻨﺪ ﺻﻨﻊ أول ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻟﻨﺎ ،ﺳﻨﻼﺣﻆ ﺑﺎن ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺗﺘﻜﻮن ﻣﻦ
ﻣﻠﻔﯿﻦ ،ﻛﻞ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﺪون اﺳﺘﺜﻨﺎء
اﻟﻤﻠﻒ اﻷول واﻣﺘﺪاده
.mdf
وﺑﻪ ﺗﺨﺰن اﻟﺒﯿﺎﻧﺎت
واﻟﻤﻠﻒ اﻟﺜﺎﻧﻲ واﻣﺘﺪاده
.ldf
وﺑﻪ ﺗﺨﺰن ﻛﻞ اﻟﺤﺮﻛﺎت اﻟﺘﻲ ﺗﺘﻢ ﻋﻠﻰ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
وﯾﺴﺘﺨﺪم ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﻠﻔﯿﻦ ﻣﻌﺎً وذﻟﻚ ﻋﻨﺪ اﻟﻌﻤﻞ ﻋﻠﻰ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻣﺎ ،واﻟﻬﺪف ﻣﻦ
اﻟﻤﻠﻔﯿﻦ ﻫﻮ ﺣﻤﺎﯾﺔ اﻟﺒﯿﺎﻧﺎت إﻟﻰ أﻗﺼﻰ ﺣﺪ ﻣﻤﻜﻦ ،ﻓﻌﻨﺪ ﺗﻌﺪﯾﻞ ﻗﯿﻤﺔ ﺣﻘﻞ ﻣﻌﯿﻦ ،ﻓﯿﻘﻮم اﻟﻤﺤﺮك
ﺑﺘﺴﺠﯿﻞ ذﻟﻚ ﻓﻲ ﻣﻠﻒ اﻟﺤﺮﻛﺎت واﻟﺬي ﺑﺪوره ﯾﺤﺘﻮي ﻋﻠﻰ ﻧﺴﺨﺔ ﻣﻦ ﻛﻞ اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ أﺿﯿﻔﺖ أو
ﺣﺬﻓﺖ أو ﻋﺪﻟﺖ ﻋﻠﻰ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،وﻣﻦ ﺛﻢ ﯾﺴﺠﻠﻪ ﻓﻲ ﻣﻠﻒ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻷﺻﻠﯿﺔ ،وﻣﻦ ﺛﻢ
ﯾﺴﺠﻞ ﻋﻤﻠﯿﺔ اﻻﻧﺘﻬﺎء ﻓﻲ ﻣﻠﻒ اﻟﺤﺮﻛﺎت
ﺑﺤﯿﺚ إن ﺣﺪث وﻗﻄﻌﺖ اﻟﻜﻬﺮﺑﺎء ﻣﺜﻼ ،ﺳﯿﻘﻮم اﻟﻤﺤﺮك ﺑﻤﻘﺎرﻧﺔ اﻟﻌﻤﻠﯿﺎت ﻓﻲ اﻟﻤﻠﻔﯿﻦ وإﺻﻼح
ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
وﻟﻜﻦ اﻟﻤﻮﺿﻮع ﻻ ﯾﻨﺘﻬﻲ ﻋﻨﺪ ذﻟﻚ اﻟﺤﺪ ،ﻓﺎن ﺗﺴﺘﻄﯿﻊ اﻟﻄﻠﺐ ﻣﻦ ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﺎن ﯾﻘﻮم
ﺑﺈﻟﻐﺎء ﻛﻞ اﻟﺘﻌﺪﯾﻼت اﻟﺘﻲ ﺣﺪﺛﺖ ﻋﻠﻰ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻓﺘﺮة ﻣﻌﯿﻨﺔ ،أي آﺧﺮ ﺳﺎﻋﺘﯿﻦ ﻣﺜﻼ ،
وﺳﯿﻘﻮم ﻫﻮ ﺑﺬﻟﻚ ﺑﺎﺳﺘﺨﺪام ﻫﺬا اﻟﻤﻠﻒ ،وﺳﯿﺮﺟﻌﻬﺎ ﻛﻤﺎ ﻛﺎﻧﺖ
أﻧﺎ ﺷﺨﺼﯿﺎ اﺳﺘﻔﺪت ﻣﻦ ﺗﻠﻚ اﻟﻤﻤﯿﺰة ﻛﺜﯿﺮا ،ﻋﻨﺪﻣﺎ وﻇﻔﺖ ﻣﺪﺧﻞ ﺑﯿﺎﻧﺎت ﻓﻲ اﻟﺸﺮﻛﺔ اﻟﺘﻲ اﻋﻤﻞ ﺑﻬﺎ
،ﻓﺄراد أن ﯾﻨﻬﻲ ﻋﻤﻠﻪ ﺳﺮﯾﻌﺎ ،ودﻣﺮ ﺟﺰء ﻛﺒﯿﺮ ﻣﻦ اﻟﺒﯿﺎﻧﺎت ،ﻓﻠﻘﺪ أﻟﻐﯿﺖ ﻛﻞ ﻣﺎ ﻗﺎم ﺑﻪ آﺧﺮ ﺳﺎﻋﺔ
وﻧﺼﻒ ،وذﻟﻚ ﺑﻜﻞ ﺑﺴﺎﻃﺔ
٦٫٥ ﻫﺬه ﻣﻘﺎرﻧﺔ ﺣﺼﻠﺖ ﻋﻠﯿﻬﺎ ﻣﻦ ﻣﻠﻒ اﻟﻤﺴﺎﻋﺪة وﺗﺒﯿﻦ اﻟﺤﺪود اﻟﻘﺼﻮى ﻟﻜﻞ ﻣﻦ اﻟﻨﺴﺨﺔ
SQL 2000 ﻣﻦ اﻟﻨﻈﺎم ﻟﯿﺲ ﻟﺪي ﺑﺎﻟﻮﻗﺖ اﻟﺤﺎﻟﻲ أي ﻣﻘﺎرﻧﺔ ﻣﻊ٧٫٠ واﻟﻨﺴﺨﺔ
This table specifies the maximum sizes and numbers of various objects
defined in Microsoft® SQL Server™ databases, or referenced in
Transact-SQL statements.
Maximum sizes/numbers
Object SQL Server 6.5 SQL Server 7.0
65,536* Network
Batch size 128 KB
Packet Size
Bytes per short string column 255 8000
Bytes per text, ntext, or image column 2 GB-2 2 GB-2
Bytes per GROUP BY, ORDER BY 900 8060
Bytes per index 900 900
Bytes per foreign key 900 900
Bytes per primary key 900 900
Bytes per row 1962 8060
Bytes in source text of a stored Lesser of batch size
65025
procedure or 250 MB
Clustered indexes per table 1 1
Limited only by
Columns in GROUP BY, ORDER BY 16
number of bytes
Columns or expressions in a GROUP
BY WITH CUBE or WITH ROLLUP 10 10
statement
Columns per index 16 16
Columns per foreign key 16 16
ﺗﺮﻛﯿﺐ ﺑﺮﻧﺎﻣﺞ
Microsoft SQL server 2000
و أﺟﺰاﺋﻪ ﻫﻲ أول اﻟﻌﻤﻠﯿﺎت اﻟﺘﻲ ﯾﺠﺐ أن ﻧﻘﻮم ﺑﻬﺎ ﻗﺒﻞ اﺳﺘﺨﺪاﻣﻪ ،وذﻟﻚ ﻓﻲ ﺣﺎل ﻋﺪم وﺟﻮده ﻓﻲ
ﺟﻬﺎزﻧﺎ ،واﻟﺘﺮﻛﯿﺐ ﻫﻲ ﻋﻤﻠﯿﺔ ﺑﺴﯿﻄﺔ ﻟﻠﻐﺎﯾﺔ ،ﻓﺒﻤﺠﺮد وﺿﻊ اﻟﻘﺮص اﻟﻠﯿﺰر ﻓﻲ ﺟﻬﺎزك ﻓﺴﺘﺸﺘﻐﻞ
ﺷﺎﺷﺔ اﻟﺘﺮﻛﯿﺐ أﺗﻮﻣﺎﺗﯿﻜﯿﺎ وذﻟﻚ ﺑﺈﻋﻄﺎﺋﻚ ﺧﯿﺎرات ﻟﻠﺘﺮﻛﯿﺐ
ﯾﺠﺐ ﻋﻠﯿﻚ أوﻻً أن ﺗﺘﺄﻛﺪ ﻣﻦ إﻣﻜﺎﻧﯿﺔ ﺗﺮﻛﯿﺐ ذﻟﻚ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ﺟﻬﺎزك ،وذﻟﻚ ﺑﺎﺧﺘﯿﺎر اﻟﺨﯿﺎر
اﻷول ﻟﻠﺘﺮﻛﯿﺐ وﻫﻮ ﺗﺮﻛﯿﺐ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﯾﺠﺐ أن ﺗﺴﺒﻖ ﻋﻤﻠﯿﺔ ﺗﺮﻛﯿﺐ
Microsoft SQL Server 2000
ﺑﺎﻟﻨﺴﺒﺔ ﻟﻸﺟﻬﺰة اﻟﻌﺎﻣﻠﺔ ﺑﺄﻧﻈﻤﺔ وﯾﻨﺪوس أﻟﻔﯿﻦ وﻣﺎ ﺑﻌﺪه ،ﻓﺘﺴﺘﻄﯿﻊ أن ﺗﺘﺨﻄﻰ ﺗﻠﻚ اﻟﻤﺮﺣﻠﺔ ﺑﻬﺎ ،
وﺗﺬﻫﺐ إﻟﻰ ﻣﺮﺣﻠﺔ اﻟﺘﺮﻛﯿﺐ اﻟﺮﺋﯿﺴﯿﺔ
أﻣﺎ إن ﻛﺎن اﻟﺠﻬﺎز اﻟﺬي ﺗﺮﻏﺐ ﺑﺘﺮﻛﯿﺐ اﻟﻨﻈﺎم ﻋﻠﯿﻪ ﯾﻌﻤﻞ ﻋﻠﻰ
Windows NT 4
ﻓﻌﻠﯿﻚ أن ﺗﺮﻛﺐ أﺧﺮ ﻧﺴﺨﺔ ﻣﻦ ﻣﺘﺼﻔﺢ اﻹﻧﺘﺮﻧﺖ ﻓﻲ ﺟﻬﺎزك ،وﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺮﻓﻖ ﺗﻠﻚ اﻟﻨﺴﺨﺔ ﻣﻊ
ﻗﺮص اﻟﻠﯿﺰر
أﻣﺎ إن ﻛﺎن ﺟﻬﺎزك ﯾﻌﻤﻞ ب وﯾﻨﺪوس ﺧﻤﺴﺔ وﺗﺴﻌﻮن ،ﻓﺄﻧﺖ ﺑﺤﺎﺟﺔ إﻟﻰ ﺗﺮﻛﯿﺐ ﺑﻌﺾ اﻟﺒﺮﻣﺠﯿﺎت
اﻹﺿﺎﻓﯿﺔ واﻟﺘﻲ ﺳﯿﻌﺮﺿﻬﺎ اﻟﻨﻈﺎم ﻋﻠﯿﻚ ،وﻻ أﻋﺘﻘﺪ ﺑﺎن ﻣﺴﺘﺨﺪﻣﻲ وﯾﻨﺪوس ﺛﻤﺎﻧﯿﺔ وﺗﺴﻌﻮن
ﺳﯿﺤﺘﺎﺟﻮا إﻟﻰ ﺗﺮﻛﯿﺐ أﯾﺔ ﺷﻲء إﺿﺎﻓﻲ ،وﻟﻜﻦ ﯾﻔﻀﻞ اﻟﻤﺮور ﻋﻠﻰ ذﻟﻚ اﻟﺨﯿﺎر واﻟﻔﺤﺺ
English Query
وﯾﺴﻤﺢ ذﻟﻚ اﻟﺒﺮﻧﺎﻣﺞ ﻟﻚ ﺑﺈﻣﻜﺎﻧﯿﺔ ﺗﻮﺟﯿﻪ أواﻣﺮ ﺑﻠﻐﺔ إﻧﺠﻠﯿﺰﯾﺔ ﺑﺴﯿﻄﺔ إﻟﻰ ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،
ﺑﺪﻻ ﻣﻦ اﺳﺘﺨﺪام ﻟﻐﺔ
SQL
وﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﻪ ﻣﺒﺎﺷﺮةً ،أو ﻣﻤﻜﻦ أن ﺗﺪﻣﺠﻪ ﻓﻲ ﺑﺮاﻣﺠﻚ أو ﻓﻲ ﺻﻔﺤﺎت اﻹﻧﺘﺮﻧﺖ اﻟﺨﺎﺻﺔ ﺑﻚ
ﺗﺮﻛﯿﺐ
Database Server – Desktop Edition
ﻻ ﺗﺨﺘﻠﻒ ﻃﺮﯾﻘﺔ ﺗﺮﻛﯿﺐ اﻟﻨﻈﺎﻣﯿﻦ اﻟﺴﺎﺑﻘﯿﻦ ﻋﻦ ﺑﻌﺾ ،ﻛﻤﺎ ﻟﻦ اﻣﺸﻲ ﻣﻌﻚ ﺧﻄﻮة ﺑﺨﻄﻮة ﻓﻲ
ﻋﻤﻠﯿﺔ اﻟﺘﺮﻛﯿﺐ ،ﻷﻧﻬﺎ ﻋﻤﻠﯿﺔ ﺗﺮﻛﯿﺐ ﻋﺎدﯾﺔ ،وﻟﻜﻨﻨﻲ أرﯾﺪ أن أﻟﻔﺖ اﻧﺘﺒﺎﻫﻚ إﻟﻲ ﺑﻌﺾ اﻟﻨﻘﺎط أﺛﻨﺎء
اﻟﺘﺮﻛﯿﺐ
ﻫﻨﺎك ﻃﺮﯾﻘﺘﯿﻦ ﻟﻠﺘﺮﻛﯿﺐ وﻫﻤﺎ ﺗﺮﻛﯿﺐ ﻣﺤﻠﻲ وﺗﺮﻛﯿﺐ ﻋﻠﻰ ﺟﻬﺎز أﺧﺮ ﻋﻦ ﻃﺮﯾﻖ اﻟﺸﺒﻜﺔ وﻫﻤﺎ
Local or Remote Installation
وﻓﻲ ﻣﻌﻈﻢ اﻷﺣﯿﺎن ﻧﻘﻮم ﺑﺘﺮﻛﯿﺒﻪ ﻓﻲ ﺟﻬﺎزﻧﺎ ،وﻟﻜﻦ إن ﻗﺮرﻧﺎ ﺗﺮﻛﯿﺒﻪ ﻓﻲ ﺟﻬﺎز آﺧﺮ ﻋﻦ ﻃﺮﯾﻖ
ﺟﻬﺎزﻧﺎ ،ﻓﯿﺠﺐ أن ﯾﻜﻮن ذﻟﻚ اﻟﺠﻬﺎز ﻣﻠﻘﻢ ﺷﺒﻜﺔ ،وﯾﺠﺐ أن ﺗﻜﻮن ﻟﺪﯾﻨﺎ ﺻﻼﺣﯿﺎت ﻣﺪﯾﺮ ﻋﻠﯿﻪ
Minimum
ﺗﺮﻛﺐ اﻟﺒﺮﻣﺠﯿﺎت اﻷوﻟﯿﺔ اﻟﻤﺴﺌﻮﻟﺔ ﻋﻦ ﺗﺸﻐﯿﻞ أل
SQL Server
وﻫﻲ ﻓﻲ ﻣﻌﻈﻢ اﻷﺣﯿﺎن ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﺑﻌﺾ اﻟﻤﻠﻔﺎت اﻟﺨﺎﺻﺔ ﺑﻪ ﻓﻘﻂ
ﻣﻼﺣﻈﺔ :ﻻ ﺗﺮﻛﺐ اﻟﻜﺘﺐ وﺑﺮاﻣﺞ اﻹدارة
Custom
أﻧﺖ ﺣﺮ ﺑﺎﺧﺘﯿﺎر ﻣﺎ ﯾﺮﻛﺐ ﻣﻦ إﺿﺎﻓﺎت ﻋﻠﻰ ﺟﻬﺎزك
ﺳﯿﻄﻠﺐ ﻣﻨﻚ اﻟﻨﻈﺎم ﺗﺤﺪﯾﺪ أﻣﺎﻛﻦ اﻟﻤﻠﻔﺎت ،ﻣﻜﺎن ﺗﺨﺰﯾﻦ اﻟﺒﺮاﻣﺞ وﻣﻜﺎن ﺗﺨﺰﯾﻦ اﻟﺒﯿﺎﻧﺎت ،ﯾﻔﻀﻞ
أن ﺗﺨﺰن اﻟﺒﯿﺎﻧﺎت ﻓﻲ أﻗﺮاص ﺻﻠﺒﺔ ﺳﺮﯾﻌﺔ
ﺳﯿﻄﻠﺐ ﻣﻨﻚ اﻟﻨﻈﺎم أن ﺗﺤﺪد اﺳﻢ ﻣﺴﺘﺨﺪم وﻛﻠﻤﺔ ﺳﺮ ﺧﺎﺻﺔ ﺑﻪ ،أن ﻛﻨﺖ ﺗﺮﻏﺐ ﺑﻤﺮاﻗﺒﺔ ﻗﺎﻋﺪة
اﻟﺒﯿﺎﻧﺎت واﻟﻤﻠﻔﺎت اﻟﺘﻲ ﺗﺼﻞ إﻟﯿﻬﺎ ،ﻓﺘﺴﺘﻄﯿﻊ أن ﺗﺼﻨﻊ ﻟﻬﺎ اﺳﻢ ﻣﺴﺘﺨﺪم ﺑﺼﻼﺣﯿﺎت ﻣﺪﯾﺮ وﻛﻠﻤﺔ
ﺳﺮ ،وﺗﻌﺮﻓﻬﻢ ﻓﻲ ﺷﺎﺷﺔ اﻟﺘﺮﻛﯿﺐ ،وﺑﺬﻟﻚ ﺳﯿﻌﺎﻣﻞ اﻟﻨﻈﺎم ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻛﻤﺴﺘﺨﺪم ﻣﻨﻔﺼﻞ
،أﻣﺎ إن ﻛﺎن ﻧﻈﺎم ﻣﺮاﻗﺒﺔ اﻟﺸﺒﻜﺔ ﻟﺪﯾﻚ ﻻ ﯾﺘﻄﻠﺐ اﻟﺘﻌﻘﯿﺪ اﻟﺴﺎﺑﻖ ،ﻓﺘﺴﺘﻄﯿﻊ اﻻﺧﺘﯿﺎر ﺑﺎن ﺗﻌﻤﻞ
ﻛﺠﺰء ﻣﻦ اﻟﻨﻈﺎم
أﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺒﺮﻧﺎﻣﺠﯿﻦ اﻵﺧﺮﯾﻦ ،ﻓﺘﺮﻛﯿﺒﻬﻤﺎ ﻻ ﯾﺘﻄﻠﺐ أﯾﺔ ﺗﻌﻘﯿﺪات ﻋﻠﻰ اﻹﻃﻼق
ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﻋﻤﻠﯿﺔ اﻟﺘﺮﻛﯿﺐ وإﻋﺎدة ﺗﺸﻐﯿﻞ اﻟﺠﻬﺎز ،أﻧﺼﺤﻚ ﺑﺰﯾﺎرة إﻧﺘﺮﻧﺖ و إﻧﺰال آﺧﺮ
ﺑﺮاﻣﺞ إﺻﻼح أل
Microsoft SQL Server 2000
أﺧﺮ ﻧﺴﺨﺔ ﺗﺼﻠﯿﺢ ﻣﺘﻮﻓﺮة ﻫﻲ
Service Pack 2
ﺣﯿﺚ ﺳﺘﺴﺎﻋﺪك ﺗﻠﻚ اﻟﺒﺮاﻣﺞ ﻓﻲ إﺻﻼح اﻟﻌﺪﯾﺪ ﻣﻦ اﻟﻤﺸﺎﻛﻞ ﻓﻲ ذﻟﻚ اﻟﺒﺮﻧﺎﻣﺞ
وﻟﻜﻦ ﻗﺒﻞ أن ﺗﻘﻮم ﺑﺬﻟﻚ ﯾﺠﺐ أن ﺗﺘﺄﻛﺪ ﻣﻦ رﻗﻢ اﻟﻨﺴﺨﺔ اﻟﺨﺎﺻﺔ ﺑﻚ ورﻗﻢ آﺧﺮ ﺗﻌﺪﯾﻞ ﻓﻲ إﻧﺘﺮﻧﺖ ،
ﺣﯿﺚ ﺗﻘﻮم ﻣﺎﯾﻜﺮوﺳﻮﻓﺖ داﺋﻤﺎ ﺑﺪﻣﺞ ﺗﻠﻚ اﻟﺘﻌﺪﯾﻼت ﻓﻲ ﻧﺴﺨﺔ اﻟﺘﺮﻛﯿﺐ اﻟﺮﺋﯿﺴﯿﺔ
واﻟﺘﺄﻛﺪ ﻣﻦ ذﻟﻚ اﻟﺮﻗﻢ ﻋﻠﯿﻚ اﻟﺬﻫﺎب إﻟﻰ اﻟﻘﺎﺋﻤﺔ
Help -> About
وﺗﻨﻈﺮ رﻗﻢ أل
Service Pack
اﻟﺘﻲ ﺑﻬﺎ ،وان ﻟﻢ ﯾﻮﺟﺪ ،أو ﻛﺎن اﻟﺮﻗﻢ اﻗﻞ ﻣﻦ اﻟﺮﻗﻢ اﻟﻤﻮﺟﻮد ﻓﻲ إﻧﺘﺮﻧﺖ ،ﻓﻌﻠﯿﻢ إﻧﺰال اﻟﻨﺴﺨﺔ
ﻣﻦ إﻧﺘﺮﻧﺖ
وﻫﻲ ﻋﺒﺎرة ﻋﻦ ﺑﺮﻧﺎﻣﺞ اﻟﺘﺤﻜﻢ اﻟﺮﺋﯿﺴﻲ ﺑﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ ،وﻋﻦ ﻃﺮﯾﻘﺔ ﺗﺴﺘﻄﯿﻊ أن
ﺗﺘﺤﻜﻢ ﺑﻜﻞ اﻷﺟﻬﺰة اﻟﻤﺮﻛﺰﯾﺔ اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ
SQL Server 2000
وذﻟﻚ إن ﻛﺎﻧﺖ ﻫﻨﺎك أﺟﻬﺰة أﺧﺮى ﻏﯿﺮ ﺟﻬﺎز ﻓﻲ اﻟﺸﺒﻜﺔ
ﺳﯿﻼﺣﻆ اﻟﻌﺪﯾﺪ ﺑﺎن ذﻟﻚ اﻟﺒﺮﻧﺎﻣﺞ ﻣﺸﺎﺑﻪ ﻓﻲ ﻃﺮﯾﻘﺔ ﻋﻤﻠﻪ ﻟﻠﻌﺪﯾﺪ ﻣﻦ ﺑﺮاﻣﺞ ﻣﺎﯾﻜﺮوﺳﻮﻓﺖ اﻷﺧﺮى
اﻟﻤﺨﺼﺼﺔ ﻟﻠﺸﺒﻜﺎت ،ﻧﻌﻢ ذﻟﻚ ﺻﺤﯿﺢ ،ﻓﻠﻘﺪ ﺑﻨﻲ ﺑﺮﻧﺎﻣﺞ اﻹدارة ﻟﯿﻌﻤﻞ ﺑﺪاﺧﻞ ﻧﻈﺎم
وﻟﺬﻟﻚ ﺳﺘﺠﺪوا ﺑﺎن اﻟﻘﺎﺋﻤﺔ اﻟﺮﺋﯿﺴﯿﺔ ﻟﺒﺮﻧﺎﻣﺞ اﻹدارة ﻻ ﻋﻼﻗﺔ ﻟﻬﺎ ﺑﺎل
SQL Server
وﻟﻜﻨﻬﺎ ﻣﺨﺼﺼﺔ ﻹﻏﻼق اﻟﺒﺮﻧﺎﻣﺞ وﻟﻠﺘﺤﺮك ﺑﯿﻦ ﺑﺮاﻣﺞ اﻹدارة اﻟﻤﺨﺘﻠﻔﺔ وﻟﻠﺤﺼﻮل ﻋﻠﻰ اﻟﻤﺴﺎﻋﺪة
ﺣﻮل ﺑﺮﻧﺎﻣﺞ اﻹدارة وﻟﯿﺲ ﺣﻮل ال
SQL Server 2000
وﺳﻨﺘﺤﺪث ﻋﻦ دﻣﺞ اﻟﺒﺮاﻣﺞ ﻣﻊ ﺑﻌﻀﻬﺎ اﻟﺒﻌﺾ وإدارﺗﻬﺎ ﻋﻦ ﻃﺮﯾﻖ ﻧﻈﺎم ﻣﻮﺣﺪ ﻓﻲ أﺟﺰاء ﻗﺎدﻣﺔ
ﻣﻦ رﺳﺎﺋﻠﻨﺎ
وﺗﻠﻚ اﻟﻘﺎﺋﻤﺔ دﯾﻨﺎﻣﯿﻜﯿﺔ ،أي أن ﻣﺤﺘﻮﯾﺎﺗﻬﺎ ﺗﺘﻐﯿﺮ ﺣﺴﺐ اﻟﻌﻤﻞ اﻟﺬي ﻧﻘﻮم ﺑﻪ ﺑﺪاﺧﻞ ال
SQL Server
وذﻟﻚ ﯾﺘﻌﻠﻖ ﻛﺜﯿﺮا ﺑﺄول ﻗﺎﺋﻤﺔ وﻫﻲ
Action
ﯾﺘﻜﻮن ﺑﺮﻧﺎﻣﺞ اﻹدارة ﻛﻤﺎ ﻻﺣﻈﻨﺎ ﻓﻲ اﻟﺮﺳﻤﺔ اﻟﺴﺎﺑﻘﺔ ﻣﻦ ﺷﺠﺮة ﻛﺎﺋﻨﺎت و ﺧﺼﺎﺋﺺ ﺗﻠﻚ اﻟﻜﺎﺋﻨﺎت
،وﺗﻠﻚ اﻟﺸﺠﺮة ﻣﻘﺴﻤﺔ ﺑﻄﺮﯾﻘﺔ ﻣﻨﻄﻘﯿﺔ ﻟﻠﻐﺎﯾﺔ ،ﻓﺘﺮى أﻋﻼﻫﺎ
Microsoft SQL Servers
ﺣﯿﺚ ﺗﻮﺟﺪ ﺗﺤﺘﻬﺎ ﻣﺠﻤﻮﻋﺎت اﻷﺟﻬﺰة اﻟﻤﺮﻛﺰﯾﺔ وذﻟﻚ إن ﻛﺎن ﻟﺪﯾﻨﺎ اﻟﻌﺪﯾﺪ ﻣﻦ اﻷﺟﻬﺰة اﻟﻤﺮﻛﺰﯾﺔ ،
ﻛﻤﺎ ﺗﻮﺟﺪ ﻓﻲ ﻛﻞ ﻣﺠﻤﻮﻋﺔ اﻷﺟﻬﺰة اﻟﻤﺮﻛﺰﯾﺔ اﻟﺘﻲ ﺑﻬﺎ
وﻓﻲ ﻣﺜﺎﻟﻨﺎ اﻟﺴﺎﺑﻖ ﻫﻨﺎك ﻣﺠﻤﻮﻋﺔ واﺣﺪة وﺟﻬﺎز ﻣﺮﻛﺰي واﺣﺪ
Databases
|_ master
|_ model
|_ tempdb
|_ …
Management
|_ SQL Server Agent
|_ Backup
|_ Current Activity
|_ Database Maintenance Planes
|_ SQL Server Logs
|_ Web Publishing
Security
|_ Logins
|_ Server Roles
|_ Linked Servers
|_ Remote Servers
Support Services
|_ Distributed Transaction Coordinator
|_ SQL Mail
ﻛﻤﺎ اﻧﻪ ﻗﺪ ﯾﺤﺘﻮي ﻋﻠﻰ، وﯾﺤﺘﻮي ﻛﻞ ﻛﺎﺋﻦ ﻣﻦ ﺗﻠﻚ اﻟﻜﺎﺋﻨﺎت ﺧﺼﺎﺋﺺ أو ﻋﻤﻠﯿﺎت ﻣﻤﻜﻨﺔ ﻋﻠﯿﻪ
ﻛﺎﺋﻨﺎت ﻓﺮﻋﯿﻪ ﺗﺤﺘﻪ
وذﻟﻚ، وﺳﺄﺗﻄﺮق ﻓﻲ ﺷﺮﺣﻲ ﻫﺬا ﻋﻦ ﻧﺒﺬة ﺑﺴﯿﻄﺔ ﻋﻦ ﻛﻞ ﻣﺠﻤﻮﻋﺔ وﻋﻦ اﻟﻜﺎﺋﻨﺎت اﻟﺘﻲ ﺗﺤﺘﻮﯾﻬﺎ
ﻟﺘﺴﻬﯿﻞ ﻓﻬﻢ اﻟﻨﻈﺎم ﻋﻨﺪ اﻟﺸﺮح اﻟﻤﺘﻘﺪم
وﯾﺤﺘﻮي ﻋﻠﻰ ﺟﻤﯿﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﺠﻬﺎز اﻟﻤﺮﻛﺰي ،وﻟﻜﻨﻪ ﯾﺤﺘﻮي أﯾﻀﺎ ﻋﻠﻰ ﺛﻼث
ﻗﻮاﻋﺪ ﺑﯿﺎﻧﺎت ﻣﻬﻤﺔ وأﺳﺎﺳﯿﺔ وﻻ ﯾﺴﺘﻄﯿﻊ اﻟﻨﻈﺎم ﺑﺪوﻧﻬﺎ اﻟﻘﯿﺎم ﺑﺄﯾﺔ ﺷﻲء ،ﻛﻤﺎ أن ﺿﯿﺎع اﺣﺪﻫﻢ
ﻗﺪ ﯾﻌﻄﻞ اﻟﻨﻈﺎم
Databases
|_ master
وﻫﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺨﺰن ﺑﻬﺎ ﻛﻞ اﻟﻤﻌﻠﻮﻣﺎت ﻋﻦ اﻟﻨﻈﺎم وﻋﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻷﺧﺮى و
ﺿﯿﺎع ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺗﻠﻚ ﯾﺆدي إﻟﻰ ﺿﯿﺎع اﻟﻨﻈﺎم ﺑﺄﻛﻤﻠﻪ ،وﻟﺬﻟﻚ ﻋﻠﯿﻨﺎ اﻟﻤﺤﺎﻓﻈﺔ ﻋﻠﯿﻬﺎ وﻧﺴﺨﻬﺎ
اﺣﺘﯿﺎﻃﯿﺎ ﺑﺎﻧﺘﻈﺎم
Databases
|_ model
ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﺸﻜﻞ اﻷول ﻟﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﺠﺪﯾﺪة اﻟﺘﻲ ﺳﻨﺼﻨﻌﻬﺎ ،ﻓﻠﻮ ﻛﺎن ﻟﺪﯾﻨﺎ ﻣﻮاﺻﻔﺎت
ﻗﯿﺎﺳﯿﺔ ﻓﻲ اﻟﻤﺆﺳﺴﺔ اﻟﺘﻲ ﻧﻌﻤﻞ ﺑﻬﺎ ،وﺗﻄﻠﺒﺖ ﺗﻠﻚ اﻟﻤﻮاﺻﻔﺎت ﺑﺎن ﺗﺤﺘﻮي ﻛﻞ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺟﺪﯾﺪة
ﻧﺼﻨﻌﻬﺎ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻌﯿﻨﺔ ﻣﻦ اﻟﻜﺎﺋﻨﺎت ،ﻓﻨﺴﺘﻄﯿﻊ وﺿﻌﻬﻢ ﻫﻨﺎ ،وﻋﻨﺪ ﺻﻨﺎﻋﺔ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت
ﺟﺪﯾﺪة ﺳﺘﻨﺘﻘﻞ ﺗﻠﻚ اﻟﻜﺎﺋﻨﺎت إﻟﯿﻬﺎ
Databases
|_ tempdb
اﻟﻔﺮع اﻟﺜﺎﻧﻲ:
Management
ﯾﺤﺘﻮي ذﻟﻚ اﻟﻔﺮع ﻋﻦ ﻛﻞ ﻣﺎ ﯾﺨﺺ إدارة ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰﯾﺔ ﺑﺼﻔﺔ ﻋﺎﻣﺔ
Management
|_ SQL Server Agent
وﻛﯿﻞ ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،أو ﻛﻤﺎ اﺳﻤﯿﻪ اﻟﻄﯿﺎر اﻵﻟﻲ ،ﻓﻬﻮ اﻟﺬي ﯾﺴﺎﻋﺪك ﻓﻲ ﺟﻌﻞ أﻣﻮر إدارة
اﻟﻨﻈﺎم ﺳﻬﻠﺔ ،ﺣﯿﺚ ﺗﺴﺘﻄﯿﻊ ﺑﺮﻣﺠﺘﻪ ﺑﺎﻟﻘﯿﺎم ﺑﺎﻟﻌﺪﯾﺪ ﻣﻦ اﻷﻣﻮر ﺑﺪون ﺗﺪﺧﻠﻚ
Management
|_ Backup
اﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ ،ﻫﻨﺎ ﺗﻌﺮف أﺟﻬﺰة اﻟﻨﺴﺦ اﻻﺣﺘﯿﺎﻃﻲ واﻟﺘﻲ ﺳﯿﺴﺘﺨﺪﻣﻬﺎ اﻟﻨﻈﺎم
Management
|_ Current Activity
Management
|_ Database Maintenance Planes
ﯾﺤﺘﻮي ﻋﻠﻰ ﻣﺨﻄﻄﺎت اﻟﺼﯿﺎﻧﺔ اﻟﺪورﯾﺔ ﻋﻠﻰ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ،ﻓﻜﻤﺎ ﯾﻌﻠﻢ اﻟﺒﻌﺾ ﺗﺤﺘﺎج ﻗﻮاﻋﺪ
اﻟﺒﯿﺎﻧﺎت اﻟﻀﺨﻤﺔ واﻟﺘﻲ ﺗﻌﺪل ﺑﺎﺳﺘﻤﺮار ﻋﻠﻰ ﺻﯿﺎﻧﺔ ﯾﻮﻣﯿﺔ ﻣﺜﻞ إﻋﺎدة ﻓﻬﺮﺳﺔ ﻣﻔﺎﺗﯿﺢ اﻟﺠﺪاول ،
ﻓﺤﺺ ﺗﻜﺎﻣﻞ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت وﻏﯿﺮﻫﺎ ﻣﻦ اﻷﻣﻮر
Management
|_ SQL Server Logs
Management
|_ Web Publishing
ﻟﺮﺑﻂ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻣﺎ ﻣﻊ ﺻﻔﺤﺎت وﯾﺐ ،ﺑﺤﯿﺚ ﺗﺴﺘﻄﯿﻊ أن ﺗﺼﻨﻊ ﺻﻔﺤﺎت وﯾﺐ ﺳﺘﺎﺗﯿﻜﯿﺔ ،
ﺗﻌﺪل ﻛﻠﻤﺎ ﻋﺪﻟﺖ اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،أو ﻛﻞ ﻓﺘﺮة زﻣﻨﯿﺔ ﻣﻌﯿﻨﺔ وذﻟﻚ ﻟﺘﺨﻔﯿﻒ اﻟﻀﻐﻂ ﻋﻠﻰ
ﻣﺤﺮك ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﻛﺰي
Security
Security
|_ Logins
Security
|_ Server Roles
Security
|_ Linked Servers
Security
|_ Remote Servers
Support Services
Support Services
|_ Distributed Transaction Coordinator
Support Services
|_ SQL Mail
ﻧﻈﺎم اﻹدارة ﻋﻦ ﻃﺮﯾﻖ اﻟﺒﺮﯾﺪ اﻻﻟﻜﺘﺮوﻧﻲ ،وﻫﻮ اﺣﺪ اﻷﺷﯿﺎء اﻟﻤﺜﯿﺮة ﻓﻲ
SQL Server
ﺣﯿﺚ ﯾﻤﻜﻨﻚ ﻣﻦ أدارﺗﻪ ﻋﻦ ﻃﺮﯾﻖ اﻟﺒﺮﯾﺪ اﻻﻟﻜﺘﺮوﻧﻲ ،ﻓﻠﻮ ﺳﺎﻓﺮت وﻧﺴﯿﺖ ﺑﺎن ﺗﻘﻮم ﺑﻨﺴﺦ
اﺣﺘﯿﺎﻃﻲ ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ،ﻓﺘﺴﺘﻄﯿﻊ ﺑﺎن ﺗﺘﻮﺟﻪ إﻟﻰ إي ﻣﻘﻬﻰ اﻧﺘﺮﻧﺖ وﺗﺮﺳﻞ ﺑﺮﯾﺪ إﻟﻰ اﻟﺠﻬﺎز
اﻟﻤﺮﻛﺰي ﺗﻄﻠﺐ ﻣﻨﻪ ذﻟﻚ
ﺑﻞ أﻛﺜﺮ ﻣﻦ ذﻟﻚ ،ﻓﺎن ﻗﺎدر ﻋﻠﻰ ﺗﻮﺟﯿﻪ اﻻﺳﺘﻌﻼﻣﺎت إﻟﯿﻪ ،ﻓﻘﺪ ﺗﻄﻠﺐ ﻣﻌﻠﻮﻣﺎت ﻋﻦ اﻟﺰﺑﺎﺋﻦ ﻣﻦ
ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﻟﺰﺑﺎﺋﻦ ،أو ﻏﯿﺮﻫﺎ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت وﻛﻞ ذﻟﻚ ﻋﻦ ﻃﺮﯾﻖ
SQL
DROP
اﻷﻣﺮ اﻟﻮﺻﻒ
Drop index index_name ; PK ,FK ﺣﺬف اﻟﻔﻬﺮس ﺣﺬف
Drop index key1 ; key1 اﺣﺬف اﻟﻔﻬﺮس
Drop table dd ; ﺑﺎﻟﻜﺎﻣﻞdd ﺣﺬف ﺟﺪول
ALTER
اﻷﻣﺮ اﻟﻮﺻﻒ
ALTER TABLE Ppr ADD COLUMN Price
Ppr إﻟﻰ اﻟﺠﺪولPrice إﺿﺎﻓﺔ ﺣﻘﻞ
DOUBLE ;
alter table student add
Add st_age in student table
(st_age number (5) ) ;
، ﻣﻦ ﺣﯿﺚ ) اﻟﻨﻮعst_age ﺗﻌﺪﯾﻞ اﻟﺤﻘﻞ
Alter table student modify ( st_age char (10) ) ; ( null ، اﻟﺤﺠﻢ
اﻷﻣﺮ اﻟﻮﺻﻒ
Cross tabulation
ﻟﺠﻌﻞ ﺳﺠﻼت ﺣﻘﻞ ﻣﻌﯿﻦ ﻛﺄﻋﻤﺪة ﻓﻲ ﺟﺪول
TRANSFORM Sum(Qty) AS Total
pivot p.city è ﻋﻨﺎوﯾﻦ اﻷﻋﻤﺪة
SELECT S.SNo
select s.sno èﻋﻨﺎوﯾﻦ اﻟﺴﻄﻮر
FROM ( ( S INNER JOIN SP ON S.SNo =
transform sum(qty) ﻣﺪاﺧﻞ اﻟﺠﺪول
SP.SNo) INNER JOIN P ON P.PNo = SP.PNo)
as total è
GROUP BY S.SNo
ﻷﻧﻬﺎgroup by ﻓﻲp.city ﻻﺗﻜﺘﺐ
PIVOT P.City ; pivot p.city اﺳﺘﺨﺪﻣﻦ ﻓﻲ
اﻷﻣﺮ اﻟﻮﺻﻒ
INSERT INTO S (SNo , SName) VALUES
ﻛﺘﺎﺑﺔ ﻗﯿﻢ اﻓﺘﺮاﺿﯿﺔ ﻟﺤﻘﻮل ﻣﻌﯿﻨﺔ
; ) '('S0' , 'TBA
ﻧﺴﺦ ﺟﻤﯿﻊ ﺑﯿﺎﻧﺎت اﻟﺤﻘﻮل ﻣﻦ اﻟﺠﺪول Sp
إﻟﻰ اﻟﺠﺪول اﻟﺠﺪﯾﺪ S2shipments
اﻷﻣﺮ اﻟﻮﺻﻒ
PK ﻟﻌﻤﻞ ﻣﻔﺘﺎح أﺳﺎﺳﻲunique
FK وﻣﻔﺘﺎح ﺛﺎﻧﻮي
اﺳﻢ اﻟﻤﻔﺘﺎحindex_name
Create [unique] index index_name on
table(column1 , [column2],…..) اﺳﻢ اﻟﺤﻘﻞ اﻟﺬي ﺳﯿﺘﻢ اﻋﺘﻤﺎدهcolumn1
PK
create table student ( st_no number(6) not null , ﻻﺗﺴﻤﺢ ﺑﻘﯿﻤﺔ ﻓﺎرﻏﺔ: NOT NULL
st_name char(40) not null ,
table name : student
st_birth_day date );
field : st_no , st_name ,
st_birth_day , st_mark
اﺳﻢ اﻟﻤﻔﺘﺎحKey1
Create unique index key1 on emp_inf (emp_no) ;
اﺳﻢ اﻟﺤﻘﻞ اﻟﺬي ﺗﻢ اﺧﺘﺎرهEmp_no
ﻣﻔﺘﺎح أﺳﺎﺳﻲ
اﻷﻣﺮ اﻟﻮﺻﻒ
define ﻻﺳﺘﻌﺮاض ﺟﺪول ﻣﺤﺘﻮﯾﺎت اﻟﻤﺘﻐﯿﺮات
Define descount = ‘ st_no * 10 ' ; ﻟﺘﻌﺮﯾﻒ ﻣﺘﻐﯿﺮ
DELETE
اﻷﻣﺮ اﻟﻮﺻﻒ
واﻟﺘﻲ ﺗﺤﻘﻖSp ﺣﺬف ﺟﻤﯿﻊ ﺑﯿﺎﻧﺎت اﻟﺠﺪول
DELETE * FROM SP WHERE SNo = 'S2' ;
where اﻟﺸﺮوط ﺑﻌﺪ ﻛﻠﻤﺔ
واﻟﺘﻲ ﺗﺤﻘﻖSp ﺣﺬف ﺟﻤﯿﻊ ﺑﯿﺎﻧﺎت اﻟﺠﺪول
DELETE CASCADE * FROM SP WHERE where اﻟﺸﺮوط ﺑﻌﺪ ﻛﻠﻤﺔ
SNo = 'S2' ;
وﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮﺗﺒﻄﺔ ﺑﻬﺎ ﻓﻲ اﻟﺠﺪول
s اﻷﺳﺎﺳﻲ
Delete from student where st_name='ali' ; ﺣﺬف اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط
اﻷﻣﺮ اﻟﻮﺻﻒ
ﻟﻠﺒﺤﺚ ﻋﻦ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ أو أﻛﺜﺮ داﺧﻞ ﺟﺪول
وﯾﺘﻄﻠﺐ ﻫﺬا اﻷﻣﺮ أرﺑﻊ ﻣﺘﻐﯿﺮات ﻓﻲ ﺷﻜﻠﻪ
اﻟﻌﺎم
اﻷﻣﺮ اﻟﻮﺻﻒ
UPDATE SP SET SNo = 'S0' WHERE SNo =
ﺗﻌﺪﯾﻞ ﺑﯿﺎﻧﺎت ﺣﻘﻞ ﻣﻌﯿﻦ
'S4' ;
Update student set st_name
from st_inf ) ;
ﻟﺘﻌﺪﯾﻞ ﻗﯿﻤﺔ ﻓﻲ اﻟﺠﺪول
Update student set st_name = 'ahmad’ ، اوراﻛﻞ ﻻﯾﻤﯿﺰ ﺑﯿﻦ اﻟﺤﺮوف ) ﻛﺒﯿﺮة
(ﺻﻐﯿﺮة
Where st_name = 'ali' ;
وﻟﻜﻦ ﻓﻲ إدﺧﺎل اﻟﺒﯿﺎﻧﺎت ﯾﺠﺐ اﻟﺘﻘﯿﺪ ﺑﺤﺎﻟﺔ
( ﺻﻐﯿﺮة، اﻷﺣﺮف ) ﻛﺒﯿﺮة
update student set st_name = ltrim(st_name) ; ﺣﺬف اﻟﻔﺮاغ ﻓﻲ ﺑﺪاﯾﺔ اﻟﺤﻘﻞ
update student set st_name = rtrim(st_name) ; ﺣﺬف اﻟﻔﺮاغ ﻓ ﻲ ﻧﻬﺎﯾﺔ اﻟﺤﻘﻞ
اﻷﻣﺮ اﻟﻮﺻﻒ
Accept password char prompt 'password : ' hide إدﺧﺎل ﻛﻠﻤﺔ اﻟﺴﺮ ﻣﻊ ﺣﺠﺐ ﻛﻠﻤﺔ اﻟﺴﺮ أي
; ** ﺗﻈﻬﺮ ﻓﻲ ﺷﻜﻞ
Accept st_no number noprompt ; إدﺧﺎل رﻗﻢ
Accept st_no number prompt 'enter number : ' ; إدﺧﺎل رﻗﻢ ﻣﻊ إﻇﻬﺎر اﻟﺮﺳﺎﻟﺔ
accept command أﻣﺮ اﻹدﺧﺎل
Acc = accept
اﻷﻣﺮ اﻟﻮﺻﻒ
select ﺗﺴﺘﺨﺪم ﻟﺮﺑﻂ ﺟﻤﻠﺘﯿﻦUNION
Select ……. UNION select
…………
أي ﻋﺮض اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﺣﺪ اﻟﺸﺮﻃﯿﻦ
داﻟﺔ اﻟﺮﻓﻊ إﻟﻰ ﻗﻮة
Select power ( st_ digit, 2 ) , power ( 3
, 2) from student ; 3^2 = 3 * 3 = 9
SELECT * FROM S ; S ﻋﺮض ﺟﻤﯿﻊ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول
SELECT * INTO Ppr FROM P ; Ppr إﻟﻰ اﻟﺠﺪولP ﻧﺴﺦ اﻟﺠﺪول
Select * from student ; ﻟﻤﺸﺎﻫﺪة اﻟﺠﺪول
Select abc (st_ digit) from student ; داﻟﺔ إﯾﺠﺎد اﻟﻘﯿﻤﺔ اﻟﻤﻄﻠﻘﺔ
Select AVG ( column ) , COUNT (
distinct | all | exp)
from student ;
اﻷﻣﺮ اﻟﻮﺻﻒ
إذا ﻛﺎن اﻟﯿﻮم اﻷﺣﺪ ﻓﺄﻧﻪ ﯾﺄﺗﻲ ﺑﺄول ﺟﻤﻌﺔ
ﺑﻌﺪة
select next-day(‘30-jun-96’ ,'FRIDAY') , next-
day(sysdate,'friday') from student ; أي ﺗﻘﻮم اﻟﺪاﻟﺔ ﺑﺈﯾﺠﺎد اﻟﯿﻮم اﻟﻤﻮاﻓﻖ ﻟﯿﻮم
اﻟﺠﻤﻌﺔ
SELECT P.PNo , S.SNo , SName , Status , S.City
ﻣﻦSELECT ﻋﺮض اﻟﺤﻘﻮل ﺑﻌﺪ
FROM (P INNER JOIN SP ON P.PNo = SP.PNo) P,Sp,S اﻟﺠﺪاول اﻟﺜﻼﺛﺔ
INNER JOIN S ON SP.SNo = S.Sno
)'select rpad (st_name , 50 ,'-' ) , rpad(st_no ,10,'$ ﻻﺑﺪ أن ﺗﻜﻮن n=50اﻛﺒﺮ ﻣﻦ ﺣﺠﻢ اﻟﺤﻘﻞ
;from student اﻟﻤﺤﺪد ﻋﻨﺪ إﻧﺸﺎﺋﻪ
; ORDER BY S.SNo
ﺗﻔﺤﺺ اﻟﺪاﻟﺔ إﺷﺎرة اﻟﺮﻗﻢ وﺗﺮﺟﻊ ﺑﺎﻟﻘﯿﻢ
اﻟﺘﺎﻟﯿﺔ :
; Select sign ( st_digit ) , sign (-1) from student
١-اﻟﺮﻗﻢ ﺳﺎﻟﺐ
اﻟﺮﻗﻢ ﻣﻮﺟﺐ١
SELECT SName
FROM S
Tree SELECT
WHERE SNo IN (SELECT SNo FROM SP
ﻣﻦSname ﻋﺮض ﺑﯿﺎﻧﺎت ﺣﻘﻞ
S اﻟﺠﺪول
WHERE PNo IN (SELECT PNo FROM P
اﻷﻣﺮ اﻟﻮﺻﻒ
select st_name , rtrim
ﺣﺬف اﻟﺤﺮف ’ ‘abأو ’ ‘baﻣﻦ ﻧﻬﺎﯾﺔ اﻟﺤﻘﻞ
; (st_name ,'a') from student
select st_name , soundex
ﻟﻌﺮض اﻟﻤﺘﻐﯿﺮ اﻟﺤﺮﻓﻲ اﻟﻤﻮﺟﻮد ﻓﻲ ﺟﺪول ،وﺑﺤﯿﺚ ﯾﻜﻮن اﻟﻠﻔﻆ
(st_name) from student
اﻟﺼﻮﺗﻲ ﻟﻬﺎ ﻣﺘﺸﺎﺑﻪ ،ﺣﺘﻰ وان اﺧﺘﻠﻔﺖ ﻓﻲ اﻷﺣﺮف اﻟﻬﺠﺎﺋﯿﺔ ،
= )where soundex (st_name
ﻣﺜﻞ ali = ale = ALIﻣﻦ ﺣﯿﺚ اﻟﻠﻔﻆ
; )'soundex('ali
Select st_name , st_average
from student
ﻋﺮض اﻟﻄﻼب اﻟﺘﻲ ﻣﻌﺪﻟﻬﻢ = NULL
; Where st_avreage is null
Select st_name , st_average
from student
ﻋﺮض اﻟﻄﻼب اﻟﺘﻲ ﻣﻌﺪﻟﻬﻢ >< NULL
Where st_avreage is not null
;
Select st_name , st_no , & exp ادﺧﻞ ﻗﯿﻤﺔ exp =st_no * 10
; from student
& ) اﺳﺘﺨﺪام اﻟﻤﺘﻐﯿﺮ دون ﺗﻌﺮﯾﻒ أي ﻻ ﯾﺒﻘﻰ ﻓﻲ اﻟﺬاﻛﺮة (
ادﺧﻞ ﻗﯿﻤﺔ exp =st_no * 10
واﻟﻔﺮق ﺑﯿﻨﻬﺎ وﺑﯿﻦ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ أن && وﻟﯿﺴﺖ & وذﻟﻚ ﯾﻌﻨﻲ
أن اﻟﺬاﻛﺮة ﺗﺤﺘﻔﻆ ﺑﻘﯿﻤﺔ expوﯾﻤﻜﻦ اﺳﺘﺨﺪاﻣﻬﺎ ﻻﺣﻘﺎ
&& Select st_name , st_no ,
أي ﻓﻲ اﻟﺬاﻛﺮة exp = st_no * 10
; exp from student
أﻣﺎ & ﻓﺎﻟﺬاﻛﺮة ﻻ ﺗﺤﺘﻔﻆ ﺑﻘﯿﻤﺔ exp
اﻷﻣﺮ اﻟﻮﺻﻒ
Select st_no , st_name from student ، >= ، < ، > ، = ) ﻋﺮض اﻟﻘﯿﻢ اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط
where st_no >11; ( <=
Select st_no , st_name from student
( ١١ ، ٥ ) ﻋﺮض اﻟﻘﯿﻢ اﻟﺘﻲ ﺑﯿﻦ
where st_no between 5 and 11 ;
Select st_no , st_name from student
(١١ ، ٥ ) ﻋﺮض اﻟﻘﯿﻢ اﻟﺘﻲ ﻟﯿﺴﺖ ﺑﯿﻦ
where st_no not between 5 and 11 ;
Select st_no , st_name from student
١١ أو٦ أو٤ <> ﻋﺮض اﻟﻘﯿﻢ اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط
where st_no not in (4 , 6 , 11 ) ;
select st_no || st_name st from student
ﻟﺠﻤﻊ ﻗﯿﻢ ﺣﻘﻠﯿﻦ ﻓﻲ ﺣﻘﻞ واﺣﺪ
;
( أو ﺟﺰء ﻣﻦst_name ,st_no) ﻷﺧﺬ ﺟﺰء ﻣﻦ اﻟﺤﻘﻞ
ﻗﯿﻤﺔ ﻣﻌﻄﺎة
Select substr ( st_name , POS, N) ,
substr (st_no , POS ) , substr ( waleed )
(‘waleed’, POS,N) from student ;
ﺑﺪاﯾﺔ اﻟﻘﻄﻊpos
اﻷﻣﺮ اﻟﻮﺻﻒ
Describe student ﻋﺮض ﻣﻮاﺻﻔﺎت اﻟﺠﺪول student
TRANSLATE
اﻷﻣﺮ اﻟﻮﺻﻒ
اﺳﺘﺒﺪال اﻟﺤﺮف ’ ‘aﺑﺎﻟﺤﺮف ’‘wa
; translate ( st_name ,'a' , 'wa') from student ﯾﺠﺐ أن ﯾﻜﻮن اﻟﺤﺮف ﻓﻲ ﺟﻤﻠﺔ select
ﻣﻄﺎﺑﻖ ﻣﻦ ﺣﯿﺚ ﺣﺎﻟﺔ اﻷﺣﺮف ) ﻛﺒﯿﺮة ،
ﺻﻐﯿﺮة( ﻟﻤﺎ ﻫﻮ ﻣﻮﺟﻮد ﻓﻲ اﻟﺤﻘﻞ
ﺗﻢ ﺑﺤﻤﺪ اﷲ اﻟﺠﺰء اﻷول ﻣﻦ اﻟﻜﺘﺎب واﻟﻤﺘﻌﻠﻖ ﺑﻘﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت SQLSERVERوﻧﻨﺘﻘﻞ إﻟﻰ
اﻟﺠﺰء اﻟﺜﺎﻧﻲ و اﻟﻤﺘﻌﻠﻖ ﺑﺒﺮﻣﺠﺔ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت داﺧﻞ إﺣﺪى ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ وﺳﺘﻜﻮن اﻟﻔﯿﺠﻮال
ﺑﯿﺰك ﻣﺤﻮر دراﺳﺘﻨﺎ .
وﺻﻠﻨﺎ اﻵن إﻟﻰ اﻟﻘﺴﻢ اﻟﺜﺎﻧﻲ واﻟﻤﺘﻌﻠﻖ ﺑﺎﺳﺘﺨﺪام ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻣﻊ ﻟﻐﺔ اﻟﺒﺮﻣﺠﺔ ﻓﯿﺠﻮال ﺑﯿﺰك
ﺳﯿﻜﻮن ﻫﺬا اﻟﻘﺴﻢ ﻋﺒﺎرة ﻋﻦ دروس ﻣﺘﺴﻠﺴﻠﺔ أرﺟﻮ أن ﻧﻜﻮن ﻓﻲ ﻧﻬﺎﯾﺘﻬﺎ ﻗﺎدرﯾﻦ ﻋﻠﻰ ﺑﺮﻣﺠﺔ
ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺑﺸﻜﻞ ﺟﯿﺪ ،،،
و ﻧﺤﻦ ﻓﻲ ﻫﺬا اﻟﻤﻮﻗﻊ ﻧﺤﺎول ﺟﺎﻫﺪﯾﻦ أن ﻧﻐﯿﺮ ﻫﺬه اﻟﺼﻮرة و أن ﻧﻨﻄﻠﻖ ﺑﺪرﺟﺔ ﺿﺪ اﻻﺗﺠﺎه اﻟﺴﺎﺋﺪ
ﻋﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت و أﻧﺎ واﺛﻖ ﺑﺈذن اﷲ أن ﻣﻦ ﺳﯿﺘﺎﺑﻊ ﻫﺬه اﻟﺪروس ﺳﯿﺨﺮج وﻟﺪﯾﻪ ﺧﻠﻔﯿﺔ ﻛﺎﻣﻠﺔ
ﯾﻨﺎﻓﺲ ﺑﻬﺎ اﻟﻤﺤﺘﺮﻓﯿﻦ ،و ﺳﻨﻨﻬﺞ ﻃﺮﯾﻘﺔ اﻟﺨﻼﺻﺔ و اﻟﺘﻄﺒﯿﻖ ﺑﺤﯿﺚ ﻻ ﯾﻜﺜﺮ اﻟﻜﻼم اﻟﺬي ﻻ ﻃﺎﺋﻞ
ﻣﻨﻪ ﻣﻘﺎﺑﻞ ﺧﺮوﺟﻚ ﻣﺘﻘﻨﺎ اﻟﺪرس ﺑﻌﺪ ﺗﻄﺒﯿﻘﻪ ،ﻛﻤﺎ ﺳﯿﺘﻢ وﺿﻊ ﻣﺜﺎل ﺟﺎﻫﺰ ﻣﺸﺮوح ﺑﺎﻟﻠﻐﺔ اﻟﻌﺮﺑﯿﺔ
ﻟﻜﻞ ﻣﺜﺎل ﻋﻠﻰ ﻫﺬا اﻟﻤﻮﻗﻊ ﻟﻜﻲ ﺗﻘﺎرن ﺑﯿﻦ ﻣﺎ ﻋﻤﻠﺖ و اﻟﺤﻞ اﻟﺼﺤﯿﺢ ﻣﻤﺎ ﯾﺠﻌﻠﻚ ﺗﻜﺘﺸﻒ اﻷﺧﻄﺎء
ﺑﻨﻔﺴﻚ ﻓﯿﻮﻟﺪ ذﻟﻚ ﻟﺪﯾﻚ ﻣﻮﻫﺒﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت.
ﻻ أرﯾﺪ أن أﻃﯿﻞ ﺑﻬﺬه اﻟﻤﻘﺪﻣﺔ ﺧﺼﻮﺻﺎ أﻧﻨﺎ ذﻛﺮﻧﺎ أن ﻣﻨﻬﺠﻨﺎ ﯾﻌﺘﻤﺪ ﻋﻠﻰ اﻟﺨﻼﺻﺔ و اﻟﺘﻄﺒﯿﻖ
اﻟﺪرس١
ﻛﻞ ﻣﺎ ﻫﻮ ﻣﻄﻠﻮب ﻣﻨﻚ ﻓﻲ ﻫﺬه اﻟﻤﺮﺣﻠﺔ أن ﺗﻌﺮف أن ﻫﻨﺎك ﻋﺪة ﻃﺮق ﻟﺒﺮﻣﺠﺔ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت
ﺗﺤﺪد أﯾﻬﺎ ﺗﺴﺘﺨﺪم ﻋﻠﻰ ﻗﺪر ﺣﺎﺟﺘﻚ
ﻟﻜﻲ ﺗﻘﻮم ﺑﺮﺑﻂ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻣﻊ ﺑﺮﻧﺎﻣﺠﻚ ﻓﻲ ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﺳﺘﺤﺘﺎج أوﻻ إﻟﻰ و ﺟﻮد ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت
ﻟﻜﻲ ﺗﺮﺑﻄﻬﺎ ﺑﺒﺮﻧﺎﻣﺠﻚ و ﯾﺘﯿﺢ ﻟﻚ ﻓﯿﺠﻮال ﺑﯿﺴﻚ أن ﺗﺮﺑﻂ ﻣﻊ أﻧﻮاع ﻛﺜﯿﺮ ﻣﻦ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻣﺮورا
ﺑﺄﻛﺴﺲ و ﻟﻮﺗﺲ و اﻧﺘﻬﺎء ﺑﻔﻮﻛﺲ ﺑﺮو و أوراﻛﻞ ،ﻛﻤﺎ ﯾﻮﻓﺮ ﻟﻚ ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻋﻤﻞ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت
ﺑﻮاﺳﻄﺔ ﺑﺮﻧﺎﻣﺞ ﻣﻠﺤﻖ ﻣﻌﻪ و ﻫﻮ ﻏﺎﻟﺒﺎ ﯾﻔﻲ ﺑﺤﺎﺟﺘﻚ ﺳﯿﻜﻮن درﺳﻨﺎ ﻫﺬا ﻫﻮ إﻧﺸﺎء ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت
ﺑﻬﺬا اﻟﺒﺮﻧﺎﻣﺞ اﻟﻤﺮﻓﻖ ﻣﻊ ﻓﯿﺠﻮال ﺑﯿﺴﻚ
اﻟﺪرس٢
ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﻨﻨﺸﺄﻫﺎ ﺗﺤﺘﻮي ﺟﺪول ﯾﺤﺘﻮي ﻋﻠﻰ أﺳﻤﺎء اﻟﻄﻼب و أرﻗﺎﻣﻬﻢ
ﺳﯿﻈﻬﺮ ﻟﻚ ﻣﺮﺑﻊ ﺣﻔﻆ ﺣﺪد اﻟﻤﻮﻗﻊ اﻟﺬي ﺗﺮﯾﺪ أن ﺗﺤﻔﻆ ﻓﯿﻪ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎﺗﻚ ﺛﻢ اﺧﺘﺮ ﺣﻔﻆ
properties
ﺑﻌﺪ ذﻟﻚ ﺳﺘﻔﺘﺢ ﻟﻚ ﻧﺎﻓﺬة ﺗﻜﺘﺐ ﻓﯿﻬﺎ اﺳﻢ اﻟﺠﺪول و ﺛﻢ ﻧﺬﻫﺐ ﻹﺿﺎﻓﺔ اﻟﺤﻘﻮل ﻛﻤﺎ ﻫﻮ ﻣﺒﯿﻦ
ﺳﯿﻔﺘﺢ ﻟﻨﺎ ﻧﺎﻓﺬة إﺿﺎﻓﺔ اﻟﺤﻘﻮل ﻧﻜﺘﺐ اﺳﻢ اﻟﺤﻘﻞ ﻓﻲ اﻟﻤﻜﺎن اﻟﻤﺨﺼﺺ و ﻧﺤﺪد ﻧﻮع ﺑﯿﺎﻧﺎت اﻟﺤﻘﻞ
ﻫﻞ ﻫﻲ رﻗﻤﯿﺔ أو ﺣﺮﻓﯿﺔ اﻟﺦ ،و ﻧﻜﺮر اﻟﻌﻤﻠﯿﺔ ﺣﺘﻰ ﻧﻨﻬﻲ ﺟﻤﯿﻊ اﻟﺤﻘﻮل اﻟﺘﻲ ﻧﺮﯾﺪﻫﺎ و ﻓﻲ ﻣﺜﺎﻟﻨﺎ
ﻫﺬا ﻧﺮﯾﺪ ﺣﻘﻠﯿﻦ اﻷول اﺳﻤﻪ
و ﻧﻮع ﺑﯿﺎﻧﺎﺗﻪ
text
و اﻟﺜﺎﻧﻲ
number
و ﻧﻮع ﺑﯿﺎﻧﺎﺗﻪ
long
ﻣﻼﺣﻈﺔ ﻣﻬﻤﺔ إذا ﻛﺎن ﻣﺎﺳﯿﻜﺘﺐ ﻓﻲ اﻟﺤﻘﻞ ﻣﻦ أرﻗﺎم ﺧﻤﺴﺔ أرﻗﺎم أو أﻗﻞ ﻧﺨﺘﺎر ﻧﻮع اﻟﺒﯿﺎﻧﺎت
integer
Long
ﺑﺬﻟﻚ ﻧﻜﻮن ﻗﺪ أﻧﺸﺄﻧﺎ ﻗﺎﻋﺪ ﺑﯿﺎﻧﺎت ﺗﺤﺘﻮي ﻋﻠﻰ ﺟﺪول ﺑﻪ ﺣﻘﻠﯿﻦ اﻻﺳﻢ و اﻟﺮﻗﻢ
ﺑﻌﺪ أن ﻗﻤﻨﺎ ﻓﻲ اﻟﺪرس اﻟﺴﺎﺑﻖ ﺑﺈﻧﺸﺎء ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺗﺄﺗﻲ اﻟﺨﻄﻮة اﻟﺘﺎﻟﯿﺔ وﻫﻲ أول ﺧﻄﻮة ﻟﻚ ﻓﻲ
رﺑﻂ ﻗﺎﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺳﻨﻘﻮم ﺑﺮﺑﻂ اﻟﻘﺎﻋﺪة اﻟﺘﻲ أﻧﺸﺄﻧﻬﺎ و اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﺣﻘﻠﯿﻦ ﻫﻤﺎ اﺳﻢ اﻟﻄﺎﻟﺐ و
رﻗﻤﻪ و اﻵن ﻟﻨﻨﻄﻠﻖ ﻟﻠﺨﻄﻮة اﻟﺘﺎﻟﯿﺔ
اﻟﺪرس٣
ﺗﻔﺘﺢ ﻣﺸﺮوع ﺟﺪﯾﺪ ﺛﻢ ﺗﻀﯿﻒ اﻷداة dataﻣﻦ ﺻﻨﺪوق اﻷدوات ﻛﻤﺎ ﻓﻲ اﻟﺸﻜﻞ
ﻧﺮﺳﻢ اﻷداة ﻋﻠﻰ اﻟﻔﻮرم و أﯾﻀﺎ ﻧﺮﺳﻢ ﺻﻨﺪوﻗﻲ ﻧﺺ ﻟﻜﻲ ﻧﻈﻬﺮ ﻓﯿﻬﻤﺎ اﻟﺤﻘﻮل
ﻫﻜﺬا ﺗﻜﻮن ﻗﺪ رﺑﻄﺖ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎﺗﻚ ﻓﻲ ﺑﺮﻧﺎﻣﺞ و ﻟﺘﺮى اﻟﻨﺘﯿﺠﺔ ﻗﻢ ﺑﺘﻨﻔﯿﺬ اﻟﺒﺮﻧﺎﻣﺞ و ذﻟﻚ
ﺑﻀﻐﻂ F5
ﻃﺒﻌﺎ ﻟﻦ ﯾﻈﻬﺮ ﻟﻚ ﺷﻲء ﻷن ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻓﺎرﻏﺔ و ﻟﻜﻲ ﻧﻘﻮم ﺑﻮﺿﻊ ﺑﻌﺾ اﻟﺤﻘﻮل ﻗﻢ ﺑﺎﻟﺘﺎﻟﻲ
ﺷﻐﻞ ﻣﻨﺸﻲء ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻓﻲ اﻟﺪرس اﻟﺴﺎﺑﻖ و اذﻫﺐ إﻟﻰ
File>>Opendatabase>>microsoft access
ﺳﯿﻔﺘﺢ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎﺗﻚ و ﺳﯿﻈﻬﺮ اﺳﻢ اﻟﺠﺪول اﻟﺬي أﻧﺸﺄﺗﻪ ﻗﻢ ﺑﺎﻟﻨﻘﺮ ﻋﻠﯿﻪ ﻣﺮﺗﯿﻦ و ﺳﯿﻔﺘﺢ ﻟﻚ ﻧﺎﻓﺬة
أﺿﻒ ﻣﻨﻬﺎ ﻣﺎ ﺗﺮﯾﺪ ﻣﻦ ﺳﺠﻼت
ﻻ ﯾﻌﻨﻲ ﻛﺘﺎﺑﺘﻚ ﻟﻤﺌﺎت اﻷﺳﻄﺮ ﻣﻦ اﻟﻜﻮد و ﺑﺤﺜﻚ ﻋﻦ اﻟﻄﺮق اﻟﺼﻌﺒﺔ وﻋﺪم اﺳﺘﺨﺪام ﻣﺎ ﯾﺴﺎﻋﺪك
أﻧﻚ اﻟﻤﺒﺮﻣﺞ اﻟﻤﺤﺘﺮف ﺑﻞ اﻟﻌﻜﺲ ﻓﺈن ذﻟﻚ ﺳﯿﻀﯿﻊ وﻗﺘﻚ و ﺗﻜﻮن ﻛﻤﻦ وﺿﻊ ﺟﻬﺪا ﻣﺎ ﻛﺎن ﯾﺠﺐ
ﻋﻠﯿﻪ ﻓﻌﻠﻪ ﻟﻮﺟﻮد ﻃﺮق أﺳﻬﻞ و إن اﺳﺘﻤﺮﯾﺖ ﻋﻠﻰ ﻫﺬه اﻟﺤﺎﻟﺔ ﻓﻤﺼﯿﺮك اﻟﻤﺼﺢ اﻟﻨﻔﺴﻲ
أﻧﺖ ﻛﻤﺒﺮﻣﺞ ﯾﺠﺐ أن ﺗﺒﺤﺚ ﻋﻦ اﻟﻄﺮق اﻟﺴﻬﻠﺔ ﻟﻜﻲ ﺗﺆدي ﻋﻤﻠﻚ ﺑﺴﻼﺳﺔ و ﺗﻮﻓﺮ ﺟﻬﺪك ﻟﻤﺎ
ﯾﺴﺘﺤﻖ وﻫﺬا ﻻ ﯾﻘﻠﻞ ﻣﻦ ﺷﺄﻧﻚ ﻛﻤﺒﺮﻣﺞ ،ﻃﺒﻌﺎ ﻻ ﯾﺠﺐ أن ﺗﻨﺘﻘﻞ إﻟﻰ ﻫﺬه اﻟﻤﺮﺣﻠﺔ إﻻ ﺑﻌﺪ أن ﺗﺘﻘﻦ
اﻟﻄﺮﯾﻘﺔ اﻷﺻﻌﺐ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ اﻷﺳﻬﻞ ﺑﯿﺴﺮ و ﺳﻬﻮﻟﺔ ﻛﻤﺎ ﺳﺘﺮى ﻓﻲ درﺳﻨﺎ ﻫﺬا ﻫﯿﺎ ﺑﻨﺎ ﻧﻨﻄﻠﻖ
ﻟﻠﺪرس
اﻟﺪرس٤
أذﻫﺐ إﻟﻰ ﻗﺎﺋﻤﺔ Add-insو اﺧﺘﺮ اﻻﺧﺘﯿﺎر Add-in managerﺳﯿﻔﺘﺢ ﻟﻚ ﻧﺎﻓﺬة اﻧﻘﺮ ﻧﻘﺮا
ﻣﺰدوﺟﺎ ﻋﻠﻰ اﻟﺴﻄﺮ Vb 6 Data FormWizardﯾﺠﺐ أن ﺗﻈﻬﺮ اﻟﻌﺒﺎرة اﻟﺘﺎﻟﯿﺔ ﺑﺠﺎﻧﺐ
اﻟﺴﻄﺮ loadedﺑﻌﺪ ذﻟﻚ اﺧﺘﺮ ﻣﻮاﻓﻖ و اذﻫﺐ إﻟﻰ اﻟﻘﺎﺋﻤﺔ Add-Insاﺿﻐﻂ ﻋﻠﻰ اﻟﺨﯿﺎر اﻟﺘﺎﻟﻲ
Data Form Wizardﺳﺘﻈﻬﺮ ﻟﻚ ﻧﺎﻓﺬة اﻟﻤﻌﺎﻟﺞ اﻟﺴﺤﺮي ﻗﻢ ﺑﺎﺧﺘﯿﺎر Nextاﺧﺘﺮ ﻧﻮع ﻗﺎﻋﺪة
اﻟﺒﯿﺎﻧﺎت و ﻫﻮ ﻓﻲ ﺣﺎﻟﺘﻨﺎ Accessو اﺧﺘﺮ Nextﺣﺪد ﻣﻮﻗﻊ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﻤﺮاد رﺑﻄﻬﺎ و ذﻟﻚ
ﺑﺎﻟﻀﻐﻂ ﻋﻠﻰ Browseﺑﻌﺪ ذﻟﻚ اﺧﺘﺮ اﺳﻤﺎ ﻟﻠﻔﻮرم و ﺣﺪد ﻃﺮﯾﻘﺔ اﻟﺮﺑﻂ و اﻟﻌﺮض ﻛﻤﺎ ﻗﻮ ﻣﺒﯿﻦ ﺛﻢ
اﺿﻐﻂ ﻋﻠﻰ Next
اﻻﻓﺘﺮاﺿﯿﺔ ﻋﻨﺪ ﺗﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ و ﺳﺘﻈﻬﺮ ﻟﻚ اﻵن اﻟﻨﺎﻓﺬة اﻟﺘﻲ أﻧﺸﺄﻧﺎﻫﺎ و ﻟﻜﻦ ﯾﺠﺐ أن ﺑﺠﻌﻠﻬﺎ
ﺛﻢ ﺣﺪد اﻟﻔﻮرم اﻟﺬي ﺗﺮﯾﺪ أن Project>>project1proprtis..ﻟﻜﻲ ﺗﺠﻌﻠﻬﺎ ﻛﺬاﻟﻚ اذﻫﺐ إﻟﻰ
form11و ﻫﻲ ﻓﻲ ﺣﺎﻟﺘﻨﺎ Startup Objectاﻟﻘﺎﺋﻤﺔ ﺗﺠﻌﻠﻪ اﻓﺘﺮاﺿﻲ ﻣﻦ
ﻗﻢ ﺑﺘﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ و اﻧﻈﺮ ﻟﻤﺎ ﻋﻤﻠﺖ .....ﻫﻞ أﻧﺖ ﺳﻌﯿﺪ ﺑﺎﻟﻨﺘﯿﺠﺔ رﻏﻢ أﻧﻬﺎ ﻟﻢ ﺗﺄﺧﺬ ﺟﻬﺪا ﻣﻨﺎ
اﻟﺪروس اﻟﺘﻲ ﺷﺮﺣﻨﺎﻫﺎ ﻛﺎﻧﺖ ﻣﻘﺪﻣﺔ ﻟﺒﺮﻣﺠﺔ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻟﻜﻨﻬﺎ ﻓﻲ اﻟﻮﻗﺖ ذاﺗﻪ ﻣﻬﻤﺔ ﻟﻜﻲ ﺗﻜﻮن
اﻷﺳﺎس اﻟﺬي ﺳﻨﺒﻨﻲ ﻋﻠﯿﻪ اﻟﺪروس اﻟﻘﺎدﻣﺔ ،ﻃﺒﻌﺎ ﯾﻬﻤﻨﺎ ﺑﺎﻟﺪرﺟﺔ اﻷوﻟﻰ أن ﻧﺴﺘﻄﯿﻊ أن ﻧﻮﺻﻞ
ﻃﺮﯾﻘﺔ اﻟﺘﻔﻜﯿﺮ ﻟﺪﯾﻚ إﻟﻰ اﻟﻤﺴﺘﻮى اﻷﻣﺜﻞ ﻣﻦ ﺣﯿﺚ أن اﻟﺒﺮﻣﺠﺔ ﯾﺠﺐ أن ﺗﻜﻮن ﻣﺒﺮﻣﺠﺔ ﻓﻲ ذﻫﻨﻚ
ﻟﻜﻲ ﺗﻨﻔﺬﻫﺎ ﻋﻠﻰ اﻟﻮاﻗﻊ ،و ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﺗﺤﺘﻮي ﻋﻠﻰ ﺟﻤﻠﺔ ﻣﻦ اﻷﻓﻜﺎر و اﻟﺤﯿﻞ اﻟﺜﺎﺑﺘﺔ ﺗﻘﺮﯾﺒﺎ
ﻓﻤﺠﺮد ﺗﻄﺒﯿﻘﻚ ﻟﻬﺎ ﻣﻦ ﺧﻼل اﻷﻣﺜﻠﺔ و اﻟﺪروس اﻟﻘﺎدﻣﺔ ﯾﻌﻨﻲ أﻧﻚ ﻗﺪ ﺗﻤﻜﻨﺖ ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ و
ﻓﻬﻤﻬﺎ و ﺳﺘﺴﺘﺨﺪﻣﻬﺎ ﻓﻲ ﺟﻤﯿﻊ ﻣﺸﺎرﯾﻌﻚ ،ﻟﺬﻟﻚ أﺣﺐ أن اﻧﻮه ﻋﻠﻰ ﻋﺪم ﺗﺮك ﺑﻌﺾ اﻟﻨﻘﺎط ﻓﻲ
اﻟﺪروس ﻻﻋﺘﻘﺎدك ﺑﻌﺪم أﻫﻤﯿﺘﻬﺎ ﺑﻞ ﺧﺬ ﻛﻞ ﺷﻲء ﻋﻠﻰ ﻣﺤﻤﻞ اﻟﺠﺪ ﻓﻘﺪ ﺗﺴﺘﻐﺮب ﻣﻦ ﺑﻌﺾ اﻷﻣﻮر و
ﺳﺘﻘﻮل أن ﻫﺬا ﻟﯿﺲ ﻣﺴﺘﻮى اﻟﺒﺮﻣﺠﺔ ﺑﻞ اﻟﺒﺮﻣﺠﺔ أﻋﻠﻰ ﺑﻜﺜﯿﺮ ﻣﻦ ذﻟﻚ ،و ﻫﺬا ﻗﻮل ﺧﺎﻃﻲء ﻓﺴﺘﺠﺪ
ﺑﻌﺪ اﻧﺘﻬﺎﺋﻚ ﻣﻦ اﻏﻠﺐ اﻟﺪروس أن اﻟﺒﺮاﻣﺞ اﻟﻜﺒﯿﺮة اﻟﺘﻲ ﻛﻨﺖ ﺗﻌﺘﻘﺪ أﻧﻬﺎ ﻣﻦ اﻟﻤﻌﺠﺰات ﻗﺪ ﻋﻤﻠﺖ
ﺑﻄﺮق ﻗﺪ ﺗﺤﺘﻘﺮﻫﺎ إن ﺻﺢ اﻟﺘﻌﺒﯿﺮ ﻟﺬﻟﻚ اﻋﻠﻢ أن اﻟﺒﺮﻣﺠﺔ ﻗﺎﺋﻤﺔ ﻋﻠﻰ أﻓﻜﺎر و ﺣﯿﻞ ﺛﺎﺑﺘﺔ ﺗﻘﺮﯾﺒﺎ و
أﻧﺖ ﺗﺴﺨﺮﻫﺎ ﻟﻠﻌﻤﻞ اﻟﺬي ﺗﺮﯾﺪه و ﺗﺼﻨﻊ ﻣﻨﻬﺎ ﻣﺎ ﺗﺮﯾﺪ ،و اﻵن دﻋﻮﻧﺎ ﻧﺬﻫﺐ ﻟﻠﺪرس اﻟﺬي ﺳﯿﻜﻮن
اﻧﻄﻼﻗﺘﻚ إﻟﻰ اﻟﺒﺮﻣﺠﺔ ﺑﻮاﺳﻄﺔ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت و ﺳﯿﻜﻮن ﻣﺠﺮد ﻣﻘﺪﻣﺔ ﻓﻘﻂ
اﻟﺪرس٥
-٢ﻣﻌﺮﻓﺔ ﺟﯿﺪة ﺑﺈﺿﺎﻓﺔ أدوات اﻟﺘﺤﻜﻢ اﻷﺳﺎﺳﯿﺔ ﻣﺜﻞ اﻷزرار و اﻟﻌﻨﺎوﯾﻦ و ﻣﺮﺑﻌﺎت اﻟﻨﺺ ﻻن
اﻟﺪروس ﻟﻦ ﺗﺤﺘﻮي ﻋﻠﻰ ﻫﺬه اﻟﺘﻔﺎﺻﯿﻞ ﻷﻧﻬﺎ ﻣﻦ اﻷﺳﺎﺳﯿﺎت
-٣ﯾﺠﺐ أن ﺗﻌﺮف أن ﻛﻞ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻋﺒﺎرة ﻋﻦ ﺳﺠﻼت وﻛﻞ ﺳﺠﻞ ﻋﺒﺎرة ﻋﻦ ﺣﻘﻮل
اﻟﻜﻼم اﻟﺘﺎﻟﻲ رﺑﻤﺎ ﻟﻦ ﺗﻔﻬﻢ ﻣﻨﻪ اﻟﻜﺜﯿﺮ ﻟﻜﻨﻪ ﻣﻬﻢ ﺣﯿﺚ ﺳﺘﻌﺮﻓﻪ ﻓﻲ اﻟﺪروس اﻟﻘﺎدﻣﺔ ﻟﺬا ﻻ ﺗﻬﻤﻠﻪ
ﻋﻨﺪﻣﺎ ﻧﺮﯾﺪ رﺑﻂ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺑﺎﻟﻜﻮد ﯾﺠﺐ أن ﻧﻌﻠﻦ ﻋﻦ ﻣﺘﻐﯿﺮﯾﻦ ﻓﻲ ﻣﻮدﯾﻮل ﻋﻠﻰ أﻧﻬﻤﺎ ﻗﺎﻋﺪة
ﺑﯿﺎﻧﺎت و ﺟﺪول و ﻧﻀﻊ اﻟﻘﺎﻋﺪة اﻷﺻﻠﯿﺔ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻟﺬي أﻧﺸﺄﻧﺎه ﻟﻜﻲ ﻻ ﺗﺘﻐﯿﺮ اﻟﻘﯿﻢ اﻷﺻﻠﯿﺔ ﻋﻨﺪ
اﻟﻤﻌﺎﻟﺠﺔ اﻟﻘﯿﻢ اﻟﻤﺆﻗﺘﺔ ،ﻃﺒﻌﺎ ﻧﻀﻊ ﻣﺎ ذﻛﺮﻧﺎ ﻓﻲ ﻣﻮدﯾﻮل و ﻧﺠﻌﻠﻪ اﻷﺳﺎﺳﻲ ﻋﻨﺪ اﻟﺘﺤﻤﯿﻞ ﺛﻢ ﻧﻈﻬﺮ
ﺑﻌﺪ ذﻟﻚ اﻟﻔﻮرم ﻟﻜﻲ ﯾﺘﻢ ﺗﻌﺮﯾﻒ اﻟﻤﺘﻐﯿﺮﯾﻦ و إﺳﻨﺎد ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻟﻠﻤﺘﻐﯿﺮ ،ﻃﺒﻌﺎ ﻟﻦ ﻧﺴﻨﺪ ﻗﯿﻤﻪ
ﻟﻠﺠﺪول إﻻ ﻓﻲ اﻟﻔﻮرم و ﻋﺎدة ﻓﻲ ﺣﺪث اﻟﺘﺤﻤﯿﻞ loadﻻ ﺗﺴﺄل ﻋﻦ اﻟﺴﺒﺐ اﻵن ﺳﺘﻌﺮف ﻓﯿﻤﺎ ﺑﻌﺪ
و اﻵن ﺳﺄذﻛﺮ اﻟﺨﻄﻮات اﻟﻤﻨﻄﻘﯿﺔ اﻟﺘﻲ ﺳﯿﻔﻌﻠﻬﺎ اﻟﺒﺮﻧﺎﻣﺞ ﺑﻌﺪ ﺑﺮﻣﺠﺘﻪ ﻟﻜﻲ ﺗﻜﻮن ﻓﻲ اﻟﺼﻮرة
ﻫﺬه ﻫﻲ اﻟﻔﻜﺮة اﻷﺳﺎﺳﯿﺔ ﻹﻇﻬﺎر اﻟﺒﯿﺎﻧﺎت أو ﺑﺎﻷﺣﺮى ﻋﻨﺪ ﺗﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ و اﻵن ﻛﯿﻒ ﯾﻘﻮم
اﻟﺒﺮﻧﺎﻣﺞ ﺑﺤﻔﻆ اﻟﺘﻐﯿﯿﺮات اﻟﺠﺪﯾﺪة
اﻟﺨﻄﻮات اﻟﺘﻲ ﯾﺘﺒﻌﻬﺎ اﻟﺒﺮﻧﺎﻣﺞ ﻋﻨﺪ اﻟﺘﺸﻐﯿﻞ و ﻋﻨﺪ إﻇﻬﺎر اﻟﺒﯿﺎﻧﺎت وﻋﻨﺪ اﻟﺤﻔﻆ
ﺑﻌﺪ أن أﺧﺬﻧﺎ ﻣﻘﺪﻣﺔ ﻋﻦ ﻃﺮﯾﻘﺔ اﻟﺮﺑﻂ ﺑﺎﻟﻜﻮد ﺳﻨﺄﺧﺬ اﻵن اﻟﺘﻄﺒﯿﻖ اﻟﻔﻌﻠﻲ ﻟﻠﺮﺑﻂ ﺑﺎﻟﻜﻮد ،ﺳﯿﻜﻮن
ﻣﺸﺮوﻋﻨﺎ ﻋﺒﺎرة ﻋﻦ ﺑﺮﻧﺎﻣﺞ ﻟﺤﻔﻆ اﺳﻢ اﻟﺴﻠﻌﺔ و ﺳﻌﺮﻫﺎ ،و ﻛﻞ ﻣﺎ ﻧﺮﯾﺪه ﻓﻲ ﻫﺬا اﻟﻤﺜﺎل ﻫﻮ
رﺑﻂ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﻜﻮد و ﺣﻔﻆ اﻻدراﺟﺎت اﻟﺠﺪﯾﺪة واﻟﺤﺬف و ﺳﻨﺄﺟﻞ اﻟﺒﺤﺚ ﻟﻠﺪروس اﻟﻘﺎدﻣﺔ
ﻋﻨﺪﻣﺎ ﻧﺄﺧﺬ ﻣﺒﺎديء SQLﻟﻐﺔ اﻻﺳﺘﻌﻼم ﺣﯿﺚ ﺳﯿﻜﻮن اﻟﺒﺤﺚ ﻣﻌﻬﺎ ﻓﻲ ﻏﺎﯾﺔ اﻟﺴﻬﻮﻟﺔ و اﻟﺒﺴﺎﻃﺔ
و اﻵن دﻋﻮﻧﺎ ﻧﺒﺪأ اﻟﺪرس
اﻟﺪرس٦
ﻗﺒﻞ أن ﺗﺒﺪأ ﯾﺠﺐ أن ﺗﺠﻬﺰ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت و ﻟﯿﻜﻦ اﺳﻤﻬﺎ db1و ﺗﺤﺘﻮي ﻋﻠﻰ ﺟﺪول اﺳﻤﻪ tb1و
ﻫﺬا اﻟﺠﺪول ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﺤﻘﻮل اﻟﺘﺎﻟﯿﺔ :
ﯾﻤﻜﻨﻚ ﻋﻤﻞ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﻮاﺳﻄﺔ Accessأو ﺑﻮاﺳﻄﺔ ﻓﯿﺠﻮال ﺑﯿﺴﻚ راﺟﻊ اﻟﺪرس اﻟﺜﺎﻧﻲ
ﺑﻌﺪ أن ﺗﻘﻮم ﺑﺬﻟﻚ اﻓﺘﺢ ﻣﺸﺮوع ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﻗﯿﺎﺳﻲ ﺟﺪﯾﺪ ،و ﻗﺒﻞ أن ﺗﺒﺪأ ﺑﺮﺑﻂ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
ﯾﺠﺐ أن ﺗﺤﺪد أي ﻃﺮﯾﻘﺔ ﺳﺘﺴﺘﺨﺪﻣﻬﺎ ﻟﻠﺮﺑﻂ و ﻓﻲ ﻫﺬا اﻟﻤﺜﺎل ﺳﻨﺴﺘﺨﺪم ﻃﺮﯾﻘﺔ أو ﺗﻘﻨﯿﺔ ، DAO
و ﺑﻌﺪ أن ﺣﺪدﻧﺎ اﻟﻄﺮﯾﻘﺔ اﻟﺘﻲ ﺳﻮف ﺗﺮﺑﻂ ﺑﻬﺎ ﺳﻨﻀﯿﻒ اﻟﻤﻜﺘﺒﺔ اﻟﺨﺎﺻﺔ ﺑﻬﺎ و ﻫﻲ ﻋﺒﺎرة ﻋﻦ
ﻣﻜﺘﺒﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﺗﻌﺮﯾﻒ ﻟﻸواﻣﺮ اﻟﺘﻲ ﺳﺘﺴﺘﺨﺪﻣﻬﺎ ﻟﺘﻘﻨﯿﺔ DAOو ﻟﺘﻀﯿﻒ ﻫﺬه اﻟﻤﻜﺘﺒﺔ ﻗﻢ
ﺑﺎﻟﺘﺎﻟﻲ:
اذﻫﺐ إﻟﻰ ﻗﺎﺋﻤﺔ Project > Refrenceو ﻣﻦ ﺛﻢ ﺣﺪد اﻻﺧﺘﯿﺎر Microsoft DAO 3.51
Object Libraryﺑﻌﺪ ذﻟﻚ اﺧﺘﺮ ﻣﻮاﻓﻖ
اﻵن ﺳﻨﻌﻮد ﻟﻤﺸﺮوﻋﻨﺎ ،و إن ﻛﻨﺖ ﻣﺎزﻟﺖ ﺗﺘﺬﻛﺮ ﻣﺎ ﻗﻠﻨﺎ ﻓﻲ اﻟﺪرس اﻟﺴﺎﺑﻖ ﻓﺈن ﻋﻠﯿﻨﺎ إﺿﺎﻓﺔ
ﻣﻮدﯾﻮل ،و ﻟﺘﻔﻌﻞ ذﻟﻚ اذﻫﺐ ﻟﻘﺎﺋﻤﺔ Projectو اﺿﻐﻂ ﻋﻠﻰ Add Moduleاﻵن ﺳﻨﻘﻮم
Public d As Database
Public t As Recordset
ﻛﻠﻤﺔ Publicﺗﻌﻨﻲ اﻧﻪ ﻣﺘﻐﯿﺮ ﻋﺎم ﻓﻲ اﻟﻤﺸﺮوع و ﻻﺣﻆ أن dأﺳﻨﺪﻧﺎﻫﺎ ﻛﻘﺎﻋﺪة ﺑﯿﺎﻧﺎت و t
ﻛﺠﺪول
ﻓﻲ ﻧﻔﺲ اﻟﻤﻮدﯾﻮل ﺳﻨﻘﻮم ﺑﺈﺳﻨﺎد ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻷﺻﻠﯿﺔ و اﻟﺘﻲ اﺳﻤﻬﺎ db1إﻟﻰ اﻟﻘﺎﻋﺪة اﻟﻮﻫﻤﯿﺔ
إن ﺻﺢ اﻟﺘﻌﺒﯿﺮ و اﻟﺘﻲ ﻋﺮﻓﻨﺎﻫﺎ ﻗﺒﻞ ﻗﻠﯿﻞ ﺑـ dو ﻟﻌﻤﻞ ذﻟﻚ ﻧﻜﺘﺐ اﻹﺟﺮاء اﻟﺘﺎﻟﻲ ﻓﻲ اﻟﻤﻮدﯾﻮل
و اﻵن دﻋﻨﺎ ﻧﺸﺮح ﻫﺬا اﻹﺟﺮاء ،أول ﺷﻲء اﺳﻤﯿﻨﺎ ﻫﺬا اﻹﺟﺮاء ﺑﺎﺳﻢ mainو ﻫﺬا ﻟﯿﺲ ﻓﯿﻪ
ﺧﯿﺎر ﺣﯿﺚ أن ﻫﺬا اﺳﻢ ﻣﺤﺠﻮز ﻓﻲ ﻟﻐﺔ اﻟﺒﯿﺴﻚ ﻓﻼ ﺗﺴﺘﻄﯿﻊ أن ﺗﺴﺘﺒﺪﻟﻪ ﺑﺂﺧﺮ
أول ﺟﻤﻠﺔ ﻓﻲ اﻹﺟﺮاء ﻫﻲ ﺟﻤﻠﺔ اﻹﺳﻨﺎد وﻟﻘﺪ ﺑﺪأﻧﺎﻫﺎ ﺑﺄﻣﺮ اﻹﺳﻨﺎد اﻟﻤﻌﺮوف Setﺛﻢ وﺿﻌﻨﺎ
اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺳﻨﺴﻨﺪ ﻓﯿﻬﺎ و ﻫﻲ dاﻟﺘﻲ ﻋﺮّﻓﻨﺎﻫﺎ و ﻗﻠﻨﺎ ﺳﻨﺴﻨﺪ ﻓﯿﻬﺎ اﻟﻘﺎﻋﺪة اﻷﺻﻠﯿﺔ ﻟﻜﻲ ﻻ ﺗﺘﻐﯿﺮ
ﻗﯿﻤﻬﺎ أﺛﻨﺎء اﻟﻤﻌﺎﻟﺠﺔ اﻟﻤﺆﻗﺘﺔ ﺛﻢ ﻛﺘﺒﻨﺎ ﻛﻠﻤﺔ DBEngineو ﻫﻲ ﻋﺒﺎرة ﻋﻦ ﻧﻮع ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
اﻟﺘﻲ ﺳﺘﺴﺘﺨﺪﻣﻬﺎ و ﻫﺬا ﻫﻮ ﻣﺤﺮك ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻣﻦ ﻧﻮع ، Accessﺛﻢ ﻛﺘﺒﻨﺎ
)Workspaces(0و ﻫﺬا ﻧﻮع ﻣﺠﺎل اﻟﻌﻤﻞ ﻟﻦ ﻧﺘﻄﺮق ﻟﻪ اﻵن ،ﺑﻌﺪ ذﻟﻚ وﺿﻌﻨﺎ اﻷﻣﺮ اﻟﺬي
ﺳﯿﻘﻮم ﺑﻔﺘﺢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻟﻜﻲ ﺗﺴﺘﻄﯿﻊ اﻟﻮﺻﻮل إﻟﻰ ﻣﺤﺘﻮاﻫﺎ ، Opendatabaseﺑﻌﺪ ذﻟﻚ
وﺿﻌﻨﺎ ﻣﺴﺎر ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت و ﻟﻜﻲ ﺗﺘﺠﻨﺐ ﻣﺸﻜﻠﺔ ﺗﻐﯿﺮ اﻟﻤﺴﺎر ﻣﻦ ﺟﻬﺎز ﻵﺧﺮ ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ
App.pathأي ﻣﺴﺎر اﻟﻤﺠﻠﺪ اﻟﺬي ﯾﺤﺘﻮي اﻟﺒﺮﻧﺎﻣﺞ و ﻻﺳﺘﺨﺪام ﻫﺬه اﻟﻄﺮﯾﻘﺔ ﯾﺠﺐ أن ﺗﻜﻮن
ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﻧﻔﺲ ﻣﺠﻠﺪ اﻟﺒﺮﻧﺎﻣﺞ ،ﺛﻢ ﻛﺘﺒﻨﺎ اﺳﻢ اﻟﻘﺎﻋﺪة و اﻣﺘﺪادﻫﺎ
ﺑﺎﺧﺘﺼﺎر ﻫﺬه اﻟﻄﺮﯾﻘﺔ ﺛﺎﺑﺘﺔ ﻹﺳﻨﺎد أي ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻓﻘﺪ ﻏﯿﺮ اﺳﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
ﺑﻌﺪ ﻗﯿﺎﻣﻚ ﺑﺎﻟﺨﻄﻮات اﻟﺴﺎﺑﻘﺔ ﯾﺠﺐ أن ﺗﻨﻔﺬ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﻫﺬه اﻟﻤﺮﺣﻠﺔ ﻟﻜﻲ ﺗﺘﺄﻛﺪ اﻧﻚ ﺗﺴﯿﺮ ﻋﻠﻰ
اﻟﺨﻂ اﻟﺼﺤﯿﺢ و ﻗﺒﻞ ذﻟﻚ ﺗﺄﻛﺪ ﻣﻦ اﻧﻚ ﻗﻤﺖ ﺑﺠﻌﻞ اﻟﻤﻮدﯾﻮل ﻓﻲ ﺑﺪأ اﻟﺘﺸﻐﯿﻞ وذﻟﻚ ﺑﺎﻟﺬﻫﺎب إﻟﻰ
Project > Project1.proprties..ﺑﻌﺪ ذﻟﻚ ﺣﺪد sub mainﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﻤﻨﺴﺪﻟﺔ
startup objectﺑﻌﺪ ذﻟﻚ ﺷﻐﻞ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻰ F5ﯾﺠﺐ أن ﺗﺴﯿﺮ اﻷﻣﻮر ﻋﻠﻰ ﻣﺎ ﯾﺮام
و إن ﻟﻢ ﺗﻜﻦ ﻛﺬﻟﻚ ﺗﺄﻛﺪ ﻣﻦ اﻟﺨﻄﻮات اﻟﺘﺎﻟﯿﺔ
-١أﻧﻚ ﻗﻤﺖ ﺑﺤﻔﻆ اﻟﻤﺸﺮوع ﻓﻲ ﻧﻔﺲ اﻟﻤﺠﻠﺪ اﻟﺬي ﻓﯿﻪ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
-٢أن ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻟﯿﺴﺖ ﻗﯿﺪ اﻟﺘﺸﻐﯿﻞ
-٣اﻧﻚ ﺟﻌﻠﺖ اﻟﻤﻮدﯾﻮل ﻓﻲ ﺑﺪأ ﺗﺸﻐﯿﻞ اﻟﻤﺸﺮوع
-٤اﻧﻚ ﻛﺘﺒﺖ اﺳﻢ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺻﺤﯿﺤﺎ
ﻫﺬا اﻟﺠﺰء اﻟﺜﺎﻟﺚ ﻣﻦ اﻟﺪرس اﻟﺴﺎﺑﻖ ﻓﺒﻌﺪ أن ﺗﻌﻠﻤﻨﺎ ﻧﻌﺮف اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ ﺳﻨﻌﻤﻞ ﻋﻠﯿﻬﺎ و رﺑﻄﻨﺎ
ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﯾﺒﻘﻰ أﻣﺎﻣﻨﺎ رﺑﻂ اﻟﺠﺪول و إﻇﻬﺎر ﻣﺤﺘﻮﯾﺎت اﻟﻘﺎﻋﺪة ﻟﻠﻤﺴﺘﺨﺪم ،أﻣﺎ اﻟﺘﻨﻘﻞ ﺑﯿﻦ
اﻟﺴﺠﻼت و أواﻣﺮ اﻟﺤﻔﻆ و اﻟﺘﻌﺪﯾﻞ و اﻹﺿﺎﻓﺔ ﻓﺴﺘﻜﻮن ﻓﻲ اﻟﺠﺰء اﻟﺜﺎﻟﺚ ،اﻵن دﻋﻮﻧﺎ ﻧﺒﺪأ
اﻟﺪرس٧
أوﻻ ﺳﻨﻘﻮم ﺑﺮﺑﻂ اﻟﺠﺪول اﻟﺬي ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت و ﻧﺨﺰﻧﻪ ﻓﻲ اﻟﻤﺘﻐﯿﺮ اﻟﺬي أﻧﺸﺄﻧﺎه ﻓﻲ اﻟﺪرس
اﻟﺴﺎﺑﻖ ﺑﺎﺳﻢ tﻋﻠﻤﺎ أن اﻟﺠﺪول اﻟﺮﺋﯿﺴﻲ اﺳﻤﻪ tb1وﻟﻜﻲ ﻧﻘﻮم ﺑﺬﻟﻚ اﻛﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ ف
ﺣﺪث اﻟﺘﺤﻤﯿﻞ ﻟﻠﻔﻮرم load
دﻋﻨﺎ ﻧﺸﺮح اﻟﺨﻄﻮة اﻟﺴﺎﺑﻘﺔ ﺑﺎﻟﺘﻔﺼﯿﻞ ،أوﻻ وﺿﻌﻨﺎ رﺑﻂ اﻟﺠﺪول ﻓﻲ ﺣﺪث اﻟﺘﺤﻤﯿﻞ ﻟﻠﻔﻮرم رﺑﻤﺎ
ﺗﺴﺄل ﻋﻦ اﻟﺴﺒﺐ و اﻟﺠﻮاب إن ﻫﺬا ﻣﺎ ﯾﻘﻮم ﺑﻪ اﻟﻤﺤﺘﺮﻓﻮن ﻟﻜﻲ ﺗﻬﯿﺊ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﯿﺎﻧﺎت ﻋﻨﺪ
ﺗﺤﻤﯿﻞ اﻟﻔﻮرم إﻻ إذا ﻛﺎن ﻟﺪﯾﻚ ﺳﺒﺐ أﺧﺮ ﻟﺘﺨﺎﻟﻒ ﻫﺬه اﻟﻘﺎﻋﺪة
ﺑﻌﺪ ذﻟﻚ و ﺿﻌﻨﺎ ﺟﻤﻠﺔ اﻟﺮﺑﻂ ﻟﻠﺠﺪول و ﺑﺪأﻧﺎ ﺑﺄﻣﺮ اﻹﺳﻨﺎد اﻟﻤﻌﺮوف Setﺛﻢ اﺳﻢ اﻟﻘﯿﻤﺔ اﻟﺘﻲ
ﺳﻨﺴﻨﺪ ﻗﯿﻢ اﻟﺠﺪول ﻓﯿﻬﺎ و ﻫﻲ اﻟﺘﻲ ﻋﺮﻓﻨﺎﻫﺎ ﻓﯿﻤﺎ ﻗﺒﻞ ﺑﺎﺳﻢ tﺑﻌﺪ ذﻟﻚ ﻧﻜﺘﺐ اﺳﻢ اﻟﻘﺎﻋﺪة
اﻟﻤﺴﺘﻌﺎر اﻟﺬي أﺳﻨﺪﻧﺎ اﻟﻘﺎﻋﺪة اﻷﺻﻠﯿﺔ ﻓﯿﻪ و ﻫﻮ dﺛﻢ ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺬي ﺳﯿﻔﺘﺢ ﻟﻨﺎ اﻟﺠﺪول ﻟﻜﻲ
ﻧﺴﺘﻄﯿﻊ اﻟﻮﺻﻮل إﻟﻰ ﻣﺤﺘﻮاه وﻫﻮ Openrecordsetﺑﻌﺪ ذﻟﻚ ﻧﻜﺘﺐ اﺳﻢ اﻟﺠﺪول اﻟﺤﻘﯿﻘﻲ ﺑﯿﻦ
ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ و ﻧﻜﺘﺐ ﻧﻮع اﻟﺮﺑﻂ وﻫﻮ dbopentableاﺳﺘﺨﺪم ﻫﺬه اﻟﻄﺮﯾﻘﺔ ﻓﻘﻂ و ﻻ ﺗﺴﺄل
ﻟﻤﺎذا ﻷﻧﻬﺎ ﻣﻦ اﻷواﻣﺮ اﻟﺜﺎﺑﺘﺔ و ﻣﻦ أﻧﻮاع اﻟﺮﺑﻂ و ﺳﺘﺴﺘﻄﯿﻊ اﻟﺘﻔﺮﯾﻖ ﺑﯿﻦ أﻧﻮاع اﻟﺮﺑﻂ ﻓﻲ
اﻟﻤﺴﺘﻘﺒﻞ ﻣﻊ ﻛﺜﺮة اﻟﺘﻤﺎرﯾﻦ ﻓﻼ ﺗﺴﺘﻌﺠﻞ ،ﻫﻜﺬا ﺗﻜﻮن ﻗﺪ ﻗﻤﺖ ﺑﺮﺑﻂ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت و اﻟﺠﺪول
ﺑﻮاﺳﻄﺔ اﻟﻜﻮد ،،،،ﻣﺒﺮوك
و اﻵن ﺳﻨﺘﻌﺮف ﻋﻠﻰ ﻛﯿﻔﯿﺔ إﻇﻬﺎر اﻟﺒﯿﺎﻧﺎت ﻟﻠﻤﺴﺘﺨﺪم ،و ﻗﺒﻞ ذﻟﻚ ﻗﻢ ﺑﺘﺼﻤﯿﻢ واﺟﻬﺔ اﻟﻤﺴﺘﺨﺪم
ووﺿﻊ ﻣﺮﺑﻌﺎت اﻟﻨﺺ اﻟﻌﻨﺎوﯾﻦ ﻛﻤﺎ ﻓﻲ اﻟﺼﻮرة اﻟﺘﺎﻟﯿﺔ و ﻗﺪ وﺿﺤﺖ ﻋﻠﻰ اﻟﺼﻮرة اﻟﺘﺴﻤﯿﺎت اﻟﺘﻲ
ﺳﻨﻌﺘﻤﺪﻫﺎ:
اﻵن دﻋﻨﺎ ﻧﻠﻘﻲ ﻧﻈﺮة ﻋﻠﻰ أﺟﺮاء إﻇﻬﺎر اﻟﺒﯿﺎﻧﺎت ﺑﺪأﻧﺎ أوﻻ ﺑﺎﻟﺘﺄﻛﺪ إذا ﻛﺎن اﻟﺠﺪول ﯾﺤﺘﻮي ﻋﻠﻰ
ﺑﯿﺎﻧﺎت أم ﻻ ﻓﺈذا ﻛﺎن ﻻ ﯾﺤﺘﻮي ﻓﻨﺨﺮج ﻣﻦ اﻹﺟﺮاء ﻟﻜﻲ ﻻ ﯾﺤﺪث ﻣﺸﺎﻛﻞ أﺛﻨﺎء اﻟﻌﺮض
ﺑﻌﺪ ذﻟﻚ ﻧﻘﻮم ﺑﺈﻇﻬﺎر ﻗﯿﻤﺔ ﻣﺎ ﻓﻲ اﻟﺤﻘﻮل ﻓﻲ ﻣﺮﺑﻌﺎت اﻟﻨﺺ ،و ﻻﺣﻆ أﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ
ﻋﻼﻣﺔ اﻟﺘﻌﺠﺐ ! ﻟﻜﻲ ﺗﻔﺼﻞ ﺑﯿﻦ اﺳﻢ اﻟﺠﺪول اﻟﻤﺴﺘﻌﺎر و اﺳﻢ اﻟﺤﻘﻞ ،ﯾﺠﺐ أن ﺗﻔﺮق ﺑﯿﻦ اﺳﻢ
اﻟﺪول أو اﻟﻘﺎﻋﺪة اﻟﻤﺴﺘﻌﺎر و اﻷﺻﻠﻲ و ﻣﺘﻰ ﻧﺴﺘﺨﺪم ﻛﻞ ﻣﻨﻬﻤﺎ
ﻓﻲ ﻫﺬا اﻟﺠﺰء اﻟﺮاﺑﻊ و اﻷﺧﯿﺮ ﻣﻦ درس اﻟﻜﻮد ﺳﻮف ﻧﺘﻌﻠﻢ ﻛﯿﻔﯿﺔ اﻟﺘﻨﻘﻞ ﺑﯿﻦ اﻟﺴﺠﻼت و ﻛﯿﻔﯿﺔ
اﻟﺤﻔﻆ و اﻟﺘﻌﺪﯾﻞ و اﻹﺿﺎﻓﺔ و اﻟﺤﺬف ...1.....2..........3...................اﻧﻄﻠﻖ
اﻟﺪرس٨
اﻟﺴﺠﻞ اﻟﺘﺎﻟﻲ :وﻟﻜﻲ ﺗﻨﺘﻘﻞ ﻟﻠﺴﺠﻞ اﻟﺘﺎﻟﻲ ﺳﻮف ﺗﺤﺘﺎج ﻟﻜﺘﺎﺑﺔ اﻷﻣﺮ اﻟﺘﺎﻟﻲ ﻓﻲ اﻟﺰر اﻟﻤﻄﻠﻮب و ﻫﻮ
ﻓﻲ ﻣﺜﺎﻟﻨﺎ cmd6
ﻻﺣﻆ أﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ اﺳﻢ اﻟﺠﺪول اﻟﻤﺴﺘﻌﺎر ، tﺛﻢ ﺑﻌﺪ ذﻟﻚ اﺳﺘﺪﻋﯿﻨﺎ اﻹﺟﺮاء
showdataاﻟﺬي ﻋﻤﻠﻨﺎه ﻓﻲ اﻟﺠﺰء اﻟﺴﺎﺑﻖ ﻟﻜﻲ ﯾﻘﻮم ﺑﻌﺮض اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺴﺠﻞ اﻟﺘﺎﻟﻲ وﻫﺬه
اﻟﻄﺮﯾﻘﺔ ﺗﻨﻄﺒﻖ ﻋﻠﻰ ﺟﻤﯿﻊ أﻧﻮاع اﻟﺘﻨﻘﻞ اﻟﻘﺎدﻣﺔ
اﻟﺴﺠﻞ اﻟﺴﺎﺑﻖ:
وﻛﻞ ﻣﺎ ﺗﺤﺘﺎج ﻛﺘﺎﺑﺘﻪ ﻫﺬا اﻟﻜﻮد ﺑﻨﻔﺲ ﻃﺮﯾﻘﺔ اﻟﻜﻮد اﻟﺴﺎﺑﻖ ) ﻻ ﺗﻨﺴﻰ وﺿﻊ اﻟﻜﻮد ﻓﻲ اﻟﻤﻜﺎن
اﻟﻤﻨﺎﺳﺐ و ﻫﻮ ﻫﻨﺎ ( cmd7
اﻟﺴﺠﻞ اﻷﺧﯿﺮ:
ﻫﺬه ﻛﻞ أواﻣﺮ اﻟﺘﻨﻘﻞ اﻟﺘﻲ ﺗﺤﺘﺎﺟﻬﺎ ،ﻟﻜﻦ ﻟﻢ ﻧﻨﺘﻬﻲ ﺑﻌﺪ ﻓﺴﺘﻮاﺟﻬﻚ ﻣﺸﻜﻠﺔ ،ﻓﻤﺜﻼ ﻋﻨﺪﻣﺎ ﺗﺮﯾﺪ أن
ﺗﻨﺘﻘﻞ ﻟﻠﺴﺠﻞ اﻟﺘﺎﻟﻲ و أﻧﺖ ﻓﻲ اﻟﺴﺠﻞ اﻷﺧﯿﺮ ﻃﺒﻌﺎ ﻻ ﯾﻮﺟﺪ ﺳﺠﻞ ﺗﺎﻟﻲ ﻟﺬﻟﻚ ﺳﯿﺘﻮﻗﻒ اﻟﺒﺮﻧﺎﻣﺞ ،و
ﻧﻔﺲ اﻟﺸﻲء ﻋﻨﺪ اﻻﻧﺘﻘﺎل ﻟﻠﺴﺠﻞ اﻟﺴﺎﺑﻖ و أﻧﺖ ﻓﻲ اﻟﺴﺠﻞ اﻷول ﻓﻼ ﯾﻮﺟﺪ ﺳﺠﻞ ﺳﺎﺑﻖ ﻓﺴﯿﺘﻮﻗﻒ
اﻟﺒﺮﻧﺎﻣﺞ ،ﻟﺬﻟﻚ ﺳﻨﻘﻮم ﺑﺈﺿﺎﻓﺔ ﺟﻤﻠﺔ ﺷﺮﻃﯿﺔ ﻟﻠﺘﺄﻛﺪ إذا ﻛﺎن اﻟﺴﺠﻞ اﻷﺧﯿﺮ أو اﻷول ﺣﺴﺐ اﻟﺤﺎﻟﺔ
ﺛﻢ ﻧﻘﻮم ﺑﻮﺿﻊ أﻣﺮ Movefirstأو movelastﺣﯿﺚ إن ﻫﺬﯾﻦ اﻷﻣﺮﯾﻦ ﻻ ﯾﺘﺄﺛﺮان ﺳﻮاء ﻛﺎن
ﻫﻨﺎك ﺳﺠﻞ أو ﻻ و ﻃﺮﯾﻘﺔ اﺳﺘﺨﺪاﻣﻬﻢ ﻫﻜﺬا:
ﻣﻼﺣﻈﺔ :ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ EOFﻟﻤﻌﺮﻓﺔ آﺧﺮ ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول ،و ﻧﺴﺘﺨﺪم اﻟﺪاﻟﺔ BOF
ﻟﻤﻌﺮﻓﺔ أول ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول
و ﻛﺬﻟﻚ ﻓﻲ زر اﻻﻧﺘﻘﺎل ﻟﻠﺴﺎﺑﻖ ﻧﻀﻊ ﺷﺮط إذا ﻛﺎن ﻫﺬا أول ﺳﺠﻞ إذا اﻧﺘﻘﻞ ﻟﻠﺴﺠﻞ اﻷول
ﻟﺬﻟﻚ ﺳﻨﻀﯿﻒ اﻟﺠﻤﻠﺘﯿﻦ اﻟﺴﺎﺑﻘﺘﯿﻦ ﻟﻜﻮد اﻻﻧﺘﻘﺎل ﻟﻠﺘﺎﻟﻲ و اﻻﻧﺘﻘﺎل ﻟﻠﺴﺎﺑﻖ ﻓﺴﯿﺼﺒﺢ ﻛﻮد اﻻﻧﺘﻘﺎل
ﻟﻠﺘﺎﻟﻲ ﻫﻜﺬا:
ﻋﻤﻠﯿﺎت اﻟﺴﺠﻼت:
اﻷﻣﺮ اﻟﺘﺎﻟﻲ ﯾﻘﻮم ﺑﺈﺿﺎﻓﺔ ﺳﺠﻞ و ﻧﻀﯿﻒ ﻋﻠﯿﻪ أواﻣﺮ ﻟﺘﻤﺴﺢ ﻣﺎ ﻓﻲ ﻣﺮﺑﻌﺎت اﻟﻨﺺ ﻟﺘﻬﯿﺌﺘﻬﺎ
ﻟﻺﺿﺎﻓﺔ:
ﺣﻔﻆ ﺳﺠﻞ:
ﻟﺘﺤﻔﻆ ﺳﺠﻞ ﯾﺠﺐ ﻋﻠﯿﻚ أن ﺗﻘﻮم ﺑﻮﺿﻊ اﻟﻘﯿﻢ اﻟﺘﻲ ﻓﻲ ﻣﺮﺑﻌﺎت اﻟﻨﺺ ﻓﻲ اﻟﺤﻘﻮل اﻟﺘﻲ ﺗﻮازﯾﻬﺎ ﻓﻲ
اﻟﺠﺪول ،و ﻻﺣﻆ أﻧﻪ ﺳﻮف ﯾﻌﻄﯿﻚ رﺳﺎﻟﺔ ﺧﻄﺄ ﻋﻨﺪﻣﺎ ﺗﻘﻮم ﺑﺎﻟﺤﻔﻆ دون أن ﺗﻘﻮم ﺑﺎﺧﺘﯿﺎر ﺗﻌﺪﯾﻞ
ﺳﺠﻞ أو إﺿﺎﻓﺔ ﺳﺠﻞ ﻟﺬﻟﻚ ﯾﻔﺘﺮض ﺑﻚ أن ﺗﺠﻌﻞ زر اﻟﺤﻔﻆ ﻓﻲ ﺣﺎﻟﺔ اﻟﺘﻤﻜﯿﻦ ﻓﻘﻂ ﻋﻨﺪﻣﺎ ﯾﻀﯿﻒ
اﻟﻤﺴﺘﺨﺪم ﺳﺠﻼ أو ﯾﺨﺘﺎر ﺗﻌﺪﯾﻞ ﺳﺠﻞ ،ﻛﺬﻟﻚ ﯾﺠﺐ ﻋﻠﯿﻚ اﺳﺘﺨﺪام اﻟﺪاﻟﺔ Valﻋﻨﺪ ﺣﻔﻆ اﻟﺤﻘﻮل
اﻟﺮﻗﻤﯿﺔ ﻟﺘﺠﻨﺐ اﻟﻤﺸﺎﻛﻞ ﻋﻨﺪﻣﺎ ﯾﺘﺮﻛﻪ اﻟﻤﺴﺘﺨﺪم ﻓﺎرﻏﺎ ،و أﯾﻀﺎ ﯾﺠﺐ ﻋﻠﯿﻚ أن ﺗﻘﻮم
ﺑﺘﺤﺪﯾﺚ اﻟﺠﺪول ﺑﻌﺪ ﻋﻤﻠﯿﺔ اﻟﺤﻔﻆ ﻟﺘﻜﻤﻞ اﻟﻌﻤﻠﯿﺔ ﺑﺴﻼم و ﻫﺬا ﻫﻮ اﻟﻜﻮد اﻟﻤﻄﻠﻮب:
ﺣﺬف ﺳﺠﻞ:
ﻋﻤﻠﯿﺔ ﺣﺬف اﻟﺴﺠﻞ ﺳﻬﻠﺔ ،و ﻟﻜﻦ ﻣﺎذا ﺑﻌﺪ أن ﺗﺤﺬف اﻟﺴﺠﻞ ؟ ﺑﺎﻟﻄﺒﻊ ﯾﺠﺐ أن ﺗﻌﺮض اﻟﺴﺠﻞ
اﻟﺘﺎﻟﻲ ،و أﯾﻀﺎ ﯾﺠﺐ أن ﺗﺮاﻋﻲ اﻟﻤﺸﺎﻛﻞ اﻟﺘﻲ ﺗﻮاﺟﻬﻚ ﻋﻨﺪ اﻧﺘﻘﺎﻟﻚ ﻟﻠﺴﺠﻞ اﻟﺘﺎﻟﻲ ﻓﻘﺪ ﻻ ﯾﻜﻮن
ﻫﻨﺎك ﺳﺠﻞ ﺗﺎﻟﻲ وﻗﺪ ﺷﺮﺣﻨﺎ ﻛﯿﻒ ﺗﺘﻔﺎدى ﻫﺬه اﻟﻤﺸﻜﻠﺔ ﻓﻲ ﻫﺬا اﻟﺪرس ،و ﻫﺬا ﻫﻮ اﻟﻜﻮد اﻟﻼزم:
ﻣﻌﺮﻓﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ أواﻣﺮ اﻟﺘﻨﻘﻞ ﺑﯿﻦ اﻟﺴﺠﻼت و ﺗﻔﺎدي اﻟﻤﺸﺎﻛﻞ اﻟﺘﻲ ﺗﻮاﺟﻬﻬﺎ
ﻣﻌﺮﻓﺔ ﻋﻤﻠﯿﺎت اﻟﺴﺠﻼت و ﻋﻤﻠﻬﺎ و ﺗﻔﺎدي اﻟﻤﺸﺎﻛﻞ اﻟﺘﻲ ﻗﺪ ﺗﻮاﺟﻬﻚ ﻋﻨﺪﻣﺎ ﺗﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ
اﻟﺸﻲء اﻟﺬي ﻟﻦ ﺗﺴﺘﻄﯿﻊ ﺗﺠﺎﻫﻠﻪ ﻋﻨﺪ ﺗﻌﻠﻢ ﻗﻮاﻋﺪ اﻟﺒﯿﺎﻧﺎت ﻫﻮ ﻟﻐﺔ اﻻﺳﺘﻔﺴﺎر أو اﻻﺳﺘﻌﻼم و اﻟﺘﻲ
ﯾﻌﺒﺮ ﻋﻨﻬﺎ ﺑـ ، SQLﻟﻜﻦ ﻣﺎ ﻫﻲ ﻓﺎﺋﺪة ﻫﺬه اﻟﻠﻐﺔ؟ ﻟﻨﻔﺮض أن ﻟﺪﯾﻚ ﻣﻮﻇﻔﯿﻦ ﺑﺎﻟﻤﺌﺎت و ﺗﺮﯾﺪ أن
ﺗﺤﺪد ﺟﻨﺴﯿﺔ ﻣﻌﯿﻨﻪ ﻣﻨﻬﻢ و ﺗﺤﺼﺮﻫﻢ ﻟﻦ ﺗﺴﺘﻄﯿﻊ ﻓﻌﻞ ذﻟﻚ إﻻ ﺑﻠﻐﺔ اﻻﺳﺘﻌﻼم ﺣﯿﺚ ﯾﻘﻮم ﺑﺠﻤﻊ
اﻟﺤﻘﻮل اﻟﺘﻲ ﺗﺴﺎوي اﻟﺸﺮط اﻟﺬي ﺷﺮﻃﺘﻪ و ﻫﻮ ﺟﻨﺴﯿﺘﻬﻢ ،ﺳﻨﺄﺧﺬ ﺷﺮﺣﺎ ﻣﻔﺼﻼ ﻓﻲ ﻫﺬا اﻟﺪرس
ﻋﻦ اﻷﺳﺎﺳﯿﺎت و ﺗﻄﺒﯿﻘﺎت ﻋﻠﯿﻬﺎ.
اﻟﺪرس٩
أوﻻ ﻣﺎ ﻓﺎﺋﺪة ﻫﺬه اﻟﻠﻐﺔ ؟ ﻛﻤﺎ ذﻛﺮﻧﺎ ﻓﻲ اﻟﻤﻘﺪﻣﺔ إن ﻓﺎﺋﺪﺗﻬﺎ ﻓﻲ ﺣﺼﺮ اﻟﻘﯿﻢ اﻟﺘﻲ ﺗﻄﺎﺑﻖ اﻟﻘﯿﻢ
اﻟﻤﻌﻄﺎة ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪم و ﺗﺘﻤﯿﺰ ﺑﺎﻟﺴﻬﻮﻟﺔ و اﻟﺪﻗﺔ و اﻟﺴﺮﻋﺔ أﯾﻀﺎ ﻛﻤﺎ ﯾﻤﻜﻨﻚ اﻟﺘﺤﻜﻢ ﺑﻬﺎ
ﺑﺼﻮره ﻛﺒﯿﺮة وﯾﻤﻜﻨﻚ إدﺧﺎل أﻛﺜﺮ ﻣﻦ ﺷﺮط ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻮاﺣﺪ ،ﻟﻨﻔﺮض أن ﻟﺪﯾﻨﺎ ﺟﺪول اﺳﻤﻪ
Tbوﻓﯿﻪ ﺣﻘﻠﯿﻦ ﺑﺎﺳﻢ nameو numberو ﺗﺤﺘﻮي ﻫﺬه اﻟﺤﻘﻮل ﻋﻠﻰ ﻗﯿﻢ ﻣﺪﺧﻠﺔ ﻛﻤﺎ ﻓﻲ
اﻟﺠﺪول اﻟﺘﺎﻟﻲ :
name number
ﺳﺎﻣﻲ 444
ﺳﺎﻣﻲ 534
ﺻﺎﻟﺢ 444
و ﻧﺮﯾﺪ أن ﻧﺴﺘﺨﺮج اﻷﺳﻤﺎء اﻟﺘﻲ أرﻗﺎﻣﻬﺎ ٤٤٤ﻓﺴﻨﺤﺘﺎج إﻟﻰ ﺟﻤﻠﺔ اﺳﺘﻌﻼم ﺑﺴﯿﻄﺔ ﻋﻠﻰ اﻟﺸﻜﻞ
اﻟﺘﺎﻟﻲ :
إذا أردت أن ﺗﺴﺘﻌﻠﻢ ﻋﻦ ﺟﻤﯿﻊ اﻟﺤﻘﻮل ﻓﻲ ﺟﺪول ﺑﺪون ﺷﺮط اﺳﺘﺨﺪم اﻟﻨﺠﻤﺔ ﻟﺘﻌﺒﺮ ﻋﻦ ﺟﻤﯿﻊ
اﻟﺤﻘﻮل و ﻻ ﺗﻀﻊ ﺷﺮﻃﺎ ﻣﺜﻞ ﻫﺬا اﻻﺳﺘﻌﻼم:
إذا أردت أن ﺗﺴﺘﻔﺴﺮ ﻋﻦ ﻗﯿﻢ ﺣﻘﻠﯿﻦ ﺑﺪون ﺷﺮط اﻛﺘﺐ اﺳﻢ اﻟﺤﻘﻠﯿﻦ ﺑﯿﻨﻬﻤﺎ ﻓﺎﺻﻠﺔ و ﻻ ﺗﻀﻊ ﺷﺮﻃﺎ
ﻛﺎﻟﺘﺎﻟﻲ:
ﯾﻤﻜﻨﻚ اﺳﺘﺨﺪام ﺻﯿﻎ اﻟﻤﻘﺎرﻧﺔ > أو < أو =< أو => أو >< ﺑﺪﻻ ﻣﻦ=
ﻋﻨﺪﻣﺎ ﺗﺮﯾﺪ اﻻﺳﺘﻌﻼم و اﺳﺘﺨﺪام أﻛﺜﺮ ﻣﻦ ﺷﺮط ﺿﻊ ﺑﯿﻦ اﻟﺸﺮﻃﯿﻦ ﻋﺒﺎرة Andأو ORﺣﺴﺐ
ﺣﺎﺟﺘﻚ ﻛﺎﻟﺘﺎﻟﻲ:
" SQL = "select name from Tb where number = 444 or number = 555
ﻓﻲ ﻫﺬا اﻟﺪرس ﺳﻮف ﻧﺘﻌﻠﻢ اﺳﺘﺨﺪام ﻟﻐﺔ اﻻﺳﺘﻔﺴﺎر ﻓﻲ ﺗﻄﺒﯿﻖ ﻓﯿﺠﻮال ﺑﯿﺴﻚ ،ﻣﻦ ﺣﯿﺚ ﻛﯿﻔﯿﺔ
اﻻﺳﺘﻔﺴﺎر ﻋﻦ ﻗﯿﻤﺔ ﻣﺪﺧﻠﺔ ﻣﻦ ﻗﺒﻞ اﻟﻤﺴﺘﺨﺪم و ﻛﯿﻔﯿﺔ وﺿﻊ ﻧﺘﺎﺋﺞ اﻟﺒﺤﺚ ﻓﻲ listboxو
combo box
اﻟﺪرس١٠
ﻛﯿﻒ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﺟﻤﻠﺔ SQLﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ؟ ﻫﺬا ﻫﻮ اﻟﺴﺆال اﻟﺬي ﺳﻮف ﻧﻘﻮم ﺑﺎﻹﺟﺎﺑﺔ ﻋﻠﯿﻪ اﻵن
ﯾﺠﺐ ﻋﻠﯿﻚ أن ﺗﻌﺮف اﻟﻔﻜﺮة اﻟﺘﻲ ﺳﻨﻘﻮم ﺑﺘﻨﻔﯿﺬﻫﺎ ،أول ﺷﻲء ﺳﻮف ﻧﻘﻮم ﺑﻌﻤﻠﯿﺔ اﻻﺳﺘﻌﻼم
و ذﻟﻚ ﺑﻜﺘﺎﺑﺔ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻓﻲ اﻟﺪرس اﻟﺴﺎﺑﻖ ﻓﻲ اﻟﻤﻜﺎن اﻟﺬي ﺗﺮﯾﺪه و ﻏﺎﻟﺒﺎ ﻣﺎ
ﯾﻜﻮن ﻓﻲ زر أو ﻋﻨﺪ ﺣﺪث اﻟﺘﺤﻤﯿﻞ ،ﺑﻌﺪ ذﻟﻚ ﺳﻨﺤﺼﻞ ﻋﻠﻰ ﻧﺘﺎﺋﺞ اﻻﺳﺘﻌﻼم و ﻟﻜﻲ ﻧﻘﻮم ﺑﻘﺮاءﺗﻬﺎ
و إﻇﻬﺎرﻫﺎ ﯾﺠﺐ أوﻻ أن ﻧﺨﺰﻧﻬﺎ ﻓﻲ ﺟﺪول ،و ﻫﻨﺎ ﻓﺎﺋﺪة اﻟﺠﺪول اﻟﻤﺴﺘﻌﺎر ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻓﻲ اﻟﺪروس
اﻷوﻟﻰ ﺣﯿﺚ ﺳﻨﻘﻮم ﺑﺘﺨﺰﯾﻦ اﻟﻨﺎﺗﺞ ﻓﯿﻪ ،ﺑﻌﺪ ذﻟﻚ ﺳﻨﻘﻮم ﺑﻌﺮض اﻟﻨﺘﺎﺋﺞ ﻣﻦ اﻟﺠﺪول ،ﺳﻨﻔﺮض
أن ﻟﺪﯾﻨﺎ اﻟﺠﺪول اﻟﺘﺎﻟﻲ:
ﻫﻜﺬا ﻧﻜﻮن ﻗﺪ ﻗﻤﻨﺎ ﺑﺎﻻﺳﺘﻌﻼم ﺑﻌﺪ ذﻟﻚ ﺗﺄﺗﻲ اﻟﺨﻄﻮة اﻟﺘﺎﻟﯿﺔ و ﻫﻲ ﺗﺨﺰﯾﻦ اﻟﻨﺘﺎﺋﺞ ﻓﻲ اﻟﺠﺪول
اﻟﻤﺴﺘﻌﺎر و اﻟﺬي ﻧﻘﻮم ﺑﺘﻌﺮﯾﻔﻪ ) ﻟﻤﺰﯾﺪ ﻣﻦ اﻟﺘﻮﺿﯿﺢ راﺟﻊ اﻟﺪروس اﻟﺴﺎﺑﻘﺔ( ﻋﺎدة ﻓﻲ اﻟﻤﻮدﯾﻮل
ﻛﻤﺎ ﻗﻤﻨﺎ ﺑﻪ ﻓﻲ اﻟﺪروس اﻟﺴﺎﺑﻘﺔ و ﻟﻨﻔﺮض أن اﺳﻤﻪ Tو أن اﺳﻢ اﻟﻤﺘﻐﯿﺮ اﻟﺬي ﻗﻤﻨﺎ ﺑﺘﺨﺰﯾﻦ
ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻓﯿﻪ Dو اﻟﺘﻲ ﻛﻨﺎ ﻧﻄﻠﻖ ﻋﻠﯿﻬﺎ اﻟﻘﺎﻋﺪة اﻟﻤﺴﺘﻌﺎرة ﺳﻨﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ ﻟﻜﻲ ﻧﺨﺰن
ﻧﺘﺎﺋﺞ اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﺠﺪول:
ﻻ ﺣﻆ أﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺎﺳﺘﺨﺪام اﻷﺳﻤﺎء اﻟﻤﺴﺘﻌﺎرة ﻟﻠﺠﺪول و ﻗﺎﻋﺪﯾﺔ اﻟﺒﯿﺎﻧﺎت و ﻫﻲ اﻟﻤﺘﻐﯿﺮات اﻟﺘﻲ
أﻋﻠﻨﺎ ﻋﻨﻬﺎ ﻓﻲ اﻟﺒﺪاﯾﺔ ) راﺟﻊ دروس ﺳﺎﺑﻘﺔ ﻟﻤﺰﯾﺪ ﻣﻦ اﻟﺘﻔﺎﺻﯿﻞ( ،ﻟﻘﺪ ﻗﻤﻨﺎ ﻓﻲ اﻷﻣﺮ اﻟﺴﺎﺑﻖ
ﺑﺘﺨﺰﯾﻦ ﻗﯿﻢ اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﺠﺪول ﺣﯿﺚ ﻛﺘﺒﻨﺎ SQLو ﻫﻲ ﻗﯿﻤﺔ ﻣﺘﻐﯿﺮ اﻻﺳﺘﻌﻼم اﻟﺬي ﺗﻮﺟﺪ ﻓﯿﻪ
اﻟﻘﯿﻢ ،ﺑﻌﺪ ذﻟﻚ ﻗﻤﻨﺎ ﺑﻮﺿﻊ ﻧﻮع اﻻﺗﺼﺎل أو ﺑﺎﻷﺻﺢ ﻧﻮع اﻟﺮﺑﻂ اﻟﻤﺮاد إن ﺻﺢ اﻟﺘﻌﺒﯿﺮ ﻋﻠﻰ اﻟﻌﻤﻮم
و ﻛﻤﺎ ﻗﻠﻨﺎ أن ﻫﻨﺎك أﺷﯿﺎء ﻻ ﯾﺘﻄﻠﺐ ﻣﻨﻚ ﺳﻮى ﻣﻌﺮﻓﺘﻬﺎ ﻣﺮة واﺣﺪة ﻓﻘﻂ و ﺳﺘﻘﻮم ﺑﺘﺮﻛﯿﺒﻬﺎ ﺣﺴﺐ
اﺳﺘﺨﺪاﻣﻚ
و اﻵن ﺑﻌﺪ أن ﻗﻤﻨﺎ ﺑﺘﺨﺰﯾﻦ اﻟﻘﯿﻢ ﻓﻲ اﻟﺠﺪول ﻧﺮﯾﺪ أن ﻧﻈﻬﺮ اﻟﺒﯿﺎﻧﺎت و ﯾﻤﻜﻨﻚ إﻇﻬﺎرﻫﺎ ﻓﻲ ﻋﺪة
إﺷﻜﺎل ﻛﻤﺎ ﺗﺮﯾﺪ ﻓﯿﻤﻜﻨﻚ و ﺿﻌﻬﺎ ﻓﻲ ﻣﺮﺑﻌﺎت ﻧﺺ أو ﻗﻮاﺋﻢ ﺳﻮاء Listأو COMBOوﻟﻜﻞ
ﻃﺮﯾﻘﺔ ﺗﺨﺘﻠﻒ ﻧﻮﻋﺎ ﻣﺎ ﻋﻦ اﻷﺧﺮى
ﻟﻜﻲ ﺗﻈﻬﺮ اﻟﻨﺘﺎﺋﺞ ﻓﻲ ﻣﺮﺑﻊ اﻟﻨﺺ ﻓﻠﻦ ﺗﺤﺘﺎج إﻻ ﻹﺟﺮاء اﻹﻇﻬﺎر ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻓﻲ اﻟﺴﺎﺑﻖ و ﺗﻘﻮم
ﺑﻜﺘﺎﺑﺘﻪ ﺑﻌﺪ أﻣﺮ ﺗﺨﺰﯾﻦ ﻧﺘﺎﺋﺞ اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﺠﺪول
ﻟﺘﻀﻊ اﻟﻨﺘﺎﺋﺞ ﻓﻲ ﻗﺎﺋﻤﺔ ListBox :ﻟﻦ ﺗﺤﺘﺎج ﻟﻜﺜﯿﺮ ﻣﻦ اﻟﺨﻄﻮات ﻓﺎﻷﻣﺮ رﺑﻤﺎ أﺳﻬﻞ ﻣﻤﺎ ﺗﺘﺼﻮر ،
ﻓﻘﻂ ﺗﺤﺘﺎج ﻟﻬﺬا اﻟﻜﻮد:
For i = 1 To n
List1.AddItem TB!name
TB.MoveNext
Next i
ﻗﻤﻨﺎ ﺑﻌﻤﻞ ﺗﻜﺮار ﺑﻌﺪد اﻟﺤﻘﻮل ﻟﻜﻲ ﯾﺘﻢ ﺗﻌﺒﺌﺔ ﺟﻤﯿﻊ اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺠﺪول و ﻟﻘﺪ ﻋﺮﻓﻨﺎ ﻛﯿﻔﯿﺔ ﻣﻌﺮﻓﺔ
ﻋﺪد اﻟﺤﻘﻮل ﻓﻲ دروس اﻟﺮﺑﻂ ﺑﺎﻟﻜﻮد اﻟﺴﺎﺑﻘﺔ
: ComboBox
ﻻ ﺗﺨﺘﻠﻒ ﻃﺮﯾﻘﺔ ﺗﻌﺒﺌﺔ ﻫﺬه اﻟﻘﺎﺋﻤﺔ ﻋﻦ اﻟﻄﺮﯾﻘﺔ اﻟﺴﺎﺑﻘﺔ أﺑﺪا ﻗﻢ ﺑﻨﻔﺲ اﻟﺨﻄﻮات
ﻟﻦ ﺗﺴﺘﻔﯿﺪ ﺣﻘﯿﻘﯿﺎ ﻣﻦ اﻟﺒﺮاﻣﺞ اﻟﺘﻲ ﺗﻌﻤﻠﻬﺎ إذا ﻟﻢ ﺗﻌﺮف ﻃﺮﯾﻘﺔ اﺳﺘﻘﺒﺎل اﻟﻘﯿﻢ ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﺛﻢ ﻋﻤﻞ
اﻻﺳﺘﻌﻼم ﻋﻠﯿﻬﺎ ﻷﻧﻪ ﻣﻦ ﻏﯿﺮ اﻟﻤﻨﻄﻘﻲ أن ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم ﺑﺎﻟﺮﺟﻮع إﻟﯿﻚ ﻋﻨﺪ ﻛﻞ ﻋﻤﻠﯿﺔ اﺳﺘﻌﻼم
،و ﻃﺮﯾﻘﺔ اﻻﺳﺘﻘﺒﺎل ﻫﻨﺎ ﻟﻬﺎ ﻃﺮﯾﻘﺔ ﺧﺎﺻﺔ ﻧﻮﻋﺎ ﻣﺎ ﺳﻨﻌﺮﻓﻬﺎ ﺑﻌﺪ ﻗﻠﯿﻞ ،ﻏﺎﻟﺒﺎ ﻣﺎ ﺗﻘﻮم ﺑﺎﺳﺘﻘﺒﺎل
اﻟﻘﯿﻢ ﻣﻦ اﻟﻤﺴﺘﺨﺪم ﻣﻦ ﻣﺮﺑﻊ ﻧﺺ Text Boxو اﻟﻤﺸﻜﻠﺔ اﻟﺘﻲ ﺗﻮاﺟﻬﻨﺎ ﺑﯿﻦ اﻟﻤﺪﺧﻼت اﻟﻨﺼﯿﺔ
و اﻟﺮﻗﻤﯿﺔ و ﯾﻌﺘﻤﺪ ذﻟﻚ ﻋﻠﻰ ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﻟﻠﺤﻘﻞ اﻟﻤﻌﻨﻲ دﻋﻮﻧﺎ ﻧﺮى أﻣﺜﻠﺔ ﻋﻠﻰ ذﻟﻚ:
اﻓﺮض أﻧﻚ ﻗﻤﺖ ﺑﻌﻤﻞ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﻓﯿﻬﺎ ﺣﻘﻠﯿﻦ اﻻﺳﻢ nameو ﺣﺪدت ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﻟﻬﺬا اﻟﺤﻘﻞ
ﺑﺄﻧﻬﺎ ﻧﺼﯿﺔ و اﻟﺤﻘﻞ اﻵﺧﺮ اﻟﺮﻗﻢ numو ﺣﺪدت اﻟﺒﯿﺎﻧﺎت ﻟﻪ ﺑﺄﻧﻬﺎ رﻗﻤﯿﺔ ،و ﻗﻤﺖ ﺑﺮﺑﻂ اﻟﻘﺎﻋﺪ ﻣﻊ
اﻟﺒﺮﻧﺎﻣﺞ ﺑﻄﺮﯾﻘﺘﻨﺎ اﻟﺘﻲ ﺗﻌﻠﻤﻨﺎﻫﺎ و اﻵن ﻧﺮﯾﺪ أن ﻧﺴﺘﻌﻠﻢ ﻋﻦ اﻟﺮﻗﻢ ﻟﻠﺸﺨﺺ اﻟﺬي ﯾﺤﺪده اﻟﻤﺴﺘﺨﺪم
ﺳﻨﻘﻮم ﻓﻲ ﻫﺬه اﻟﺤﺎﻟﺔ ﺑﺈﻧﺸﺎء ﻣﺮﺑﻊ ﻧﺺ ﻟﻜﻲ ﯾﺪﺧﻞ اﻟﻤﺴﺘﺨﺪم اﻻﺳﻢ اﻟﺬي ﯾﺮﯾﺪه ﺛﻢ ﻧﻨﺸﺄ زر ﯾﻘﻮم
اﻟﻤﺴﺘﺨﺪم ﺑﺎﻟﻀﻐﻂ ﻋﻠﯿﻪ ﻟﺘﺘﻢ ﻋﻤﻠﯿﺔ اﻻﺳﺘﻌﻼم ،و ﺳﺘﻜﻮن ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ﻋﺎدﯾﺔ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ و ﺑﺪﻻ
ﻣﻦ أن ﻧﻀﻊ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ﺳﻨﺴﺘﻌﻠﻢ ﻋﻨﻬﺎ ﺳﻨﻀﻊ اﻟﻘﯿﻤﺔ اﻟﺘﻲ ادﺧﻠﻬﺎ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ﻣﺮﺑﻊ اﻟﻨﺺ ﻣﻦ
اﻟﻤﺘﻮﻗﻊ أن ﯾﻜﻮن اﻟﻜﻮد اﻟﻤﻄﻠﻮب ﻟﻼﺳﺘﻌﻼم ﻓﻲ ﻫﺬه اﻟﺤﺎﻟﺔ اﻟﺘﺎﻟﻲ:
ﻫﺬه ﻫﻲ اﻟﺠﻤﻠﺔ اﻟﻤﺘﻮﻗﻌﺔ ﻟﻜﻨﻬﺎ ﺧﺎﻃﺌﺔ ،ﺑﻬﺬه اﻟﻄﺮﯾﻘﺔ ﯾﻜﻮن اﻻﺳﺘﻌﻼم ﻋﻦ ﻋﺪد
ﻻﻧﻬﺎﺋﻲ ﻣﻦ اﻟﺨﺎﻧﺎت و ﻫﺬي إن ﺻﺢ اﻟﺘﻌﺒﯿﺮ ﻋﯿﺐ ﻓﻲ ﻣﺮﺑﻊ اﻟﻨﺺ و ﻟﻜﻲ ﻧﺘﻼﻓﻰ ﻫﺬا اﻟﺨﻄﺄ ﻧﻘﻮم
ﺑﻤﺎ ﯾﺴﻤﻰ ﺑﺎﻟﺤﺼﺮ ﻋﻠﻰ أﺳﺎس ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﻓﻲ nameﻓﻲ ﺣﺎﻟﺘﻨﺎ ﻫﺬه ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﺣﺮﻓﯿﺔ ﻟﺬا
ﺗﻜﻮن ﻃﺮﯾﻘﺔ اﻟﺤﺼﺮ ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
اﻓﺮض أن اﻟﻤﻄﻠﻮب اﻵن ﻫﻮ اﻟﻌﻜﺲ ،ﺑﺤﯿﺚ ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم ﺑﺈدﺧﺎل اﻟﺮﻗﻢ و ﯾﻘﻮم اﻟﺒﺮﻧﺎﻣﺞ
ﺑﺎﻻﺳﺘﻌﻼم ﻋﻦ اﻷﺳﻤﺎء اﻟﺘﻲ ﺗﺤﻤﻞ ﻫﺬا اﻟﺮﻗﻢ ﺳﯿﻜﻮن اﻟﻜﻮد ﻧﻔﺲ اﻟﺴﺎﺑﻖ ﻣﻊ ﺗﻐﯿﯿﺮ اﺳﻢ اﻟﺤﻘﻞ
ﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل و أﯾﻀﺎ ﻋﺪم وﺿﻊ ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ اﻟﻤﻔﺮدة ﻛﺎﻟﺘﺎﻟﻲ:
" '" & SQL = "select num from tb where name = '" & text1.text
اﻓﺮض أن اﻟﻤﻄﻠﻮب اﻵن ﻫﻮ اﻟﻌﻜﺲ ،ﺑﺤﯿﺚ ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم ﺑﺈدﺧﺎل اﻻﺳﻢ و ﯾﻘﻮم اﻟﺒﺮﻧﺎﻣﺞ
ﺑﺎﻻﺳﺘﻌﻼم ﻋﻦ اﻟﺮﻗﻢ اﻟﺘﻲ ﺗﺤﻤﻞ ﻫﺬا اﻻﺳﻢ ﺳﯿﻜﻮن اﻟﻜﻮد ﻧﻔﺲ اﻟﺴﺎﺑﻖ ﻣﻊ ﺗﻐﯿﯿﺮ اﺳﻢ اﻟﺤﻘﻞ
ﺑﻄﺒﯿﻌﺔ اﻟﺤﺎل و أﯾﻀﺎ ﻋﺪم وﺿﻊ ﻋﻼﻣﺔ اﻟﺘﻨﺼﯿﺺ اﻟﻤﻔﺮدة ﻛﺎﻟﺘﺎﻟﻲ:
" " & SQL = "select name from tb where num = " & text1.text
ﻫﺬا ﻛﻞ ﺷﻲء ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺪرس اﻟﺜﺎﻧﻲ ﻣﻦ ﻟﻐﺔ اﻻﺳﺘﻔﺴﺎر ﺳﯿﻮﺿﺢ اﻟﺠﺪول اﻟﺘﺎﻟﻲ ﺑﻌﺾ اﻟﻨﻘﺎط
اﻟﻤﻬﻤﺔ ﻓﻲ ﻫﺬا اﻟﺪرس ﺑﺎﻟﻨﺴﺒﺔ ﻻﺳﺘﻘﺒﺎل اﻟﻤﺪﺧﻼت ﻣﻦ اﻟﻤﺴﺘﺨﺪم ،و ﻓﻲ اﻟﺪرس اﻟﺜﺎﻟﺚ ﻟﻠﻐﺔ
اﻻﺳﺘﻔﺴﺎر ﺳﻨﺘﻄﺮق ﻟﻤﻮاﺿﯿﻊ ﻣﺘﻘﺪﻣﺔ ﻣﺜﻞ اﻻﺳﺘﻔﺴﺎر ﻣﻦ ﺟﺪوﻟﯿﻦ
ﻋﺪدﯾﺔ و ﯾﺤﺪد ﻧﺴﺘﺨﺪم ﻫﺬه اﻟﻄﺮﯾﻘﺔ ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﺑﯿﺎﻧﺎت اﻟﺸﺮط رﻗﻤﯿﺔ أو
" & " & text1.text
ذﻟﻚ ﻣﻦ ﯾﻨﺸﺄ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت
ﻧﻮع اﻟﺒﯿﺎﻧﺎت ﻧﺴﺘﺨﺪم ﻫﺬه اﻟﻄﺮﯾﻘﺔ ﻋﻨﺪﻣﺎ ﺗﻜﻮن ﺑﯿﺎﻧﺎت ﺣﻘﻞ اﻟﺸﺮط ﻣﻦ
'" & '" & text1.text
اﻟﺤﺮﻓﯿﺔ
ﺗﻌﻠﻤﻨﺎ ﻓﻲ اﻟﺪرس اﻟﺴﺎﺑﻖ اﺳﺘﺨﺪام اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﺘﻄﺒﯿﻖ و ﻫﺬه أﻫﻢ ﻧﻘﻄﺔ ﻓﻲ ﻟﻐﺔ اﻻﺳﺘﻌﻼم،
واﻵن ﺳﻨﺘﻌﻠﻢ ﺗﻄﺒﯿﻖ ﻣﺘﻘﺪم ﻓﻲ ﻟﻐﺔ اﻻﺳﺘﻌﻼم و ﻫﻮ اﻻﺳﺘﻌﻼم ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول ،ﻋﻨﺪﻣﺎ ﻧﻘﻮل
اﻻﺳﺘﻌﻼم ﻣﻦ أﻛﺜﺮ ﻣﻦ ﺟﺪول ﻧﻘﺼﺪ ﻣﺜﻼ أن ﯾﻄﻠﺐ ﻣﻨﺎ اﻻﺳﺘﻌﻼم ﻋﻦ اﻷﺷﺨﺎص اﻟﺬﯾﻦ
ﯾﻌﻤﻠﻮن ﺿﻤﻦ ﻗﺴﻢ اﻟﻤﺤﺎﺳﺒﺔ ،اﻟﺸﺮط ﻫﻨﺎ ﻫﻮ اﻟﻌﻤﻞ ﻓﻲ ﻗﺴﻢ اﻟﻤﺤﺎﺳﺒﺔ ﻟﻜﻦ اﻟﺸﺮط ﻏﯿﺮ ﻣﻮﺟﻮد
ﻓﻲ اﻟﺠﺪول ؟ إذا ﻛﯿﻒ ﺳﻨﻘﻮم ﺑﺎﻻﺳﺘﻌﻼم ؟ ﺳﻨﻘﻮم ﺑﺎﻻﺳﺘﻌﻼم ﻋﻦ اﻟﺸﺮط ﻣﻦ ﺟﺪول آﺧﺮ ﺛﻢ ﻧﺮﺟﻊ
اﻟﻨﺘﯿﺠﺔ و ﯾﺴﺘﻌﻠﻢ ﻓﻲ اﻻﺳﺘﻌﻼم اﻷﺳﺎﺳﻲ ﻋﻠﯿﻬﺎ و ﺑﺬﻟﻚ ﯾﻜﻮن ﻟﺪﯾﻨﺎ اﺳﺘﻌﻼﻣﯿﻦ ،و ﻟﻜﻦ ﯾﺠﺐ أن
ﯾﻜﻮن ﻫﻨﺎك ﺣﻘﻞ ﻣﺸﺘﺮك ﺑﯿﻦ اﻟﺠﺪوﻟﯿﻦ ،ﺳﯿﺘﻀﺢ ﻛﻞ ذﻟﻚ ﻓﻲ اﻟﺴﻄﻮر اﻟﺘﺎﻟﯿﺔ
اﻟﺪرس١١
tb1 tb2
ﻧﺮﯾﺪ اﻻﺳﺘﻌﻼم ﻋﻦ أﺳﻤﺎء اﻟﻤﻮﻇﻔﯿﻦ اﻟﺬﯾﻦ ﯾﻨﺘﻤﻮن ﻟﻘﺴﻢ ﻣﺎ و ﻟﻨﻔﺮض أﻧﻨﺎ ﻧﺮﯾﺪ ﻣﻦ ﯾﻨﺘﻤﻲ ﻟﻘﺴﻢ
اﻟﻬﻨﺪﺳﺔ ،ﺳﺘﻜﻮن ﺻﯿﻐﺔ اﻻﺳﺘﻌﻼم ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ " ﺣﺪد ﺣﻘﻞ اﻻﺳﻢ ﻣﻦ اﻟﺠﺪول tb1ﻋﻨﺪﻣﺎ
ﯾﻜﻮن اﺳﻢ اﻟﻘﺴﻢ اﻟﻬﻨﺪﺳﺔ " ،ﻟﻜﻦ ﻫﻨﺎك ﻣﺸﻜﻠﺔ ﺣﯿﺚ ﻻ ﯾﻮﺟﺪ ﺣﻘﻞ ﺑﺎﺳﻢ اﻟﻘﺴﻢ ﻓﻲ ﻧﻔﺲ اﻟﺠﺪول
ﻟﻜﻦ ﯾﻮﺟﺪ اﺳﻢ اﻟﻘﺴﻢ ﻓﻲ ﺟﺪول آﺧﺮ ،وﯾﻮﺟﺪ ﻓﻲ اﻟﺠﺪول اﻟﺬي ﻟﺪﯾﻨﺎ رﻗﻢ اﻟﻘﺴﻢ ﻟﻜﻨﻨﺎ ﻧﺮﯾﺪ اﻟﺒﺤﺚ
ﻋﻠﻰ أﺳﺎس اﺳﻢ اﻟﻘﺴﻢ و ﻟﯿﺲ رﻗﻤﻪ ،إذا ﯾﺠﺐ أن ﻧﺤﺼﻞ ﻋﻠﻰ اﺳﻢ اﻟﻘﺴﻢ ﻣﻦ اﻟﺠﺪول اﻵﺧﺮ ،
وﻟﻠﺤﺼﻮل ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎت ﻣﻦ ﺟﺪول آﺧﺮ ﯾﺠﺐ ﺗﺤﻘﻖ ﺷﺮط ﻣﻬﻢ و ﻫﻮ وﺟﻮد ﺣﻘﻞ ﻣﺸﺘﺮك ﺑﯿﻦ
اﻟﺠﺪوﻟﯿﻦ و ﻫﺬا ﯾﻨﻄﺒﻖ ﻓﻲ ﺣﺎﻟﺘﻨﺎ ،إذا ﺳﺘﻜﻮن ﺻﯿﻐﺔ اﻻﺳﺘﻌﻼم ﻋﻠﻰ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ " :ﺣﺪد ﺣﻘﻞ
اﻻﺳﻢ ﻣﻦ اﻟﺠﺪول tb1ﻋﻨﺪﻣﺎ ﯾﻜﻮن اﺳﻢ اﻟﻘﺴﻢ ﯾﺴﺎوي )ﺣﺪد اﺳﻢ اﻟﻘﺴﻢ ﻣﻦ اﻟﺠﺪول tb2ﻋﻨﺪﻣﺎ
ﯾﻜﻮن رﻗﻢ اﻟﻘﺴﻢ( "١
SQL = "select name from Tb1 where deptname = (select deptname form tb2
" )where deptno = 1
ﻗﺪ ﺗﺘﺴﺎءل ﻟﻤﺎذا ﻧﻘﻮم ﺑﻬﺬه اﻟﻌﻤﻠﯿﺔ اﻟﻄﻮﯾﻠﺔ ﻣﻊ أﻧﻪ ﺑﺈﻣﻜﺎﻧﻨﺎ أن ﻧﺸﺘﺮط ﺷﺮط ﻋﻠﻰ أﺳﺎس رﻗﻢ
اﻟﻘﺴﻢ اﻟﺬي ﯾﺘﻮﻓﺮ ﻟﺪﯾﻨﺎ ﺣﯿﺚ ﻧﻌﺮف أن ﻗﺴﻢ اﻟﻬﻨﺪﯾﺔ ﯾﺤﻤﻞ اﻟﺮﻗﻢ ١؟ اﻟﺠﻮاب و ﺑﻜﻞ ﺑﺴﺎﻃﺔ أﻧﻪ
ﻟﯿﺲ ﻓﻲ ﻛﻞ ﻣﺮة ﺳﺘﻌﺮف ذﻟﻚ ﺣﯿﺚ ﯾﻮﺟﺪ اﺳﺘﻌﻼﻣﺎت ﻣﻌﻘﺪة ﻻ ﯾﻤﻜﻨﻚ ﺑﺄن ﺗﻘﻮم ﺑﺤﺴﺎب اﻟﺸﺮط
ﺑﻨﻔﺴﻚ ﻟﻜﻲ ﺗﻀﻊ اﺳﺘﻌﻼم واﺣﺪ ،ﺣﯿﺚ أن ﺑﻌﺾ اﻟﺘﻄﺒﯿﻘﺎت ﯾﺠﺐ ﻋﻠﯿﻚ ﻓﯿﻬﺎ اﺳﺘﺨﺪام اﻻﺳﺘﻌﻼم
اﻟﻤﺮﻛﺐ و ﻗﺪ ﯾﺼﻞ ﻷﻛﺜﺮ ﻣﻦ اﺳﺘﻌﻼم ﻟﺤﻞ و إﯾﺠﺎد ﻗﯿﻤﺔ اﺳﺘﻌﻼم واﺣﺪ
ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﻤﺘﻔﺮع ﻣﻦ اﺳﺘﻌﻼم ﻻ ﻧﻀﻊ ﻋﻼﻣﺘﻲ ﺗﻨﺼﯿﺺ ﻣﺰدوﺟﺔ ﻋﻠﻰ اﻟﺸﺮط اﻟﻨﺼﻲ ﺑﻞ
ﻧﻀﻊ ﻋﻼﻣﺔ ﺗﻨﺼﯿﺺ ﻣﻔﺮدة ﻣﺜﻞ ﻫﺬه '
ﻟﻢ أﺟﻌﻞ ﻫﺬا اﻟﺪرس ﻃﻮﯾﻞ وﻟﻢ أﺿﻒ إﻟﯿﻪ ﻧﻘﺎط أﺧﺮى ﻻﻋﺘﻘﺎدي ﺑﺄﻧﻪ ﻣﻦ أﻫﻢ اﻟﺪروس ﻓﻲ ﻟﻐﺔ
اﻻﺳﺘﻌﻼم و ﯾﺴﺘﺤﻖ أن ﯾﻔﺮد ﻟﻪ درس ﺧﺎص ،
اﻟﺪرس١٢
أﺣﯿﺎﻧﺎ ﻧﺤﺘﺎج اﻟﺤﺮوف اﻷوﻟﻰ ﻣﻦ ﺣﻘﻞ ﻣﺎ ،ﻓﻤﺜﻼ ﻓﻲ اﻟﺠﺎﻣﻌﺎت ﯾﻜﺘﺒﻮن اﻟﺤﺮوف اﻟﺜﻼﺛﺔ اﻷوﻟﻰ ﻣﻦ
اﺳﻢ اﻟﻤﻘﺮر ،و ﻏﯿﺮﻫﻢ أﯾﻀﺎ ﯾﺤﺘﺎج ﻟﻤﺜﻞ ﻫﺬه اﻟﺨﺎﺻﯿﺔ ،وﺳﻮف ﻧﺘﻌﻠﻢ ﻛﯿﻒ ﻧﻘﻮم ﺑﺎﺳﺘﺨﺮاج
اﻷﺣﺮف اﻟﺜﻼﺛﺔ اﻷوﻟﻰ ﻣﻦ اﻟﯿﺴﺎر ﻟﺠﻤﯿﻊ اﻟﻘﯿﻢ ﻓﻲ ﺣﻘﻞ ﻣﻌﯿﻦ ،اﻟﻜﻮد اﻟﺴﺤﺮي اﻟﺬي ﺳﯿﻘﻮم ﺑﻬﺬه
اﻟﻌﻤﻠﯿﺔ ﻫﻮ اﻟﺘﺎﻟﻲ:
اﺳﺘﺨﺪﻣﻨﺎ اﻟﺪاﻟﺔ leftاﻟﻤﻌﺮوﻓﺔ ﻟﺘﺤﺪﯾﺪ اﻟﺤﺮوف ﻣﻦ ﺣﻘﻞ ﻣﻌﯿﻦ و اﻟﺬي اﺳﻤﻪ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ
nameو ﻗﺪ ﻗﻤﻨﺎ ﺑﺘﺨﺰﯾﻦ اﻟﻘﯿﻢ ﻓﻲ اﻟﻤﺘﻐﯿﺮ kو ﯾﻤﻜﻨﻚ ﺗﺨﺰﯾﻨﻬﺎ ﻓﻲ أي ﻣﺘﻐﯿﺮ ﺗﺮﯾﺪ ،ﻃﺒﻌﺎ
اﻟﺠﺪول ﻓﻲ ﺣﺎﻟﺘﻨﺎ اﺳﻤﻪ ، tb1ﻫﺬا ﻛﻞ ﺷﻲء ،ﻃﺒﻌﺎ ﻧﻘﻮم ﺑﻌﺪ ذﻟﻚ ﺑﺈﻇﻬﺎر اﻟﻨﺘﺎﺋﺞ ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻓﻲ
اﻟﺪروس اﻟﺴﺎﺑﻘﺔ
ﺳﻨﺄﺧﺬ اﻵن ﻃﺮﯾﻘﺔ ﺗﺤﺪﯾﺪ اﻟﻘﯿﻢ اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﺣﺮف ﻣﻌﯿﻦ ﺳﻮاء ﻓﻲ ﻣﻨﺘﺼﻒ اﻟﻜﻠﻤﺔ أو ﻓﻲ
أوﻟﻬﺎ أو أﺧﺮﻫﺎ ،ﻫﺬا اﻟﺘﻄﺒﯿﻖ ﻣﻬﻢ و ﻟﻪ اﺳﺘﺨﺪاﻣﺎت ﻋﺪﯾﺪة ﻓﻲ اﻟﺒﺤﺚ ﺧﺼﻮﺻﺎ ﻓﻤﺜﻼ ﺗﻜﻮن
ﺗﻌﺮف أن اﺳﻢ اﻟﻄﺎﻟﺐ ﯾﺤﺘﻮي ﻋﻠﻰ ﺣﺮف ﻣﻌﯿﻦ ﻟﻜﻦ ﻻ ﺗﻌﺮف اﺳﻢ اﻟﻄﺎﻟﺐ و أﯾﻦ ﻣﻮﻗﻊ اﻟﺤﺮف ﻓﻲ
اﺳﻤﻪ ،ﻃﺮﯾﻘﺔ اﻻﺳﺘﻌﻼم اﻟﺘﺎﻟﯿﺔ ﺳﻮف ﺗﺒﯿﻦ ﻟﻨﺎ ﻛﯿﻔﯿﺔ اﺳﺘﺨﺪام ﻫﺬه اﻟﻄﺮﯾﻘﺔ ،اﻟﻜﻮد ﻫﻮ:
"'*" & SQL = "select name from Tb1 where name like '*" & text1.text
ﻻ ﺣﻆ أﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺎﺳﺘﺨﺪام اﻟﺠﻤﻠﺔ Likeو ﻫﻲ ﺑﻤﻌﻨﻰ اﻟﺘﺸﺎﺑﻪ وﻟﯿﺲ ﺷﺮﻃﺎ اﻟﺘﺴﺎوي ﺑﻌﺪ ذﻟﻚ
وﺿﻌﻨﺎ اﻟﺸﺮط و ﻫﻮ ﻣﺎ ﯾﺪﺧﻠﻪ اﻟﻤﺴﺘﺨﺪم ﻓﻲ ﻣﺮﺑﻊ اﻟﻨﺺ و اﻧﻈﺮ أﻧﻨﺎ وﺿﻌﻨﺎ ﻋﻼﻣﺘﯿﻦ ﻧﺠﻤﯿﺘﯿﻦ ﻓﻲ
اﻟﺸﺮط وﻫﻲ ﺗﺴﺘﺨﺪم ﻓﻲ إﻋﻼم اﻟﺒﺮﻧﺎﻣﺞ ﺑﺄﻧﻪ ﺳﯿﺤﺪد أي ﻗﯿﻤﺔ ﺗﺸﺒﻪ اﻟﻘﯿﻤﺔ اﻟﻤﺪﺧﻠﺔ ﻓﻲ أي ﻣﻮﻗﻊ
ﻣﻨﻬﺎ
SQL = "select name from Tb1 where name like '*" & text1.text & "*' order By
"name Asc
ﺑﻌﺪ ﻛﺘﺎﺑﺔ اﻷﻣﺮ Order byاﻛﺘﺐ اﺳﻢ اﻟﺤﻘﻞ اﻟﺬي ﺗﺮﯾﺪ أن ﯾﻜﻮن اﻟﻔﺮز و اﻟﺘﺮﺗﯿﺐ ﻋﻠﯿﻪ وﻫﻮ ﻓﻲ
ﺣﺎﻟﺘﻨﺎ nameﺑﻌﺪ ذﻟﻚ اﻛﺘﺐ ﻃﺮﯾﻘﺔ اﻟﻔﺮز اﻟﺘﻲ ﺗﺮﯾﺪﻫﺎ ﺗﺼﺎﻋﺪي أي ﻣﻦ اﻷﻟﻒ ﻟﻠﯿﺎء وﻧﺴﺘﺨﺪم ﻟﺬﻟﻚ
أﻣﺮ ، Ascﻣﻊ اﻟﻌﻠﻢ أن ﻋﻨﺪ ﻋﺪم وﺿﻊ Ascﻓﺈن اﻟﺒﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺗﻠﻘﺎﺋﯿﺎ ﺑﻔﺮزه ﺗﺼﺎﻋﺪﯾﺎ
أﻣﺎ اﻟﻔﺮز اﻟﺘﻨﺎزﻟﻲ ﻣﻦ اﻟﯿﺎء إﻟﻰ اﻷﻟﻒ ﻓﻨﺴﺘﺨﺪم اﻷﻣﺮ Descﺑﺪﻻ ﻣﻦAsc
إن أداة FlexGridإﺣﺪى أدوات إﻇﻬﺎر اﻟﺒﯿﺎﻧﺎت ﻓﻲ ﺷﻜﻞ ﺷﺒﻜﻲ أو ﺟﺪوﻟﻲ إن ﺻﺢ اﻟﺘﻌﺒﯿﺮ
ﺳﻨﺘﻄﺮق ﻓﻲ ﻫﺬا اﻟﺪرس إﻟﻰ ﻛﯿﻔﯿﺔ وﺿﻊ ﻧﺘﺎﺋﺞ اﺳﺘﻔﺴﺎر ﻓﯿﻬﺎ و إﻇﻬﺎره ﻟﻠﻤﺴﺘﺨﺪم و ﻛﺬﻟﻚ ﺑﻌﺾ
اﻷﻓﻜﺎر ﻓﻲ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻫﺬه اﻷداة
اﻟﺪرس١٣
ﻗﺒﻞ ﻛﻞ ﺷﻲء دﻋﻨﺎ ﻧﻘﻮم ﺑﺈﻋﻄﺎﺋﻚ اﻟﺼﻮرة اﻟﺘﻲ ﻧﺮﯾﺪ أن ﻧﺼﻞ إﻟﯿﻬﺎ ﻓﻲ اﻟﻨﻬﺎﯾﺔ ﻟﻜﻲ ﺗﻜﻮن ﻋﻠﻰ ﻋﻠﻢ
ﺑﻤﺎ ﺳﻨﻌﻤﻞ ﻋﻠﯿﻪ اﻧﻈﺮ اﻟﺼﻮرة اﻟﺘﺎﻟﯿﺔ:
ﻟﻜﻲ ﻧﺒﺪأ ﺑﺎﻟﺪرس أﺿﻒ ﻣﺸﺮوع ﺟﺪﯾﺪ و اﻧﺸﺄ أو اﺳﺘﺨﺪم أي ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت و ارﺑﻄﻬﺎ ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ
ﻛﻤﺎ ﺗﻌﻠﻤﻨﺎ ﺳﺎﺑﻘﺎ ،وﺳﻨﻔﺘﺮض أن ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت اﻟﺘﻲ ﺳﻨﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ اﺳﻤﻬﺎ dbوﻓﯿﻬﺎ ﺟﺪول
ﺑﺎﺳﻢ tbوﯾﺤﺘﻮي ﻋﻠﻰ اﻟﺤﻘﻮل اﻟﺘﺎﻟﯿﺔ namdو jobو ageﺳﻨﻜﺘﻔﻲ ﺑﺜﻼﺛﺔ ﺣﻘﻮل ،ﺑﻌﺪ ذﻟﻚ
ﯾﺠﺐ أن ﺗﻀﯿﻒ أداة ﻫﺬه اﻟﺸﺒﻜﺔ وﻟﻔﻌﻞ ذﻟﻚ ،اذﻫﺐ إﻟﻰ ﻗﺎﺋﻤﺔ project >> combonentأو
اﺿﻐﻂ ﻋﻠﻰ ctrl+Tﺳﺘﻔﺘﺢ ﻟﻚ ﻗﺎﺋﻤﺔ اﻟﻤﻜﻮﻧﺎت اﺧﺘﺮ ﻣﻨﻬﺎ اﻟﻤﻜﻮن اﻟﺘﺎﻟﻲ و ﺿﻊ ﺑﺠﺎﻧﺒﻪ ﻋﻼﻣﺔ
ﺻﺢ Microsoft FlexGrid Control 6.0ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ اﻟﺼﻮرة
ﺑﻌﺪ ذﻟﻚ اﺧﺘﺮ اﻷداة اﻟﺨﺎﺻﺔ ﺑﺮﺳﻢ FliexGridﻛﻤﺎ ﻫﻮ ﻣﺒﯿﻦ ﻓﻲ اﻟﺼﻮرة اﻟﺘﺎﻟﯿﺔ و ارﺳﻢ ﻋﻠﻰ
اﻟﻔﻮرم ﻣﺴﺎﺣﺔ ﻣﻌﻘﻮﻟﺔ ﺗﺄﺧﺬ ﺗﻘﺮﯾﺒﺎ ﺛﻠﺚ اﻟﻔﻮرم
اﺿﻐﻂ ﺑﺎﻟﺰر اﻷﯾﻤﻦ ﻋﻠﻰ اﻟﺸﺒﻜﺔ اﻟﺘﻲ ﻗﻤﺖ ﺑﺮﺳﻤﻬﺎ و اﺧﺘﺮ Propertiesﺳﺘﻔﺘﺢ ﻟﻚ ﻧﺎﻓﺬة
اﻟﺨﺼﺎﺋﺺ وﻓﻲ ﻋﻼﻣﺔ اﻟﺘﺒﻮﯾﺐ Generalﯾﻤﻜﻨﻜﻢ اﺧﺘﯿﺎر ﻋﺪد اﻟﺼﻔﻮف ﻣﻦ اﻟﺨﺎﺻﯿﺔ Rowsو
ﻋﺪد اﻷﻋﻤﺪة ﻣﻦ اﻟﺨﺎﺻﯿﺔ ، Colsﻛﻤﺎ ﯾﻤﻜﻨﻚ ﺗﺤﺪﯾﺪ ﻋﺪد اﻷﻋﻤﺪة اﻟﺘﻲ ﺗﻜﻮن ﺑﻠﻮن داﻛﻦ ﻛﻤﻔﺘﺎح
ﻟﻠﺸﺒﻜﺔ ﻣﻦ اﻟﺨﺎﺻﯿﺔ Fixed Colsأو اﻟﺼﻔﻮف اﻟﺘﻲ ﺑﻠﻮن داﻛﻦ ﻣﻦ اﻟﺨﺎﺻﯿﺔ Fixed Rows
اﻵن ﺳﻨﺘﻌﻠﻢ اﻟﺘﺤﻜﻢ ﺑﺨﺼﺎﺋﺺ FlexGridﺑﻮاﺳﻄﺔ اﻟﻜﻮد ،ﯾﺠﺐ أن ﺗﻌﻠﻢ أن ﺟﻤﯿﻊ اﻷواﻣﺮ اﻟﺘﻲ
ﺗﻜﺘﺐ ﻟﻬﺬه اﻷداة ﻏﺎﻟﺒﺎ ﻣﺎ ﺗﻜﺘﺐ ﻓﻲ ﺣﺪث اﻟﺘﺤﻤﯿﻞ ﻟﻠﻔﻮرم ، Loadو ﻣﻦ اﻟﺨﺼﺎﺋﺺ اﻟﺘﻲ ﯾﺠﺐ أن
ﺗﺘﻌﻠﻤﻬﺎ ﻫﻲ اﻟﺘﺤﻜﻢ ﻓﻲ ﻋﺮض اﻟﺼﻔﻮف ﻣﻊ اﻟﻌﻠﻢ ﺑﺄن اﻟﺼﻔﻮف ﻣﺮﻗﻤﺔ ﻣﻦ اﻟﯿﺴﺎر إﻟﻰ اﻟﯿﻤﯿﻦ
اﺑﺘﺪاء ﻣﻦ اﻟﺼﻔﺮ و إذا أردﻧﺎ ﻣﺜﻼ أن ﻧﻐﯿﺮ ﻋﺮض اﻟﻌﻤﻮدﯾﻦ رﻗﻢ ٠و ٣ﻣﺜﻼ و ﻧﺮﯾﺪ أن ﯾﻜﻮن
ﻋﺮﺿﻬﻤﺎ ٢٠٠٠و ١٠٠٠ﻋﻠﻰ اﻟﺘﻮاﻟﻲ ﻓﺈﻧﻨﺎ ﺳﻨﺤﺘﺎج إﻟﻰ ﻛﺘﺎﺑﺔ اﻟﻜﻮد اﻟﺘﺎﻟﻲ:
MSFlexGrid1.Colwidth(3) = 1000
ﻣﻊ اﻟﻌﻠﻢ ﺑﺄن اﺳﻢ اﻷداة ﻓﻲ اﻟﻤﻜﻮد اﻟﺴﺎﺑﻖ ﻫﻮ ، MSFlexGrid1ﻻﺣﻆ أﻧﻨﺎ ﻧﻘﻮم ﺑﺤﺼﺮ رﻗﻢ
اﻟﺼﻒ ﺑﯿﻦ ﻗﻮﺳﯿﻦ
و اﻵن ﻛﯿﻒ ﺳﻨﻘﻮم ﺑﻮﺿﻊ ﻋﻨﺎوﯾﻦ اﻟﺤﻘﻮل ﻋﻠﻰ اﻷﻋﻤﺪة ﻓﻲ ﻫﺬه اﻟﺸﺒﻜﺔ ﻟﻜﻲ ﻧﻔﺮق ﺑﯿﻦ اﻟﺤﻘﻮل ،
اﻟﻔﻜﺮة ﺑﺄن ﺗﻘﻮم ﺑﺘﺤﺪﯾﺪ اﻟﺨﻠﯿﺔ ﺑﺎﻟﺼﻒ و اﻟﻌﻤﻮد ﺑﻌﺪ ذﻟﻚ ﺗﻜﺘﺐ اﻟﻨﺺ اﻟﻤﺮاد ،ﻣﺜﻼ ﻧﺮﯾﺪ أن ﻧﻜﺘﺐ
ﻋﻨﻮان اﻟﺤﻘﻞ اﻷول و ﻫﻮ "اﻻﺳﻢ " ﻓﻲ اﻟﻌﻤﻮد اﻷول و ﻋﻨﻮان اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ و ﻫﻮ " اﻟﻌﻤﻞ " ﻓﻲ
اﻟﻌﻤﻮد اﻟﺜﺎﻧﻲ ﻓﻤﺎذا ﺳﻨﻌﻤﻞ اﻧﻈﺮ ﻟﻠﻜﻮد اﻟﺘﺎﻟﻲ و ﺳﺘﻌﺮف
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
" اﻻﺳﻢ" = MSFlexGrid1.Text
MSFlexGrid1.Col = 1
"اﻟﻌﻤﻞ" = MSFlexGrid1.Text
ﻻﺣﻆ أﻧﻨﺎ ﻓﻲ أول ﺳﻄﺮﯾﻦ ﻣﻦ اﻟﻜﻮد اﻟﺴﺎﺑﻖ و اﻟﺬﯾﻦ ﻛﺘﺒﺘﻬﻤﺎ ﺑﺎﻟﻠﻮن اﻷﺣﻤﺮ ﻟﻺﯾﻀﺎح ﻗﺪ ﻗﻤﻨﺎ
ﺑﺘﺤﺪﯾﺪ أول ﺧﻠﯿﺔ ﻋﻠﻰ اﻟﯿﺴﺎر ﻓﻲ اﻟﺰاوﯾﺔ اﻟﻌﻠﯿﺎ و ذﻟﻚ ﺑﺘﺤﺪﯾﺪ إﺣﺪاﺛﯿﺎﺗﻬﺎ وﻫﻲ اﻟﺼﻒ اﻷول و
اﻟﻌﻤﻮد اﻷول ،ﺛﻢ ﻗﻤﻨﺎ ﺑﻜﺘﺎﺑﺔ اﻟﻌﻨﻮان ﺑﺎﻟﺨﺎﺻﯿﺔ ، Textﻣﻊ اﻟﻌﻠﻢ ﺑﺄن اﻟﺒﺮﻧﺎﻣﺞ ﯾﻘﻮم ﺑﺘﺨﺰﯾﻦ
إﺣﺪاﺛﯿﺎت آﺧﺮ ﺧﻠﯿﺔ ﺗﻘﻮم ﺑﻜﺘﺎﺑﺘﻬﺎ ،ﻟﺬﻟﻚ و ﻋﻨﺪﻣﺎ ﻧﻜﺘﺐ إﺣﺪاﺛﯿﺎت اﻟﻨﻘﻄﺔ اﻟﺜﺎﻧﯿﺔ ﺳﺘﺴﺘﻔﯿﺪ ﻣﻦ ﻫﺬه
اﻟﻤﯿﺰة ﻓﺴﻨﻜﺘﺐ إﺣﺪاﺛﻲ اﻟﻌﻤﻮد و ﻫﻮ ١ﻷن اﻻﺣﺪاﺛﻲ اﻟﺴﺎﺑﻖ ﻟﻠﺼﻒ ﻫﻮ ٠و ﻫﻮ ﻣﺨﺰن ﻓﻠﻤﺎذا
ﻧﻜﺘﺒﻪ ﻣﺮة أﺧﺮى ﻣﺎدﻣﻨﺎ ﻻ ﻧﺤﺘﺎج ﻟﺘﻐﯿﯿﺮه ،ﺑﻌﺪ ذﻟﻚ ﻧﻜﺘﺐ اﻟﻌﻨﻮان ﺑﺎﺳﺘﺨﺪام اﻟﺨﺎﺻﯿﺔ Textﻛﻤﺎ
ﻓﻌﻠﻨﺎ ﻣﻊ اﻷوﻟﻰ و ﻧﺴﺘﻤﺮ ﺑﻬﺬه اﻟﻌﻤﻠﯿﺔ إذا اﺣﺘﺠﻨﺎ إﻟﻰ ﻋﻨﺎوﯾﻦ أﺧﺮى ،وﺳﺘﻈﻬﺮ اﻟﻌﻨﺎوﯾﻦ اﻟﺘﻲ
ﻋﻤﻠﻨﺎﻫﺎ ﺑﺎﻟﻜﻮد اﻟﺴﺎﺑﻖ ﻛﻤﺎ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ:
ﻟﻜﻲ ﻧﺘﺄﻛﺪ ﻣﻦ وﺟﻮد ﺳﺠﻼت ﻓﻲ اﻟﺠﺪول أو ﻧﺨﺮج ﻓﻲ ' If tb.RecordCount < 1 Then Exit Sub
ﺣﺎل ﻋﺪﻣﻬﺎ
ﻧﺘﺤﺮك إﻟﻰ اﻟﺤﻘﻞ اﻷﺧﯿﺮ ' tb.MoveLast
ﻧﺘﺤﺮك إﻟﻰ اﻟﺤﻘﻞ اﻷول ' tb.MoveFirst
nﻧﺨﺰن ﻋﺪد اﻟﺴﺠﻼت ﻓﻲ اﻟﻤﺘﻐﯿﺮ ' n = tb.RecordCount
For i = 1 To n
رﻗﻢ اﻟﺼﻒ ﺣﺴﺐ رﻗﻢ اﻟﺘﻜﺮار ' flx1.Row = i
رﻗﻢ اﻟﻌﻤﻮد ﺛﺎﺑﺖ ﻷﻧﻨﺎ ﺳﻮف ﻧﻀﻊ ﺟﻤﯿﻊ اﻟﻘﯿﻢ ﻟﻠﺤﻘﻞ ﻓﻲ ﻋﻤﻮد واﺣﺪ ' flx1.Col = 0
ﻧﻀﻊ ﻗﯿﻤﺔ اﻟﺤﻘﻞ ﻓﻲ اﻟﺨﻠﯿﺔ اﻟﻤﺤﺪدة ' flx1.Text = tb!Name
flx1.Col = 1
flx1.Text = tb!job
ﻧﺘﺤﺮك ﻟﻠﺴﺠﻞ اﻟﺘﺎﻟﻲ ' tb1.MoveNext
Next i
End Sub
رﺑﻤﺎ ﻻ أﺳﺘﻄﯿﻊ اﻟﺸﺮح ﺑﻮﺿﻮح ﺑﺎﻟﻜﺘﺎﺑﺔ ﻟﻜﻦ أﺳﺄل اﷲ أن أﻛﻮن ﻗﺪ اﺳﺘﻄﻌﺖ أن اﻗﻄﻊ ﺷﻮﻃﺎ ﻛﺒﯿﺮا
ﻓﻲ اﻟﺸﺮح ،ﻋﻠﻰ اﻟﻌﻤﻮم ﯾﺠﺐ أن ﺗﺤﺎول ﻗﺮاءة اﻟﻜﻮد و ﺗﻄﺒﯿﻘﻪ و ﻛﺬﻟﻚ و ﻫﻮ اﻷﻫﻢ ﻓﻬﻤﻪ
ﻣﻦ اﻟﻤﻬﺎرات اﻟﻤﻤﺘﺎزة أن ﺗﻌﺮف ﻛﯿﻒ ﺗﺠﻌﻞ ﻋﺪد اﻟﺼﻔﻮف ﯾﺘﻐﯿﺮ ﺣﺴﺐ ﻋﺪد اﻟﺴﺠﻼت وﻟﻌﻤﻞ ذﻟﻚ
اﺟﻌﻞ ﺧﺎﺻﯿﺔ ﻋﺪد اﻟﺼﻔﻮف ﺗﺴﺎوي ﻋﺪد اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول زاﺋﺪا واﺣﺪ ،و ﻗﻤﻨﺎ ﺑﻬﺬه اﻟﺰﯾﺎدة
End Sub
ﻣﻌﺮﻓﺔ ﻛﯿﻔﯿﺔ ﺟﻌﻞ ﻋﺪد اﻟﺼﻔﻮف ﯾﺘﺤﺪد ﺣﺴﺐ ﻋﺪد اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول
اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ﺗﻄﺒﯿﻖ ﻣﻬﻢ ﺟﺪا ﻣﻌﺮﻓﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻌﻪ ﺣﯿﺚ ﯾﻌﻄﻲ ﺗﺼﻮرا و ﻣﻠﺨﺼﺎ ﻋﻦ اﻟﺤﻘﻮل ﻓﻲ
اﻟﺴﺠﻼت و ﺑﺎﻟﻨﺴﺒﺔ ﻟﻔﯿﺠﻮال ﺑﯿﺴﻚ ﻓﻬﻮ ﯾﺘﯿﺢ ﻟﻚ ﻋﻤﻞ اﻟﺮﺳﻮم اﻟﺒﯿﺎﻧﯿﺔ اﻟﺘﻲ ﺗﺴﺘﻤﺪ ﻣﺼﺪرﻫﺎ ﻣﻦ
ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت ﺑﻜﻞ ﺳﻬﻮﻟﺔ وﺳﯿﻜﻮن ﻫﺬا اﻟﺪرس اﻟﺠﺰء اﻷول ﻓﻲ اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ
ﻫﻨﺎك ﻋﺪة ﻃﺮق ﻹﻇﻬﺎر اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ،ﻓﯿﻤﻜﻨﻚ أن ﺗﻈﻬﺮ رﺳﻢ ﯾﺒﯿﻦ اﻟﻘﯿﻢ ﻓﻲ ﺳﺠﻞ واﺣﺪ ﻣﺜﻼ
درﺟﺎت ﻃﺎﻟﺐ ﻓﻲ ﻣﺎدﺗﯿﻦ و ﻟﻜﻲ ﺗﺮى اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ اﻟﺬي ﯾﻤﺜﻞ اﻟﻄﻼب اﻵﺧﺮﯾﻦ ﺗﻨﺘﻘﻞ ﺑﺰر ﯾﻨﻘﻠﻚ
ﻟﻠﺴﺠﻞ اﻟﺘﺎﻟﻲ وﻫﺬا ﻣﺎ ﺳﻨﺘﻌﻠﻤﻪ ﻓﻲ ﻫﺬا اﻟﺪرس
أو ﺗﻘﻮم ﺑﻌﺮض ﺟﻤﯿﻊ ﺳﺠﻼت اﻟﻄﻼب ﻓﻲ رﺳﻢ واﺣﺪ ﻣﻘﺴﻢ ﻋﻠﻰ أﺳﺎس ﻛﻞ ﺳﺠﻞ و ﺳﺘﺘﻌﺮف ﻋﻠﻰ
ﻫﺬا ﺑﺎﻟﺘﻔﺼﯿﻞ ﻓﻲ دروس ﻗﺎدﻣﺔ
اﻟﺪرس١٤
ﻗﺒﻞ أن ﺗﺒﺪأ ﯾﺠﺐ أن ﺗﻘﻮم ﺑﻌﻤﻞ ﻗﺎﻋﺪة ﺑﯿﺎﻧﺎت اﺳﻤﻬﺎ db1و ﺗﺤﺘﻮي ﻋﻠﻰ ﺟﺪول اﺳﻤﻪ tb1ﻓﯿﻪ
اﻟﺤﻘﻮل اﻟﺘﺎﻟﯿﺔ:
ﻗﻢ ﺑﻌﺪ ذﻟﻚ ﺑﺈﺿﺎﻓﺔ ﺳﺠﻼت ﻟﻘﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﻘﯿﻢ اﻟﺘﻲ ﺗﺮﯾﺪﻫﺎ
اﻵن اﻓﺘﺢ ﻣﺸﺮوع ﻓﯿﺠﻮال ﺑﯿﺴﻚ ﺟﺪﯾﺪ ،ﺑﻌﺪ ذﻟﻚ ﻗﻢ ﺑﺘﻌﺮﯾﻒ أو رﺑﻂ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﻟﻜﻮد اﻟﺬي
ﺗﻌﻠﻤﻨﺎه ﻓﻲ اﻟﺪروس اﻟﺴﺎﺑﻘﺔ و ﺳﺄذﻛﺮه ﻫﻨﺎ إن ﻛﻨﺖ ﻗﺪ ﻧﺴﯿﺖ
أوﻻ اذﻫﺐ إﻟﻰ Project >> refrencesﺛﻢ ﺣﺪد اﻟﻤﻜﺘﺒﺔ Microsoft DAO 3.51 Object library
اﻵن اﻛﺘﺐ اﻟﻜﻮد اﻟﺘﺎﻟﻲ و اﻟﺬي ﯾﻘﻮم ﺑﺮﺑﻂ ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت ﺑﺎﻟﺒﺮﻧﺎﻣﺞ
اﻵن ﺗﺄﺗﻲ اﻟﺨﻄﻮة اﻷﺳﺎﺳﯿﺔ اﻷوﻟﻰ وﻫﻲ إﺿﺎﻓﺔ أداة اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ و ﻟﻠﻘﯿﺎم ﺑﺬﻟﻚ اذﻫﺐ ﻗﺎﺋﻤﺔ
Projectو اﺧﺘﺮ Componentsﺳﯿﻈﻬﺮ ﻟﻚ ﻣﺮﺑﻊ ﺣﻮار ﺣﺪد ﻣﻨﻪ اﻻﺧﺘﯿﺎر Microsoft
)Chart Control 6.0 (OLEDB
ﺑﻌﺪ ذﻟﻚ اﻧﻘﺮ ﻋﻠﻰ ﻫﺬه اﻷﯾﻘﻮﻧﺔ و ﺳﺘﻈﻬﺮ ﻟﻚ اﻻﯾﻘﻮﻧﻪ اﻟﺨﺎﺻﺔ ﺑﻪ ﻓﻲ ﺻﻨﺪوق اﻷدوات
ارﺳﻢ ﺷﻜﻞ ﻣﺮﺑﻊ ﻋﻠﻰ اﻏﻠﺐ اﻟﻔﻮرم و ﺳﯿﻨﺘﺞ ﻟﻚ ﺻﻮرة رﺳﻢ ﺑﯿﺎﻧﻲ
اﻵن ﺣﺪد اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ و اذﻫﺐ إﻟﻰ ﻧﺎﻓﺬة اﻟﺨﺼﺎﺋﺺ و ﻏﯿﺮ اﻟﺨﺎﺻﯿﺔ AutoIncrementإﻟﻰ
Trueو ﻫﺬا ﺿﺮوري ﻟﻜﻲ ﯾﻘﻮم اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ﺑﺘﻐﯿﯿﺮ و ﺗﺤﺪﯾﺚ ﻧﻔﺴﻪ ﺗﻠﻘﺎﺋﯿﺎ وﻟﻦ ﯾﻌﻤﻞ ﺑﺪون أن
ﺗﺠﻌﻞ ﻫﺬه اﻟﺨﺎﺻﯿﺔ ﻋﻠﻰ True
أﯾﻀﺎ اﺿﺒﻂ اﻟﺨﺎﺻﯿﺔ ColumnCountﻋﻠﻰ ٢ﺣﯿﺚ أن ﻫﺬه اﻟﺨﺎﺻﯿﺔ ﺗﻌﻨﻲ ﻋﺪد اﻷﻋﻤﺪة ﻓﻲ
اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ و ﺑﻤﺎ أﻧﻨﺎ ﻧﺤﺘﺎج إﻟﻰ ﻋﻤﻮدﯾﻦ ﻓﻘﻂ ﻫﻤﺎ درﺟﺔ اﻟﺮﯾﺎﺿﯿﺎت و اﻟﻌﻠﻮم وﺿﻌﻨﺎ ﻋﺪد
اﻷﻋﻤﺪة ٢
و اﺿﺒﻂ اﻟﺨﺎﺻﯿﺔ RowCountﻋﻠﻰ ١وﻫﺬا اﻟﺮﻗﻢ ﯾﺪل ﻋﻠﻰ ﻋﺪد اﻟﺴﺠﻼت ا ﻟﺘﻲ ﺗﺮﯾﺪ أن
ﺗﻌﺮﺿﻬﺎ ﻓﻲ اﻟﻤﺮة اﻟﻮاﺣﺪة و ﺳﺘﺘﻌﺮف ﻋﻠﻰ ذﻟﻚ ﺑﺎﻟﺘﻔﺼﯿﻞ ﻓﻲ اﻟﺪرس اﻟﻘﺎدم
واﻵن ﻣﺎﻫﻮ اﻟﻜﻮد اﻟﺬي ﺳﯿﻌﺮض اﻟﺒﯿﺎﻧﺎت ﻋﻠﻰ اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ،أوﻻ ﯾﺠﺐ أن ﺗﺤﺪد ﻣﺘﻰ ﯾﺠﺐ
اﻟﻌﺮض ﻫﻞ ﻋﻨﺪ ﺗﺸﻐﯿﻞ اﻟﺒﺮﻧﺎﻣﺞ أم ﻋﻨﺪ اﻟﻨﻘﺮ ﻋﻠﻰ زر ﻣﻌﯿﻦ ؟ و اﻟﻄﺮﯾﻘﺔ اﻷﻓﻀﻞ أن ﺗﺠﻌﻠﻪ ﯾﻘﻮم
ﯾﻌﺮض ﺣﺎل ﺗﻨﻔﯿﺬ أو ﺗﺤﻤﯿﻞ اﻟﻔﻮرم و ﺑﻌﺪ ذﻟﻚ ﯾﻤﻜﻨﻪ أن ﯾﻨﺘﻘﻞ إﻟﻰ اﻟﺴﺠﻞ اﻟﺘﺎﻟﻲ ﺑﻮاﺳﻄﺔ زر ﺗﻨﻘﻞ ،
ﻫﺬا ﯾﻘﻮدﻧﺎ إﻟﻰ اﻧﻪ ﯾﺠﺐ ﻋﻠﯿﻨﺎ وﺿﻊ ﻛﻮد ﻓﻲ ﺣﺪث ا ﻟﺘﺤﻤﯿﻞ ﻟﻠﻔﻮرم ﻟﻜﻲ ﯾﻌﺮض ﻣﺒﺎﺷﺮة و اﻟﻜﻮد
ﺳﯿﻜﻮن اﻟﻜﻮد اﻟﺘﺎﻟﻲ اﻟﺬي ﺑﺎﻟﻠﻮن اﻷﺣﻤﺮ:
MSChart1.Column = 1
MSChart1.Data = tb!mathmark
MSChart1.Column = 2
MSChart1.Data = tb!sincemark
MSChart1.RowLabel = tb!Name
End Sub
أﻋﺘﻘﺪ أن اﻟﻜﻮد اﻟﺴﺎﺑﻖ ﺳﻬﻞ وواﺿﺢ ﻟﻠﺠﻤﯿﻊ و ﻫﻮ ﯾﺬﻛﺮﻧﺎ ﺑﺎﻷداة ، FlexGridﻓﻔﻲ اﻟﻜﻮد
اﻟﺴﺎﺑﻖ ﺣﺪدﻧﺎ أوﻻ رﻗﻢ اﻟﻌﻤﻮد اﻟﺬي ﺳﺘﻨﻔﺬ ﻋﻠﯿﻪ اﻷواﻣﺮ اﻟﻘﺎدﻣﺔ و ﻫﻮ ﻋﻤﻮد رﻗﻢ ١ﺛﻢ ﺑﻌﺪ ذﻟﻚ
وﺿﺤﻨﺎ اﻷﻣﺮ اﻟﺬي ﻧﺮﯾﺪه أن ﯾﻨﻔﺬ ﻋﻠﻰ ﻫﺬا اﻟﻌﻤﻮد وﻫﻮ وﺿﻊ ﻗﯿﻤﺔ اﻟﺤﻘﻞ mathmarkﻓﻲ ﻫﺬا
اﻟﻌﻤﻮد ﻟﯿﻌﺒﺮ ﻋﻨﻬﺎ ﺑﯿﺎﻧﯿﺎ وﻧﺴﺘﺨﺪم ﻟﻬﺬا اﻷﻣﺮ Dataﻛﻤﺎ ﻫﻮ واﺿﺢ ،و اﻵن ﻧﺮﯾﺪ وﺿﻊ ﻗﯿﻢ
اﻟﺤﻘﻞ اﻟﺜﺎﻧﻲ وﻫﻮ sincemarkﻓﻲ اﻟﻌﻤﻮد اﻟﺜﺎﻧﻲ و ﻧﺘﺒﻊ ﻟﺬﻟﻚ ﻧﻔﺲ اﻟﺨﻄﻮات اﻟﺴﺎﺑﻘﺔ ﺣﯿﺚ
ﻧﺤﺪد رﻗﻢ اﻟﻌﻤﻮد وﻫﻮ ٢ﺛﻢ ﻣﺎ ﻧﺮﯾﺪ ﻣﻨﻪ و ﻫﻮ اﻟﺘﻌﺒﯿﺮ ﻋﻦ ﻫﺬا اﻟﺤﻘﻞ ﻓﻲ ﺷﻜﻞ ﺑﯿﺎﻧﺎ
ﺑﻌﺪ ذﻟﻚ وﻓﻲ اﻟﺴﻄﺮ اﻷﺧﯿﺮ ﻧﺮﯾﺪ أن ﯾﻀﻊ اﻟﺒﺮﻧﺎﻣﺞ اﺳﻢ اﻟﺸﺨﺺ أﺳﻔﻞ اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ و ﻫﻮ ﻣﺎ
ﯾﺴﻤﻰ ﺑﺎﻟﺼﻒ Rowوﻧﺴﺘﺨﺪم اﻟﺨﺎﺻﯿﺔ RowLabelو ﻧﺨﺰن ﻓﯿﻬﺎ ﻗﯿﻤﺔ ﺣﻘﻞ اﻻﺳﻢ Name
اﻵن اﻟﻤﺮﺣﻠﺔ اﻟﺜﺎﻧﯿﺔ و ﻫﻲ أن ﯾﻘﻮم اﻟﻤﺴﺘﺨﺪم ﺑﺎﻟﺘﻨﻘﻞ ﺑﯿﻦ اﻟﺤﻘﻮل ﻹﻇﻬﺎرﻫﺎ ﻓﻲ ﺷﻜﻞ اﻟﺮﺳﻢ
اﻟﺒﯿﺎﻧﻲ و ﺳﻨﻘﻮم ﺑﺈﻧﺸﺎء زرّي أﻣﺮ واﺣﺪ ﻟﻠﺘﻘﺪم اﻷﻣﺎم وواﺣﺪ ﻟﻠﺮﺟﻮع ﻟﻠﺨﻠﻒ ،ﻓﻲ اﻟﺰر اﻟﻤﺨﺼﺺ
ﻟﻠﺘﻨﻘﻞ ﻟﻺﻣﺎم ﻧﺴﺘﺨﺪم اﻟﻜﻮد اﻟﺘﺎﻟﻲ:
ﻻﺣﻆ أن اﻟﻜﻮد ﻧﻔﺲ اﻟﻜﻮد ﻓﻲ ﺣﺪث اﻟﺘﺤﻤﯿﻞ ﻣﻊ اﻷﺧﺬ ﻓﻲ اﻻﻋﺘﺒﺎر ﻧﻘﻄﺘﯿﻦ أوﻻ اﻻﻧﺘﻘﺎل ﻟﻠﺴﺠﻞ
اﻟﺘﺎﻟﻲ ﻟﻜﻲ ﯾﺘﻢ ﻋﺮض اﻟﺒﯿﺎﻧﺎت ﻓﻲ اﻟﺴﺠﻞ اﻟﺘﺎﻟﻲ ،و وﺿﻊ ﺷﺮط ﻟﯿﺘﺤﻘﻖ ﻫﻞ ﻋﻨﺪ اﻟﻮﺻﻮل ﻟﻠﺴﺠﻞ
اﻷﺧﯿﺮ ﻟﯿﻘﻮم ﺑﺎﻟﺨﺮوج ﻣﻦ ا ﻻﺟﺮاء ﻟﻜﻲ ﻧﺘﻔﺎدى اﻟﻤﺸﺎﻛﻞ ،،ﻫﺬا ﻛﻞ ﺷﻲء
اﻟﻜﻮد اﻟﺴﺎﺑﻖ ﻧﻔﺲ ﻛﻮد اﻻﻧﺘﻘﺎل ﻟﻺﻣﺎم ﻣﻊ ﺗﻐﯿﯿﺮ أﻣﺮ اﻟﺘﺤﺮك اﻷﻣﺎم ﺑﺄﻣﺮ اﻟﺘﺤﺮك ﻟﻠﺨﻠﻒ
MovePreviousو ﺗﻢ ﺗﻐﯿﯿﺮ ﺷﺮط اﻟﺘﺄﻛﺪ ﻣﻦ وﺻﻮﻟﻨﺎ ﻟﻠﺴﺠﻞ اﻷول ﺑﺤﯿﺚ ﯾﺘﻮاﻓﻖ ﻣﻊ اﻟﺤﺎﻟﺔ
اﻟﺸﻜﻞ اﻟﻨﻬﺎﺋﻲ
ﯾﻤﻜﻨﻚ اﻟﺘﺤﻜﻢ ﻓﻲ ﺑﻌﺾ اﻟﺨﺼﺎﺋﺺ ﻣﺜﻞ ﺟﻌﻞ اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ ﻋﻠﻰ ﺷﻜﻞ ﺧﻄﻮط أو ﻣﺠﺴﻤﺎت ﺛﻼﺛﯿﺔ
اﻷﺑﻌﺎد و ﻏﯿﺮ ذﻟﻚ ﯾﻤﻜﻨﻚ اﻛﺘﺸﺎف ذﻟﻚ ﺑﻨﻔﺲ ﺑﺎﻟﻀﻐﻂ ﻋﻠﻰ اﻟﺰر اﻷﯾﻤﻦ ﻋﻠﻰ اﻟﺮﺳﻢ اﻟﺒﯿﺎﻧﻲ و
اﺧﺘﯿﺎر Properties
ﻣﻼﺣﻈﺔ أﺧﯿﺮة:
إن ﻛﻨﺖ ﻗﺪ اﺳﺘﻔﺪت ﻣﻦ ﻫﺬا اﻟﻜﺘﺎب ﻓﻼ ﺗﻨﺴﻰ اﻟﺪﻋﺎء ﻟﻲ وﻟﻮاﻟﺪيّ وﻟﻜﻞ ﻣﻦ
ﺳﺎﻋﺪﻧﻲ ﻓﻲ ﺟﻤﻌﻪ وإن ﻛﺎن ﻏﯿﺮ ذﻟﻚ ﻓﺄﻧﺎ آﺳﻒ ﻋﻠﻰ إﺿﺎﻋﺔ وﻗﺘﻚ اﻟﺜﻤﯿﻦ،
GOLD_NOIL@YAHOO.COM
15/7/2000
GOLD NOIL