You are on page 1of 36

‫ﺍ ﻟﻤ ﺭ ﻜ ﺯ ﺍ ﻟ ﻌ ﺎ ﻟ ﻲ ﻟ ﻠ ﻤ ﻬ ﻥ ﺍ ﻟ ﺸ ﺎﻤ ﻠﺔ ﺩ ﺭ ﻨﺔ ﻗ ﺴ ﻡ ﺍ ﻟ ﺤ ﺎ ﺴ ﻭ ﺏ‬

‫ﺍ ﻟ ﻔﺼ ل ﺍ ﻟ ﺜ ﺎ ﻟ ﺙ ﺤ ﺎ ﺴ ﻭ ﺏ‬
‫ﺒﻴﺴﻙ ﺍﻟﻤﺭﺌﻲ)‪(2‬‬ ‫ﻤﻠﺨﺼﺎﺕ ﻓﻲ‬
‫‪Visual Basic .NET 2003‬‬

‫ﺇﻋﺩﺍﺩ‪ :‬ﺇﺤﺴﺎﻥ ﻤﺯﻫﺭ ﺭﺸﻴﺩ‬


‫ﻓﺼل ﺍﻟﺭﺒﻴﻊ ‪2005‬‬

‫ﺭﻗﻡ‬ ‫ﺭﻗﻡ‬
‫ﺍﻟﻤﺤﺘﻭﻴﺎﺕ‬ ‫ﺍﻟﻤﺤﺘﻭﻴﺎﺕ‬
‫ﺍﻟﺼﻔﺤﺔ‬ ‫ﺍﻟﺼﻔﺤﺔ‬
‫‪12‬‬ ‫ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ‬ ‫‪0‬‬ ‫ﻤﻘﺩﻤﺔ‬
‫‪17‬‬ ‫ﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻜﻭﺩ ﺍﻟﻤﻌﺎﻟﺞ‬ ‫‪1‬‬ ‫ﻤﺭﺍﺠﻌﺔ‬
‫‪20‬‬ ‫ﺘﻘﻨﻴﺔ ‪ADO .NET‬‬ ‫‪2‬‬ ‫ﻤﻼﺤﻅﺎﺕ ﻋﻥ ﺤﻔﻅ ﺍﻟﻤﺸﺭﻭﻉ‬
‫‪22‬‬ ‫ﺭﺒﻁ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ‬ ‫‪3‬‬ ‫ﻤﻠﻔﺎﺕ ﺍﻟﺤل ﻭﺒﻴﺌﺘﻪ‬
‫ﺍﻟﻜﻭﺩ ﺍﻷﺴﺎﺴﻲ ﻟﺘﻜﻭﻴﻥ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﺘﻁﺒﻴﻕ‬
‫‪23‬‬ ‫ﻋﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ‬
‫ﻤﻼﺤﻅﺎﺕ ﻋﻥ ‪‬‬ ‫‪4‬‬
‫‪Windows‬‬
‫‪24‬‬ ‫ﺃﺴﺎﻟﻴﺏ ﺍﻟﺭﺴﻡ‬ ‫‪5‬‬ ‫ﻤﺘﻁﻠﺒﺎﺕ ﻭﻤﻠﺤﻘﺎﺕ ‪VS .NET‬‬
‫‪25‬‬ ‫ﺭﺒﻁ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻜﻭﺩ‬ ‫‪6‬‬ ‫ﻤﺸﺭﻭﻉ ﺘﺠﺭﻴﺒﻲ‬
‫‪29‬‬ ‫ﺍﻟﺘﻘﺎﺭﻴﺭ ‪Crystal Reports‬‬ ‫‪7‬‬ ‫ﻁﺭﻕ ﺘﺨﺯﻴﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ‬
‫‪8‬‬ ‫ﺘﺨﺯﻴﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻤﺴﺠل‬
‫‪12‬‬ ‫ﻤﺸﺎﺭﻴﻊ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‬

‫ﺍﻟﺸﻜل‪ 1‬ﺇﻁﺎﺭ ﺒﺩﺀ ﺘﺤﻤﻴل ‪(Visual Studio .NET) VS .NET‬‬


‫ﻤ ﻘ ﺩﻤ ﺔ‬
‫ﺘﺤﺘﻭﻱ ﻫﺫﻩ ﺍﻟﻤﻠﺨﺼﺎﺕ ﻋﻠﻰ ﺘﻌﻠﻴﻤﺎﺕ ﻋﻥ ﻨﻅﺎﻡ ﺍﻟﺒﺭﻤﺠﺔ ﺒﻴﺴﻙ ﺍﻟﻤﺭﺌﻲ ﻟﻠﺸﺒﻜﺎﺕ ‪(VB .NET) Visual Basic .NET‬‬
‫ﺍﻹﺼـﺩﺍﺭﺓ ‪ ، 2003‬ﻭﺍﻟـﺫﻱ ﻴﻌﻤل ﺘﺤﺕ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ‪ Windows2000‬ﺃﻭ ﻤﺎ ﻴﻠﻴﻪ‪ .‬ﻭﻫﻲ ﻤﺨﺼﺼﺔ ﻟﻁﻠﺒﺔ ﺍﻟﻔﺼل ﺍﻟﺜﺎﻟﺙ‬
‫ﺤﺎﺴـﻭﺏ ﺤﻴﺙ ﺴﺒﻕ ﻟﻬﻡ ﺃﻥ ﺩﺭ‪‬ﺴﻭﺍ ﻤﺒﺎﺩﺉ ﺒﻴﺴﻙ ﺍﻟﻤﺭﺌﻲ ﻓﻲ ﺍﻟﻔﺼل ﺍﻟﺜﺎﻨﻲ ﻭﻴﺩﺭﺴﻭﺍ ﻤﺒﺎﺩﺉ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻫﺫﺍ ﺍﻟﻔﺼل‪.‬‬
‫ﻓﺘﻬـﺘﻡ ﻫﺫﻩ ﺍﻟﻤﻠﺨﺼﺎﺕ ﺒﺘﺨﺯﻴﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ‪ VB .NET‬ﺤﻴﺙ ﺘﺒﺩﺃ ﺒﻤﺭﺍﺠﻌﺔ ﺴﺭﻴﻌﺔ ﻭﺍﻟﺘﻌﺭﻑ ﻋﻠﻰ ﺒﻴﺌﺔ ‪VS .NET‬‬
‫ﺒﻌﺽ ﻤﺸﺎﺭﻴﻊ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﺴﺠل ‪ ،Registry‬ﺜﻡ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﻠﻔﺎﺕ ﻤﻥ ﺨﻼل ‪ ،VB .NET‬ﺜﻡ ﺘﻁﺒﻴﻘﺎﺕ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬
‫ﻤﺭﺍﺠﻌﺔ ‪Review‬‬
‫ﻥ ﻟﻐـﺔ ﺍﻟﺒـﺭﻤﺠﺔ ﻫﻲ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻷﻭﺍﻤﺭ ﻭﺍﻟﻘﻭﺍﻋﺩ ﺘﺴﺘﺨﺩﻡ ﻟﻜﺘﺎﺒﺔ ﺒﺭﻨﺎﻤﺞ )‪ ، (Program‬ﻭﺍﻷﻭﺍﻤﺭ ﻋﺒﺎﺭﺓ ﻋﻥ‬
‫ﺇ‪‬‬
‫ﺘﻌﻠﻴﻤﺎﺕ ﻤﺤﺩﺩﺓ ﺍﻟﻤﻌﻨﻰ ﺘﻘﻭﻡ ﺒﻌﻤﻠﻴﺎﺕ ﻤﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺤﻴﺙ ﻻ ﺘﺘﻐﻴﺭ ﺃﺸﻜﺎل ﻫﺫﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻭﺍﺤﺩﺓ‪ .‬ﺇﺫﻥ ﻓﺎﻟﺒﺭﻨﺎﻤﺞ‬
‫ﻋـﺒﺎﺭﺓ ﻋﻥ ﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻷﻭﺍﻤﺭ ﻤﻜﺘﻭﺒﺔ ﺒﻠﻐﺔ ﻤﺤﺩﺩﺓ ﺒﺤﻴﺙ ﺘﻜﻭﻥ ﻤﺭﺘﺒﺔ ﺘﺭﺘﻴﺒﹰﺎ ﻤﻨﻁﻘﻴﹰﺎ ﻭﻤﻭﺠﻬﺔ ﻟﺤل ﻤﺴﺄﻟﺔ ﻤﻌﻴﻨﺔ‪ .‬ﻓﻴﻌﺘﺒﺭ‬
‫ﻨﻅـﺎﻡ ﺍﻟﺒـﺭﻤﺠﺔ ‪ vb‬ﺘﻁﻭﻴـﺭﹰﺍ ﻟﻠﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ‪ ، QB‬ﻓﻔﻲ ﺴﻨﺔ ‪ 1991‬ﻅﻬﺭ ﺍﻹﺼﺩﺍﺭ ﺍﻷﻭل ‪ vb1‬ﻭﻓﻲ ﺴﻨﺔ ‪ 1998‬ﺍﻹﺼﺩﺍﺭ‬
‫‪ . vb6.0‬ﻭﺍﻹﺼـﺩﺍﺭ ﺍﻷﺤﺩﺙ ﻫﻭ ‪ vb7‬ﺃﻭ ‪ VB .NET‬ﻅﻬﺭﺕ ﺴﻨﺔ ‪ 2001‬ﺜﻡ ﻅﻬﺭﺕ ﺍﻹﺼﺩﺍﺭﺓ ﺍﻟﺘﻲ ﻨﺤﻥ ﺒﺼﺩﺩ ﺩﺭﺍﺴﺘﻬﺎ‬
‫ﻭﻫـﻲ ‪ ،VB .NET2003‬ﻭﻫـﻲ ﺠﻴل ﺠﺩﻴﺩ ﻟﻬﺫﻩ ﺍﻟﻠﻐﺔ ﺘﺨﺘﻠﻑ ﺠﺫﺭﻴﹰﺎ ﻋﻥ ‪ ، VB6.0‬ﺤﻴﺙ ﺃﺼﺒﺤﺕ ﻟﻐﺔ ﺒﺭﻤﺠﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ‬
‫ﺍﻟﻜﺎﺌﻨﺎﺕ ﺍﻟﻤﻭﺠﻬﺔ ‪. (OOP) Object-Oriented programming‬‬
‫ﻟﻘﺩ ﺘﻡ ﺍﻷﺨﺫ ﺒﻨﻅﺭ ﺍﻻﻋﺘﺒﺎﺭ ﺃﻥ‪ ‬ﺍﻟﻘﺎﺭﺉ ﻗﺩ ﺩﺭ‪‬ﺱ ﺃﺴﺎﺴﻴﺎﺕ ﺍﻟﺒﺭﻤﺠﺔ ﻭﺃﺴﺎﺴﻴﺎﺕ ﺒﻴﺴﻙ ﺍﻟﻤﺭﺌﻲ ﻓﻲ ﻓﺼل ﺴﺎﺒﻕ ﻭﻟﺩﻴﻪ‬
‫ﻓﻜﺭﺓ ﻋﻥ ﺘﺼﻤﻴﻡ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺘﻁﺒﻴﻘﺎﺕ ﻭﻤﻠﻔﺎﺕ ‪.Windows‬‬
‫ﻥ ﺃﻜﺜﺭ ﻤﻥ ﻤﻠﻑ ﺘﻌﻤل‬
‫ﻥ ﻜﻠﻤﺔ ﻤﺸﺭﻭﻉ ‪ Project‬ﻓﻲ ‪ vb‬ﻟﻬﺎ ﻨﻔﺱ ﻤﻌﻨﻰ ﻜﻠﻤﺔ ﺒﺭﻨﺎﻤﺞ ‪ Program‬ﻟﻜﻨﻬﺎ ﺘﺸﻴﺭ ﺇﻟﻰ ﺃ ‪‬‬
‫ﺇ‪‬‬
‫ﻤﻌـﹰﺎ ‪ ،‬ﻭﻓـﻲ ﺒﻴـﺌﺔ ‪ VS .NET‬ﺃُﻁﻠﻘﺕ ﺘﺴﻤﻴﺔ ﺤل ‪ Solution‬ﻟﻨﻔﺱ ﺍﻟﻐﺭﺽ‪ .‬ﻭﻜﻠﻤﺔ ﺘﻁﺒﻴﻕ ‪ Application‬ﻫﻲ ﺍﻷﺨﺭﻯ‬
‫ﺘﺤﻤـ ﻟ ﻨﻔـﺱ ﺍﻟﻤﻌﻨـﻰ ﻓﺒﻌﺩ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﺍﻟﻌﻤل ﺒﺎﻟﻤﺸﺭﻭﻉ ﻨﻌﻤل ﻨﺴﺨﺔ ﺘﻨﻔﻴﺫﻴﺔ ﺘﺴﻤﻰ ﺘﻁﺒﻴﻕ ﻭﻫﻲ ﺍﻟﻨﺴﺨﺔ ﺍﻟﺘﻲ ﺘﻭ ‪‬ﺯﻉ ﻋﻠﻰ‬
‫ﺍﻟﻤﺴـﺘﺨﺩﻤﻴﻥ ‪ .Users‬ﻭﺍﻟﻤﺭﺍﺤل ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﺘﻲ ﻴﻤﺭ ﻓﻴﻬﺎ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻤﻨﺫ ﺒﺩﺍﻴﺔ ﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ ﺤﺘﻰ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﻤﺭﺤﻠﺔ ﺍﻟﺘﻁﺒﻴﻕ‬
‫‪ .3‬ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﻔﻴﺫﻱ )ﺍﻟﺘﻁﺒﻴﻕ(‬ ‫‪ .2‬ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺩﻓﻲ‬ ‫ﻫﻲ ﻜﻤﺎ ﻴﻠﻲ‪ .1 :‬ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺼﺩﺭﻱ‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺼﺩﺭﻱ )‪ (Source Program‬ﻫﻭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﻴﻜﺘﺒﻪ ﺍﻟﻤ‪‬ﺒﺭﻤﺞ ﻭﻤﻔﻬﻭﻡ ﻤﻥ ِﻗﺒل ﺍﻹﻨﺴﺎﻥ‪.‬‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺩﻓﻲ )‪ (Object Program‬ﻫﻭ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﻜﺘﻭﺏ ﺒﻠﻐﺔ ﺍﻵﻟﺔ‪.‬‬
‫ﻟﻐﺔ ﺍﻵﻟﺔ )‪ (Machine Language‬ﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺭﻤﺠﺔ ﺍﻟﺘﻲ ﹸﺘﻜﺘﺏ ﺘﻌﻠﻴﻤﺎﺘﻬﺎ ﺒﺎﻟﺸﻔﺭﺓ ﺍﻟﺜﻨﺎﺌﻴﺔ )‪. 1 ، 0 (Binary Code‬‬
‫ﺍﻟﻤ‪‬ﺘـﺭﺠﻡ )‪ (Compiler‬ﻫـﻭ ﺍﻟﺒـﺭﻨﺎﻤﺞ ﺍﻟﺫﻱ ﻴﻘﻭﻡ ﺒﻌﻤﻠﻴﺔ ﺘﺤﻭﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺼﺩﺭﻱ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﻫﺩﻓﻲ‪ ،‬ﻭﻴﻘﻭﻡ ﺍﻟﻤ‪‬ﺘﺭﺠﻡ‬
‫‪ .1‬ﺘﺤﻭﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻤﺼﺩﺭﻱ ﺍﻟﺨﺎﻟﻲ ﻤﻥ ﺍﻷﺨﻁﺎﺀ ﺇﻟﻰ ﺒﺭﻨﺎﻤﺞ ﻫﺩﻓﻲ‬ ‫ﺒﺎﻟﻭﻅﺎﺌﻑ ﺍﻟﺘﺎﻟﻴﺔ‬
‫ﺏ‪ .‬ﺃﺨﻁﺎﺀ ﻗﻭﺍﻋﺩﻴﺔ ﺕ‪ .‬ﺃﺨﻁﺎﺀ ﺘﻨﻔﻴﺫﻴﺔ‬ ‫‪ .2‬ﺍﻜﺘﺸﺎﻑ ﺍﻷﺨﻁﺎﺀ ﻤﺜل ﺃ‪ .‬ﺃﺨﻁﺎﺀ ﺇﻤﻼﺌﻴﺔ‬
‫‪ .3‬ﺭﺒﻁ ﺍﻟﺠ‪‬ﻤل ﺍﻟﺜﻨﺎﺌﻴﺔ ﻭﺒﻨﺎﺀ ﻤﺎ ﻴ‪‬ﺴﻤﻰ ﺒﺎﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﻔﻴﺫﻱ )‪(Executable Program‬‬
‫ﻴﺒ ‪‬ﻴﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﺁﻟﻴﺔ ﻋﻤل ﺍﻟﻤ‪‬ﺘﺭﺠﻡ‬
‫ﻋﺪم‬
‫وﺟﻮد‬
‫اﻟﺒﺮﻧﺎﻣﺞ‬ ‫أﺧﻄﺎء‬ ‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﻬﺩﻓﻲ‬ ‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻟﺘﻨﻔﻴﺫﻱ‬
‫اﻟﻤﺼﺪري‬ ‫ﺍﻟ ‪‬ﻤﺘﺭﺠﻡ‬

‫وﺟﻮد‬
‫أﺧﻄﺎء‬ ‫ﻗﺎﺌﻤﺔ ﺍﻷﺨﻁﺎﺀ‬
‫ﻟﺘﺼﺤﯿﺢ اﻷﺧﻄﺎء‬

‫ﻴﻤﺘﺎﺯ ﺍﻟﻤﺘﺭﺠﻡ ﻓﻲ ﻟﻐﺔ ‪ VB‬ﺒﺄﻨ ‪‬ﻪ ﻤﺘﺭﺠﻡ ﻓﻭﺭﻱ ‪ Interpreter‬ﺃﻱ ﺒﻤﺠﺭﺩ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﻜﺘﺎﺒﺔ ﺴﻁﺭ ﻭﺍﻻﻨﺘﻘﺎل ﺇﻟﻰ ﺴﻁﺭ ﺁﺨﺭ‬
‫ﻴﻘﻭﻡ ﺍﻟﻤﺘﺭﺠﻡ ﺒﺘﺭﺠﻤﺔ ﺍﻟﺠﻤﻠﺔ‪ .‬ﻭﻫﻨﺎﻙ ﻨﻭﻉ ﺁﺨﺭ ﻤﻥ ﺍﻟﻤﺘﺭﺠﻤﺎﺕ ﻴﻘﻭﻡ ﺒﺎﻟﺘﺭﺠﻤﺔ ﻟﻠﺒﺭﻨﺎﻤﺞ ﺩﻓﻌﺔ ﻭﺍﺤﺩﺓ ﻤﺜل ﻤﺘﺭﺠﻡ ﻟﻐﺔ ‪.C‬‬
‫ﻭﻓﻲ ‪ VB .NET‬ﻴﻘﻭﻡ ﺍﻟﻤﺘﺭﺠﻡ ﺒﺒﻨﺎﺀ ﺍﻟﻤﻠﻑ ﺍﻟﺘﻨﻔﻴﺫﻱ ﺩﺍﺨل ﺍﻟﻤﺠﹼﻠﺩ ‪ bin‬ﻓﻲ ﻤﺠﹼﻠﺩ ﺍﻟﺤل )ﺍﻟﻤﺸﺭﻭﻉ(‪.‬‬
‫ﺘﺸﻐﻴل ﺒﻴﺌﺔ ‪ VS .NET‬ﻟﺘﺸﻐﻴل ﺒﻴﺌﺔ ‪ VS .NET‬ﻫﻨﺎﻙ ﻋﺩﺓ ﺃﺴﺎﻟﻴﺏ ﻤﻨﻬﺎ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﺒﺩﺃ ﻭﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫‪1‬‬
‫‪.‬‬ ‫<‬ ‫ﺍﺒﺩﺃ< ﺍﻟﺒﺭﺍﻤﺞ ﺃﻭ ﻜﺎﻓﺔ ﺍﻟﺒﺭﺍﻤﺞ <‬
‫ﻜﻤـﺎ ﻴﻤﻜﻨـﻨﺎ ﺇﻨﺸﺎﺀ ﺍﺨﺘﺼﺎﺭ ﻟـ ‪ VS‬ﻋﻠﻰ ﺴﻁﺢ ﺍﻟﻤﻜﺘﺏ ﺒﺎﻟﻨﻘﺭ ﺒﺎﻷﻴﻤﻥ ﻋﻠﻰ ﺍﺴﻤﻪ‪ ‬ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺍﺒﺩﺃ ﺜﻡ ﻨﺨﺘﺎﺭ ﺇﺭﺴﺎل ﺇﻟﻰ <‬
‫ﺴـﻁﺢ ﺍﻟﻤﻜـﺘﺏ ﻜﺎﺨﺘﺼـﺎﺭ‪ ،‬ﻭﺒﺎﻟﻨﻘﺭ ﺍﻟﻤﺯﺩﻭﺝ ﻋﻠﻰ ﺃﻴﻘﻭﻨﺘﻪ ﻋﻠﻰ ﺴﻁﺢ ﺍﻟﻤﻜﺘﺏ ﻴﺘﻡ ﺘﺸﻐﻴﻠ ‪‬ﻪ‪ ،‬ﻭﺃﺜﻨﺎﺀ ﺘﺤﻤﻴﻠﻪ‪ ‬ﻟﻠﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﻴﺔ‬
‫‪ RAM‬ﻴﻅﻬـﺭ ﺇﻁـﺎﺭ ﻴﺤـﺘﻭﻱ ﺭﻗﻡ ﻭﻨﻭﻉ ﺍﻹﺼﺩﺍﺭﺓ ﻭﺍﺴﻡ ﺍﻟﻤﺎﻟﻙ ﻭﺍﻟﻤﺅﺴﺴﺔ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل‪ 1‬ﻓﻲ ﺍﻟﺼﻔﺤﺔ ‪ ، 0‬ﺜﻡ ﻴﺨﺘﻔﻲ‬
‫ﻭﺘﻅﻬﺭ ﺒﻴﺌﺔ ‪ ، VS .NET‬ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ‪ ، 2‬ﻭﻓﻴﻬﺎ ﺼﻔﺤﺔ ﺍﻟﺒﺩﺍﻴﺔ ‪.Start Page‬‬
‫ﻟﻠﺨﺭﻭﺝ ﻤﻥ ﺍﻟﺒﻴﺌﺔ ﻴﻜﻔﻲ ﺃﻥ ﻨﻐﻠﻕ ﻨﺎﻓﺫﺘﻬﺎ ﺍﻟﺭﺌﻴﺴﻴﺔ ﺃﻭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ‪ File > Exit‬ﺃﻭ ﻜﺒﺱ ﺍﻟﻤﻔﺘﺎﺤﻴﻥ ‪ Alt+F4‬ﻤﻌﹰﺎ‪.‬‬

‫ﺍﻟﺸﻜل‪ 2‬ﺒﻴﺌﺔ ‪ Visual Studio .NET‬ﺼﻔﺤﺔ ﺍﻟﺒﺩﺍﻴﺔ‬


‫>‪ File>New‬ﺃﻭ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻰ ﺍﻟﺯﺭ‬ ‫ﻹﻨﺸـﺎﺀ ﻤﺸـﺭﻭﻉ ﺠﺩﻴـﺩ ﻴﻤﻜﻨـﻨﺎ ﺃﻥ ﻨﺨﺘﺎﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ‬
‫ﻓﻲ ﺼﻔﺤﺔ ﺍﻟﺒﺩﺍﻴﺔ ﻓﻴﻅﻬﺭ ﺍﻹﻁﺎﺭ ‪ New Project‬ﺍﻟﺘﺎﻟﻲ‬

‫ﺗﻐﯿﯿﺮ اﻟﻌﺮض إﻟﻰ‬


‫أﯾﻘﻮﻧﺎت ﺻﻐﯿﺮة‬

‫ﻻﺳﺘﻌﺮاض‬
‫اﻟﻤﺠﻠﺪات وﺗﺤﺪﯾﺪ‬
‫ﻣﻮﻗﻊ ﻟﻤﻠﻔﺎت اﻟﺤﻞ‬

‫ﺍﻟﺸﻜل‪ 3‬ﻤﺭﺒﻊ ﺤﻭﺍﺭ ‪ New Project‬ﻓﻲ ﺒﻴﺌﺔ ‪Visual Studio .NET‬‬


‫ﻓﻨﺤﺩﺩ ﻨﻭﻉ ﺍﻟﻤﺸﺭﻭﻉ ‪ Visual Basic Projects‬ﻭ ‪ Windows Application‬ﺜﻡ ﻨﻜﺘﺏ ﻓﻲ ﺍﻟﺨﺎﻨﺔ ‪ Name:‬ﺍﺴﻤﹰﺎ ﻤﻨﺎﺴﺒﹰﺎ ﻟﻠﻤﺸﺭﻭﻉ‬
‫ﻓﻴﻘﻭﻡ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺈﻨﺸﺎﺀ ﻤﺠﻠﹼﺩ ‪ Folder‬ﺒﻨﻔﺱ ﺍﺴﻡ ﺍﻟﻤﺸﺭﻭﻉ ﺩﺍﺨل ﺍﻟﻤﻭﻗﻊ‬ ‫‪Ok‬‬ ‫ﻭﻨﺤﺩﺩ ﻤﻭﻗﻌﺎﹰ ﻤﻨﺎﺴﺒﺎ ﻓﻲ ﺍﻟﺨﺎﻨﺔ ‪ Location:‬ﺜﻡ‬
‫ﺍﻟﻤﺤـﺩﺩ ﻟـﻴﺤﻔﻅ ﻓﻴﻪ ﻤﻠﻔﺎﺕ ﺍﻟﻤﺸﺭﻭﻉ‪ .‬ﻓﻲ ﺤﺎﻟﺔ ﻜﺘﺎﺒﺔ ﺍﺴﻡ ﻤﺸﺭﻭﻉ ﺒﻨﻔﺱ ﺍﺴﻡ ﻭﻤﻭﻗﻊ ﻤﺸﺭﻭﻉ ﺴﺎﺒﻕ ﻓﺴﺘﻅﻬﺭ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺎﻟﺔ‬
‫ﺘﻌﻁﻴل ﺨﺎﻨﺔ ﺍﻟﺘﺩﻗﻴﻕ‬

‫‪2‬‬
‫ﺍﻟﺸﻜل‪ 4‬ﺭﺴﺎﻟﺔ ﺍﻟﺘﺤﺫﻴﺭ ﻓﻲ ﺤﺎﻟﺔ ﻭﺠﻭﺩ ﺍﻻﺴﻡ‬

‫ﺒﻌـﺩ ﺇﻨﺸـﺎﺀ ﺍﻟﻤﺸﺭﻭﻉ ﺴﻴﺘﻡ ﺤﻔﻅ ﻤﻠﻑ ﺍﻟﺤل ﺒﺎﻻﻤﺘﺩﺍﺩ ‪ .sln‬ﻭﻤﻠﻑ ﺍﻟﻤﺸﺭﻭﻉ ‪ .vbproj‬ﻭﻤﻠﻔﺎﺕ ﻜﻭﺩ ﺍﻟﻨﻤﻭﺫﺝ ﺒﺎﻻﻤﺘﺩﺍﺩ ‪ .vb‬ﻭﺍﻟﻤﻠﻑ‬
‫ﻋﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻗﺕ ﺍﻟﺘﺼﻤﻴﻡ ﺒﺎﻻﻤﺘﺩﺍﺩ ‪ ، .resx‬ﻜﻤﺎ ﻴﺤﺘﻔﻅ ﺍﻟﻨﻅﺎﻡ ﺒﺨﻴﺎﺭﺍﺕ ﻤﺴﺘﺨﺩﻡ ﺍﻟﺤل ﻓﻲ ﻤﻠﻑ ‪ .suo‬ﻭﺨﻴﺎﺭﺍﺕ‬
‫ﺍﻟﻤﺴـﺌﻭل ﻋﻥ ‪‬‬
‫ﻤﺴﺘﺨﺩﻡ ﺍﻟﻤﺸﺭﻭﻉ ﻓﻲ ﻤﻠﻑ ﺍﻤﺘﺩﺍﺩﻩ‪ .user ‬ﻭﺍﻟﻨﺴﺨﺔ ﺍﻟﺘﻨﻔﻴﺫﻴﺔ ﺩﺍﺨل ﺍﻟﻤﺠﹼﻠﺩ ‪ bin‬ﺒﺎﻻﻤﺘﺩﺍﺩ ‪ .exe‬ﺒﻌﺩ ﺍﻟﺘﻨﻔﻴﺫ ﺃﻭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ‪Build‬‬
‫ﺤـﻴﺙ ﻴﺴﺘﺨﺩﻡ ‪ VB .NET‬ﻨﻤﺎﺫﺝ ﻭﻴﻨﺩﻭﺯ ﺍﻟﻘﻴﺎﺴﻴﺔ ﺒﻤﻌﻨﻰ ﺃﻥ‪ ‬ﺍﻟﻨﻤﻭﺫﺝ ﻴﺘﻡ ﺇﻨﺸﺎﺅﻩ‪ ‬ﻭﻜﺫﻟﻙ‬
‫ﺇﻨﺸﺎﺀ ﻋﻨﺎﺼﺭ ﺘﺤﻜﻤﻪ‪ Controls ‬ﻤﻊ ﻀﺒﻁ ﺨﺼﺎﺌﺼﻬﺎ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻜﻭﺩ ﻭﻋﻨﺩ ﺍﻟﺘﻨﻔﻴﺫ‪.‬‬

‫ﺍﻟﺸـﻜل‪ 5‬ﺍﻟﺘﺎﻟـﻲ ﻴ‪‬ﺒﻴﻥ ﺒﻴﺌﺔ ‪ VB .NET‬ﻭﺍﻟﻨﻤﻭﺫﺝ ﺒﺎﻟﻌﺭﺽ ﺍﻟﺘﺼﻤﻴﻤﻲ ﻭﺇﻁﺎﺭ ﻤﺴﺘﻜﺸﻑ ﺍﻟﺤل‪ Solution Explorer‬ﻭﺍﻟﺫﻱ ﻴﺤﺘﻭﻱ‬
‫ﻋﻠﻰ ﻜﺎﺌﻨﺎﺕ ﺍﻟﻤﺸﺭﻭﻉ‬

‫ﻋَﺮض إﻃﺎر‬
‫اﻟﻜﻮد‬

‫إﻃﺎر ﻣﺮﺑﻊ‬ ‫إﻃﺎر‬


‫اﻷدوات‬ ‫ﻣﺴﺘﻜﺸﻒ‬
‫اﻟﺤﻞ‬

‫إﻃﺎر‬
‫اﻟﺨﺼﺎﺋﺺ‬

‫ﺍﻟﺸﻜل ‪ 5‬ﺍﻟﺤل ﺒﺎﻟﻌﺭﺽ ﺍﻟﺘﺼﻤﻴﻡ ﻭﺒﻌﺽ ﺍﻹﻁﺎﺭﺍﺕ ﻤﺨﻔﻴﺔ ﺘﻠﻘﺎﺌﻴﹰﺎ ﻋﻥ ﻁﺭﻴﻕ ﺍﻷﺩﺍﺓ‬
‫ﺷﺮﯾﻂ اﻟﺤﺎﻟﺔ ﯾُﻌﺮض ﻣﻦ‬
‫‪Tools>Options‬‬
‫ﺍﻻﺨﺘـﻴﺎﺭ ﺍﻻﻓﺘﺭﺍﻀـﻲ ﻟﻠﺤﻔﻅ ﻫﻭ ﺤﻔﻅ ﻤﻠﻔﺎﺕ ﺍﻟﺤل ﻜﻠﹼﻤﺎ ﺘﻡ ﺍﻟﺘﻨﻔﻴﺫ ﺃﻭ ﺒﻨﺎﺀ ﺍﻟﺤل ﻭﻴﻤﻜﻥ ﺘﻐﻴﻴﺭﻩ‪ ‬ﻋﻥ ﻁﺭﻴﻕ ‪ Tools>Options..‬ﺜﻡ‬
‫‪ ،‬ﻤﺜﻼﹰ‬ ‫ﺍﻟﺘﺎﺒﻊ ﻟﻠﺒﻨﺩ‬ ‫ﺍﻻﺨﺘﻴﺎﺭﺍﺕ ﺘﺤﺕ ﺍﻻﺨﺘﻴﺎﺭ‬
‫ﻫـﻨﺎﻙ ﺇﻁـﺎﺭﺍﺕ ﻏﻴـﺭ ﻅﺎﻫﺭﺓ ﻓﻲ ﺍﻟﺸﻜل ‪ 5‬ﺃﻋﻼﻩ ﻴ‪‬ﻤﻜﻥ ﺇﻅﻬﺎﺭﻫﺎ ﻋﻥ ﻁﺭﻴﻕ ﺍﻟﻘﺎﺌﻤﺔ ‪ View‬ﻤﻨﻬﺎ ﺇﻁﺎﺭ ﻤﺴﺘﻌﺭﺽ ﺍﻟﻤ‪‬ﻠﻘﻡ‬
‫‪ ،‬ﻤﻭﻗﻌ ‪‬ﻪ‬ ‫‪ Server Explorer‬ﻭﻫـﻭ ﻟﻌـﺭﺽ ﺃﺴـﻤﺎﺀ ﺍﻟ ‪‬ﻤﻠﻘﻤـﺎﺕ ﻭﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ‪ SQL server‬ﻭﺍﻻﺘﺼﺎﻻﺕ ﺍﻟﺘﻲ ﺘﻡ ﺇﻨﺸﺎﺅﻫﺎ‬
‫ﻴ‪‬ﻤﻜﻥ ﺘﻐﻴﻴﺭ ﻤﻭﻗﻌ ‪‬ﻪ ﺒﺎﻟﺴﺤﺏ ﻭﺍﻹﻟﻘﺎﺀ ‪ Drag and Drop‬ﻟﻌﻼﻤﺔ ﺘﺒﻭﻴﺒﻪ ﺃﻭ ﻟﻌﻨﻭﺍﻨﻪ‪.‬‬ ‫ﺍﻻﻓﺘﺭﺍﻀﻲ ﺇﻟﻰ ﺠﻬﺔ ﺍﻟﻴﺴﺎﺭ ﻤﻊ ﻤﺭﺒﻊ ﺍﻷﺩﻭﺍﺕ‬
‫ﺇﻁﺎﺭ ﺍﻟﻜﻭﺩ‬
‫ﺘﻌـﺘﻤﺩ ﺒﻴـﺌﺔ ‪ VS .NET‬ﻋﻠـﻰ ﻨﻤﺎﺫﺝ ‪ Windows‬ﺍﻟﻘﻴﺎﺴﻴﺔ ﻓﺒﺘﻜﻭﻴﻥ ﺍﻟﺤل ﺍﻟﺫﻱ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻨﻤﻭﺫﺝ ‪ Windows‬ﻓﺈﻥ‪ ‬ﺍﻟﻨﻤﻭﺫﺝ‬
‫ﺴ‪‬ﻨﺸﺄ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻜﻭﺩ ﻭﻤﻥ ﺍﻟﺼﻔﺭ ﺤﻴﺙ ﻜﻭﺩ ﺘﺼﻨﻴﻑ )ﻓﺼﻴﻠﺔ( ‪ Class‬ﺍﻟﻨﻤﻭﺫﺝ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫ﻴ‬

‫‪3‬‬
‫ﻥ ﺍﺴﻡ ﺍﻟﺘﺼﻨﻴﻑ )ﺍﻟﻔﺼﻴﻠﺔ( ‪ Class‬ﺒﺎﺴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻤ‪‬ﻌﻠﻥ ﻋﻨﻬﺎ ﻓﻲ ﺃﻭل ﺴﻁﺭ‪ ،‬ﺃﻤﺎ ﺍﻟﺴﻁﺭ ﺍﻟﺜﺎﻨﻲ ﻓﻴ‪‬ﺴﺘﺨﺩﻡ ﺍﻟﻭﺭﺍﺜﺔ‪ Inherits‬ﻭﻫﻲ‬
‫ﻨﺠ ﺩ ﺃ ‪‬‬
‫ﻤـﻥ ﻤﻔﺎﻫـﻴﻡ ﺍﻟﺒﺭﻤﺠﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻜﺎﺌﻨﺎﺕ ﺍﻟﻤﻭﺠﻬﺔ ‪ OOP‬ﺤﻴﺙ ﻴﺠﻌل ﺍﻟﺘﺼﻨﻴﻑ ﺍﻟﺠﺩﻴﺩ ﻴﺭﺙ ﺠﻤﻴﻊ ﺨﺼﺎﺌﺹ ﻭﺃﺴﺎﻟﻴﺏ ﺍﻟﺘﺼﻨﻴﻑ‬
‫ﺍﻷﺴﺎﺴﻲ ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﺠﺯﺀ ﺍﻟﺜﺎﻨﻲ ﻤﻥ ﺍﻟﺴﻁﺭ‪ .‬ﺒﻌﺩ ﻓﺘﺢ ﻤﻨﻁﻘﺔ ﺍﻟﻜﻭﺩ ﺍﻷﺴﺎﺴﻲ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻰ ﻋﻼﻤﺔ ﺍﻟﺠﻤﻊ ﺴﺘﻅﻬﺭ ﻤﻘﺎﻁﻌﻪ‪.‬‬
‫ﺍﻟﻜﻭﺩ ﺍﻷﺴﺎﺴﻲ ﻟﺘﻜﻭﻴﻥ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﺘﻁﺒﻴﻕ ‪Window s‬‬
‫ﺒﻌﺩ ﺇﻨﺸﺎﺀ ﺍﻟﺤل ﺴﻴﺘﻡ ﺘﻜﻭﻴﻥ ﺍﻟﻨﻤﻭﺫﺝ ﻤﻥ ﺨﻼل ﺍﻟﻜﻭﺩ ﻻ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺃﻱ ﻋﻨﺼﺭ ﺘﺤﻜﻡ‪ .‬ﻭﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻴ‪‬ﻴﺒ‪‬ﻥ ﻜﻭﺩ ﺘﺼﻨﻴﻑ ﺍﻟﻨﻤﻭﺫﺝ‬
‫ﻥ ‪ VB .NET‬ﺴﻴﻜﺘﺏ ﺫﻟﻙ ﻓﻲ ﺍﻟﻜﻭﺩ‬
‫ﻭﻜﻠﹼﻤﺎ ﺃﻀﻔﻨﺎ ﻋﻨﺼﺭ ﺘﺤﻜﻡ ﻟﻠﻨﻤﻭﺫﺝ ﺃﻭ ﻀﺒﻁﻨﺎ ﺨﺼﺎﺌﺹ ﻜﺎﺌﻥ ﻤﺎ ﻓﺈ ‪‬‬

‫‪4‬‬
‫ﻤﺘﻁﻠﺒﺎﺕ ﻭﻤﻠﺤﻘﺎﺕ ‪Visual Basic .NET 2003‬‬
‫ﺒﻴﺴـﻙ ﺍﻟﻤﺭﺌـﻲ ﻟﻠﺸﺒﻜﺎﺕ ﺃﻭ ‪ VB .NET‬ﺃﻭ ‪ VB7.1‬ﺃﺤﺩ ﺃﻨﻅﻤﺔ ﺍﻟﺒﺭﻤﺠﺔ ﻓﻲ ﺒﻴﺌﺔ ﺍﻟﺘﻁﻭﻴﺭ ‪ Visual Studio .NET‬ﻭﺍﻟﺘﻲ‬
‫ﻭ‪‬ﻁﻠﻕ ﻋﻠﻰ ﺍﻟﻤﺸﺭﻭﻉ ﻓﻲ ﻫﺫﻩ ﺍﻟﺒﻴﺌﺔ ﺍﻟﺘﺴﻤﻴﺔ ﺤـ ﻟ‬
‫ﺘﺤﺘﻭﻱ ﺃﻴﻀﺎ ﻋﻠﻰ ‪ (C Sharp) Visual C#‬ﻭ ‪ Visual C++‬ﻭ ‪ ، Visual J#‬ﻴ‬
‫‪ ، Solution‬ﻭﻤﻥ ﺍﻟﻤﺘﻁﻠﺒﺎﺕ ﻭﺍﻟﻤﻠﺤﻘﺎﺕ ﻟﺒﻴﺌﺔ ﺍﻟﺘﻁﻭﻴﺭ ‪ VS .NET‬ﻤﺎ ﻴﻠﻲ‪:‬‬
‫‪ .1‬ﻴﺤﺘﺎﺝ ﻨﻅﺎﻡ ﺘﺸﻐﻴل ‪ Windows2000‬ﺃﻭ ﻤﺎ ﻴﻠﻴﻪ ﻤﺜل ‪ Windows XP‬ﺃﻭ ‪Windows 2003 Server‬‬
‫‪ .2‬ﻴﺤﺘﺎﺝ ﺇﻁﺎﺭ ﻋﻤل ‪ .NET Framework‬ﻴﺄﺘﻲ ﻤﻊ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﻹﺼﺩﺍﺭﺓ ﺍﻷﺤﺩﺙ ‪ ، 1.1‬ﻭﻴﺒﻘﻰ ﺍﻟﺘﻁﺒﻴﻕ ﻴﺤﺘﺎﺝ ﺇﻟﻰ‬
‫‪ .NET framework1.1 Redistributable‬ﻓﻲ ﺠﻬﺎﺯ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻴﺠﺏ ﺇﺭﻓﺎﻗﻪ‪ ‬ﻤﻊ ﺍﻟﻨﺴﺦ ﺍﻟﺘﻭﺯﻴﻌﻴﺔ ﻟﻠﺘﻁﺒﻴﻕ ﻭﻫﻭ ﺒﺤﺠﻡ ‪23.1MB‬‬
‫‪ .3‬ﻴﺤـﺘﺎﺝ ﺍﻟﻭﺼـﻭل ﺇﻟﻰ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ )‪ Microsoft Data Access Components version 2.6 (MDAC‬ﺃﻭ ﻤﺎ ﻴﻠﻴﻪ‬
‫ﻭﺍﻹﺼﺩﺍﺭﺓ ﺍﻷﺤﺩﺙ ﻫﻲ ‪ MDAC2.8‬ﻓﻲ ‪ ، 13/8/2003‬ﻭﻋﻨﺩ ﺇﻋﺩﺍﺩ ‪ VS .NET2003‬ﻴﺘﻡ ﺇﻋﺩﺍﺩ ﻫﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﺎﻹﺼﺩﺍﺭﺓ‬
‫‪ 2.7‬ﺘﻠﻘﺎﺌﻴﹰﺎ‪ ،‬ﻭ ﺘﻅﻬﺭ ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ﺤﺎﻟﺔ ﻋﺩﻡ ﻭﺠﻭﺩ ﺇﺤﺩﻯ ﺍﻹﺼﺩﺍﺭﺍﺕ ﺍﻟﻤﻁﻠﻭﺒﺔ ﻋﻨﺩﻤﺎ ﻨﺭﻏﺏ ﺒﺈﻨﺸﺎﺀ ﻨﻤﻭﺫﺝ ﺒﻴﺎﻨﺎﺕ ﺒﻤﻌﺎﻟﺞ‬
‫ﺍﻟﻨﻤﺎﺫﺝ ﻭﻻ ﻴﺘﻤﻜﻥ ﺍﻟﻤﻌﺎﻟﺞ )‪ (wizard‬ﻤﻥ ﺇﻨﺸﺎﺀ ﺍﻟﻨﻤﻭﺫﺝ‬

‫اﻟﺸﻜﻞ ‪ 6‬رﺳﺎﻟﺔ ﺧﻄﺄ‬


‫ﺑﻌﺪم وﺟﻮد ‪MDAC‬‬
‫ﺑﺎﻹﺻﺪارة اﻟﻤﻄﻠﻮﺑﺔ‬

‫ﻭﻤﻥ ﺍﻟﻤﻠﺤﻘﺎﺕ ﺒﻬﺫﺍ ﺍﻟﺒﺭﻨﺎﻤﺞ‬


‫‪Microsoft Data Access Components (MDAC) 2.8 Software Development Kit (SKD) 2004/3/17‬‬
‫‪Microsoft Data Access Components (MDAC) Security Patch MS04-003 (32-bit) 2004 /1/13‬‬

‫‪ .4‬ﻤﻥ ﺍﻟﻤﻠﺤﻘﺎﺕ ﺍﻟﻤﻬﻤﺔ ﺸﺒﻜﺔ ﺍﻟﻤﻁﻭﺭﻴﻥ ﻤﻥ ﻤﺎﻴﻜﺭﻭﺴﻭﻓﺕ )‪ Microsoft Developer Network (MSDN‬ﻭﻫﻲ ﺘﻌﻠﻴﻤﺎﺕ ﻟﻜﻴﻔﻴﺔ‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺒﺭﻤﺠﺔ ﻓﻲ ﺒﻴﺌﺔ ‪ VS .NET‬ﻭﺘﺄﺘﻲ ﺒﺜﻼﺙ ﺃﻗﺭﺍﺹ ﻤﻀﻐﻭﻁﺔ )‪ (3CD‬ﻤﻊ ‪VS .NET 2003‬‬
‫‪ .5‬ﻤﻥ ﺍﻟﻤﻠﺤﻘﺎﺕ ﺍﻟﻤﻔﻴﺩﺓ ﻟﻠﻤﻁﻭﺭﻴﻥ ﻓﻲ ﺒﻴﺌﺔ ‪ VS .NET‬ﻭﺨﺼﻭﺼﺎ ﺒﺎﺴﺘﺨﺩﺍﻡ ‪ VB .NET‬ﻫﻲ‬
‫‪ Visual Basic NET Resource Kit‬ﻭﻫﻲ ﻤﺠﺎﻨﻴﺔ ﻓﻲ ﻤﻭﻗﻊ ﺍﻟﺸﺭﻜﺔ ‪ www.microsoft.com/downloads‬ﻭﻴﺼل ﺤﺠﻤﻬﺎ‬
‫ﺤﺘﻰ ‪. 192MB‬‬
‫‪ .6‬ﻓﻲ ﺤﺎﻟﺔ ﺒﻨﺎﺀ ﻤﺸﺎﺭﻴﻊ ﻟﻼﺘﺼﺎل ﺒﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ ﻤﻔﺘﻭﺡ ‪ ODBC .NET‬ﻓﻴﺠﺏ ﺇﻋﺩﺍﺩ ﺍﻟﻤﻠﻑ ﺍﻟﺨﺎﺹ ﺒﻬﺫﺍ ﺍﻟﻤﻭﱢﻓﺭ ﻭﻫﻭ ‪ODBC‬‬
‫‪ .NET Data Provider‬ﻭﺤﺠﻤ ‪‬ﻪ ‪ 848KB‬ﻭﻏﻴﺭ ﻤﺭﻓﻕ ﻤﻊ ‪. VS .NET2003‬‬
‫‪ .7‬ﻋـﻨﺩ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻰ ﺍﺴﺘﺨﺩﺍﻡ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ‪ SQL server‬ﺃﻭ ‪ MSDE server‬ﻭﻫﻲ ﻤﺠﻤﻭﻋﺔ ﺠﺯﺌﻴﺔ ﻤﻥ ‪ SQL server‬ﻓﻴﺠﺏ‬
‫ﺇﻨﺸـﺎﺀ ‪‬ﻤﻠﻘﱢـﻡ )‪ (server‬ﺨـﺎﺹ ﺒﺎﺴـﺘﺨﺩﺍﻡ ‪ (Microsoft Desktop Engine) MSDE‬ﻭﻫـﻭ ﻤﺘﻭﻓﺭ ﻤﺠﺎﻨﺎﹰ ﻤﻊ ﻤﻨﺘﺠﺎﺕ‬
‫ﻤﺎﻴﻜﺭﻭﺴـﻭﻓﺕ ﻤـﺜل ‪ ،Office‬ﻓـﻴﺠﻌل ﻤﻥ ﺍﻟﻤﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ﻤ‪‬ﻠﻘﻡ ‪ SQL‬ﻓﻌﻨﺩﻤﺎ ﻴﻜﻭﻥ ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻌﻤل ﺘﻅﻬﺭ‬
‫‪.‬‬ ‫ﺃﻴﻘﻭﻨﺘ ‪‬ﻪ ﺒﻤﻨﻁﻘﺔ ‪) System Tray‬ﺼﻴﻨﻴﺔ ﺍﻟﻨﻅﺎﻡ( ﻀﻤﻥ ﺸﺭﻴﻁ ﺍﻟﻤﻬﺎﻡ‬
‫‪ .8‬ﺍﻟﺒـﺭﻨﺎﻤﺞ ‪ VISIO‬ﻭﻫـﻭ ﺒﺭﻨﺎﻤﺞ ﺭﺴﻭﻤﻲ ﻹﻨﺸﺎﺀ ﺍﻟﻤﺨﻁﻁﺎﺕ‪ ،‬ﻭﺍﻟﺒﺭﻨﺎﻤﺞ ‪ SourceSafe‬ﻟﺘﻜﻭﻴﻥ ﻗﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﺘﺨ ‪‬ﺯﻥ ﺍﻟﻤﻠﻔﺎﺕ‬
‫ﺍﻟﻤﺭﺍﻓﻘﺔ ﻟﻠﻤﺸﺭﻭﻉ ﻻﺴﺘﺨﺩﺍﻤﻬﺎ ﻓﻴﻤﺎ ﺒﻌﺩ‪ ،‬ﻭﻟﺘﺘﺒﻊ ﺍﻷﺨﻁﺎﺀ ﺍﻟﺘﻲ ﺘﺤﺼل ﺒﻜﻭﺩ ﺍﻟﻤﺸﺭﻭﻉ‪.‬‬

‫‪5‬‬
‫ﻤﺸﺭﻭﻉ ﺘﺠﺭﻴﺒﻲ‬
‫ﻨﺭﻏﺏ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺸﺭﻭﻉ ﺍﻟﺒﺴﻴﻁ ﻋﺭﺽ ﺍﻟﻭﻗﺕ ﻭﺍﻟﺘﺎﺭﻴﺦ ﻓﻲ ﻤﺘﺴﻤﻴﺘﻴﻥ ‪ Labels‬ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻨﻀﻊ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺇﻀﺎﻓﺔ ﺇﻟﻰ‬
‫‪ Enabled‬ﻋﻠﻰ ‪ True‬ﻭﺍﻟﺨﺎﺼﻴﺔ ‪ Interval‬ﻋﻠﻰ ‪ 1000‬ﻤل ﺜﺎﻨﻴﺔ ﻭﻨﻜﺘﺏ ﻓﻲ‬ ‫ﺍﻟﻤﺘﺴـﻤﻴﺘﻴﻥ ﻤﻭﻗﹼﺕ ‪ Timer‬ﻭﻨﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ‬
‫ﻟﻌﺭﺽ ﺍﻟﻭﻗﺕ‪ ،‬ﺤﻴﺙ ‪ Lblt‬ﻫﻭ ﺍﺴﻡ ﺍﻟﺘﺴﻤﻴﺔ‪.‬‬ ‫ﺍﻟﻤﻘﻁﻊ ‪ Timer1_Tick‬ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ‪lblt.Text = TimeString:‬‬
‫ﻭﻟﻌﺭﺽ ﺍﻟﺘﺎﺭﻴﺦ ﻨﺴﺘﺨﺩﻡ ﻓﻲ ﺍﻟﺘﺴﻤﻴﺔ ‪ Lbld‬ﻓﻨﻜﺘﺏ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻤﻘﻁﻊ ‪ Form1_Activated‬ﻤﺜ ﹰ‬
‫ﻼ‬
‫‪.‬‬ ‫‪Lbld.Text = DateString‬‬
‫ﻤﻼﺤﻅﺔ‪ :‬ﻴ‪‬ﻤﻜﻥ ﺇﻴﻘﺎﻑ ﻋﻤل ﺍﻟﻤﻭﻗﹼﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻷﺴﻠﻭﺏ )(‪ ، Timer1.Stop‬ﻭﺒﺩﺀ ﻋﻤل ﺍﻟﻤﻭﹼﻗﺕ ﺒﺎﻷﺴﻠﻭﺏ)(‪Timer1.Start‬‬
‫ﻤﺜﺎل ﻟﻌﺭﺽ ﺭﺴﺎﻟﺔ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﻌﺩ ﻤﺭﻭﺭ ‪ 10‬ﺜﻭﺍﻨﻲ ﻓﻨﻜﺘﺏ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﻤﻭﹼﻗﺕ‬

‫ﻥ ﺘﺎﺭﻴﺦ‬
‫ﺘﻤـﺭﻴﻥ‪ :‬ﻁـ ‪‬ﻭﺭ ﺍﻟﺒـﺭﻨﺎﻤﺞ ﺍﻷﺨﻴﺭ ﻟﻴﺨﺘﺒﺭ ﺍﻟﺘﺎﺭﻴﺦ ﻓﻔﻲ ﺤﺎﻟﺔ ﻜﻭﻥ ﺍﻟﺘﺎﺭﻴﺦ ﺃﺼﻐﺭ ﻤﻥ ‪ 2004/9/1‬ﻓﺘﻅﻬﺭ ﺭﺴﺎﻟﺔ ﻨﻌﻡ ‪ /‬ﻻ ﺒﺄ ‪‬‬
‫ﺍﻟـﻨﻅﺎﻡ ﺨﻁـﺄ ﻫـ ﻟ ﺘﺭﻴﺩ ﺘﺼﺤﻴﺤﻪ‪ ،‬ﻋﻨﺩ ﺍﺨﺘﻴﺎﺭ ﻨﻌﻡ ﻴﺘﻡ ﻓﺘﺢ ﻨﻤﻭﺫﺝ ﺁﺨﺭ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻋﻨﺎﺼﺭ ﺘﺤﻜﻡ ﺘﹸﻤﻜﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺘﻐﻴﻴﺭ‬
‫ﺍﻟﺘﺎﺭﻴﺦ‪ ،‬ﻤﺜل ‪ DateTimePicker‬ﺃﻭ ‪. ComboBox‬‬

‫‪6‬‬
‫ﻁ ﺭﻕ ﺘﺨ ﺯ ﻴ ﻥ ﺍ ﻟ ﺒ ﻴ ﺎ ﻨ ﺎ ﺕ‬
‫ﻤـﻥ ﻁﺭﻕ ﺘﺨﺯﻴﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻜﻭﺩ ﻓﻲ ﺘﺨﺯﻴﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻜﻤﺎ ﺴﺒﻕ ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ﺍﻟﺴﺎﺒﻕ‪ ،‬ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﺴﺠﻼﺕ ‪Registry‬‬
‫ﻭﻫـﻲ ﻗﺎﻋـﺩﺓ ﺒـﻴﺎﻨﺎﺕ ﻓـﻲ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﻟﺘﺨﺯﻴﻥ ﺒﻴﺎﻨﺎﺕ ﻋﻥ ﺍﻟﺒﺭﺍﻤﺞ‪ ،‬ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻠﻔﺎﺕ ﻤﺜل ﻤﻠﻔﺎﺕ ‪ (initialization) .ini‬ﻤﻠﻔﺎﺕ‬
‫ﺇﻋـﺩﺍﺩﺍﺕ ﺍﻟﺘﻜﻭﻴﻥ‪ ،‬ﻭﻤﻠﻔﺎﺕ ‪ (extensible markup language) .xml‬ﻟﻐﺔ ﺍﻟﺘﺭﻤﻴﺯ ﺍﻟﻘﺎﺒﻠﺔ ﻟﻠﺘﻭﺴﻴﻊ‪ ، … ،‬ﻭﺍﺴﺘﺨﺩﺍﻡ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‬
‫‪.Databases‬‬
‫ﻭﻤﻥ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺘﻲ ﹸﺘﺴﺘﺨﺩﻡ ﻟﺘﺨﺯﻴﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻠﻔﺎﺕ ﺍﻟﻘﻴﻡ ﺍﻟﻤﻔﺼﻭﻟﺔ ﺒﻔﺎﺼﻠﺔ )‪. Comma-Separated Values File (CSV‬‬
‫ﻤـﺜﺎل‪ :‬ﻗـﺭﺍﺀﺓ ﻤﺤﺘﻭﻴﺎﺕ ﻤﻠﻑ ﻨﻭﻋ ‪‬ﻪ ‪ CSV‬ﻭﻋﺭﻀﻬﺎ ﻓﻲ ﻤﺭﺒﻊ ﻨﺹ ﺍﺴﻤﻪ ‪ txtStu‬ﺒﻤﺸﺭﻭﻉ ﻨﻭﻋﻪ‪، Windows Application ‬‬
‫ﻴﺠـﺏ ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻤﻠﻑ ﻤﻭﺠﻭﺩ ﻓﻲ ﻨﻔﺱ ﻤﺠﻠﹼﺩ ﺍﻟﺘﻁﺒﻴﻕ‪ ،‬ﻓﻴﻤﻜﻥ ﺘﻜﻭﻴﻨ ‪‬ﻪ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻔﻜﺭﺓ )‪ (Notepad‬ﻭﻨﺤﻔﻅﻪ‪ ‬ﻓﻲ ﺍﻟﻤﺠﻠﹼﺩ ‪ bin‬ﺒﺎﺴﻡ‬
‫"‪ "students.csv‬ﻭﺒﺘﺭﻤﻴﺯ ‪ Unicode‬ﻭﻟﻴﺱ ‪ ANSI‬ﻴﻟ‪‬ﻤﻜﻥ ﻗﺭﺍﺀﺓ ﺍﻟﻨﺹ ﺍﻟﻌﺭﺒﻲ ﻤﻥ ﺨﻼل ﺍﻟﺘﻁﺒﻴﻕ‪.‬‬
‫ﻜﻭﺩ ﺍﻟﺘﺼﻨﻴﻑ )ﺍﻟﻔﺼﻴﻠﺔ( )‪ (class‬ﺍﻟﺨﺎﺹ ﺒﺎﻟﻨﻤﻭﺫﺝ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬

‫‪7‬‬
‫ﻭﻨﺎﺘﺞ ﺍﻟﻘﺭﺍﺀﺓ ﻤﻥ ﺍﻟﻤﻠﻑ ﻭﺍﻟﻌﺭﺽ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ﻜﻤﺎ ﻴﻠﻲ‬ ‫ﻭﻜﻤﺜﺎل ﻋﻠﻰ ﺍﻟﻤﻠﻑ ﻤﺎ ﻴﻠﻲ‬

‫ﺘﻤـﺭﻴﻥ‪ :‬ﺤ ‪‬ﻭﺭ ﺍﻟﻜﻭﺩ ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ﺍﻷﺨﻴﺭ ﺍﻟﺴﺎﺒﻕ ﺒﺤﻴﺙ ﻴﺼﺒﺢ‬


‫ﻋﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ‬
‫‪‬‬

‫ﺤل ﺍﻟﺘﻤﺭﻴﻥ‪ :‬ﻓﻴﻤﺎ ﻴﻠﻲ ﺍﻟﺘﺤﻭﻴﺭ ﻓﻲ ﺍﻟﻜﻭﺩ ﺒﻌﺩ ﺍﻹﻋﻼﻥ ﻋﻥ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻓﻲ ﺍﻟﻤﻘﻁﻊ ‪ Form_Load‬ﻭﺘﻡ ﺘﻐﻴﻴﺭ ﺃﺴﻤﺎﺀ ﺍﻟﻜﺎﺌﻨﺎﺕ ﺇﻟﻰ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﻌﺭﺒﻴﺔ ﻜﺘﺠﺭﺒﺔ ﻟﻜﺘﺎﺒﺔ ﺃﺴﻤﺎﺀ ﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﺒﺎﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ‪.‬‬

‫‪8‬‬
‫ﺘﺨﺯﻴﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟ ‪‬ﻤﺴﺠ‪‬ل‬
‫ﻤـﺜﺎل‪) :‬ﺍﻟـﺘﻌﺎﻤل ﻤـﻊ ﺍﻟ ‪‬ﻤﺴﺠ‪‬ل ‪ (Registry‬ﺴﹸﻨﺼﻤﻡ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺜﺎل ﻤﺸﺭﻭﻋﹰﺎ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﺜﻼﺙ ﻨﻤﺎﺫﺝ‪ ،‬ﻭﺴﻨﻘﻭﻡ ﺒﺤﻤﺎﻴﺔ‬
‫ﺍﻟﺘﻁﺒـﻴﻕ ﺒﻜﻠﻤـﺔ ﻤﺭﻭﺭ ‪ Password‬ﺤﻴﺙ ﺃﻥ‪ ‬ﺍﻟﻜﻠﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻫﻲ ‪ 0000‬ﻭﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺘﻐﻴﻴﺭﻫﺎ ﻤﻥ ﺨﻼل‬
‫ﺍﻟـﻨﻤﻭﺫﺝ ﺍﻟـﺜﺎﻟﺙ ‪ Form3‬ﻭﺍﻟﺫﻱ ﻴﻅﻬﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺃﻤﺎﻥ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻨﻲ‪ .‬ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﺍﻟﻤﺴﺠﻼﺕ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺩﺍﻟﺔ‬
‫ﺠل‪ ،‬ﻭﺍﻟﺩﺍﻟﺔ ‪DeleteSetting‬‬
‫ﺠل‪ ،‬ﻭﺍﻟﺩﺍﻟﺔ ‪ SaveSetting‬ﻟﻠﻜﺘﺎﺒﺔ )ﺍﻟﺘﺨﺯﻴﻥ(ﺇﻟﻰ ﺍﻟﻤﺴ ‪‬‬
‫‪ GetSetting‬ﻟﻠﻘـﺭﺍﺀﺓ ﻤﻥ ﺍﻟﻤﺴ ِ‬
‫ﺠﻼﺕ ﺃﻭ ﺍﻟﺘﺴﺠﻴل ‪ registry‬ﻫﻲ ﻗﺎﻋﺩﺓ‬
‫ﺠل‪ ،‬ﻭﺍﻟﻤﺴ ‪‬‬
‫ﻟﺤـﺫﻑ ﺇﻋـﺩﺍﺩﺍﺕ ﺘﻁﺒـﻴﻕ ﺃﻭ ﺠﺯﺀ ﻤﻨﻬﺎ ﺃﻭ ﻤﻔﺘﺎﺡ ‪ Key‬ﻤﻥ ﺍﻟﻤﺴ ‪‬‬
‫ﺒـﻴﺎﻨﺎﺕ ‪ Database‬ﻤﺭﻜﺯﻴﺔ ﻴﺴﺘﺨﺩﻤﻬﺎ ﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ‪ Windows‬ﻟﺘﺨﺯﻴﻥ ﺒﻴﺎﻨﺎﺕ ﻫﺎﻤﺔ ﺘﻀﻡ ﺍﻹﻋﺩﺍﺩﺍﺕ ‪Settings‬‬
‫ﻭﺍﻟﺘﻜﻭﻴـﻨﺎﺕ ‪ Configurations‬ﺍﻟﺨﺎﺼـﺔ ﺒـﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﻨﻔﺴﻪ ﻭﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﻌﺎﻤﻠﺔ ﻤﻥ ﺨﻼﻟﻪ ﻭﺍﻟﻤﻌﺩﺍﺕ ﺍﻟﻤﺘﺼﻠﺔ ﺒﻪ‪.‬‬
‫ﻭﻹﺠـﺭﺍﺀ ﺘﻌـﺩﻴﻼﺕ ﻋﻠـﻰ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺴﺎﺒﻘﺔ ﺍﻟﱢﺫﻜﺭ ﻴﻭﻓﺭ ‪ Windows‬ﺒﺭﻨﺎﻤﺞ ﻤﺤﺭﺭ ﺍﻟﻤﺴﺠِل ‪Rigistry Edit‬‬
‫‪ .‬ﻭﺘﺭﻜﻴﺏ‬ ‫ﻭﻟﺘﺸـﻐﻴﻠﻪ ﻨﻜﺘﺏ ﺍﻷﻤﺭ ‪ regedit‬ﻓﻲ ﺨﺎﻨﺔ ﺍﻷﻤﺭ ﻓﻲ ﺇﻁﺎﺭ ﺘﺸﻐﻴل… ‪ Run‬ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﺒﺩﺃ ﺜﻡ‬
‫ﺍﻟﺩﻭﺍل ﺍﻟﺘﻲ ﻴﻭﻓﺭﻫﺎ ‪ VB .NET‬ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﺴﺠِل ﻜﻤﺎ ﻴﻠﻲ‪:‬‬

‫ﻓﻲ‬ ‫ﺠل‬
‫ﻟﻠﻘـﺭﺍﺀﺓ ﻤـﻥ ﺍﻟﻤﺴ ِ‬
‫ﺠﺩﺕ‪.‬‬
‫ﺤﺎﻟﺔ ﻋﺩﻡ ﻭﺠﻭﺩ ﺍﻟﻤﻔﺘﺎﺡ ‪ Key‬ﺍﻟﻤﺤﺩﺩ ﻓﺈﻥ‪ ‬ﺍﻟﺩﺍﻟﺔ ‪ GetSetting‬ﺴﹸﺘﻌﻴﺩ ﺍﻟﻭﺴﻴﻁﺔ ﺍﻟﺭﺍﺒﻌﺔ ﻓﻲ ﺘﺭﻜﻴﺒﻬﺎ ﺇﻥ ﻭ ِ‬
‫ﺇﻥ ﻟﻡ ﻴﻜﻥ‬ ‫ﺠل‬
‫ﻟﻠﻜـﺘﺎﺒﺔ ﺇﻟـﻰ ﺍﻟﻤﺴ ِ‬
‫ﺍﻟﻤﻔﺘﺎﺡ ﻤﻭﺠﻭﺩﹰﺍ ﺴﻴﺘﻡ ﺘﻜﻭﻴﻨﻪ‪.‬‬
‫ﻟﺤﺫﻑ ﻤﻔﺘﺎﺡ ﺃﻭ ﺠﺯﺀ ﺃﻭ ﺇﻋﺩﺍﺩﺍﺕ ﺘﻁﺒﻴﻕ‬
‫ﺒﻌـﺩ ﺘﻜﻭﻴﻥ ﻤﺸﺭﻭﻉ ﺠﻴﺩ‪ ،‬ﻨﻀﻴﻑ ﺇﻟﻰ ﺍﻟﻤﺸﺭﻭﻉ ﻨﻤﻭﺫﺠﻴﻥ‬
‫ﺁﺨﺭﻴﻥ ﻓﻴﺼﺒﺢ ﻓﻴﻪ ﺜﻼﺜﺔ ﻨﻤﺎﺫﺝ‪ .‬ﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﻭل ﻜﻤﺎ‬
‫ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ‬

‫‪Form1‬‬
‫ﺨﺼﺎﺌﺹ ﻜﺎﺌﻨﺎﺕ ﺍﻟﻨﻤﻭﺫﺝ ‪Form1‬‬
‫‪Object‬‬ ‫‪Properties‬‬ ‫‪Value‬‬
‫‪Form‬‬

‫‪Text‬‬ ‫ﻜﻠﻤﺔ ﺍﻟﻤﺭﻭﺭ‬


‫‪Text Box‬‬ ‫‪Name‬‬ ‫‪txtp‬‬
‫‪MaxLength‬‬ ‫‪14‬‬
‫‪PasswordChar‬‬ ‫*‬

‫‪Button‬‬ ‫‪Name‬‬ ‫‪btnok‬‬


‫‪Text‬‬ ‫&ﻤﻭﺍﻓﻕ‬
‫‪Button‬‬ ‫‪Text‬‬ ‫ﺇل&ﻏﺎﺀ ﺍﻷﻤﺭ‬

‫ﻤﻘﺎﻁﻊ ‪ Form1‬ﻭﻤﻘﻁﻊ ﺯﺭ ﺍﻷﻤﺭ ﻤﻭﺍﻓﻕ ﻋﻨﺩ ﺍﻟﻨﻘﺭ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬

‫‪9‬‬
‫ﻟﻜـﻲ ﻴﺘﻌـ ‪‬ﺭﻑ ﺍﻟـﻨﻤﻭﺫﺝ ﺍﻷﻭل ﻭﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻟﺙ ﻋﻠﻰ ﻤﺘﻐﻴﺭ ﻜﻠﻤﺔ ﺍﻟﻤﺭﻭﺭ ‪ pwd‬ﺴﹸﻨﻌﻠﻥ ﻋﻨﻪ‪ ‬ﻓﻲ ﻭﺤﺩﺓ ﻨﻤﻁﻴﺔ ﻗﻴﺎﺴﻴﺔ ‪ Module‬ﺒﻌﺩ‬
‫ﻭﻨﻜﺘﺏ ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ‪:‬‬ ‫ﺜﻡ‬ ‫ﺜﻡ ﺍﻷﻤﺭ‬ ‫ﺇﻀﺎﻓﺘﻬﺎ ﻟﻠﻤﺸﺭﻭﻉ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ‬

‫ﻟﻠﻨﻤﻭﺫﺝ ﻭﻨﻜﺘﺏ ﻓﻲ ﻜﻭﺩ‬ ‫ﺒﺈﻀﺎﻓﺔ ﻋﻨﺼﺭ ﺘﺤﻜﻡ‬ ‫ﻭﻨﺼﻤﻡ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻨﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺘﺎﻟﻴﺔ‬
‫‪Dim frm As New Form3‬‬ ‫ﺍﻟﺒﻨﺩ ﺍﻟﺴﻁﺭﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ ‪:‬‬
‫)(‪frm.ShowDialog‬‬
‫ﻭﻨﻜﺘﺏ ﻓﻲ ﺍﻟﻤﻘﻁﻊ ‪ Form2_Closed‬ﺍﻷﻤﺭ ‪End‬‬
‫ﻭﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺜﺎﻟﺙ ‪ Form3‬ﻜﻤﺎ ﻴﻠﻲ ‪:‬‬

‫ﺨﺼﺎﺌﺹ ﻜﺎﺌﻨﺎﺕ ﺍﻟﻨﻤﻭﺫﺝ ‪Form3‬‬


‫‪Object‬‬ ‫‪Properties‬‬ ‫‪Value‬‬
‫‪Form‬‬ ‫‪BorderStyle‬‬ ‫‪1 -Fixed Single‬‬
‫‪Text‬‬ ‫ﺘﻐﻴﻴﺭ ﻜﻠﻤﺔ ﺍﻟﻤﺭﻭﺭ‬
‫‪TextBox‬‬ ‫‪Name‬‬ ‫‪txtpold‬‬
‫‪MaxLength‬‬ ‫‪14‬‬

‫‪10‬‬
TabIndex 0
PasswordChar *
TextBox Name txtpnew
MaxLength 14
PasswordChar *
Visible False
TextBox Name txtpnew1
MaxLength 14
PasswordChar *
Visible False
Label Name lblpOld
Text ‫ﺍﺩﺨل ﺍﻟﻜﻠﻤﺔ ﺍﻟﺤﺎﻟﻲ‬
Label Name lblpnew
Text ‫ﺍﻟﻜﻠﻤﺔ ﺍﻟﺠﺩﻴﺩﺓ‬
Visible False
Label Name lblpnew1
Text ‫ﺘﺄﻜﻴﺩﻫــﺎ‬
Visible False
Button Name btnCh
Text ‫ﺘﻐﻴﻴﺭ‬
‫ﻋﻨﺩ ﺍﻟﻨﻘﺭ‬ ‫ ﻨﻜﺘﺏ ﻓﻲ ﻤﻘﻁﻊ‬،Form3 ‫ﻤﻘﺎﻁﻊ ﺍﻟﻨﻤﻭﺫﺝ‬

‫ ﻋﻨﺩ ﺍﻟﻨﻘﺭ‬txtpOld ‫ﻭﻨﻜﺘﺏ ﻓﻲ ﻤﻘﻁﻊ ﻤﺭﺒﻊ ﺍﻟﻨﺹ‬

11
‫ﻋﺒﺎﺭﺓ ﺘﺼ‪‬ﺩ ﺍﻷﺨﻁﺎﺀ ‪ Try‬ﻭﺘﺭﻜﻴﺒﻬﺎ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬

‫ﻤﺸﺎﺭﻴﻊ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‬


‫ﻤﻥ ﻁﺭﻕ ﺍﻻﺘﺼﺎل ﺒﻘﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻷﻜﺜﺭ ﺃﻫﻤﻴﺔ ﻫﻲ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ﻤﻠﱢﻘﻡ ‪ ،(SQL server) SQL‬ﻭ ‪(Object OLE DB‬‬
‫)‪) Linking and Embedding‬ﺭﺒـﻁ ﻭﺘﻀـﻤﻴﻥ ﺍﻟﻜﺎﺌﻨﺎﺕ( ﻭﻫﻭ ﻤﻭﹼﻓﺭ ﻋﺎﻡ ﻟﻠﺒﻴﺎﻨﺎﺕ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ‪ (Jet) Access‬ﻭ‬
‫ﻗـﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ‪ ، SQL server‬ﻭ ‪ ، (Open Database Connectivity) ODBC‬ﻭﺒﻴﺎﻨﺎﺕ ‪(Extensible Markup XML‬‬
‫)‪) Language‬ﻟﻐﺔ ﺍﻟﺘﺭﻤﻴﺯ ﺍﻟﻘﺎﺒﻠﺔ ﻟﻠﺘﻭﺴﻊ(‪ ،‬ﻭﻤﻭﹼﻓﺭ ﺒﻴﺎﻨﺎﺕ ‪.Oracle‬‬
‫ﺨﻁﻭﺍﺕ ﺇﻨﺸﺎﺀ ﻨﻤﻭﺫﺝ ﺒﻴﺎﻨﺎﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪Data Form Wizard‬‬
‫ﺒﻌـﺩ ﺇﻨﺸـﺎﺀ ﻗﺎﻋـﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ‪ Access‬ﺃﻭ ﺒﺎﺴﺘﺨﺩﺍﻡ‬
‫‪ Visual Data‬ﻤﻥ ﺒﻴﺌﺔ ‪ Visual Basic‬ﻨﻘﻭﻡ ﺒﺎﻻﺘﺼﺎل ﺒﻘﺎﻋﺩﺓ‬
‫ﺍﻟﺒـﻴﺎﻨﺎﺕ ﻤﻥ ﺨﻼل ﻨﻤﻭﺫﺝ ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ﻴ‪‬ﺴﻤﻰ ﻨﻤﻭﺫﺝ ﺒﻴﺎﻨﺎﺕ‬
‫ﻭﻴﻭﻓـﺭ ﻤﻌـﺎﻟﺞ ﻨﻤﺎﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺨﻁﻭﺍﺕ ﺴﻬﻠﺔ ﻟﻼﺘﺼﺎل ﺒﻘﺎﻋﺩﺓ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺇﻨﺸﺎﺀ ﻨﻤﻭﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻜﻤﺎ ﻴﻠﻲ‬
‫ﺍﻟﻌﻼﻗـﺎﺕ ﺒﻴﻥ ﺍﻟﺠﺩﻭل ﺒﻌﺩ ﺘﺤﺩﻴﺩ ﻤﻴﺯﺓ ﻓﺭﺽ ﺍﻟﺘﻜﺎﻤل ﺍﻟﻤﺭﺠﻌﻲ‬
‫‪ Referential Integrity‬ﻭﺘﺘﺎﻟﻲ ﺍﻟﺘﺤﺩﻴﺙ‪ ،‬ﺒﺩﻭﻥ ﺘﺘﺎﻟﻲ ﺍﻟﺤﺫﻑ‪.‬‬

‫ﻤـﻥ ﺍﻟﻘﺎﺌﻤﺔ ‪ Project‬ﻨﺨﺘﺎﺭ ﺍﻷﻤﺭ ‪Add Windows Form‬‬


‫ﺃﻭ ‪ Add New Item‬ﻓﻴﻅﻬـﺭ ﺇﻁـﺎﺭ ﺇﻀﺎﻓﺔ ﺒﻨﺩ ﺠﺩﻴﺩ ﻟﺘﺤﺩﻴﺩ‬
‫ﻨـﻭﻉ ﺍﻟـﻨﻤﻭﺫﺝ ﻓﻨﺨـﺘﺎﺭ ‪ ، Data Form Wizard‬ﻭﻴﻤﻜـﻥ‬
‫ﺍﻟﻭﺼـﻭل ﺇﻟـﻰ ﻫﺫﻩ ﺍﻟﻤﺭﺤﻠﺔ ﻤﻥ ﺨﻼل ﺍﻟﻨﻘﺭ ﺒﺎﻷﻴﻤﻥ ﻋﻠﻰ ﺍﺴﻡ‬
‫ﺍﻟﺤـ ﻟ ﻓـﻲ ﺇﻁﺎﺭ ﻤﺴﺘﻜﺸﻑ ﺍﻟﺤل )‪ (Solution Explorer‬ﺜﻡ‬
‫ﺃﻭ‬ ‫ﺜـــﻡ‬
‫‪ .‬ﻭﺒﻌ ـﺩ ﺍﻟ ـﺘﺤﺩﻴﺩ ﺴ ـﻴ‪‬ﻌﻁﻲ ‪ VB‬ﺍﺴ ـﻤﺎ‬
‫ﺍﻓﺘﺭﺍﻀﻴﺎﹰ ﻟﻠﻨﻤﻭﺫﺝ ﺜﻡ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻰ ‪ Open‬ﻴﺒﺩﺃ ﻋﻤل ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ‬

‫‪12‬‬
‫‪ j‬ﺍﻟﺨﻁﻭﺓ ﺍﻷﻭﻟﻰ ﻤﻥ ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻫﻲ ﺇﻅﻬﺎﺭ ﺭﺴﺎﻟﺔ‬
‫ﺘﺭﺤﻴﺒﻴﺔ‬

‫‪ k‬ﻓـﻲ ﺍﻟﺨﻁﻭﺓ ﺍﻟﺜﺎﻨﻴﺔ ﻴﺨﻴ‪‬ﺭﻨﺎ ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻴﻥ ﺇﻨﺸﺎﺀ‬


‫ﻤﺠﻤـﻭﻋﺔ ﺒﻴﺎﻨﺎﺕ ﺠﺩﻴﺩﺓ ‪ Dataset‬ﺃﻭ ﺍﺴﺘﺨﺩﺍﻡ ﻤﺠﻤﻭﻋﺔ ﺒﻴﺎﻨﺎﺕ‬
‫ﻤﻭﺠـﻭﺩﺓ ﺇﻥ ﺴـﺒﻕ ﻟﻨﺎ ﺇﻨﺸﺎﺀﻫﺎ‪ .‬ﻭﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻋﺒﺎﺭﺓ ﻋﻥ‬
‫ﻟﻘﻁـﺔ ‪ snapshoot‬ﻟﻘﺎﻋﺩﺓ ﺒﻴﺎﻨﺎﺕ ﻤﺼﻐﹼﺭﺓ ﻤﺘﻜﻭﻨﺔ ﻤﻥ ﺍﻟﺠﺩﺍﻭل‬
‫ﻭﺍﻻﺴـﺘﻌﻼﻤﺎﺕ ﺍﻟﺘﻲ ﺴﻨﺤﺩﺩﻫﺎ ﻤﻥ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﺨﻁﻭﺍﺕ‬
‫ﺍﻟﺘﺎﻟـﻴﺔ ﻭﻫـﻲ ﺒـﺩﻴل ﻟﻤﺠﻤـﻭﻋﺔ ﺍﻟﺴـﺠﻼﺕ ‪ Recordset‬ﻓﻲ‬
‫ﺍﻹﺼـﺩﺍﺭﺍﺕ ﺍﻟﺴـﺎﺒﻘﺔ ﻤﻥ ‪ VB‬ﻭﻟﻜﻨﻬﺎ ﺫﺍﺕ ﺇﻤﻜﺎﻨﺎﺕ ﺃﻜﺒﺭ ﻭﻋﻥ‬
‫ﻁﺭﻴﻘﻬﺎ ﻴﺘﻡ ﺍﻻﺘﺼﺎل ﺒﺎﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ‪ VB .NET‬ﻤﻬﻤﺎ ﻜﺎﻨﺕ ﻁﺭﻕ‬
‫ﺍﻻﺘﺼﺎل‪.‬‬

‫‪l‬ﻓـﻲ ﺍﻟﺨﻁـﻭﺓ ﺍﻟﺜﺎﻟﺜﺔ ﻴﺨ ‪‬ﻴﺭﻨﺎ ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻴﻥ ﺇﻨﺸﺎﺀ‬


‫ﺃﻭ ﺍﺴﺘﺨﺩﺍﻡ ﺍﺘﺼﺎل‬ ‫ﺍﺘﺼـﺎل ﺠﺩﻴـﺩﺓ‬
‫ﻤﻭﺠﻭﺩ ﺴﺒﻕ ﻟﻨﺎ ﺇﻨﺸﺎﺅﻩ‪ .‬ﻭﻓﻲ ﺤﺎﻟﺔ ﺍﺨﺘﻴﺎﺭ ‪New Connection‬‬
‫ﻓﻌﻠﻴـﻨﺎ ﺘﺤﺩﻴـﺩ ﻁﺭﻴﻘﺔ ﺍﻻﺘﺼﺎل ﻓﻲ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺒﺘﺤﺩﻴﺩ ﻨﻭﻉ‬
‫ﻤ‪‬ﻭﻓﱢﺭ )ﻤ‪‬ﺯﻭ‪‬ﺩ( ﺍﻟﺒﻴﺎﻨﺎﺕ ‪Data Provider‬‬

‫‪13‬‬
‫‪ m‬ﺴـﻴﻅﻬﺭ ﺇﻁـﺎﺭ ﺨﺼﺎﺌﺹ ﺍﻻﺘﺼﺎل ﻟﺘﺤﺩﻴﺩ ﺍﻟﻤﻭﻓﱢﺭ ﻭﺴﻨﺠﺩ‬
‫ﺍﻟﻤﻭﻓﱢﺭ ﺍﻻﻓﺘﺭﺍﻀﻲ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻰ ﻋﻼﻤﺔ ﺍﻟﺘﺒﻭﻴﺏ ﺍﻟﻤﻭﻓﱢﺭ ‪Provider‬‬
‫‪ ،‬ﺴﻨﺴﺘﺨﺩﻡ ﻓﻲ‬ ‫ﻭﻫـﻭ‬
‫ﻤﺜﺎﻟـﻨﺎ ﺍﻟﻤﻭﻓﱢـﺭ ‪Microsoft Jet 4.0 OLE DB Provider‬‬
‫أو اﻧ ﺘﻘﺎء ﻋﻼﻣ ﺔ اﻟﺘ ﺒﻮﯾﺐ اﺗﺼ ﺎل‬ ‫ﻓـــﻨﺤﺩﺩ ‪‬ﻩ ﺜـــﻡ‬
‫‪Connection‬‬

‫‪ n‬ﻭﻓﻲ ﻫﺫﻩ ﺍﻟﺨﻁﻭﺓ ﻨﺤﺩﺩ ﻤﻠﻑ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻰ‬

‫ﺜﻡ ﻨﺤﺩﺩ ﺍﻟﻤﻠﻑ‬


‫ﻭﻓﻲ ﺤﺎﻟﺔ ﻨﺠﺎﺡ ﺍﻻﺘﺼﺎل ﺘﻅﻬﺭ‬ ‫ﺜـﻡ ﺍﻟﻨﻘـﺭ ﻋﻠﻰ‬
‫ﺍﻟﺭﺴﺎﻟﺔ ﺍﻟﺘﺎﻟﻴﺔ‬

‫ﻓﻴﻨﺘﻬـﻲ ﺍﻟﻌﻤل ﻓﻲ ﺇﻁﺎﺭ ﺨﺼﺎﺌﺹ‬ ‫ﺜـ ﻡ‬ ‫ﺜـ ﻡ‬


‫ﺍﻻﺘﺼﺎل ﻭﻨﻌﻭﺩ ﺇﻟﻰ ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻨﻨﻘﺭ ﻋﻠﻰ‬

‫‪ o‬ﻓـﻲ ﻫﺫﻩ ﺍﻟﺨﻁﻭﺓ ﻨﺤﺩﺩ ﺍﻟﺠﺩﻭل ﺃﻭ ﺍﻟﺠﺩﺍﻭل ﺃﻭ ﺍﻻﺴﺘﻌﻼﻤﺎﺕ‬


‫ﺍﻟﻤﺭﺍﺩ ﺇﻅﻬﺎﺭ ﺒﻴﺎﻨﺎﺘﻬﺎ ﻤﻥ ﺨﻼل ﺍﻟﻨﻤﻭﺫﺝ ﻭﺫﻟﻙ ﺒﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﻭل ﺃﻭ‬
‫ﺃﻭ‬ ‫ﺍﻻﺴـﺘﻌﻼﻡ ﻭﻫـﻲ ﺘﺤﺕ ‪ Views‬ﺜﻡ ﺍﻟﻨﻘﺭ ﻋﻠﻰ ﺍﻟﺯﺭ‬
‫ﺒﺎﻟﻨﻘﺭ ﺍﻟﻤﺯﺩﻭﺝ ﻋﻠﻰ ﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺃﻭ ﺍﻻﺴﺘﻌﻼﻡ ﺜﻡ‬

‫‪14‬‬
‫‪ p‬ﻫـﺫﻩ ﺍﻟﺨﻁـﻭﺓ ﻤﺴﺌﻭﻟﺔ ﻋﻥ ﺘﺤﺩﻴﺩ ﺍﻟﺤﻘﻭل ﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﻓﻲ‬
‫ﻜﺎﺌﻨﺎﺕ ﺍﻟﻨﻤﻭﺫﺝ‪ ،‬ﺜﻡ‬

‫‪ q‬ﻫـﺫﻩ ﺍﻟﺨﻁﻭﺓ ﻤﺴﺌﻭﻟﺔ ﻋﻥ ﺘﺤﺩﻴﺩ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ‬


‫ﺸـﺒﻜﺔ ﺒﻴﺎﻨﺎﺕ ‪) Grid‬ﺼﻔﺤﺔ ﺒﻴﺎﻨﺎﺕ( ﺃﻭ ﺒﺸﻜل ﻤﻔﺭﺩ ﻟﻜل ﺴﺠل‬
‫ﻓﻨﺤﺩﺩ ﻁﺭﻴﻘﺔ ﺍﻟﻌﺭﺽ ﺍﻟﻤﺭﻏﻭﺒﺔ ﺜﻡ ﺍﻟﻨﻘﺭ ﻋﻠﻰ ‪ Finish‬ﻓﺘﻅﻬﺭ‬
‫ﺍﻟﺭﺴـﺎﻟﺔ ﺍﻟﺘﺎﻟـﻴﺔ ﻟﺘﺨﻴـﺭﻨﺎ ﺘﻀـﻤﻴﻥ ﺍﻟﻜﻭﺩ ﺼﻴﻐﺔ ﺍﺤﺘﻭﺍﺀ ﻗﺎﻋﺩﺓ‬
‫ﺍﻟﺒـﻴﺎﻨﺎﺕ ﻋﻠـﻰ ﻜﻠﻤﺔ ﻤﺭﻭﺭ ﺃﻭ ﻻ ﻓﻔﻲ ﻤﺜﺎﻟﻨﺎ ﻟﻡ ﻨﻘﻡ ﺒﺘﻌﻴﻴﻥ ﻜﻠﻤﺔ‬
‫ﻤﺭﻭﺭ ﻟﻘﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ‬

‫ﻓﻨﺨـﺘﺎﺭ ﺘﻀﻤﻴﻥ ﺃﻭ ﻋﺩﻡ ﺘﻀﻤﻴﻥ ﻜﻠﻤﺔ ﻤﺭﻭﺭ ﺤﺴﺒﻤﺎ ﻨﺭﻏﺏ ﻓﻲ‬


‫ﺘﺼﻤﻴﻡ ﺍﻟﻤﺸﺭﻭﻉ‪ ،‬ﻓﻴﺘﻡ ﺇﻀﺎﻓﺔ ﻨﻤﻭﺫﺝ ﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﺍﻟﻤﺸﺭﻭﻉ‬
‫اﺳ ﻢ‬ ‫ﻭﺒﻌـﺩ ﺃﻥ ﻨﺠﻌـ ﻟ ﺍﻟﺘﻨﻔﻴﺫ ﻴﺒﺩﺃ ﺒﻨﻤﻭﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ )ﻤﻥ ﺨﻼل ﺍﻟﻘﺎﺌﻤﺔ ‪ Project > Properties‬ﺜﻡ ﻨﺨﺘﺎﺭ ﻤﻥ ﺍﻟﺨﺎﻨﺔ‬
‫ﺎﻟﻨﻤﻮذﺟ( ﺴﻴﻅﻬﺭ ﻜﻤﺎ ﻴﻠﻲ ﺒﻌﺩ ﺍﻟﻨﻘﺭ ﻋﻠﻰ ﺯﺭ ﺘﺤﻤﻴل ﺍﻟﺒﻴﺎﻨﺎﺕ‬
‫ﻭﻟﺼـﻘ ‪‬ﻪ ﻓـﻲ ﺍﻟﻤﻘﻁﻊ‬ ‫ﻓـﻴﻤﻜﻥ ﻗـﺹ ﻜـﻭﺩ ﺍﻟـﺯﺭ‬
‫‪ Form_Load‬ﻟﻴـﺘﻡ ﺘﺤﻤـﻴل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻤﺠﺭﺩ ﺍﻟﺘﻨﻔﻴﺫ‪ .‬ﻜﻤﺎ ﻨﻘﻭﻡ‬
‫ﺒﺘﻌﺭﻴﺏ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻗﺕ ﺍﻟﺘﺼﻤﻴﻡ ﻤﻥ ﺨﻼل ﺘﻨﺴﻴﻕ ﻜﺎﺌﻨﺎﺕ ﺍﻟﻨﻤﻭﺫﺝ‬
‫ﻭﺘﻐﻴﻴﺭ ﺍﻟﺨﺎﺼﻴﺔ ‪ Text‬ﻟﻬﺎ‪.‬‬

‫ﻓﻲ ﺤﺎﻟﺔ ﺍﺨﺘﻴﺎﺭ ﻨﻭﻉ ‪‬ﻤﻭﱢﻓﺭ ﺁﺨﺭ ﻟﻼﺘﺼﺎل ﺒﺎﻟﺒﻴﺎﻨﺎﺕ ﻓﺈﻥ‪ ‬ﺇﻁﺎﺭ ﺨﺼﺎﺌﺹ ﺍﻻﺘﺼﺎل ﺴﻴﺘﻐﻴﺭ ﺤﺴﺏ ﻨﻭﻉ ﺍﻟﻤ‪‬ﻭﱢﻓﺭ‪ .‬ﻜﻤﺎ ﺃﻥ‪ ‬ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ‬

‫‪15‬‬
‫ﺍﻟﺒـﻴﺎﻨﺎﺕ ﻻ ﻴﺩﻋﻡ ﺍﻟﻤ‪‬ﻭﻓﱢﺭ ‪ . ODBC .NET‬ﻓﻔﻲ ﺤﺎﻟﺔ ﺍﺴﺘﺨﺩﺍﻡ‬
‫ﺍﻟﻤﻭﻓـﺭ ‪ ODBC .NET‬ﻓـﺈﻥ‪ ‬ﺍﺴﻡ ﺍﻟﻤﻭﻓﺭ ﺴﻴﻅﻬﺭ ﻓﻲ ﺇﻁﺎﺭ‬
‫ﺨﺼﺎﺌﺹ ﺍﻻﺘﺼﺎل ﻭﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ ﻭﻟﻜﻥ ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ‪ VB .NET‬ﻻ ﻴﺩﻋﻡ ﻫﺫﺍ ﺍﻟﻤﻭﻓﺭ ﻟﺫﻟﻙ ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ‬
‫ﻴﺠﺏ ﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺒﺩﻭﻥ ﺍﻟﻤﻌﺎﻟﺞ‪ .‬ﻭﻗﺒل ﺫﻟﻙ ﻴﺠﺏ ﺃﻥ ﻨﻜﻭﻥ ﻗﺩ‬
‫ﺃﻨﺸﺄﻨﺎ ﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ ﻭﻜﻤﺎ ﻴﻠﻲ‬

‫ﺇﻨﺸﺎﺀ ﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ )‪Open Database Connectivity (ODBC‬‬

‫)‪) ODBC Data Sources (32 bit‬ﻤﺼﺎﺩﺭ‬ ‫‪ j‬ﻓﻲ ‪ Windows 9x‬ﻨﺸﹼﻐل ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﺘﺤﻜﻡ ‪ Control Panel‬ﺍﻟﺒﺭﻨﺎﻤﺞ‬
‫ﺒﻴﺎﻨﺎﺕ(‬

‫ﺃﻭ‬ ‫)‪ (Administrative Tools‬ﺃﺩﻭﺍﺕ ﺇﺩﺍﺭﻴﺔ ﺜﻡ‬ ‫‪ k‬ﻓـﻲ ‪ WinXP‬ﻓﻨﺸـﻐﹼل ﺍﻟﺒﺭﻨﺎﻤﺞ‬

‫)‪ (BDE Administrator‬ﺜﻡ ﻨﺨﺘﺎﺭ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ‪ Object‬ﺍﻷﻤﺭ … ‪ODBC Administrator‬‬


‫ﺜـﻡ ﻓﻲ ﻋﻼﻤﺔ ﺍﻟﺘﺒﻭﻴﺏ ‪ DSN‬ﺍﻟﻤﺴﺘﺨﺩﻡ )‪ (user‬ﻨﻨﻘﺭ ﻋﻠﻰ ﺇﻀﺎﻓﺔ ﺜﻡ ﻨﺤﺩﺩ ﻨﻭﻉ ﺴﻭﺍﻗﺔ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪Microsoft Access‬‬
‫‪ Driver‬ﺜـﻡ ﺇﻨﻬـﺎﺀ ﻓﻴﻅﻬﺭ ﺇﻁﺎﺭ ﺘﻜﻭﻴﻥ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻨﻜﺘﺏ ﺍﺴﻡ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪ dbstu‬ﻤﺜﻼﹰ‪ ،‬ﺜﻡ ﺘﺤﺩﻴﺩ ﻻﺨﺘﻴﺎﺭ ﻤﻠﻑ ﻗﺎﻋﺩﺓ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻫﻭ ﺍﻟﻤﻠﻑ ﺍﻟﺫﻱ ﺃﻨﺸﺄﻨﺎﻩ‪ ‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺒﺭﻨﺎﻤﺞ ‪ . Access‬ﺜﻡ ﻤﻭﺍﻓﻕ ﺜﻡ ﻤﻭﺍﻓﻕ ‪ .‬ﻭﻟﻥ ﻨﺴﺘﺨﺩﻡ ﻫﺫﺍ ﺍﻷﺴﻠﻭﺏ ﻷﻨ ‪‬ﻪ ﻗﺩﻴﻡ ﻨﺴﺒﻴﺎﹰ‪.‬‬

‫ﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻭﻜﻭﺩ ﺍﻟﻤﻌﺎﻟﺞ‬


‫ﺒﻌﺩ ﺃﻥ ﻨﻌﻭﺩ ﺇﻟﻰ ﺘﺼﻤﻴﻡ ﻨﻤﻭﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺍﻟﺫﻱ ﻗﺎﻡ ﺒﺈﻨﺸﺎﺌﻪ ﻤﻌﺎﻟﺞ ﻨﻤﺎﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺴﻨﺠﺩ ﺃﻥ‪ ‬ﻤﻥ ﺒﻴﻥ ﻋﻨﺎﺼﺭ ﺍﻟﺘﺤﻜﻡ ﺍﻟﻤﻀﺎﻓﺔ‬
‫‪ ،‬ﻜﺎﺌﻥ ﻤﺤﻭ‪‬ل‬ ‫ﺇﻟـﻰ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﻤﻜﺎﻥ ﺍﻟﻜﺎﺌﻨﺎﺕ ﻏﻴﺭ ﺍﻟﻤﺭﺌﻴﺔ ‪ the component tray‬ﻤﺎ ﻴﻠﻲ‪ :‬ﻜﺎﺌﻥ ﺍﺘﺼﺎل‬
‫ﻭﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﻤﺭﺒﻌﺎﺕ ﻨﺼﻭﺹ ‪ Textbox‬ﻭﻤﺘﺴﻤﻴﺎﺕ‬ ‫‪ ،‬ﻭﻜﺎﺌﻥ ﻤﺠﻤﻭﻋﺔ ﺒﻴﺎﻨﺎﺕ‬ ‫ﺒـﻴﺎﻨﺎﺕ‬
‫ﺘﺤﺕ‬ ‫ﺘﻭﻀـﻴﺤﻴﺔ ‪ Labels‬ﻭﺃﺯﺭﺍﺭ ‪ ، Buttons‬ﻓﻠﻜـ ﻟ ﻤـﺭﺒﻊ ﻨﺹ ﺘﻡ ﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ‬
‫ﻋﻠﻰ ﺍﺴﻡ ﺍﻟﺤﻘل‪.‬‬ ‫ﺍﻟﺨﺎﺼﻴﺔ‬
‫ﺍﻟﻜﻭﺩ ‪The Code‬‬
‫ﻨﺠـﺩ ﺃﻥ‪ ‬ﺍﻟﻤﻌـﺎﻟﺞ ﻗﺩ ﻜﺘﺏ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ )ﻓﻲ ﺘﺼﻨﻴﻑ ﺍﻟﻨﻤﻭﺫﺝ ﺤﻴﺙ ﺍﺴﻡ ﺍﻟﻨﻤﻭﺫﺝ ‪ (stuDataForm‬ﻭﻫﻭ ﻟﻼﺘﺼﺎل ﺒﺠﺩﻭل ‪ stu‬ﻓﻲ‬
‫ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪ D:\Ihsan\Databases\studb.mdb‬ﺤﻴﺙ ﻴﺤﺘﻭﻱ ﺍﻟﺠﺩﻭل ﻋﻠﻰ ﺨﻤﺴﺔ ﺤﻘﻭل ﻫﻲ‪stuId, stuNa, sex, dep, sem‬‬

‫‪16‬‬
Single ‫ ﻭﻁﺭﻴﻘﺔ ﺍﻟﻌﺭﺽ ﺴﺠل ﻤﻔﺭﺩ‬studs ‫ ﻭﺍﺴﻡ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻫﻭ‬Microsoft Jet4.0 OLE DB ‫ﺒﺎﺴﺘﺨﺩﺍﻡ ﻤﻭﻓﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‬
‫ﻪ ﻤﻌﺎﻟﺞ ﺍﻟﻨﻤﺎﺫﺝ ﺒﺩﻭﻥ ﻜﻭﺩ ﻤﻨﻁﻘﺔ ﻜﻭﺩ ﺘﻜﻭﻴﻥ ﺍﻟﻨﻤﻭﺫﺝ‬ ‫ ﻭﻓﻴﻤﺎ ﻴﻠﻲ ﺍﻟﻜﻭﺩ ﺍﻟﺫﻱ ﻜﺘﺒ‬،‫ ﻤﻊ ﺘﻀﻤﻴﻥ ﻜﻠﻤﺔ ﻤﺭﻭﺭ‬record

Public Class stuDataForm


Inherits System.Windows.Forms.Form

Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As _


System.EventArgs) Handles btnCancel.Click '
Me.BindingContext(objstuds, "stu").CancelCurrentEdit()
Me.objstuds_PositionChanged()
End Sub
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnDelete.Click '
If (Me.BindingContext(objstuds, "stu").Count > 0) Then
Me.BindingContext(objstuds, "stu").RemoveAt(Me.BindingContext _
(objstuds, "stu").Position)
Me.objstuds_PositionChanged()
End If
End Sub
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnAdd.Click '
Try
'Clear out the current edits
Me.BindingContext(objstuds, "stu").EndCurrentEdit()
Me.BindingContext(objstuds, "stu").AddNew()
Catch eEndEdit As System.Exception
System.Windows.Forms.MessageBox.Show(eEndEdit.Message)
End Try
Me.objstuds_PositionChanged()
End Sub
Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnUpdate.Click '
Try
'Attempt to update the datasource.
Me.UpdateDataSet()
Catch eUpdate As System.Exception
'Add your error handling code here.
'Display error message, if any.
System.Windows.Forms.MessageBox.Show(eUpdate.Message)
End Try
Me.objstuds_PositionChanged()
End Sub
Private Sub btnLoad_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnLoad.Click '
Try
'Attempt to load the dataset.
Me.LoadDataSet()
Catch eLoad As System.Exception
'Add your error handling code here.
'Display error message, if any.
System.Windows.Forms.MessageBox.S how(eLoad.Message)
End Try
Me.objstuds_PositionChanged()
End Sub
Private Sub btnNavFirst_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnNavFirst.Click '
Me.BindingContext(objstuds, "stu").Position = 0
Me.objstuds_PositionChanged()
End Sub
Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnLast.Click '
Me.BindingContext(objstuds, "stu").Position = ( Me.objstuds.Tables _
("stu").Rows.Count - 1)
Me.objstuds_PositionChanged()
End Sub
17
Private Sub btnNavPrev_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnNavPrev.Click '
Me.BindingContext(objstuds, "stu").Position = ( Me.BindingContext _
(objstuds, "stu").Position - 1)
Me.objstuds_PositionChanged()
End Sub
Private Sub btnNavNext_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnNavNext.Click '
Me.BindingContext(objstuds, "stu").Position = ( Me.BindingContext _
(objstuds, "stu").Position + 1)
Me.objstuds_PositionChanged()
End Sub
Private Sub btnCancelAll_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles btnCancelAll.Click '
Me.objstuds.RejectChanges()
End Sub
Private Sub objstuds_PositionChanged()
Me.lblNavLocation.Text = (((Me.BindingContext(objstuds, "stu").Position _
+ 1).ToString + " of ") + Me.BindingContext(objstuds, "stu").Count.ToString)
End Sub
Public Sub UpdateDataSet()
'Create a new dataset to hold the changes that have been made to the main
' dataset.
Dim objDataSetChanges As stuApp.studs = New stuApp.studs
'Stop any current edits.
Me.BindingContext(objstuds, "stu").EndCurrentEdit()
'Get the changes that have been made to the main dataset.
objDataSetChanges = CType(objstuds.GetChanges, stuApp.studs)
'Check to see if any changes have been made.
If (Not (objDataSetChanges) Is Nothing) Then
Try
'There are changes that need to be made, so attempt to update the
'datasource(by)
'calling the update method and passing the dataset and any
'parameters.
Me.UpdateDataSource(objDataSetChanges)
objstuds.Merge(objDataSetChanges)
objstuds.AcceptChanges()
Catch eUpdate As System.Exception
'Add your error handling code here.
Throw eUpdate
End Try
'Add your code to check the returned dataset for any errors that
' may have been
'pushed into the row object's error.
End If
End Sub
Public Sub LoadDataSet()
'Create a new dataset to hold the records returned from the call to
'FillDataSet.
'A temporary dataset is used because filling the existing dataset would
'require the databindings to be rebound.
Dim objDataSetTemp As stuApp.studs
objDataSetTemp = New stuApp.studs
Try
'Attempt to fill the temporary dataset.
Me.FillDataSet(objDataSetTemp)
Catch eFillDataSet As System.Exception
'Add your error handling code here.
Throw eFillDataSet
End Try
Try
'Empty the old records from the dataset.
objstuds.Clear()
'Merge the records into the main dataset.
objstuds.Merge(objDataSetTemp)
Catch eLoadMerge As System.Exception
18
'Add your error handling code here.
Throw eLoadMerge
End Try
End Sub
Public Sub UpdateDataSource(ByVal ChangedRows As stuApp.studs)
Try
'The data source only needs to be updated if there are changes pending.
If (Not (ChangedRows) Is Nothing) Then
'Open the connection.
Me.OleDbConnection1.Open()
'Attempt to update the data source.
OleDbDataAdapter1.Update(C hangedRows)
End If
Catch updateException As System.Exception
'Add your error handling code here.
Throw updateException
Finally
'Close the connection whether or not the exception was thrown.
Me.OleDbConnection1.Close()
End Try
End Sub
Public Sub FillDataSet(ByVal dataSet As stuApp.studs)
'Turn off constraint checking before the dataset is filled.
'This allows the adapters to fill the dataset without co ncern
'for dependencies between the tables.
dataSet.EnforceConstraints = False
Try
'Open the connection.
Me.OleDbConnection1.Open()
'Attempt to fill the dataset through the OleDbDataAdapter1.
Me.OleDbDataAdapter1.Fill(dataSet)
Catch fillException As System.Exception
'Add your error handling code here.
Throw fillException
Finally
'Turn constraint checking back on.
dataSet.EnforceConstraints = True
'Close the connection whether or not the exception was thrown.
Me.OleDbConnection1.Close()
End Try
End Sub
End Class
(ActiveX Data Objects .NET) ADO .NET ‫ﺘﻘﻨﻴﺔ‬
‫ ﻟﻠﻭﺼﻭل ﺇﻟﻰ ﺍﻟﺒﻴﺎﻨﺎﺕ‬ADO .NET ‫ﻥ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ ﻤﺠﻤﻭﻋﺔ ﺍﻟﻜﺎﺌﻨﺎﺕ ﺍﻟﺨﺎﺼﺔ ﺒﺘﻘﻨﻴﺔ‬‫ﻴﺒ‬‫ﻴ‬

Data Provider ‫ﻣﻮﻓّﺮ )ﻣﺰوّد( اﻟﺒﯿﺎﻧﺎت‬


‫ﻛﺎﺋﻦ اﻻﺗﺼﺎل‬ ‫ﻛﺎﺋﻦ اﻷﻣﺮ‬ ‫ﻗﺎرئ اﻟﺒﯿﺎﻧﺎت‬
Connection Command DataReader

DataAdapter ‫ﻣﺤﻮّل اﻟﺒﯿﺎﻧﺎت‬


Insert Select
‫ﻣﺠﻤﻮﻋﺔ اﻟﺒﯿﺎﻧﺎت‬
‫ﻗﺎﻋﺪة اﻟﺒﯿﺎﻧﺎت‬ Update Delete DataSet
Database

System.Data.OleDb
System.Data.SqlClient

Form_Load ‫ﻋﻨﺩ ﺍﻟﻨﻘﺭ ﻭﻟﺼﻘﻪ ﻓﻲ ﺍﻟﻤﻘﻁﻊ‬ ‫ﻤﻜﻨـﻨﺎ ﻓﻲ ﻨﻤﻭﺫﺝ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻗﺹ ﻜﻭﺩ ﺍﻟﻤﻘﻁﻊ ﺍﻟﺨﺎﺹ ﺒﺯﺭ ﺍﻷﻤﺭ‬‫ﻴ‬
‫ل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺜﻡ ﺇﻗﻔﺎل ﺍﻻﺘﺼﺎل ﺒﻤﺠﺭﺩ ﺍﻟﺘﻨﻔﻴﺫ ﺃﻭ‬‫ﻟﻴـﺘﻡ ﻓـﺘﺢ ﺍﻻﺘﺼـﺎل ﺒﻘﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺘﺤﻤﻴل ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﻤﺤﻭ‬
19
‫ﻥ ﺒﻴﺎﻨﺎﺕ ﺤﻘﻠﻲ ﺍﻟﻘﺴﻡ ﻭﺍﻟﻔﺼل ﺘﹸﻌﺭﺽ ﻓﻲ ﻤﺭﺒﻌﻲ ﻨﺹ ﻭﺃﻥ‪ ‬ﺍﻟﻤﻌﺭﻭﺽ ﻫﻭ‬
‫ﺘﺤﻤﻴل ﺍﻟﻨﻤﻭﺫﺝ ﺇﻟﻰ ﺍﻟﺫﺍﻜﺭﺓ ﺍﻟﺭﺌﻴﺴﻴﺔ )‪ .(RAM‬ﻨﻼﺤﻅ ﺃ ‪‬‬
‫ﺍﻟﺭﻗﻡ ﻓﻨﺭﻏﺏ ﺒﻌﺭﺽ ﺍﻻﺴﻡ )ﺍﺴﻡ ﺍﻟﻘﺴﻡ ﺃﻭ ﺍﺴﻡ ﺍﻟﻔﺼل( ﺒﺩﻻﹰ ﻤﻥ ﺍﻟﺭﻗﻡ ﺫﻟﻙ ﻷﻥ‪ ‬ﺍﻟﻨﻤﻭﺫﺝ ﻫﻭ ﻭﺍﺠﻬﺔ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ‪ ،‬ﻓﻨﻀﻊ ﻓﻲ‬
‫ﺍﺴﻤ ‪‬ﻪ ‪ cboDep‬ﻟﻌﺭﺽ ﺃﺴﻤﺎﺀ ﺍﻷﻗﺴﺎﻡ ﻓﻲ ﺒﻨﻭﺩﻩ ﻭﻨﻔﺭ‪‬ﻍ ﺍﻟﺨﺎﺼﻴﺔ ‪ .Text‬ﻭﻤﻥ‬ ‫ﺍﻟـﻨﻤﻭﺫﺝ ﻤـﺭﺒﻊ ﺘﺤﺭﻴـﺭ ﻭﺴـﺭﺩ‬
‫ﺨﺼـﺎﺌﺹ ﻤـﺭﺒﻊ ﺍﻟﺘﺤﺭﻴـﺭ ﻭﺍﻟﺴﺭﺩ ﺍﻟﺨﺎﺼﻴﺔ ‪ Items‬ﻭﻫﻲ ﻤﺼﻔﻭﻓﺔ ﻤﺴﺌﻭﻟﺔ ﻋﻥ ﺒﻨﻭﺩ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ‪ ،‬ﻭﺍﻟﻔﻬﺭﺱ ‪Index‬‬
‫ﻟﻠﻤﺼـﻔﻭﻓﺔ ‪ Items‬ﻴـﺒﺩﺃ ﻤﻥ ‪ 0‬ﺇﻟﻰ ﻋﺩﺩ ﺍﻟﺒﻨﻭﺩ‪ ، 1-‬ﻭﺍﻟﺨﺎﺼﻴﺔ ‪ SelectedIndex‬ﻤﺴﺌﻭﻟﺔ ﻋﻥ ﻓﻬﺭﺱ ﺍﻟﺒﻨﺩ ﺍﻟﻤﻨﺘﻘﻰ ﻭﻓﻲ ﺤﺎﻟﺔ ﻋﺩﻡ‬
‫ﻥ ﻗﻴﻤﺘﻬﺎ ﻫﻲ ‪ ، -1‬ﺍﻟﺨﺎﺼﻴﺔ ‪ SelectedItem‬ﻤﺴﺌﻭﻟﺔ ﻋﻥ ﺍﻟﺒﻨﺩ ﺍﻟﻤﻨﺘﻘﻰ ﻨﻔﺴﻪ ﻭﻫﻭ ﻋﺎﺩﺓ ﻨﺹ‪ ،‬ﺍﻟﺨﺎﺼﻴﺔ ‪Items.Count‬‬
‫ﺍﻨﺘﻘﺎﺀ ﺒﻨﺩ ﻓﺈ ‪‬‬
‫ﻥ ﺍﻟﺨﺎﺼﻴﺔ‬
‫ﻋـﺩﺩ ﺍﻟﺒـﻨﻭﺩ ﻓﻬـﻲ ﺒﻁﺒـﻴﻌﺔ ﺍﻟﺤـﺎل ﺘـﺯﻴﺩ ﺒـﻭﺍﺤﺩ ﻋﻠـﻰ ﺃﻜﺒﺭ ﻗﻴﻤﺔ ﻤﻤﻜﻨﺔ ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪ SelectedIndex‬ﺫﻟﻙ ﻷ ‪‬‬
‫‪ SelectedIndex‬ﺘﺒﺩﺃ ﻤﻥ ﺍﻟﺼﻔﺭ ‪ . Zero-based‬ﻭﻤﻥ ﺃﺴﺎﻟﻴﺏ ‪ Methods‬ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﺍﻷﺴﻠﻭﺏ ‪ Items.Add‬ﻹﻀﺎﻓﺔ‬
‫ﺒﻨﺩ ﺠﺩﻴﺩ‪ ،‬ﺍﻷﺴﻠﻭﺏ ‪ Items.Insert‬ﺍﻷﺴﻠﻭﺏ ‪ Items.Remove‬ﺍﻷﺴﻠﻭﺏ ‪.Items.Clear‬‬
‫ﺴـﻨﻘﻭﻡ ﺒﺠﻌل ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﻴﻌﺭﺽ ﺃﺴﻤﺎﺀ ﺍﻷﻗﺴﺎﻡ ﻭﻋﻨﺩ ﺍﻟﺘﻨﻘل ﻋِﺒﺭ ﺍﻟﺴﺠﻼﺕ ﻴ‪‬ﻌﺭﺽ ﻓﻴﻪ ﺍﺴﻡ ﺍﻟﻘﺴﻡ ﻟﺫﻟﻙ ﺍﻟﻁﺎﻟﺏ‬
‫ﻭ‪‬ﻤﻜﻨﻨﺎ‬
‫ﻭﻋـﻨﺩ ﺍﻟﺘﺤﺩﻴﺙ )ﺍﻹﻀﺎﻓﺔ ﺃﻭ ﺍﻟﺘﻐﻴﻴﺭ( ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﻴﺘﻡ ﺍﻟﺘﻐﻴﻴﺭ ﻓﻲ ﺍﻟﺭﻗﻡ ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ‪ ،editdep‬ﻴ‬
‫ﻋﻤل ﺫﻟﻙ ﺒﻌﺩﺓ ﻁﺭﻕ ﺴﻨﺫﻜﺭ ﻤﻨﻬﺎ ﻁﺭﻴﻘﺘﻴﻥ ﺍﻷﻭﻟﻰ ﺴﻨﺴﺘﺨﺩﻡ ﻤﻌﺎﻟﺞ ﻤﺤﻭﻻﺕ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻫﻲ ﺒﺜﻼﺙ ﻤﺭﺍﺤل ﻭﻫﻲ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫ﺃﻭﹰﻻ ﻋﺭﺽ ﺃﺴﻤﺎﺀ ﺍﻷﻗﺴﺎﻡ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ‪ cboDep‬ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﺎﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ‬
‫ﻟﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻴﺒﺩﺃ ﻤﻌﺎﻟﺞ ﻤﺤﻭﻻﺕ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﻟﻌﻤل ﻓﺎﻟﺨﻁﻭﺓ ﺍﻷﻭﻟﻰ ﺘﺭﺤﻴﺒﻴﺔ ﻭ ﻓﻲ‬ ‫‪ .1‬ﺇﻀﺎﻓﺔ ﻤﺤ ‪‬ﻭل ﺒﻴﺎﻨﺎﺕ‬
‫ﺍﻟﺨﻁﻭﺓ ﺍﻟﺜﺎﻨﻴﺔ ﻨﺨﺘﺎﺭ ﺍﻻﺘﺼﺎل ‪ connection‬ﻭﻫﻭ ﻨﻔﺱ ﺍﻻﺘﺼﺎل‬
‫ﺍﻟـﺫﻱ ﺍﺴﺘﺨﺩﻤﻨﺎﻩ ﺴﺎﺒﻘﺎﹰ ﻟﻼﺘﺼﺎل ﺒﻘﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺃﻤﺎ ﻓﻲ ﺍﻟﺨﻁﻭﺓ‬
‫ﺍﻟﺜﺎﻟـﺜﺔ ﻓﻴﻅﻬـﺭ ﺍﻹﻁﺎﺭ ﺍﻟﻤﺠﺎﻭﺭ ﻭﻫﻭ ﻟﺘﺤﺩﻴﺩ ﻨﻭﻉ ﺍﻻﺴﺘﻌﻼﻡ ﺃﻭ‬
‫ﻁـﺭﻴﻘﺔ ﻭﺼﻭل ﻤﺤﻭل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ‪،‬‬
‫ﻭﻴﻌﻨﻲ ﺍﺴﺘﺨﺩﺍﻡ‬ ‫ﻭﺍﻻﺨﺘﻴﺎﺭ ﺍﻟﻤﺘﺎﺡ ﻫﻭ‬
‫ﻋـﺒﺎﺭﺍﺕ ‪ SQL‬ﻟﻐﺔ ﺍﻻﺴﺘﻌﻼﻡ ﺍﻟﺒﻨﻴﻭﻴﺔ ‪Structured Query‬‬
‫‪Language‬‬

‫ﻤ‪‬ﻨﺸﺊ‬ ‫ﻓـﻲ ﺍﻟﺨﻁـﻭﺓ ﺍﻟـﺭﺍﺒﻌﺔ ﻨﺨـﺘﺎﺭ‬


‫ﺍﻻﺴﺘﻌﻼﻡ ﻓﻴﻅﻬﺭ ﺇﻁﺎﺭ ‪‬ﻩ‬

‫ﻓـﻨﻘﻭﻡ ﺒﺈﻀﺎﻓﺔ ﺠﺩﻭل ‪ dep‬ﺇﻟﻰ ﺸﺒﻜﺔ ﺘﺼﻤﻴﻡ ﺍﻻﺴﺘﻌﻼﻡ ﺜﻡ ﻨﺤﺩﺩ‬


‫ﺍﻟﺤﻘﻠﻴﻥ ﻭﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻴﺔ‬

‫‪20‬‬
‫ﻟﺘﺤﺪﯾﺪ‬ ‫ﻓﻨﻌﻭﺩ ﺇﻟﻰ ﺍﻟﺨﻁﻭﺓ ﺍﻟﺭﺍﺒﻌﺔ ﻤﻥ ﺍﻟﻤﻌﺎﻟﺞ ﻭﻨﺨﺘﺎﺭ‬ ‫ﺴﺘﺘﻡ ﺒﺫﻟﻙ ﻜﺘﺎﺒﺔ ﻋﺒﺎﺭﺓ ‪ SQL‬ﺜﻡ ﻨﺨﺘﺎﺭ‬
‫ﺃﻭﺍﻤــﺭ ﻤﺤــ ‪‬ﻭل ﺍﻟﺒــﻴﺎﻨﺎﺕ ﻓــﻨﻌﻁﹼل ﺨﺎﻨــﺔ ﺍﻟﺘﺩﻗــﻴﻕ‬
‫ﻭﻫــﻨﺎﻙ‬
‫ﺃﺭﺒﻌﺔ ﺃﻭﺍﻤﺭ ﻟﻤﺤ ‪‬ﻭل ﺍﻟﺒﻴﺎﻨﺎﺕ ﻫﻲ‬
‫‪ SelectCommand‬ﻻﺨﺘﻴﺎﺭ ﺍﻟﺤﻘﻭل )ﺍﻷﻋﻤﺩﺓ(‬
‫‪ InsertCommand‬ﻹﺩﺭﺍﺝ ﺴﺠل )ﺼﻑ(‬
‫‪ UpdateCommand‬ﻟﺘﺤﺩﻴﺙ ﺍﻟﺒﻴﺎﻨﺎﺕ‬
‫‪ DeleteCommand‬ﻟﺤﺫﻑ ﺴﺠل )ﺼﻑ(‬
‫ﻓﻲ ﻤﻌﺎﻟﺞ ﻤﺤﻭﻻﺕ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺍﻟﺨﻁﻭﺓ ﺍﻷﺨﻴﺭﺓ ﻫﻲ ﺨﻼﺼﺔ ﻻﺨﺘﻴﺎﺭﺍﺘﻨﺎ ﻓﻲ‬ ‫ﺜﻡ‬ ‫ﺒـﺫﻟﻙ ﻟﻡ ﻨﺴﺘﺨﺩﻡ ﺇﻻ ﺃﻤﺭ ﺍﻻﺨﺘﻴﺎﺭ ﺜﻡ‬
‫‪ .‬ﺜﻡ ﻓﻲ ﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﻨﺤﺩﺩ ﻤﺤﻭ‪‬ل ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﻨﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ‬ ‫ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺴﺎﺒﻘﺔ ﻨﺨﺘﺎﺭ ﻤﻨﻬﺎ‬
‫ﺜﻡ‬ ‫ﻓﻴﻅﻬﺭ ﺇﻁﺎﺭ ﺇﻀﺎﻓﺔ ﻤﺠﻤﻭﻋﺔ ﺒﻴﺎﻨﺎﺕ ﻨﺨﺘﺎﺭ‬ ‫‪ .2‬ﺇﻀـﺎﻓﺔ ﻜـﺎﺌﻥ ﻤﺠﻤـﻭﻋﺔ ﺒﻴﺎﻨﺎﺕ‬
‫ﻭﻨﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ‬
‫‪ .3‬ﺴﻨﻌﺒﺊ ﺒﻨﻭﺩ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﻤﻥ ﺨﻼل ﺍﻟﻜﻭﺩ ﻭﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫ﻋﻥ ﻤﺼﻔﻭﻓﺔ‬ ‫ﺃ‪ .‬ﻨﹸﻌﻠـﻥ ﻓـﻲ ﻗﺴـﻡ ﺍﻹﻋﻼﻨﺎﺕ ﺍﻟﻌﺎﻤﺔ ﻟﻠﻨﻤﻭﺫﺝ‬
‫ﺴﺘﺨ ‪‬ﺯﻥ ﺃﺭﻗﺎﻡ ﺍﻷﻗﺴﺎﻡ ‪Dim arrdep( ) As String‬‬
‫ﺏ‪ .‬ﻨﻜـﺘﺏ ﺍﻟﻜـﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻤﻘﻁﻊ ‪ FillDataSet‬ﻓﺒﻌﺩ ﺍﻟﺴﻁﺭ )(‪Me.OleDbConnection1.Open‬ﺍﻟﺫﻱ ﻴﻔﺘﺢ ﺍﻻﺘﺼﺎل ﻤﻊ‬
‫ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻨﻜﺘﺏ)‪ Me.oleDbDadep.Fill(Me.objdepds‬ﺒﺫﻟﻙ ﻴﺘﻡ ﺘﻌﺒﺌﺔ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﻤﺤﻭ‪‬ل ﺍﻟﺒﻴﺎﻨﺎﺕ‪ .‬ﻭﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ‬
‫ﻥ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻋﺒﺎﺭﺓ ﻋﻥ ﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﻤﻥ ﻋﺩﺓ ﺠﺩﺍﻭل ﻗﺩ ﺘﻜﻭﻥ ﺒﻴﻨﻬﺎ ﻋﻼﻗﺎﺕ ﻴ‪‬ﺤﻔﻅ ﻤﺨﻁﻁﻬﺎ ﻓﻲ ﻤﻠﻑ ‪.xsd‬‬
‫ﻓﺈ ‪‬‬
‫ﻤﺎ ﻴﻠﻲ‪:‬‬ ‫ﺕ‪ .‬ﻨﻜﺘﺏ ﻓﻲ ﻨﻔﺱ ﺍﻟﻤﻘﻁﻊ ‪ FillDataSet‬ﺒﻌﺩ ﺍﻟﺴﻁﺭ ﺍﻟﺫﻱ ﻴﻐﻠﻕ ﺍﻻﺘﺼﺎل)(‪Me.OleDbConnection1.Close‬‬

‫ﺤﺘﻰ ﻫﺫﻩ ﺍﻟﻤﺭﺤﻠﺔ ﻨﻨﻔﺫ ‪ Run‬ﻟﻨﺘﺄﻜﺩ ﻤﻥ ﻋﻤﻠﻨﺎ‪ ،‬ﻴﺠﺏ ﺃﻥ ﺘﻅﻬﺭ ﺍﻷﻗﺴﺎﻡ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ‪.‬‬
‫ﺜﺎﻨﻴﹰﺎ ﻋﺭﺽ ﺍﺴﻡ ﺍﻟﻘﺴﻡ ﻟﻠﺴﺠل ﺍﻟﺤﺎﻟﻲ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ‪ cboDep‬ﻋﻨﺩ ﺍﻟﺘﻨﻘل ﻋِﺒﺭ ﺍﻟﺴﺠﻼﺕ ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﺈﻀﺎﻓﺔ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ‬
‫ﻟﻠﻤﻘﻁﻊ ‪ objstuds_PositionChanged‬ﻭﺍﻟﺫﻱ ﻜﺘﺒﻪ‪ ‬ﺍﻟﻤﻌﺎﻟﺞ ﻭﻤﻬﻤﺘ ‪‬ﻪ ﻋﺭﺽ ﺭﻗﻡ ﺘﺴﻠﺴل ﺍﻟﺴﺠل ﻭﺍﻟﻌﺩﺩ ﺍﻟﻜﻠﻲ ﻟﻠﺴﺠﻼﺕ ﺃﺜﻨﺎﺀ ﺍﻟﺘﻨﻘل‬

‫‪21‬‬
‫ﺜﻡ ﻨﻨﻔﺫ ﻟﺘﺠﺭﺒﺔ ﺍﻟﻜﻭﺩ‪ ،‬ﻓﻌﻨﺩ ﺍﻟﺘﻨﻘل ﻴﺠﺏ ﺃﻥ ﻴ‪‬ﻌﺭﺽ ﺍﻟﻘﺴﻡ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ‪.‬‬
‫ﺜﺎﻟـﺜﹰﺎ ﻋﻨﺩ ﺍﻟﺘﺤﺩﻴﺙ )ﺇﻀﺎﻓﺔ ﺃﻭ ﺘﻐﻴﻴﺭ( ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ‪ cboDep‬ﻴﺘﻡ ﺘﺤﺩﻴﺙ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ‪ editdep‬ﻭﺫﻟﻙ ﺒﺈﻀﺎﻓﺔ ﺍﻟﻜﻭﺩ‬
‫ﺍﻟﺘﺎﻟﻲ ﻟﻠﻤﻘﻁﻊ ﺍﻟﺨﺎﺹ ﺒﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﻋﻨﺩ ﺘﻐﻴﻴﺭ ﺍﻟﺒﻨﺩ ﺍﻟﻤﻨﺘﻘﻰ ‪cboDep_SelectedIndexChanged‬‬

‫ﻥ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﺃﺼﺒﺢ ﻤﺭﺘﺒﻁﹰﺎ ﺒﺤﻘل ﺍﻟﻘﺴﻡ ﻓﻲ ﺠﺩﻭل ﺍﻟﻁﻠﺒﺔ ﻭﻴﻌﺭﺽ ﺃﺴﻤﺎﺀ ﺍﻷﻗﺴﺎﻡ‪.‬‬
‫ﻋﻨﺩ ﺍﻟﺘﻨﻔﻴﺫ ﺴﻨﺠﺩ ﺃ ‪‬‬

‫ﺍﻟﻁـﺭﻴﻘﺔ ﺍﻟﺜﺎﻨﻴﺔ ﻟﺠﻌل ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﻤﺭﺘﺒﻁﺎﹰ ﺒﺎﻟﺤﻘل ﺴﻨﻁﺒﻘﻬﺎ ﻋﻠﻰ ﺤﻘل ﺍﻟﻔﺼل ﻭﺒﺩﻭﻥ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻌﺎﻟﺞ ﺤﻴﺙ ﻨﻘﻭﻡ‬
‫ﺒﺈﻀـﺎﻓﺔ ﻤـﺭﺒﻊ ﺘﺤﺭﻴﺭ ﻭﺴﺭﺩ )‪ (combo box‬ﻟﺘﺼﻤﻴﻡ ﻨﻤﻭﺫﺝ ﺍﻟﻁﻠﺒﺔ ﻭﻨﺴﻤﻴﻪ ‪ cbosem‬ﻭﻨﻔﺭ‪‬ﻍ ﺍﻟﺨﺎﺼﻴﺔ ‪ Text‬ﻭﻗﺕ ﺍﻟﺘﺼﻤﻴﻡ ﺜﻡ‬
‫ﻨﻁ ‪‬ﻭﺭ ﺍﻟﻤﻘﻁﻊ ‪ FillDataSet‬ﻭﺒﺩﻭﻥ ﺇﻀﺎﻓﺔ ﻜﺎﺌﻥ ﻤﺤ ‪‬ﻭل ﺒﻴﺎﻨﺎﺕ ﺃﻭ ﻤﺠﻤﻭﻋﺔ ﺒﻴﺎﻨﺎﺕ ﻭﻗﺕ ﺍﻟﺘﺼﻤﻴﻡ ﻟﻠﻨﻤﻭﺫﺝ ﻭﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫‪ .1‬ﻨﹸﻌﻠـﻥ ﻋـﻥ ﻜﺎﺌﻥ ﻜﻤﺤ ‪‬ﻭل ﺒﻴﺎﻨﺎﺕ ‪ daSem‬ﻭﻨﻜﺘﺏ ﻋﺒﺎﺭﺓ ‪ SQL‬ﺍﻟﺘﻲ ﺘﻨﺘﻘﻲ ﺠﻤﻴﻊ ﺤﻘﻭل ﺠﺩﻭل ﺍﻟﻔﺼﻭل )‪ ، (sem‬ﻜﻤﺎ ﹸﻨﻌﻠﻥ ﻋﻥ‬
‫ﻜﺎﺌﻥ ﻤﺠﻤﻭﻋﺔ ﺒﻴﺎﻨﺎﺕ ‪ dsSem‬ﻭﺫﻟﻙ ﻗﺒل ﺍﻟﻌﺒﺎﺭﺓ ‪Try‬‬

‫ﻫﺬه اﻟﻌﺒﺎرة ﻣﻮﺟﻮدة ﻓﻲ اﻟﻤﻘﻄﻊ وﻫﻲ ﺑﺪاﯾﺔ ﺗﺼﯿّﺪ اﻟﺨﻄﺄ‬

‫‪ .2‬ﺘﻌﺒـﺌﺔ ﻜـﺎﺌﻥ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﻤﺤﻭ‪‬ل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺠﺩﻭل ﺍﻟﻔﺼﻭل ﺒﻌﺩ ﺴﻁﺭ ﻓﺘﺢ ﺍﻻﺘﺼﺎل ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﻤﻘﻁﻊ ‪FillDataSet‬‬
‫ﻭﺫﻟﻙ ﺒﺎﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫‪ .3‬ﺜﻡ ﻨﻘﻭﻡ ﺒﻀﺒﻁ ﺜﻼﺙ ﺨﺼﺎﺌﺹ ﻟﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﻤﻥ ﺨﻼل ﺍﻟﻜﻭﺩ ﻫﻲ‪:‬‬
‫‪ DisplayMember‬ﻤﺴﺌﻭﻟﺔ ﻋﻥ ﺍﺴﻡ ﺍﻟﺤﻘل ﺍﻟﺫﻱ ﻴﺤﺘﻭﻱ ﺍﻟﻨﺹ ﺍﻟﻤﺭﺍﺩ ﻋﺭﻀﻪ ﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪DataSource‬‬
‫‪ ValueMemder‬ﻤﺴﺌﻭﻟﺔ ﻋﻥ ﺍﺴﻡ ﺤﻘل ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻘﺎﺒﻠﺔ ﻟﻠﻨﺹ ﻭﺍﻟﻤﻭﺠﻭﺩ ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ﻤﺼﺩﺭ ﻋﻨﺼﺭ ﺍﻟﺘﺤﻜﻡ ‪DataSource‬‬
‫‪ DataSource‬ﺍﻟﺨﺎﺼﻴﺔ ﻤﺼﺩﺭ ﻋﻨﺼﺭ ﺍﻟﺘﺤﻜﻡ ﻭﻫﻲ ﺍﺴﻡ ﻤﺠﻤﻭﻋﺔ ﺒﻴﺎﻨﺎﺕ ﺃﻭ ﻤﺼﻔﻭﻓﺔ ﻴﺴﺘﻨﺩ ﻋﻠﻴﻬﺎ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﺒﺒﻨﻭﺩﻩ‬
‫ﻭﻴﺘﻡ ﺫﻟﻙ ﺒﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﺒﻌﺩ ﺴﻁﺭ ﺇﻏﻼﻕ ﺍﻻﺘﺼﺎل ﻟﻨﺠﻌل ﻓﺘﺭﺓ ﻓﺘﺢ ﺍﻻﺘﺼﺎل ﺃﻗل ﻤﺎ ﻴﻤﻜﻥ‬
‫ﺣﺴﺎﺳﺔ ﻟﺤﺎﻟﺔ اﻷﺣﺮف‬
‫اﺳﻢ اﻟﺤﻘﻞ‬

‫ﻟﻠﺘﺤﺪﯾﺚ‬

‫ﺍﻟﺴـﻁﺭ ﺍﻷﺨﻴـﺭ ﺍﻟﺴـﺎﺒﻕ ﻟﺭﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ ‪ SelectedValue‬ﻟﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ ﺒﺤﻘل ﺍﻟﻔﺼل ﻓﻲ ﺠﺩﻭل ﺍﻟﻁﻠﺒﺔ ﻭﺫﻟﻙ ﻟﺘﺤﺩﻴﺙ‬
‫ﺍﻟﻔﺼل ﺤﺴﺏ ﺍﻻﺨﺘﻴﺎﺭ ﺍﻟﺫﻱ ﻴﺤﺩﺩﻩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺴﺭﺩ‪ ،‬ﻓﺎﺴﺘﺨﺩﻤﻨﺎ ﺍﺴﻡ ﻜﺎﺌﻥ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻟﺠﺩﻭل ﺍﻟﻁﻠﺒﺔ‪.‬‬
‫ﺍﻟﺨﺎﺼـﻴﺔ ‪) DataBindings‬ﺭﺒﻁ ﺍﻟﺒﻴﺎﻨﺎﺕ( ﺘﹸﻌﻴﺩ ﺭﺒﻁ ﺒﻴﺎﻨﺎﺕ ﺒﻌﻨﺼﺭ ﺘﺤﻜﻡ‪ .‬ﻭﺘﺴﺘﺨﺩﻡ ﻹﻀﺎﻓﺔ ﻜﺎﺌﻥ ﺭﺒﻁ ﻟﻤﺠﻤﻭﻋﺔ ﺍﻟﺭﺒﻁ ﻟﻌﻨﺼﺭ‬
‫ﺍﻟﺘﺤﻜﻡ ‪ ControlBindingsCollection‬ﻟ ﺮﺑﻂ ﺃﻱ ﺨﺎﺼﻴﺔ ﻟﻌﻨﺼﺭ ﺍﻟﺘﺤﻜﻡ ﺭﺒﻁﻬﺎ ﺒﺎﻟﺨﺎﺼﻴﺔ ﺍﻟﺘﻲ ﻴﻤﻠﻜﻬﺎ ﺍﻟﻜﺎﺌﻥ‪ .‬ﻓﺄﻭل ﻭﺴﻴﻁﺔ ﻋﻨﺩ‬
‫ﺍﻹﻀﺎﻓﺔ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻷﺴﻠﻭﺏ ‪ Add‬ﻫﻲ ﺍﺴﻡ ﺍﻟﺨﺎﺼﻴﺔ ﻜﻨﺹ‪ ،‬ﻭﺍﻟﻭﺴﻴﻁﺔ ﺍﻟﺜﺎﻨﻴﺔ ﺍﺴﻡ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﺍﻟﺜﺎﻟﺜﺔ ﻻﺴﻡ ﺍﻟﺤﻘل ﻜﻨﺹ‪.‬‬
‫ﻨﻼﺤﻅ ﺃﻨﻨﺎ ﻓﻲ ﺍﻷﺴﻠﻭﺏ ﺍﻷﻭل ﻟﻡ ﻨﺴﺘﻐﻨﻲ ﻋﻥ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ‪ ، editdep‬ﺒﻴﻨﻤﺎ ﻓﻲ ﺍﻷﺴﻠﻭﺏ ﺍﻟﺜﺎﻨﻲ ﻴ‪‬ﻤﻜﻨﻨﺎ ﺍﻻﺴﺘﻐﻨﺎﺀ ﻋﻥ ﻤﺭﺒﻊ‬
‫ﺍﻟﻨﺹ ‪ editsem‬ﺒﺤﺫﻓﻪ‪ .‬ﺍﻷﺴﻠﻭﺏ ﺍﻟﺜﺎﻨﻲ ﻴﺤﺘﺎﺝ ﻤﻌﺭﻓﺔ ﺒﻌﺒﺎﺭﺍﺕ ﻟﻐﺔ ‪ ، SQL‬ﻭﻓﻲ ﺤﺎﻟﺔ ﻭﺠﻭﺩ ﻓﺭﺍﻏﺎﺕ ﻓﻲ ﺃﺴﻤﺎﺀ ﺍﻟﺠﺩﺍﻭل ﺃﻭ ﺃﺴﻤﺎﺀ‬
‫ﺍﻟﻔﺼﻭل ﻓﻨﻀﻊ ﺍﺴﻡ ﺍﻟﺠﺩﻭل ﺃﻭ ﺍﺴﻡ ﺍﻟﺤﻘل ﺒﻴﻥ ‪‬ﻤﻌﻘﻔﺎﺕ ] [ ﻤﺜﻼ "]ﺠﺩﻭل ﺍﻟﻁﻠﺒﺔ[‪].‬ﺭﻗﻡ ﺍﻟﻘﺴﻡ[" ‪.‬‬
‫ﺒﺎﻟﻨﺴﺒﺔ ﻟﻠﺤﻘﻭل ﺍﻟﻤﺭﻤﺯﺓ ﺘﺭﻤﻴﺯﹰﺍ ﻤﻐﻠﻘﹰﺎ ﻓﻨﻀﻊ ﺇﻁﺎﺭ ﻤﺠﻤﻭﻋﺔ ‪ Group Box‬ﺜﻡ ﻨﺭﺴﻡ ﺒﺩﺍﺨﻠﻪ ﺃﺯﺭﺍﺭ ﺨﻴﺎﺭ ‪Radio Buttons‬‬
‫ﺒﻌـﺩﺩ ﺍﻟﻘـﻴﻡ ﺍﻟﻤﻤﻜـﻨﺔ ﺍﻟﻅﻬﻭﺭ ﻭﻨﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ ‪ Text‬ﻟﻠﻤﺠﻤﻭﻋﺔ ﻭﻷﺯﺭﺍﺭ ﺍﻟﺨﻴﺎﺭ ﺒﺎﻟﻨﺹ ﺍﻟﻤﻨﺎﺴﺏ‪ ،‬ﻓﻤﺜﻼﹰ ﻟﺤﻘل ﺍﻟﺠﻨﺱ ﻨﻜﺘﺏ ﻓﻲ‬
‫ﺍﻟﺨﺎﺼﻴﺔ ‪ Text‬ﻟﻠﻤﺠﻤﻭﻋﺔ ﻋﻠﻰ ﺍﻟﺠﻨﺱ‪ ،‬ﻭﻷﺤﺩ ﺃﺯﺭﺍﺭ ﺍﻟﺨﻴﺎﺭ ﺫﻜﺭ ﻭﻟﻶﺨﺭ ﺃﻨﺜﻰ ﻜﻤﺎ ﻨﻀﺒﻁ ﺨﺎﺼﻴﺔ ‪ Name‬ﻟﻬﺎ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬

‫‪22‬‬
‫ﻭﻨﻜﺘﺏ ﻓﻲ ﺍﻟﻤﻘﻁﻊ ‪ objstuds_PositionChanged‬ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ‪:‬‬ ‫‪ RadM‬ﻟﻠﺫﻜﺭ ﻭ ‪ RadF‬ﻟﻸﻨﺜﻰ‬

‫ﺜﻡ ﻨﻜﺘﺏ ﻓﻲ ﻜل ﻤﻥ ﺯﺭﻱ ﺍﻟﺨﻴﺎﺭ ﻓﻲ ﺍﻟﺤﺩﺙ ﻋﻨﺩ ﺍﻟﺘﻐﻴﻴﺭ ﺴﻁﺭﹰﺍ ﻤﻬﻤﺘ ‪‬ﻪ ﺘﻐﻴﻴﺭ ﺍﻟﻘﻴﻤﺔ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ﻭﻜﻤﺎ ﻴﻠﻲ‪:‬‬

‫ﻋـﻨﺩ ﺍﻟﺘﻨﻔـﻴﺫ ﺴـﻨﺠﺩ ﺃﻥ‪ ‬ﺃﺯﺭﺍﺭ ﺍﻟﺨﻴﺎﺭ ﺃﺼﺒﺤﺕ ﻤﺭﺘﺒﻁﺔ ﺒﻤﺭﺒﻊ ﺍﻟﻨﺹ ﻭﻟﻜﻥ ﻻ ﻨﺴﺘﻁﻴﻊ ﺍﻻﺴﺘﻐﻨﺎﺀ ﻋﻥ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ﺒل ﻨﻘﻭﻡ ﺒﻀﺒﻁ‬
‫ﻼ ﻭﻫﻲ ﺘﺘﺒﻊ ﺍﻟﺨﺎﺼﻴﺔ ‪Location‬‬
‫‪ Enabled‬ﻋﻠﻰ ‪ False‬ﻭﺘﻐﻴﻴﺭ ﻤﻭﻗﻌﻪ‪ ‬ﺒﺤﻴﺙ ﻻ ‪‬ﻴﺭﻯ ﺒﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ ‪ X‬ﻋﻠﻰ ‪ -20‬ﻤﺜ ﹰ‬ ‫ﺍﻟﺨﺎﺼﻴﺔ‬
‫ﺒﺤﻴﺙ ﻻ ‪‬ﻴﺭﻯ ﻭﺤﺫﻑ ﺍﻟﺘﺴﻤﻴﺔ ﺍﻟﻤﺭﺍﻓﻘﺔ ﻟﻪ‪.‬‬
‫ﺃﻤـﺜﻠﺔ ﻋﻥ ﻋ‪‬ﺭﺽ ﺍﻟﻨﻤﺎﺫﺝ‪) :‬ﻤﺜﺎل ﺍﻟﻼﺸﻔﺎﻓﻴﺔ( ﻟﻌﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ ﺒﺸﻜل ﻤﺘﺩﺭﺝ ﻤﻥ ﺤﻴﺙ ﺍﻟﺸﻔﺎﻓﻴﺔ‪ ،‬ﻭﻜﺫﻟﻙ ﻋﻨﺩ ﺇﻏﻼﻕ ﺍﻟﻨﻤﻭﺫﺝ‬
‫ﺒﺎﺴـﺘﺨﺩﺍﻡ ﺯﺭ ﺃﻤﺭ ﻓﻴﺨﺘﻔﻲ ﺒﺸﻜل ﺘﺩﺭﻴﺠﻲ ﻨﻀﻊ ‪ Timer‬ﻭﻨﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ ‪ Enabled = True‬ﻭﺍﻟﺨﺎﺼﻴﺔ ‪، Interval = 10‬‬
‫ﻭﺒﺎﻟﻨﺴـﺒﺔ ﻟﻠﻨﻤﻭﺫﺝ ﻓﻨﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ ‪) Opacity=0%‬ﺍﻟﻼﺸﻔﺎﻓﻴﺔ(‪ ،‬ﻭﺍﻟﺨﺎﺼﻴﺔ ‪ CancelButton‬ﻋﻠﻰ ﺍﺴﻡ ﺯﺭ ﺍﻷﻤﺭ ﺇﻏﻼﻕ‪ ،‬ﻭﻨﻜﺘﺏ‬
‫)(‪If Me.Opacity >= 1 Then Me.Timer1.Stop‬‬ ‫ﻓﻲ ﻤﻘﻁﻊ ﺍﻟﻤﻭﻗﱢﺕ ﺍﻟﺴﻁﺭﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ‪:‬‬
‫‪Me.Opacity += 0.05‬‬
‫ﻭﻨﻜﺘﺏ ﻓﻲ ﺍﻟﻤﻘﻁﻊ ﺍﻟﺨﺎﺹ ﺒﺎﻟﻨﻤﻭﺫﺝ ﺤﺩﺙ ﻋﻨﺩ ﺍﻹﻏﻼﻕ ‪ Closed‬ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫‪Do While Me.Opacity > 0.1‬‬ ‫'‬ ‫ﻓﻲ ﺍﻟﻤﻘﻁﻊ ‪DataForm1_Closed‬‬
‫‪Me.Opacity -= 0.05‬‬
‫‪Loop‬‬
‫ﺃﻭ ﻨﺴﺘﺨﺩﻡ ﺍﻷﺴﻠﻭﺏ ﺍﻟﺘﺎﻟﻲ‪ :‬ﹸﻨﻌﻠﻥ ﻋﻥ ﻤﺘﻐﻴ‪‬ﺭ ﻤﻨﻁﻘﻲ‬

‫ﺍﻹﻋﻼﻥ ﻋﻥ ﻤﺘﻐﻴﺭ ﻤﻨﻁﻘﻲ ﻓﻲ ﻗﺴﻡ ﺍﻹﻋﻼﻨﺎﺕ ﺍﻟﻌﺎﻤﺔ ﻟﻠﻨﻤﻭﺫﺝ‬


‫ﻨﺨﺼﺹ ﺍﻟﻘﻴﻤﺔ ‪ True‬ﻟﻠﻤﺘﻐﻴﺭ ‪ bolOp‬ﻓﻲ ﺍﻟﻤﻘﻁﻊ ‪ Form_Load‬ﻭﻜﺎﻟﺘﺎﻟﻲ‬
‫ﺒﻌﺩ ﺫﻟﻙ ﻨﻜﺘﺏ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﻤﻘﻁﻊ ﺍﻟﻤﻭﹼﻗﺕ‬

‫‪23‬‬
‫ﺜﻡ ﻨﻜﺘﺏ ﺍﻟﺴﻁﺭﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ ﻓﻲ ﺍﻟﻤﻘﻁﻊ ﺍﻟﺨﺎﺹ ﺒﺯﺭ ﺍﻷﻤﺭ ﺇﻏﻼﻕ ﻋﻨﺩ ﺍﻟﻨﻘﺭ‬

‫ﻋﻨﺩ ﺍﻟﺘﻨﻔﻴﺫ ﺴﻴﻅﻬﺭ ﺍﻟﻨﻤﻭﺫﺝ ﺘﺩﺭﻴﺠﻴﹰﺎ ﻭﻋﻨﺩ ﺍﻟﻨﻘﺭ ﻋﻠﻰ ﺇﻏﻼﻕ ﺃﻭ ﻀﻐﻁ ﺍﻟﻤﻔﺘﺎﺡ ‪ Esc‬ﺴﻴﺨﺘﻔﻲ ﺍﻟﻨﻤﻭﺫﺝ ﺘﺩﺭﻴﺠﻴﹰﺎ‪.‬‬
‫ﻤﺜﺎل )ﺭﺴﻡ ﺨﻁ( ﻟﻌﺭﺽ ﺨﻁ ‪ Line‬ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﻨﻘﻭﻡ ﺒﺭﺴﻤﻪ ﻭﻗﺕ ﺍﻟﺘﻨﻔﻴﺫ ﺒﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﺤﺩﺙ ‪Form_Load‬‬

‫ﻴ‪‬ﻤﻜﻥ ﻓﻬﻡ ﻫﺫﺍ ﺍﻷﺴﻠﻭﺏ ﻓﻲ ﺍﻟﺭﺴﻡ ﺒﺎﻟﺨﻁﻭﺘﻴﻥ ﺍﻟﺘﺎﻟﻴﺘﻴﻥ‪:‬‬


‫‪ .1‬ﺘﻜﻭﻴﻥ ﻜﺎﺌﻥ ﺭﺴﻡ ‪ Graphics Object‬ﻭﻫﺫﺍ ﺍﻟﻜﺎﺌﻥ ﻴﺸﺒﻪ ﻟﻭﺤﺔ ﺍﻟﺭﺴﻡ‪ ،‬ﻭﺫﻟﻙ ﺒﺎﺴﺘﺩﻋﺎﺀ ﺍﻷﺴﻠﻭﺏ ‪CreateGraphics‬‬
‫‪Dim g As Graphics‬‬ ‫ﻓﺎﻟﺴﻁﺭ ‪ Dim g As Grephics = Me.CreateGraphics‬ﻴ‪‬ﻘﺎﺒل ﺍﻟﺴﻁﺭﻴﻥ ﺍﻟﺘﺎﻟﻴﻴﻥ‪:‬‬
‫‪g = CreateGraphics‬‬
‫‪ .2‬ﺍﺴﺘﺨﺩﺍﻡ ﻜﺎﺌﻥ ﺍﻟﺭﺴﻡ ﻓﻲ ﺭﺴﻡ ﺍﻟﺨﻁﻭﻁ ﻭﺍﻷﺸﻜﺎل‪ ،‬ﻭﺫﻟﻙ ﺒﺘﻜﻭﻴﻥ ﻗﻠﻡ ‪ Pen‬ﻟﻠﺭﺴﻡ ﺃﻭ ﻓﺭﺸﺎﺓ ‪ Brush‬ﻭﺍﻟﻔﺭﺸﺎﺓ ﺃﻨﻭﺍﻉ‪ ،‬ﺃﻭ ﺘﻜﻭﻴﻥ ﻗﻠﻡ‬
‫ﻋﺭﺽ ﺍﻟﺨﻁ‬
‫ﻭ‪‬ﻤﻜﻥ ﺘﺤﺩﻴﺩ ‪‬‬
‫ﻤـﻥ ﻜـﺎﺌﻥ ‪ Brush‬ﻤﻭﺠﻭﺩ‪ ،‬ﻭﻋﻨﺩ ﺘﻜﻭﻴﻥ ﺍﻟﻘﻠﻡ ﺃﻭ ﺍﻟﻔﺭﺸﺎﺓ ﻴﺠﺏ ﺘﺤﺩﻴﺩ ﺍﻟﻠﻭﻥ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻌﻨﺼﺭ ‪ Color‬ﻴ‬
‫ﻭ‪‬ﻘﺎﺱ ﺍﻟﻌ‪‬ﺭﺽ ﻓﻲ ‪ VB .NET‬ﺒﺎﻟﺒﻜﺴل ‪، Pixel‬‬
‫ﻴ‬ ‫ﻭﻜﻤـﺎ ﻓـﻲ ﺍﻟﺴـﻁﺭ ﺍﻟﺘﺎﻟﻲ‪Dim pr As New Pen(Color.Red, 2) :‬‬
‫=‪(Pixel‬‬ ‫‪1‬‬ ‫ﻼ )‪Inch‬‬
‫ﻭﺍﻟﺒﻜﺴـ ﻟ ﻫﻲ ﻨﻘﻁﺔ ﻤﻨﻔﺭﺩﺓ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ ﺘﺸﻜل ﻜﺎﻓﺔ ﺍﻟﻤﻨﻅﺭ ﺍﻟﻤﻌﺭﻭﺽ ﻓﻴﻌﺘﻤﺩ ﻁﻭﻟﻬﺎ ﻋﻠﻰ ﺩﻗﺔ ﺍﻟﺸﺎﺸﺔ ﻓﻤﺜ ﹰ‬
‫‪72‬‬
‫ﺒﺩﻗـﺔ ﺸﺎﺸـﺔ ‪ 600×800‬ﺒﻜﺴل ‪ ،Resolution‬ﺒﻴﻨﻤﺎ ﻓﻲ ‪ VB6.0‬ﻜﺎﻨﺕ ﻭﺤﺩﺓ ﺍﻟﻘﻴﺎﺱ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﺍﻟﺘﻭِﺏ ‪ Twip‬ﺤﻴﺙ ﺃ ‪‬ﻨﻪ ﻭﺤﺩﺓ‬
‫= ‪ .Twip‬ﺒﻌﺩ ﺘﻜﻭﻴﻥ ﻜﺎﺌﻥ ﺍﻟﺭﺴﻡ ﻭﺍﻟﻘﻠﻡ ﺃﻭ ﺍﻟﻔﺭﺸﺎﺓ ﻨﻘﻭﻡ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺃﺤﺩ ﺃﺴﺎﻟﻴﺏ ﻜﺎﺌﻥ ﺍﻟﺭﺴﻡ ﻤﺜل ‪DrawLine‬‬ ‫ﻤﺴـﺎﻓﺔ ‪1 Inch‬‬
‫‪1440‬‬
‫ﻟﺭﺴـﻡ ﺨـﻁ ﻤﺴﺘﻘﻴﻡ‪ ،‬ﺍﻷﺴﻠﻭﺏ ‪ DrawRectangle‬ﻟﺭﺴﻡ ﻤﺴﺘﻁﻴل ﺃﻭ ﻤﺭﺒﻊ‪ ،‬ﺍﻷﺴﻠﻭﺏ‪ DrawEllipse‬ﻟﺭﺴﻡ ﻗﻁﻊ ﻨﺎﻗﺹ ﺃﻭ ﺩﺍﺌﺭﺓ‪.‬‬
‫ﻭﻫﻨﺎﻙ ﺃﺴﺎﻟﻴﺏ ﺭﺴﻡ ﺃﺨﺭﻯ‪ .‬ﻭﻤﻥ ﺘﺭﻜﻴﺒﺎﺕ ﺍﻷﺴﻠﻭﺏ ‪ DrawLine‬ﻫﻭ ﺘﺤﺩﻴﺩ ﺍﻟﻘﻠﻡ ﻭﺇﺤﺩﺍﺜﻴﺎﺕ ﺍﻟﻨﻘﻁﺘﻴﻥ ﻭﻜﻤﺎ ﻴﻠﻲ ‪:‬‬

‫‪DrawRectangle‬‬ ‫ﻭ‬

‫‪DrawEllipse‬‬ ‫ﺍﻷﺴﻠﻭﺏ‬

‫ﺤﻴﺙ ﺍﻟﻨﻘﻁﺔ )‪ (0 , 0‬ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ ﻫﻲ ﺍﻟﺯﺍﻭﻴﺔ ﺍﻟﻌﻠﻴﺎ ﺍﻟﻴﺴﺭﻯ ﻟﻠﻨﻤﻭﺫﺝ‪ ،‬ﻭﻭﺤﺩﺓ ﺍﻟﻘﻴﺎﺱ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻟﻺﺤﺩﺍﺜﻴﺎﺕ ﻫﻲ ﺍﻟﺒﻜﺴل‬
‫‪،Color.Pink ،Color.Red‬‬ ‫ﺍﻨـﺞ ﻭﺤﺴـﺏ ﺩﻗﺔ ﺍﻟﺸﺎﺸﺔ ‪ .Resolution‬ﻭﻤﻥ ﺃﻤﺜﻠﺔ ﺍﻷﻟﻭﺍﻥ ﻟﻠﻌﻨﺼﺭ ‪ Color‬ﻫﻲ‬ ‫‪1‬‬ ‫ﻭﻫـﻭ‬
‫‪72‬‬
‫‪.Color.YellowGreen ،Color.Yellow ،Color.White ،Color.Black‬‬
‫ﻟﻘـﺩ ﺍﺴﺘﺨﺩﻤﻨﺎ ﻓﻲ ﺍﻟﻜﻭﺩ ﺍﻟﺴﺎﺒﻕ ﺍﻟﺨﺎﺼﻴﺔ ‪ Width‬ﻟﻠﻨﻤﻭﺫﺝ ﻭﻫﻲ ﻤﺴﺌﻭﻟﺔ ﻋﻥ ﻋ‪‬ﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ ﻭﺒﺸﻜل ﻋﺎﻡ ﻋﻥ ﻋ‪‬ﺭﺽ ﺍﻟﻜﺎﺌﻥ‪ ،‬ﻭﻤﻥ‬
‫ﺃﺨـﻭﺍﺘﻬﺎ ﺍﻟﺨﺎﺼﻴﺔ ‪ Height‬ﺍﻻﺭﺘﻔﺎﻉ ‪ ،‬ﻭﺍﻟﺨﺎﺼﻴﺔ ‪ Top‬ﺃﻋﻠﻰ‪ ،‬ﻭﺍﻟﺨﺎﺼﻴﺔ ‪ Left‬ﻴﺴﺎﺭ‪ ،‬ﻓﺎﻟﺨﺎﺼﻴﺘﻴﻥ ‪ Width‬ﻭ ‪ Height‬ﺘﺘﺤﻜﻤﺎﻥ‬
‫ﺒﺤﺠﻡ ﺍﻟﻨﻤﻭﺫﺝ‪ ،‬ﺒﻴﻨﻤﺎ ﺍﻟﺨﺎﺼﻴﺘﻴﻥ ‪ Left‬ﻭ ‪ Top‬ﻟﻠﺘﺤﻜﻡ ﺒﻤﻭﻗﻊ ﺍﻟﻨﻤﻭﺫﺝ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ‪.‬‬

‫‪24‬‬
‫ﻤﺜﺎل )ﻭﺍﺠﻪ ﺍﻟﺘﻁﺒﻴﻕ( ﻟﺠﻌل ﻨﻤﺎﺫﺝ ﺍﻟﻤﺸﺭﻭﻉ ﹸﺘﻌﺭﺽ ﺒﺄﺴﻠﻭﺏ ﻭﺍﺠﻬﺔ ﻤﺘﻌﺩﺩﺓ ﺍﻟﻤﺴﺘﻨﺩﺍﺕ )‪Multiple Document (MDI‬‬
‫ﻟﻠﻨﻤﻭﺫﺝ ﺍﻷﺏ‪ ،‬ﻭﻋﻨﺩ ﻋﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻻﺒﻥ ﻤﻥ ﺨﻼل ﺍﻟﻨﻤﻭﺫﺝ ﺍﻷﺏ ﻨﺤﺩﺩ‬ ‫‪ Interface‬ﻨﻀـﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ‬
‫‪Dim frm As New Form2‬‬ ‫ﻟ ‪‬ﻪ ﺨﺎﺼﻴﺔ ﺍﻷﺏ ‪ MdiParent‬ﻭﻜﻤﺎ ﻴﻠﻲ ‪:‬‬
‫' ‪frm.MdiParent = Me‬‬ ‫اﻷب ﻟﻠﻨﻤﻮذج اﻟﺬي ﺳﯿﻌﺮض ﻫﻮ اﻟﻨﻤﻮذج اﳊﺎﱄ‬
‫)(‪frm.Show‬‬
‫ﺒﻴﻨﻤﺎ ﺍﻟﻭﺍﺠﻬﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻟﻨﻤﺎﺫﺝ ﺍﻟﺘﻁﺒﻴﻕ ﻫﻲ ‪.(Single Document Interface) SDI‬‬
‫ﻤﺜﺎل )ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﻤﺸﺭﻭﻁ( ﻟﻌﺭﺽ ﻨﻤﻭﺫﺝ ﺒﺸﻜل ﻤﺸﺭﻭﻁ ﺒﻤﻌﻨﻰ ﻻ ﻴﻤﻜﻥ ﺍﻻﺴﺘﻤﺭﺍﺭ ﺒﺎﻟﻌﻤل ﺒﺎﻟﻨﻤﺎﺫﺝ ﺍﻷﺨﺭﻯ ﺒﺎﻟﺘﻁﺒﻴﻕ ﻤﺎ ﻟﻡ‬
‫ﻴﺘﻡ ﺍﻻﻨﺘﻬﺎﺀ ﻤﻥ ﺍﻟﻌﻤل ﺒﺎﻟﻨﻤﻭﺫﺝ ﺍﻟﻤﺸﺭﻭﻁ ﻭﺇﻏﻼﻗﻪ‪ ،‬ﻓﻨﺴﺘﺨﺩﻡ ﺍﻷﺴﻠﻭﺏ ‪ ، ShowDialog‬ﻭﻴﺠﺏ ﺃﻥ ﻻ ﻴﻜﻭﻥ ﻨﻤﻭﺫﺝ ﺍﺒﻥ‪ ،‬ﺒﻤﻌﻨﻰ ﺃﻥ‪‬‬
‫ﻭ‪‬ﺴﻤﻰ ﻋﻨﺩ ﺇ ٍﺫ ‪) Modal‬ﻤﺸﺭﻭﻁ(‪ .‬ﺃﻤﺎ ﻋﻨﺩ ﺍﻟﻌﺭﺽ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻷﺴﻠﻭﺏ ‪Show‬‬
‫ﺍﻟـﻨﻤﻭﺫﺝ ﺍﻟﻤﺸﺭﻭﻁ ﻴﺠﺏ ﺃﻥ ﻴﻜﻭﻥ ‪ . SDI form‬ﻴ‬
‫ﻋﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ ﻤﺸﺭﻭﻁﺎﹰ ﻴﺨﺘﻠﻑ ﻋﻥ ﻤﻔﻬﻭﻡ ﻋﺭﺽ ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﺍﻟﻤﻘﺩﻤﺔ ﺍﻟﺫﻱ ﺘﺘﺤﻜﻡ ﺒﻪ‬
‫ﻓ‪‬ﺴﻤﻰ ﺃﺴﻠﻭﺏ ﺍﻟﻌ‪‬ﺭﺽ ﺒـ ‪ . Modeless‬ﻭ ‪‬‬
‫ﻴ‬
‫ﻭﻫﻲ ﺨﺎﺼﻴﺔ ﻤﻨﻁﻘﻴﺔ ﻋﻨﺩ ﻀﺒﻁﻬﺎ ﻋﻠﻰ ‪ True‬ﺘﺠﻌل ﺍﻟﻨﻤﻭﺫﺝ ﻓﻲ ﻤﻘﺩﻤﺔ ﺍﻟﻨﻤﺎﺫﺝ ﻭﻟﻜﻥ ﻴ‪‬ﻤﻜﻥ ﺍﻟﺘﻌﺎﻤل ﻤﻊ‬ ‫ﺍﻟﺨﺎﺼـﻴﺔ‬
‫ﺒﻘﻴﺔ ﻨﻤﺎﺫﺝ ﺍﻟﺘﻁﺒﻴﻕ ﻋﻠﻰ ﺍﻟﺭﻏﻡ ﻤﻥ ﻭﺠﻭﺩﻩ‪.‬‬
‫ﻻﺨﺘـﻴﺎﺭ ﺍﻟﺘﺎﺭﻴﺦ( ﺇﺫﺍ ﻜﺎﻥ ﻟﺩﻴﻨﺎ ﺤﻘل ﺘﺎﺭﻴﺦ ﻓﻴﻤﻜﻨﻨﺎ ﺃﻥ ﻨﺭﺒﻁﻪ‪ ‬ﺒﻤﺭﺒﻊ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺘﺎﺭﻴﺦ ﻋﻥ‬ ‫ﻤـﺜﺎل )ﺍﻷﺩﺍﺓ‬
‫ﻭﻨﺨﺘﺎﺭ ﺍﻟﺘﻨﺴﻴﻕ ﺍﻟﻤﻨﺎﺴﺏ ﺒﺎﻟﺨﺎﺼﻴﺔ ‪ ، Format‬ﺃﻭ ﺍﺴﺘﺨﺩﺍﻡ ﺘﻨﺴﻴﻕ‬ ‫ﻁـﺭﻴﻕ ﺍﻟﺨﺎﺼـﻴﺔ ‪ Text‬ﺍﻟـﺘﺎﺒﻌﺔ ﻟﻠﺨﺎﺼﻴﺔ‬
‫‪dateTimePicker1.Format = DateTimePickerFormat.Custom‬‬ ‫ﻤﺨﺼﺹ ﻭﻜﻤﺎ ﻴﻠﻲ‪:‬‬
‫"‪dateTimePicker1.CustomFormat = "MMMM dd, yyyy – dddd‬‬

‫ﺭﺒﻁ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻜﻭﺩ ﻓﻘﻁ‬


‫ﻨﺼـﻤﻡ ﻨﻤـﻭﺫﺝ ﺍﻷﻗﺴﺎﻡ ﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﻤﺠﺎﻭﺭ ﻭﺒﻌﺩ ﻭﻀﻊ‬
‫ﻜـﺎﺌﻥ ﺍﺘﺼﺎل ﻨﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ ‪ ConnectionString‬ﺒﺎﺴﺘﺨﺩﺍﻡ‬
‫ﻤﻌـﺎﻟﺞ ﺨﺼـﺎﺌﺹ ﺍﻟ ـﺭﺒﻁ ﻭﺍﻟـﺫﻱ ﻴﻅﻬ ـﺭ ﺒﺎﺨﺘـﻴﺎﺭ ‪New‬‬
‫‪ Connection‬ﺜـﻡ ﻨﻨﺴـﺦ ﻗـﻴﻤﺔ ﺍﻟﺨﺎﺼـﻴﺔ ﻭﻨﻠﺼـﻘﻬﺎ ﺒﺎﻟﻜﻭﺩ‬
‫ﺒﺘﺨﺼـﻴﺹ ﺜﺎﺒـﺕ ﻨﺼـﻲ ﻋﻠﻰ ﻤﺴﺘﻭﻯ ﺍﻟﻭﺤﺩﺓ ﻟﻬﺎ ﺜﻡ ﺇﺯﺍﻟﺔ ﺃﻱ‬
‫ﻋﻼﻤـﺎﺕ ﺘﻨﺼﻴﺹ ﺒﺩﺍﺨل ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﻴﺔ ﻭﻜﻤﺎ ﺴﻴﺄﺘﻲ ﻤﻊ ﺍﻟﺜﺎﺒﺕ‬
‫ﺍﻟﻤﺴﻤﻰ ‪ .strConn‬ﺃﺴﻤﺎﺀ ﻤﺭﺒﻌﺎﺕ ﺍﻟﻨﺼﻭﺹ ﻫﻲ ‪، txtdepid‬‬
‫‪ .txtRecord ، txtdepna‬ﻭﺍﺴـﻡ ﺍﻟﻨﻤﻭﺫﺝ ‪ ، frmdep‬ﻭﻨﻀﺒﻁ‬
‫ﺍﻟﺨﺎﺼﻴﺔ ‪ FlatStyle‬ﻷﺯﺭﺍﺭ ﺍﻷﻤﺭ ﻋﻠﻰ ‪ Popup‬ﺃﻭ ‪. Flat‬‬
‫‪ .1‬ﻨﻜﺘﺏ ﻓﻲ ﻗﺴﻡ ﺍﻹﻋﻼﻨﺎﺕ ﺍﻟﻌﺎﻤﺔ ﻤﺎ ﻴﻠﻲ‪:‬‬

‫‪ .2‬ﺘﻜﻭﻴﻥ ﻤﻨﻁﻘﺔ ﻜﻭﺩ ﻟﻠﺜﻭﺍﺒﺕ ﻭﺍﻟﻤﺘﻐﻴﺭﺍﺕ ﻋﻠﻰ ﻤﺴﺘﻭﻯ ﺍﻟﻭﺤﺩﺓ‬

‫‪25‬‬
‫‪ .3‬ﻤﻨﻁﻘﺔ ﻜﻭﺩ ﻟﻠﻤﻘﺎﻁﻊ‬

‫ﻀﻌﺕ ﺒﻤﻨﻁﻘﺔ ﺨﺎﺭﺝ ﻤﻨﻁﻘﺔ ﻜﻭﺩ ﺘﻜﻭﻴﻥ ﺍﻟﻨﻤﻭﺫﺝ‬


‫‪ .4‬ﻤﻘﺎﻁﻊ ﺃﺤﺩﺍﺙ ﺍﻟﻜﺎﺌﻨﺎﺕ ﻭ ِ‬

‫‪26‬‬
27
‫ﻤﻼﺤﻅـﺔ‪ :‬ﺃﺘـﺎﺡ ﻟﻨﺎ ﺍﻟﻜﻭﺩ ﺍﻟﺴﺎﺒﻕ ﺍﻟﺘﺤﺭﻴﺭ ﻭﺍﻟﺘﺤﺩﻴﺙ ﻓﻲ ﺍﺴﻡ ﺍﻟﻘﺴﻡ ﻓﻲ ﺤﺎﻟﺔ ﺍﻟﺴﺠل ﺍﻟﺠﺩﻴﺩ ﺃﻭ ﺴﺠل ﻤﻭﺠﻭﺩ ﻭﻟﻜﻥ ﺍﻟﺘﺤﺩﻴﺙ ﻓﻲ ﺭﻗﻡ‬
‫ﺍﻟﻘﺴـﻡ ﻏﻴـﺭ ﻤﻤﻜـﻥ ﺇﻻ ﻓﻲ ﺤﺎﻟﺔ ﺍﻟﺴﺠل ﺍﻟﺠﺩﻴﺩ ﻭﺫﻟﻙ ﻷﻨﻨﺎ ﻨﺤﺩ‪‬ﺙ ﺒﻴﺎﻨﺎﺕ ﺍﻟﺴﺠل ﺍﻟﻤﻭﺠﻭﺩ ﺒﺎﻻﻋﺘﻤﺎﺩ ﻋﻠﻰ ﺭﻗﻡ ﺍﻟﻘﺴﻡ ﺍﻟﻤﺨﺯ‪‬ﻥ ﻓﻲ‬
‫ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪.Dataset‬‬

‫‪28‬‬
‫ﺍﻟﺘﻘﺎﺭﻴﺭ ‪Reports‬‬
‫ﺍﻷﺩﺍﺓ ﺍﻟﺭﺌﻴﺴـﻴﺔ ﻟﺘﻜﻭﻴﻥ ﻭﺘﻨﺴﻴﻕ ﺍﻟﺘﻘﺎﺭﻴﺭ ﻓﻲ ‪ Visual Studio .NET‬ﻫﻲ ‪ ، Crystal Reports .NET‬ﺤﻴﺙ ﺘﺤﺘﻭﻱ ﻫﺫﻩ‬
‫ﺍﻷﺩﺍﺓ ﻋﻠـﻰ ﻤ‪‬ﻨﺸـﺊ ﺍﻟﺘﻘﺎﺭﻴﺭ ﻭﺍﻟﺫﻱ ﻴﻘﻭﻡ ﺒﻌﺭﺽ ﻋﺩﺓ ﻭﺍﺠﻬﺎﺕ ﺘﹸﺴﻤﻰ ﺨﺒﺭﺍﺀ ﺍﻟﺘﻘﺎﺭﻴﺭ ‪ Report Experts‬ﻟﺘﺼﻤﻴﻡ ﺍﻟﺘﻘﺎﺭﻴﺭ ﺒﺴﺭﻋﺔ‪.‬‬
‫ﻭﺘﻤﺘﺎﺯ ﺍﻟﺘﻘﺎﺭﻴﺭ ﺍﻟﺘﻲ ‪‬ﻴﻨﺸﺌﻬﺎ ‪ Crystal Reports .NET‬ﺒﺈﻤﻜﺎﻨﻴﺔ ﺍﺴﺘﺨﺩﺍﻤﻬﺎ ﻓﻲ ﺒﻴﺌﺔ ‪ Windows‬ﻭﻓﻲ ‪. Web‬‬
‫ﺘﺴـﺎﻋﺩﻨﺎ ﺍﻟﺘﻘﺎﺭﻴـﺭ ﻓﻲ ﺘﻘﺩﻴﻡ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻁﺭﻴﻘﺔ ﺫﺍﺕ ﻤﻌﻨﻰ ﻭﺇﻋﺩﺍﺩﻫﺎ ﻟﻠﻁﺒﺎﻋﺔ ﻋﻠﻰ ﺍﻵﻟﺔ ﺍﻟﻁﺎﺒﻌﺔ‪ ،‬ﻓﻴﺠﺏ ﺃﻥ ﺘﻜﻭﻥ ﻫﻨﺎﻙ‬
‫ﻁﺎﺒﻌـﺔ ﻤﻌ ‪‬ﺭﻓﺔ ﺒﻨﻅﺎﻡ ﺍﻟﺘﺸﻐﻴل ﻟﻜﻲ ﻨﺘﻤﻜﻥ ﻤﻥ ﺘﺼﻤﻴﻡ ﺍﻟﺘﻘﺭﻴﺭ‪ .‬ﻭﻟﻴﺱ ﺒﺎﻟﻀﺭﻭﺭﺓ ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﺠﻬﺎﺯ ﻤﺭﺒﻭﻁﹰﺎ ﺒﻁﺎﺒﻌﺔ‪ ) .‬ﻴﻤﻜﻥ‬
‫ﺇﻀﺎﻓﺔ ﻁﺎﺒﻌﺔ ﻋﻥ ﻁﺭﻴﻕ ﺍﺒﺩﺃ< ﺇﻋﺩﺍﺩﺍﺕ < ﺍﻟﻁﺎﺒﻌﺎﺕ ﺜﻡ ﺇﻀﺎﻓﺔ ﻁﺎﺒﻌﺔ(‪.‬‬
‫ﻴﺤﺘﻭﻯ ﺘﺼﻤﻴﻡ ﺍﻟﺘﻘﺭﻴﺭ ﻋﻠﻰ ﺨﻤﺴﺔ ﺃﺠﺯﺍﺀ ﺃﺴﺎﺴﻴﺔ ﻫﻲ ‪:‬‬
‫‪ :‬ﻭﻫﻭ ﻴﺤﺘﻭﻯ ﻋﻠﻰ ﻤﺎ ﻴﻅﻬﺭ ﻓﻲ ﺍﻟﺠﺯﺀ ﺍﻟﻌﻠﻭﻱ ﻤﻥ ﺃﻭل ﺼﻔﺤﺔ ﻓﻘﻁ‬ ‫‪ .1‬ﺭﺃﺱ ﺍﻟﺘﻘﺭﻴﺭ‬
‫‪ :‬ﻴﻅﻬﺭ ﻓﻲ ﺍﻟﺠﺯﺀ ﺍﻟﻌﻠﻭﻱ ﻤﻥ ﻜل ﺼﻔﺤﺔ ﻭﻫﻭ ﻴﻨﻔﻊ ﺃﻥ ﻨﻀﻊ ﻓﻴﻪ ﻋﻨﺎﻭﻴﻥ ﺍﻷﻋﻤﺩﺓ‪.‬‬ ‫‪ .2‬ﺭﺃﺱ ﺍﻟﺼﻔﺤﺔ‬
‫‪:‬ﻟﻌﺭﺽ ﺍﻟﺴﺠﻼﺕ‪.‬‬ ‫‪ .3‬ﺍﻟﺘﻔﺼﻴل‬
‫‪ :‬ﻤﺎ ﻴﻅﻬﺭ ﻓﻲ ﺍﻟﺠﺯﺀ ﺍﻟﺴﻔﻠﻲ ﻤﻥ ﺃﺨﺭ ﺼﻔﺤﺔ‬ ‫‪ .4‬ﺘﺫﻴﻴل ﺍﻟﺘﻘﺭﻴﺭ‬
‫‪ :‬ﻤﺎ ﻴﻅﻬﺭ ﺃﺴﻔل ﻜل ﺼﻔﺤﺔ‪.‬‬ ‫‪ .5‬ﺘﺫﻴﻴل ﺍﻟﺼﻔﺤﺔ‬
‫ﻭﻹﻀﺎﻓﺔ ﺘﻘﺭﻴﺭ ﺇﻟﻰ ﺍﻟﻤﺸﺭﻭﻉ ﻨﹼﺘﺒﻊ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ‬
‫‪ .1‬ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ‪ Project‬ﻨﺨﺘﺎﺭ ﺍﻷﻤﺭ ‪Add Windows Form‬‬
‫ﺃﻭ ‪ Add New Item‬ﻓﻴﻅﻬﺭ ﺇﻁﺎﺭ ﺇﻀﺎﻓﺔ ﺒﻨﺩ ﺠﺩﻴﺩ ﻟﺘﺤﺩﻴﺩ ﻨﻭﻉ‬
‫ﺍﻟﻨﻤﻭﺫﺝ ﻓﻨﺨﺘﺎﺭ ‪ ، Crystal Report‬ﻭﻴﻤﻜﻥ ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﻫﺫﻩ‬
‫ﺍﻟﻤـﺭﺤﻠﺔ ﻤـﻥ ﺨـﻼل ﺍﻟﻨﻘﺭ ﺒﺎﻷﻴﻤﻥ ﻋﻠﻰ ﺍﺴﻡ ﺍﻟﺤل ﻓﻲ ﺇﻁﺎﺭ‬
‫‪ (Solution‬ﺜـــﻡ‬ ‫ﻤﺴﺘﻜﺸـــﻑ ﺍﻟﺤـــ ﻟ )‪Explorer‬‬
‫ﺃﻭ‬ ‫ﺜـــﻡ‬
‫ﻭﻜﻤـﺎ ﺴﺒﻕ ﺫِﻜﺭﻩ‪ .‬ﻭﺒﻌﺩ ﺍﻟﺘﺤﺩﻴﺩ ﺴﻴ‪‬ﻌﻁﻲ‬
‫ﺍﻟﺒـﺭﻨﺎﻤﺞ ﺍﺴﻤﺎﹰ ﺍﻓﺘﺭﺍﻀﻴﺎﹰ ﻟﻠﺘﻘﺭﻴﺭ ﺒﺎﻻﻤﺘﺩﺍﺩ ‪ .rpt‬ﺜﻡ ﺒﺎﻟﻨﻘﺭ ﻋﻠﻰ‬
‫‪ Open‬ﻴﺒﺩﺃ ﻋﻤل ﺍﻟﺒﺭﻨﺎﻤﺞ ‪Crystal Report‬‬

‫ﺨﻁﻭﺓ ﺘﺴﺠﻴل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﻤﻴﺯﺍﺕ ﺃﺨﺭﻯ ﻭﺘﺤﺩﻴﺙ‬


‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﻓﻨﺨﺘﺎﺭ ‪ Register Later‬ﻟﻨﻨﺘﻘل ﺇﻟﻰ ﺍﻟﺨﻁﻭﺓ ﺍﻟﺘﺎﻟﻴﺔ‬
‫ﻻﺨﺘﻴﺎﺭ ﻨﻭﻉ ﺍﻟﺘﻘﺭﻴﺭ‬

‫‪29‬‬
‫ﺘﻘﺭﻴﺭ ﻗﻴﺎﺴﻲ‪:‬‬ ‫‪ .2‬ﻭﺃﻨﻭﺍﻉ ﺍﻟﺘﻘﺎﺭﻴﺭ ﺍﻟﻤﺘﺎﺤﺔ ﻫﻲ‪:‬‬
‫ﻭﻫـﻲ ﺍﻷﺩﺍﺓ ﺍﻷﻜﺜـﺭ ﺍﺴﺘﺨﺩﺍﻤﺎﹰ‪ ،‬ﻭﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺜﻤﺎﻨﻴﺔ ﻋﻼﻤﺎﺕ‬
‫ﺘﺒﻭﻴﺏ ﻻﺨﺘﻴﺎﺭ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺍﻟﺭﺒﻁ ﻤﻊ ﺍﻟﺠﺩﺍﻭل‪.‬‬
‫ﻨﻤـﻭﺫﺝ ﺨﻁﺎﺒـﺎﺕ‪ :‬ﻟﺘﻜﻭﻴﻥ ﺘﻘﺎﺭﻴﺭ ﺍﻟﺨﻁﺎﺒﺎﺕ‬
‫)ﺍﻟﻤﺭﺍﺴﻼﺕ(‬
‫ﻨﻤـﻭﺫﺝ‪ :‬ﻟﺘﻜﻭﻴﻥ ﺘﻘﺎﺭﻴﺭ ﻴ‪‬ﻤﻜﻥ ﻁﺒﺎﻋﺘﻬﺎ ﻋﻠﻰ ﻨﻤﺎﺫﺝ‬
‫ﻤﻭﺠﻭﺩﺓ ﻤﺜل ﺍﻟﻔﻭﺍﺘﻴﺭ ﻜﺸﻭﻓﺎﺕ ﺍﻟﺤﺴﺎﺒﺎﺕ‬
‫ﺘﻘﺭﻴﺭ ﺠﺩﻭﻟﻲ‪ :‬ﻟﺘﻜﻭﻴﻥ ﺘﻘﺎﺭﻴﺭ ﺘﻌﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ‬
‫ﺒﺼـﻭﺭﺓ ﻤـﺘﻘﺎﻁﻌﺔ ﻓﻘﻴﻡ ﺤﻘل ﺃﻭ ﺃﻜﺜﺭ ﻜﻌﻨﺎﻭﻴﻥ ﻟﻠﺼﻔﻭﻑ ﻭﻗﻴﻡ‬
‫ﺤﻘـ ﻟ ﻭﺍﺤﺩ ﻓﻘﻁ ﻜﻌﻨﺎﻭﻴﻥ ﺃﻋﻤﺩﺓ ﻭﻤﺠﺎﻤﻴﻊ ﻗﻴﻡ ﺤﻘل ﻜﻘﻴﻡ ﺩﺍﺨل‬
‫ﺍﻟﺠﺩﻭل‬
‫ﺘﻘﺭﻴـﺭ ﻓﺭﻋﻲ‪ :‬ﻟﺘﻜﻭﻴﻥ ﺘﻘﺭﻴﺭ ﺭﺌﻴﺴﻲ ﻭﺘﻘﺭﻴﺭ‬
‫ﻓﺭﻋﻲ ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ‬
‫ﺒﻁﺎﻗﺔ ﺍﻟﻌﻨﻭﻨﺔ‪ :‬ﻹﻨﺸﺎﺀ ﺒﻁﺎﻗﺎﺕ ﻭﻤﻠﺼﻘﺎﺕ ﻜﻌﻨﺎﻭﻴﻥ ﺍﻟﻤﺴﺘﻌﻴﺭﻴﻥ‪ ،‬ﻤﻭﺍﺼﻔﺎﺕ ﺍﻟﻤﻨﺘﺞ ﻟﻠﺼﻘﻬﺎ ﻋﻠﻰ ﺍﻟﻤﻨ ﹶﺘﺞ‪.‬‬
‫ﺘﺘﺒﻊ ﺍﻟﺘﻔﺼﻴﻼﺕ‪ :‬ﻴﻘﻭﻡ ﺍﻟﺘﻘﺭﻴﺭ ﺒﺈﺨﻔﺎﺀ ﺒﻌﺽ ﺍﻷﻗﺴﺎﻡ ﻭﻴﺠﻌﻠﻬﺎ ﻤﺘﺎﺤﺔ ﻤﻥ ﺨﻼل ﺍﻟﺘﻨﻘﻴﺏ ‪Drill Down‬‬
‫‪ .3‬ﻭﺍﻟﺨﻁـﻭﺓ ﺍﻟﺘﻲ ﺘﻠﻲ ﺍﺨﺘﻴﺎﺭ ﻨﻭﻉ ﺍﻟﺘﻘﺭﻴﺭ ﻫﻲ ﻟﺘﺤﺩﻴﺩ ﻤﺼﺩﺭ‬
‫ﺍﻟﺒـﻴﺎﻨﺎﺕ ﻭﻤﻌﻠﻭﻤﺎﺕ ﻋﻥ ﺍﻟﺘﻘﺭﻴﺭ ﻓﻨﺨﺘﺎﺭ ﻓﻲ ﻤﺜﺎﻟﻨﺎ ﻫﺫﺍ ‪OLE‬‬
‫)‪ DB (ADO‬ﻓﻴﺒﺩﺃ ﻤﻌﺎﻟﺞ ﺍﻻﺘﺼﺎل ﺒﺎﻟﻌﻤل ﻻﺨﺘﻴﺎﺭ ﻨﻭﻉ ﻤﻭﻓﹼﺭ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ‬

‫‪ .4‬ﺘﺤﺩﻴﺩ ﻨﻭﻉ ﻤﻭﹼﻓﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪Provider‬‬

‫‪30‬‬
‫‪ .5‬ﺜﻡ ﺘﺤﺩﻴﺩ ﺍﺴﻡ ﻭﻤﺴﺎﺭ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ‬

‫ﻤﻌﻠـﻭﻤﺎﺕ ﻤﺘﻘﺩﻤﺔ ﻋﻥ ﻗﻴﻡ ﺒﻌﺽ ﺨﺼﺎﺌﺹ ﺍﻻﺘﺼﺎل‪ ،‬ﻭﺒﺎﻟﻨﻘﺭ‬


‫ﻋﻠﻰ ‪ Finish‬ﺴﻨﻌﻭﺩ ﺇﻟﻰ ﺨﻁﻭﺍﺕ ﺨﺒﻴﺭ ﺍﻟﺘﻘﺎﺭﻴﺭ ﺍﻟﻘﻴﺎﺴﻴﺔ ﻭﻜﻤﺎ‬
‫ﻓﻲ ﺍﻟﺨﻁﻭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ‬

‫‪ .1‬ﺘﺤﺩﻴﺩ ﺍﻟﺠﺩﺍﻭل ﺍﻟﺘﻲ ﺴﻴﺴﺘﻨﺩ ﻋﻠﻴﻬﺎ ﺍﻟﺘﻘﺭﻴﺭ‬

‫‪ .2‬ﺘﺤﺩﻴﺩ ﺍﻟﺤﻘﻭل ﺍﻟﺘﻲ ﺴﺘﻅﻬﺭ ﻓﻲ ﺍﻟﺘﻘﺭﻴﺭ‪ ،‬ﻜﻤﺎ ﻴﻤﻜﻨﻨﺎ ﻓﻲ ﻫﺫﻩ‬


‫ﺍﻟﺨﻁـﻭﺓ ﺘﻐﻴﻴـﺭ ﺭﺅﻭﺱ ﺍﻷﻋﻤﺩﺓ )ﻋﻨﺎﻭﻴﻥ ﺍﻟﺤﻘﻭل( ﻓﻲ ﺍﻟﺨﺎﻨﺔ‬
‫‪ Column Heading‬ﻜﻤـﺎ ‪‬ﻴﻤﻜﻨـﻨﺎ ﻋﻤل ﺫﻟﻙ ﻓﻴﻤﺎ ﺒﻌﺩ ﺒﺎﻟﻨﻘﺭ‬
‫ﺍﻟﻤـﺯﺩﻭﺝ ﻋﻠﻰ ﻤﺭﺒﻊ ﺍﻟﺤﻘل ﻓﻲ ﺘﺼﻤﻴﻡ ﺍﻟﺘﻘﺭﻴﺭ ﺜﻡ ﺘﻐﻴﻴﺭ ﺍﻟﻨﺹ‬
‫ﺃﻭ ﻤﻥ ﺇﻁﺎﺭ ﺍﻟﺨﺼﺎﺌﺹ‪ .‬ﻭﻓﻲ ﺍﻟﺨﻁﻭﺓ ﺍﻟﺘﻲ ﺘﻠﻴﻬﺎ )‪(3‬ﻴﺘﻡ ﺘﺤﺩﻴﺩ‬
‫ﺤﻘـﻭل ﺍﻟﺘﺠﻤـﻴﻊ ﺇﻥ ﺭﻏﺒـﻨﺎ ﺒﻌﻤـ ﻟ ﺍﻟﺴـﺠﻼﺕ ﺍﻟﻤﻌﺭﻭﻀﺔ‬
‫ﻜﻤﺠﻤـﻭﻋﺎﺕ ‪ .Group By‬ﻭﺍﻟﺨﻁﻭﺘﻴﻥ ﺍﻟﻠﺘﺎﻥ ﺘﻠﻴﺎﻥ )‪ 4‬ﻭ ‪(5‬‬
‫ﻟﻠﻤﺠﻤﻭﻉ ﻭﺍﻟﺴﺠﻼﺕ ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﺤﻘل ﺍﻟﺫﻱ ﺘﻡ ﺍﻟﺘﺠﻤﻴﻊ ﻋﻠﻴﻪ‬

‫‪31‬‬
‫‪ .6‬ﺇﺫﺍ ﺭﻏﺒﻨﺎ ﺒﺘﻀﻤﻴﻥ ﺍﻟﺘﻘﺭﻴﺭ ﻤﺨﻁﻁﹰﺎ‬

‫‪ .7‬ﻟﺘﺤﺩﻴﺩ ﻤﻌﺎﻴﻴﺭ )ﺸﺭﻭﻁ( ﻟﺘﺤﺩﻴﺩ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﻲ ﺴﹸﺘﻌﺭﺽ‬

‫‪ .8‬ﻟﻜـﺘﺎﺒﺔ ﻋـﻨﻭﺍﻥ ﻟﻠﺘﻘﺭﻴﺭ ﻭﺘﺤﺩﻴﺩ ﻨﻤﻁ ﺍﻟﺘﻘﺭﻴﺭ ﺜﻡ ‪.Finish‬‬


‫ﺒـﺫﻟﻙ ﺴـﻴﺘﻡ ﺘﻜـﻭﻴﻥ ﺍﻟﺘﻘﺭﻴﺭ ﻓﻲ ﻤﻠﻑ ﺒﺎﻻﻤﺘﺩﺍﺩ ‪ .rpt‬ﻭﺍﻟﻜﻭﺩ‬
‫ﺍﻟﺨﺎﺹ ﺒﻪ ﻓﻲ ﻤﻠﻑ ﺒﺎﻻﻤﺘﺩﺍﺩ ‪ .vb‬ﻓﻲ ﻨﻔﺱ ﻤﺠﻠﹼﺩ ﺍﻟﺤل‪ .‬ﻭﻴﻅﻬﺭ‬
‫ﺍﺴﻡ ﺍﻟﺘﻘﺭﻴﺭ ﻓﻲ ﺍﻹﻁﺎﺭ ﻤﺴﺘﻜﺸﻑ ﺍﻟﺤل ‪Solution Explorer‬‬

‫ﻭﻫﻲ ﻤﻭﺠﻭﺩﺓ ﻀﻤﻥ ﻋﻼﻤﺔ‬ ‫ﻓﻲ ﺘﺼﻤﻴﻡ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺨﺎﺹ ﺒﻌﺭﺽ ﺍﻟﺘﻘﺭﻴﺭ ﻨﻘﻭﻡ ﺒﺈﻀﺎﻓﺔ ﺍﻷﺩﺍﺓ ﻋﺎﺭﺽ ﺍﻟﺘﻘﺭﻴﺭ‬
‫ﻭﻤـﻥ ﺃﻫـﻡ ﺨﺼﺎﺌﺹ ﻋﻨﺼﺭ ﺍﻟﺘﺤﻜﻡ ﻋﺎﺭﺽ ﺍﻟﺘﻘﺭﻴﺭ ﻫﻲ ﻤﺼﺩﺭ ﺍﻟﺘﻘﺭﻴﺭ ‪ ، ReportSource‬ﻓﻨﻜﺘﺏ ﻓﻲ‬ ‫ﺍﻟﺘـﺒﻭﻴﺏ‬
‫ﺍﻟﻤﻘﻁﻊ ‪ Form_Load‬ﺍﻟﺴﻁﺭ ﺍﻟﺘﺎﻟﻲ‬
‫ﺜﻡ ﻨﺸﻐل ﺍﻟﺤل ﻟﻴﺒﺩﺃ ﺍﻟﺘﺸﻐﻴل ﺒﻨﻔﺱ ﺍﻟﻨﻤﻭﺫﺝ ﺍﻟﺨﺎﺹ ﺒﻌﺭﺽ ﺍﻟﺘﻘﺭﻴﺭ ﻓﻴﻅﻬﺭ ﺍﻟﺘﻘﺭﻴﺭ ﻤﻥ ﺨﻼل ﻋﻨﺼﺭ ﺍﻟﺘﺤﻜﻡ ﻋﺎﺭﺽ ﺍﻟﺘﻘﺭﻴﺭ ﺍﻟﻤﻭﺠﻭﺩ‬
‫ﻓﻲ ﺍﻟﻨﻤﻭﺫﺝ‪ ،‬ﻭﻴﺠﺏ ﺤﻔﻅ ﺍﻟﻤﺸﺭﻭﻉ ﻗﺒل ﺍﻟﺘﻨﻔﻴﺫ ﻟﻴﺘﻡ ﺘﺤﺩﻴﺙ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ ﺍﻟﺘﻲ ﻨﹸﺠﺭﻴﻬﺎ ﻋﻠﻰ ﺘﺼﻤﻴﻡ ﺍﻟﺘﻘﺭﻴﺭ‪.‬‬
‫ﻹﻨﺸـﺎﺀ ﻤﺭﺒﻊ ﺤﻘل ﺭﻗﻡ‬
‫ﻤﺴﻠﺴل ﻨﻨﻘﺭ ﺒﺯﺭ ﺍﻟﻤﺎﻭﺱ‬
‫ﺍﻷﻴﻤــــﻥ ﻋﻠــــﻰ‬

‫ﻓ ﻲ ﺇ ﻁ ﺎﺭ‬
‫ﺜﻡ ﻨﺨﺘﺎﺭ ‪ New..‬ﻭﻨﺤﺩﺩ‬
‫ﺤﻘـ ﻟ ﺍﻟﺭﻗﻡ ﺍﻟﺩﺭﺍﺴﻲ ﺜﻡ‬
‫ﻨﺨﺘﺎﺭ ﺍﻟﺩﺍﻟﺔ ‪Count‬‬

‫‪32‬‬
‫ﻓﻲ ﺸﺭﻴﻁ ﺃﺩﻭﺍﺕ‬ ‫ﻤﻐﻠﻘﺎﹰ ﻓﻨﻨﻘﺭ ﻋﻠﻰ ﺍﻷﺩﺍﺓ‬ ‫ﺇﺫﺍ ﻜﺎﻥ ﺍﻹﻁﺎﺭ‬
‫ﻟﻤﺭﺒﻊ ﺍﻟﺤﻘل ‪ stuid‬ﻓﻲ ﺘﺼﻤﻴﻡ ﺍﻟﺘﻘﺭﻴﺭ‪.‬‬ ‫ﻹﻅﻬﺎﺭﻩ‪ .‬ﻭﻹﺯﺍﻟﺔ ﻓﻭﺍﺼل ﺍﻵﻻﻑ ﻨﺤﺫﻑ ﺍﻟﺭﻤﺯ ﻤﻥ ﺍﻟﺨﺎﺼﻴﺔ‬
‫ﻭﻹﻅﻬﺎﺭ ﺤﺩﻭﺩ ﻤﺭﺒﻌﺎﺕ ﺍﻟﻨﺼﻭﺹ ﻨﺴﺘﺨﺩﻡ ﺍﻟﺨﺼﺎﺌﺹ ‪) LineStyle‬ﺍﻷﺭﺒﻌﺔ( ﻟﻤﺭﺒﻌﺎﺕ ﺍﻟﻨﺼﻭﺹ‪.‬‬
‫ﻤﺜﺎل‪ :‬ﻋﺭﺽ ﺘﻘﺭﻴﺭﻴﻥ )ﻜل ﻭﺍﺤﺩ ﻋﻠﻰ ﺤﺩﺓ( ﻭﻟﻜﻥ ﻓﻲ ﻨﻔﺱ ﻋﺎﺭﺽ ﺍﻟﺘﻘﺎﺭﻴﺭ ﻤﻥ ﺨﻼل ﺯﺭﻱ ﺃﻤﺭ‪ .‬ﻭﺃﺤﺩ ﺍﻟﺘﻘﺭﻴﺭﻴﻥ ‪‬ﻴﺴﺘﺨﺩﻡ ﻟﻌﺭﺽ‬
‫ﺍﻟﺴﺠﻼﺕ ‪‬ﺒﻌﺩ ﺍﻟﺘﺼﻔﻴﺔ ﺤﺴﺏ ﻤﻌﺎﻴﻴﺭ ﻴﺤﺩﺩﻫﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻭﻗﺕ ﺍﻟﺘﻨﻔﻴﺫ‪.‬‬
‫ﻨﻨﺴﺦ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪ studb.mdb‬ﻤﻥ ﻤﺠﻠﹼﺩ ﺍﻷﻤﺜﻠﺔ ‪ E:\3\db‬ﺇﻟﻰ ﻤﺠﻠﹼﺩ ﺍﻟﻤﺸﺭﻭﻉ )ﺩﺍﺨل ﺍﻟﻤﺠﻠﹼﺩ ‪ ، (Bin‬ﺜﻡ ﻨﺒﺩﺃ ﺒﺈﻨﺸﺎﺀ ﺘﻘﺭﻴﺭ ﺠﺩﻴﺩ‬
‫ﻴﺴـﺘﻨﺩ ﻋﻠﻰ ﺠﺩﻭل ﺍﻟﻁﻠﺒﺔ ‪ stu‬ﻭﺍﺴﻡ ﺍﻟﻘﺴﻡ ﻤﻥ ﺠﺩﻭل ﺍﻷﻗﺴﺎﻡ ‪ ، dep‬ﻭﻓﻲ ﺍﻟﺨﻁﻭﺓ ﺍﻟﺴﺎﺒﻌﺔ ﻤﻥ ﻤﻌﺎﻟﺞ ﺍﻟﺘﻘﺎﺭﻴﺭ ﻨﺤﺩﺩ ﺤﻘل ﺭﻗﻡ ﺍﻟﻘﺴﻡ‬
‫ﻤﻥ ﺠﺩﻭل ﺍﻟﻁﻠﺒﺔ ﻟﻴﺘﻡ ﺘﺼﻔﻴﺔ ﺍﻟﺴﺠﻼﺕ ﺤﺴﺏ ﻗﻴﻤﻪ‪‬‬

‫ﺘﺼﻤﻴﻡ ﺍﻟﺘﻘﺭﻴﺭ‬
‫ﻟﺯﺭ ﺍﻷﻤﺭ‬ ‫ﺜﻡ ﻨﺼﻤﻡ ﻨﻤﻭﺫﺠﺎﹰ ﻭﻨﻀﻊ ﻓﻴﻪ ﺯﺭﻱ ﺭﺍﺩﻴﻭ ﻭﻤﺭﺒﻊ ﺘﺤﺭﻴﺭ ﻭﺴﺭﺩ ﻭﺯﺭ ﺃﻤﺭ ﻭﻋﺎﺭﺽ ﺘﻘﺎﺭﻴﺭ ﺃﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ‬
‫‪ .‬ﻭﻜﻭﺩ ﻓﺼﻴﻠﺔ ﺍﻟﻨﻤﻭﺫﺝ ﻜﻤﺎ ﻴﻠﻲ‪:‬‬ ‫ﻋﻠﻰ‬

‫‪33‬‬
‫‪ ،‬ﻭﻋﻨﺩ ﺍﻟﺘﻨﻔﻴﺫ ﺴﻴﻅﻬﺭ ﺍﻟﺘﻘﺭﻴﺭ ﻜﻤﺎ ﻓﻲ‬ ‫ﻭﻨﻀـﺒﻁ ﺍﻟﺨﺼﺎﺌﺹ ‪) LineStyle‬ﺍﻷﺭﺒﻌﺔ( ﻟﻤﺭﺒﻌﻲ ﺍﻟﻨﺹ ﻓﻲ ﺍﻟﺘﻘﺭﻴﺭ ﻋﻠﻰ‬
‫ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫‪34‬‬
‫ﺃﻤﺎ ﺍﻟﺘﻘﺭﻴﺭ ﺍﻵﺨﺭ ﻭﺍﻟﺫﻱ ﻴﻌﺭﺽ ﺠﻤﻴﻊ ﺍﻟﻁﻠﺒﺔ ﻓﻜﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎل ﺍﻟﺴﺎﺒﻕ‪.‬‬
‫ﺘﻤﺭﻴﻥ‪:‬‬
‫‪ .1‬ﺼـﻤﻡ ﺘﻘﺭﻴـﺭﺍﹰ ﻴﻌﺭﺽ ﺍﻟﻁﻠﺒﺔ ﺤﺴﺏ ﺍﻟﻘﺴﻡ ﻭﺍﻟﻔﺼل ﺤﻴﺙ ﻴﺨﺘﺎﺭﻫﻤﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﻤﺭﺒﻌﻲ ﺘﺤﺭﻴﺭ ﻭﺴﺭﺩ‪ ،‬ﺍﻟﺤﻘﻭل ﺍﻟﻤﻁﻠﻭﺒﺔ ﺍﻟﺭﻗﻡ‬
‫ﺍﻟﺩﺭﺍﺴـﻲ ﻭﺍﻻﺴـﻡ ﻭﻴﻅﻬـﺭ ﻓﻲ ﺭﺃﺱ ﺍﻟﺼﻔﺤﺔ ﺍﺴﻡ ﺍﻟﻘﺴﻡ ﻭﺍﻟﻔﺼل ﻭﻗﻡ ﺒﺈﺩﺭﺍﺝ ﺸﻌﺎﺭ ﺍﻟﻤﺭﻜﺯ ﻜﺼﻭﺭﺓ ﻓﻲ ﺭﺃﺱ ﺍﻟﺼﻔﺤﺔ ﻭﺇﻅﻬﺎﺭ‬
‫ﺍﻟﺘﺎﺭﻴﺦ ﺍﻟﺤﺎﻟﻲ‪.‬‬
‫ﺘﺤﺘﻭﻱ ﻋﻠﻰ ﺒﻨﺩﻴﻥ ﻋﻨﺩ ﺍﻟﻨﻘﺭ ﺒﺎﻷﻴﻤﻥ ﻋﻠﻰ ﻋﺎﺭﺽ‬ ‫‪ .2‬ﺃﻀﻑ ﻟﻠﻨﻤﻭﺫﺝ ﻓﻲ ﺍﻟﺘﻤﺭﻴﻥ ﺍﻟﺴﺎﺒﻕ ﺃﺩﺍﺓ ﻗﺎﺌﻤﺔ ﻤﺨﺘﺼﺭﺓ‬
‫ﺍﻟﺘﻘﺎﺭﻴﺭ ﺘﻅﻬﺭ ﺍﻟﻘﺎﺌﻤﺔ ﻭﺍﻜﺘﺏ ﺍﻟﻜﻭﺩ ﺍﻟﻤﻨﺎﺴﺏ ﻟﻜل ﺒﻨﺩ ﻭﻜﻤﺎ ﻓﻲ ﺍﻟﺸﻜل ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻟﻌﺎﺭﺽ ﺍﻟﺘﻘﺭﻴﺭ‪.‬‬ ‫ﺘﻠﻤﻴﺢ )‪ (Hint‬ﺍﻀﺒﻁ ﺍﻟﺨﺎﺼﻴﺔ‬

‫‪35‬‬

You might also like