Programing SQLite Using Lazarus PDF
Programing SQLite Using Lazarus PDF
ﳲ ﻻﺯﺍﺭﻭﺱ
ﺇﻋﺪﺍﺩ
2015
ﺍﻟﻔﻬﺮﺱ
ﺭﻗﻢ ﺍﻟﺼﻔﺤﺔ ﺍﻟﻤﻮﺿﻮﻉ
1 ﻻﺯﺍﺭﻭﺱ Lazarus
3 ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ SQLite3
ﺍﻟﺒﺎﺏ ﺍﻷﻭﻝ :ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ
6 SQLDB
7 ﺍﻟﻜﻼﺱ TSQLConnection
10 ﺍﻟﻜﻼﺱ TSQLDBLibraryLoader
11 ﺍﻟﻜﻼﺱ TSQLQuery
11 ﺍﻟﻜﻼﺱ TDatasource
12 ﺍﻟﻜﻼﺱ TSQLTransaction
13 ﺍﻟﺨﻼﺻﺔ
ﺍﻟﺒﺎﺏ ﺍﻟﺜﺎﻧﻲ :ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ )ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ(
15 ﻓﻜﺮﺓ ﻋﺎﻣﺔ
15 ﺗﻨﻮﻳﻪ
17 ﺧﻄﺔ ﺍﻟﻌﻤﻞ
18 ﺇﻧﺸﺎﺀ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ
20 ﺍﻟﺘﺄﻛﺪ ﻣﻦ ﻭﺟﻮﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
21 ﺍﻟﻮﺣﺪﺓ ﺍﻟﺨﺎﺻﺔ ﺑﺈﻧﺸﺎﺀ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
24 ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ Counters
26 ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ Contacts
29 ﺑﺮﻣﺠﺔ ﺍﻟﺤﺪﺙ FormActivateﻟﻠﺘﺄﻛﺪ ﻣﻦ ﻭﺟﻮﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﻦ ﻋﺪﻣﻪ
30 ﺗﻨﺴﻴﻖ ﻋﺮﺽ ﺍﻟﺴﺠﻼﺕ
33 ﺇﺿﺎﻓﺔ ﺍﻟﺴﺠﻼﺕ
40 ﺍﻟﺒﺤﺚ ﻋﻦ ﺍﻟﺴﺠﻼﺕ
43 ﺗﻌﺪﻳﻞ /ﺣﺬﻑ ﺍﻟﺴﺠﻼﺕ
50 ﺇﻧﺸﺎﺀ ﺍﻟﺘﻘﺎﺭﻳﺮ
ﻣﻘﺪﻣﺔ ﻭﺗﻤﻬﻴﺪ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﻣﻘﺪﻣﺔ ﻭﺗﻤﻬﻴﺪ[
ﻻﺯﺍﺭﻭﺱ Lazarus
ﻫﻲ ﺑﻴﺌﺔ ﺗﻄﻮﻳﺮﻳﺔ ﻣﺘﻜﺎﻣﻠﺔ ،ﻣﺘﻌﺪﺩﺓ ﺍﻟﻤﻨﺼﺎﺕ ،ﺣﺮﺓ ﻭﻣﺠﺎﻧﻴﺔ ،ﻣﻔﺘﻮﺣﺔ ﺍﻟﻤﺼﺪﺭ .ﺗﺴﺘﺨﺪﻡ ﻣﺘﺮﺟﻢ ﻓﺮﻱ
ﺑﺎﺳﻜﺎﻝ ﺍﻟﺬﻱ ﻳﺪﻋﻢ ﺃﻭﺑﺠﻜﺖ ﺑﺎﺳﻜﺎﻝ .ﻭﺇﻥ ﺳﺄﻟﻚ ﺃﺣﺪﻫﻢ ﺑﻢ ﺗﻄﻮﺭ ﺑﺮﺍﻣﺠﻚ ،ﻗﻞ ﻟﻪ :ﺃﺳﺘﺨﺪﻡ ﻟﻐﺔ ﻓﺮﻱ
ﺑﺎﺳﻜﺎﻝ – ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ.
ﻳﻤﻜﻦ ﻟﻤﻄﻮﺭﻱ ﺳﻄﺢ ﺍﻟﻤﻜﺘﺐ ﺍﺳﺘﺨﺪﺍﻡ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ – ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ ﻟﺘﻄﻮﻳﺮ ﺗﻄﺒﻴﻘﺎﺕ ﺗﻌﻤﻞ ﻋﻠﻰ ﻋﺪﺓ
ﺃﻧﻈﻤﺔ ﺗﺸﻐﻴﻞ ﻣﺜﻞ ﻭﻧﺪﻭﺯ ﻭﻟﻴﻨﻮﻛﺲ ﻭﻣﺎﻙ.
ﻧﺘﺎﺝ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ – ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ ﻫﻲ ﻣﻠﻔﺎﺕ ﺗﻨﻔﻴﺬﻳﺔ ﻃﺒﻴﻌﻴﺔ Nativeﺑﺄﺣﺠﺎﻡ ﺻﻐﻴﺮﺓ
ﻧﺴﺒﻴﺎً ،ﺳﺮﻳﻌﺔ ﺍﻟﺘﻨﻔﻴﺬ ،ﺧﻔﻴﻔﺔ ﻋﻠﻰ ﺍﻟﺬﺍﻛﺮﺓ.
ﺗﺸﺒﻪ ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺑﻴﺌﺔ ﺩﻟﻔﻲ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ،ﺣﻴﺚ ﺗﻮﻓﺮ ﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻷﺩﻭﺍﺕ
ﻭﺍﻟﻌﻨﺎﺻﺮ ﺍﻟﻤﺴﺎﻋﺪﺓ ﻋﻠﻰ ﺑﺮﻣﺠﺔ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺑﺴﻬﻮﻟﺔ ﺑﺎﻟﻐﺔ.
ﺗﻮﻓﺮ ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ ﻋﻨﺎﺻﺮ ﺗﺴﺎﻋﺪ ﻋﻠﻰ ﺇﻧﺸﺎﺀ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺤﻴﺚ ﻣﺎ ﺗﺮﺍﻩ ﻫﻮ ﻣﺎ ﺗﺤﺼﻞ ﻋﻠﻴﻪ،
ﻭﻣﺤﺮﺭ ﻟﻠﻜﻮﺩ ،ﻭﺍﻟﺘﻨﺴﻴﻖ ،ﻭﻣﺘﺘﺒﻊ ﺍﻷﺧﻄﺎﺀ ،ﻭﺇﺩﺍﺭﺓ ﺍﻟﻤﺸﺎﺭﻳﻊ .
ﻛﻤﺎ ﺗﻮﻓﺮ ﺇﻣﻜﺎﻧﻴﺔ ﺍﻻﺗﺼﺎﻝ ﻭﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺨﺘﻠﻒ ﺃﻧﻮﺍﻉ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﺜﻞ MySqlﻭPostgresql
ﻭ Sqlite3ﻭ FireBirdﻭ Oracleﻭﻏﻴﺮﻫﺎ.
ﺍﻟﻌﻤﻞ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﺒﻴﺌﺔ ﺳﻬﻞ ﻭﻣﻤﺘﻊ ،ﻭﻻ ﻳﺤﺘﺎﺝ ﻣﻨﻚ ﺇﻻ ﺍﻹﻟﻤﺎﻡ ﺑﺄﺳﺎﺳﻴﺎﺕ ﻟﻐﺔ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ ،ﺍﻟﺘﻲ ﻟﻬﺎ
ﻣﺴﺘﻨﺪﺍﺕ ﻭﻣﺠﺘﻤﻊ ﺯﺍﺧﺮ ﺑﺎﻟﻤﻌﻠﻮﻣﺎﺕ.
ﺻﻔﺤﺔ 1 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﻣﻘﺪﻣﺔ ﻭﺗﻤﻬﻴﺪ[
ﻣﻦ ﺍﻷﻣﻮﺭ ﺍﻟﻤﻤﺘﻌﺔ ﻓﻲ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ – ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ ،ﺃﻧﻪ ﻳﻤﻜﻨﻚ ﺑﺮﻣﺠﺔ ﻣﺸﺮﻭﻉ ﺗﻄﺒﻴﻖ ﻋﻠﻰ ﻭﻧﺪﻭﺯ
ﻣﺜﻼً ،ﻭﺗﻨﺘﺞ ﺑﻪ ﺑﺮﻧﺎﻣﺠﺎً ﻳﻌﻤﻞ ﻋﻠﻰ ﺃﻱ ﺟﻬﺎﺯ ﺑﻪ ﻧﻈﺎﻡ ﻭﻧﺪﻭﺯ ﺑﻤﺠﺮﺩ ﻧﺴﺦ ﺍﻟﻤﻠﻒ ﺍﻟﺘﻨﻔﻴﺬﻱ )ﻭﺑﻌﺾ
ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ ﻟﻠﻌﻤﻞ ﻣﺜﻞ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻭ ﻣﻠﻔﺎﺕ ﺍﻟﺘﻘﺎﺭﻳﺮ( ﻭﺗﺸﻐﻴﻠﻪ ﺩﻭﻥ ﺃﻳﺔ ﻣﺸﺎﻛﻞ ﺗﺬﻛﺮ .
ﻛﻤﺎ ﻳﻤﻜﻨﻚ ﻧﺴﺦ ﺍﻟﻜﻮﺩ ﺍﻟﺒﺮﻣﺠﻲ ﻟﻠﻤﺸﺮﻭﻉ ﻭﻧﻘﻠﻪ ﺇﻟﻰ ﻣﻨﺼﺔ ﺃﺧﺮﻯ ﻣﺜﻞ ﻟﻴﻨﻮﻛﺲ ﺃﻭﺑﻮﻧﺘﻮ ،ﻭﻋﻤﻞ
Compileﻓﻴﻨﺘﺞ ﺗﻄﺒﻴﻘﺎً ﻳﻌﻤﻞ ﻋﻠﻰ ﻟﻴﻨﻮﻛﺲ ﺩﻭﻥ ﺗﻐﻴﻴﺮ ﺣﻘﻴﻘﻲ ﻓﻲ ﺍﻟﻜﻮﺩ! ﻫﺬﺍ ﻫﻮ ﻣﻌﻨﻰ ﺍﻟﺸﻌﺎﺭ
.Write once, Compile Anywhere
ﻭﻟﻠﻤﺰﻳﺪ ﻣﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻋﻦ ﻟﻐﺔ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ ،ﻳﻤﻜﻨﻚ ﻣﻄﺎﻟﻌﺔ ﺍﻟﻤﻮﻗﻊ ﺍﻟﺨﺎﺹ ﺑﻬﺎ:
www.freepascal.org
ﻭﺃﻧﺼﺢ ﺍﻟﻤﺒﺘﺪﺉ ﺑﺘﻨﺰﻳﻞ ﻭﺩﺭﺍﺳﺔ ﻛﺘﺐ ﺍﻷﺳﺘﺎﺫ ﻣﻌﺘﺰ ﻋﺒﺪ ﺍﻟﻌﻈﻴﻢ ﻣﻦ ﻣﻮﻗﻌﻪ ﻋﻠﻰ ﺍﻹﻧﺘﺮﻧﺖ:
www.code-sd.com
ﻓﻲ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﺳﻨﺘﻌﻠﻢ ﻛﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ SQLite3ﻓﻲ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ – ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ،
ﻋﻠﻰ ﻧﻈﺎﻡ ﻭﻧﺪﻭﺯ ﻣﻦ ﻣﺎﻳﻜﺮﻭﺳﻮﻓﺖ ،ﺑﺎﻋﺘﺒﺎﺭ ﺃﻥ ﺍﻟﻐﺎﻟﺒﻴﺔ ﺍﻟﻌﻈﻤﻲ ﻣﻦ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻌﺮﺏ ﻳﺴﺘﻌﻤﻠﻮﻥ
ﻭﻧﺪﻭﺯ ،ﺑﺤﻴﺚ ﻧﺴﺘﻜﺸﻒ ﺍﻟﻤﻜﻮﻧﺎﺕ ﺍﻟﺘﻲ ﺻﻤﻤﺖ ﻟﺘﺴﻬﻴﻞ ﺍﻟﻌﻤﻞ ،ﻭﻧﺘﻌﺮﻑ ﻋﻠﻰ ﺧﺼﺎﺋﺼﻬﺎ ﻭﻭﻇﺎﺋﻔﻬﺎ
ﻭﺃﺣﺪﺍﺛﻬﺎ.
ﺳﻨﻌﻤﻞ ﻋﻠﻰ ﺇﻧﺸﺎﺀ ﻣﺸﺮﻭﻉ ﻟﺘﻄﺒﻴﻖ ﺧﺎﺹ ﺑﺪﻟﻴﻞ ﻫﺎﺗﻒ ﻣﺒﺴﻂ ،ﻧﺠﺮﻱ ﻋﻠﻴﻪ ﻛﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ ،ﻣﻦ ﺇﺿﺎﻓﺔ
ﻭﺑﺤﺚ ﻭﺗﻌﺪﻳﻞ ﻭﺣﺬﻑ ،ﻛﻤﺎ ﺳﻨﺘﻌﻠﻢ ﺑﻌﺾ ﺍﻷﻣﻮﺭ ﺍﻟﺒﺮﻣﺠﻴﺔ ﺍﻟﺘﻲ ﺳﻨﺤﺘﺎﺟﻬﺎ ﻓﻲ ﺳﻴﺎﻕ ﺍﻟﻌﻤﻞ ،ﻭﺍﻟﺘﻲ ﻻ
ﻋﻼﻗﺔ ﻟﻬﺎ ﺑﻘﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ.
ﻗﻠﺖُ ﻗﺒﻞ ﻗﻠﻴﻞ ﺃﻧﻨﺎ ﺳﻨﺘﻌﻠﻢ ﻛﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ SQLite3ﻣﻦ ﺧﻼﻝ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ – ﺑﻴﺌﺔ
ﻻﺯﺍﺭﻭﺱ ،ﻓﻤﺎ ﻫﻲ SQLite3ﺃﻭ ﺳﻴﻜﻮﻳﻼﻳﺖ؟
ﺻﻔﺤﺔ 2 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﻣﻘﺪﻣﺔ ﻭﺗﻤﻬﻴﺪ[
ﺑﺸﻜﻞ ﻋﺎﻡ ،ﻫﻨﺎﻙ ﻧﻮﻋﺎﻥ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ ﺗﻌﺘﻤﺪ ﻓﻲ ﻋﻤﻠﻬﺎ ﻋﻠﻰ ﺧﺎﺩﻡ ،Serverﻭﻗﻮﺍﻋﺪ
ﺑﻴﺎﻧﺎﺕ ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﻠﻒ ﻭﺍﺣﺪ ﻏﻴﺮ ﻣﻌﺘﻤﺪ ﻋﻠﻰ ﺳﻴﺮﻓﺮ.
ﻣﻦ ﺃﻣﺜﻠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺳﻴﺮﻓﺮﺍﺕ MySql :ﻭ MariaDBﻭ Postgresqlﻭ .Oracleﻭﻣﻦ
ﺃﻣﺜﻠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﻻ ﺗﻌﺘﻢ ﻋﻠﻰ ﺳﻴﺮﻓﺮﺍﺕ Accessﻭ.SQLite3
ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻜﺒﻴﺮﺓ ،ﻭﺣﺘﻰ ﺍﻟﻤﻮﺍﻗﻊ ﺍﻟﻜﺒﻴﺮﺓ ،ﻳﻔﻀﻞ ﺍﺳﺘﺨﺪﺍﻡ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺳﻴﺮﻓﺮﺍﺕ
ﻹﺩﺍﺭﺗﻬﺎ ،ﺍﻷﻣﺮ ﻃﺒﻴﻌﻲ ،ﻧﻈﺮﺍً ﻟﻠﻜﻤﻴﺔ ﺍﻟﻬﺎﺋﻠﺔ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﻳﺘﻢ ﺇﺩﺍﺭﺗﻬﺎ.
ﺃﻣﺎ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺼﻐﻴﺮﺓ ،ﻭﺍﻟﻤﺘﻮﺳﻄﺔ ،ﻭﺍﻟﺘﻲ ﻧﻌﻠﻢ – ﻣﺴﺒﻘﺎً – ﺃﻥ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﻬﻤﺎ ﻛﺜﺮﺕ ﻟﻦ ﺗﺼﻞ ﺇﻟﻰ ﺣﺠﻢ
ﻣﻌﻴﻦ ﻟﻴﺤﺘﺎﺝ ﺇﻟﻰ ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ ﻛﺒﻴﺮﺓ ﺟﺪﺍً ،ﻓﺎﻷﻧﺴﺐ ﻫﻮ ﺍﺳﺘﻌﻤﺎﻝ ﺍﻟﻨﻮﻉ ﺍﻟﺜﺎﻧﻲ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ،
ﻭﺃﻗﺼﺪ ﺗﻠﻚ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻋﻠﻰ ﻫﻴﺌﺔ ﻣﻠﻒ ﻭﺍﺣﺪ.
ﻭﻟﻜﻲ ﻧﺴﺘﻄﻴﻊ ﺍﻟﻌﻤﻞ ﻣﻊ ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ ﺳﻴﻜﻮﻳﻼﻳﺖ ،ﻧﺤﺘﺎﺝ ﻟﻮﺟﻮﺩ ﻣﻠﻒ ﻣﻜﺘﺒﺔ ﺧﺎﺹ ﺑﻬﺎ )ﺫﻭ ﺍﻣﺘﺪﺍﺩ ،(.dll
ﻫﺬﻩ ﺍﻟﻤﻜﺘﺒﺔ ﻛُﺘﺒﺖ ﺑﻠﻐﺔ ،Cﺗﻌﺘﺒﺮ ﻣﺤﺮﻛﺎً ﻟﻘﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLﻣﻀﻤﻨﺎً ﻭﺻﻐﻴﺮ ﺍﻟﺤﺠﻢ )ﻻ ﻳﺘﻌﺪﻯ ﺣﺠﻤﻪ
700ﻛﻴﻠﻮ ﺑﺎﻳﺖ ،(،ﻳﻮﺿﻊ ﻓﻲ ﻧﻔﺲ ﻣﺠﻠﺪ ﺍﻟﺘﻄﺒﻴﻖ ،ﻭﻳﺘﻢ ﺇﺭﻓﺎﻗﻪ ﻣﻊ ﺍﻟﺘﻄﺒﻴﻖ ﻟﻴﻌﻤﻞ ﻋﻠﻰ ﺟﻬﺎﺯ ﺍﻟﺰﺑﻮﻥ.
ﻟﻬﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﻴﺰﺍﺕ ﻭﻋﻴﻮﺏ ،ﻭﺗﺘﻤﺜﻞ ﺍﻟﻤﻴﺰﺍﺕ ﻓﻲ ﻛﻮﻥ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺻﻐﻴﺮ ﺍﻟﺤﺠﻢ
ﻧﺴﺒﻴﺎً ،ﺳﻬﻞ ﺍﻹﻧﺸﺎﺀ ﻭﺍﻟﺘﺮﻛﻴﺐ ،ﻳﻤﻜﻦ ﻧﻘﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﻦ ﺟﻬﺎﺯ ﺇﻟﻰ ﺁﺧﺮ ﺑﺴﻬﻮﻟﺔ )ﻧﺴﺦ – ﻟﺼﻖ( ،ﻻ ﻣﺸﺎﻛﻞ
ﻓﻲ ﺍﻟﺘﺮﻣﻴﺰ ﻭﺧﺎﺻﺔ ﻣﻊ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺮﺑﻴﺔ ،ﻻ ﺣﺎﺟﺔ ﻹﻋﺪﺍﺩﺍﺕ ﺧﺎﺻﺔ.
ﻳﻤﻜﻦ ﺃﻥ ﻳﺘﺤﻤﻞ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺣﺠﻤﺎً ﻳﺼﻞ ﺇﻟﻰ 2048ﺟﻴﺠﺎﺑﺎﻳﺖ ﺃﻱ 2ﺗﻴﺮﺍﺑﺎﻳﺖ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻛﺤﺪ
ﺃﻗﺼﻰ! ﺟﻤﻴﻞ ﺃﻟﻴﺲ ﻛﺬﻟﻚ؟
ﺻﻔﺤﺔ 3 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﻣﻘﺪﻣﺔ ﻭﺗﻤﻬﻴﺪ[
ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﺮﺋﻴﺴﻴﺔ ﺗﻘﻮﻝ :ﺇﻥ ﺳﻴﻜﻮﻳﻼﻳﺖ ﺻﻤﻤﺖ ﻟﺘﻜﻮﻥ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﻣﻀﻤﻨﺔ ﺿﻤﻦ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺍﻟﺘﻄﺒﻴﻘﺎﺕ
ﺍﻟﺼﻐﻴﺮﺓ ﻭﺍﻟﻤﺘﻮﺳﻄﺔ ،ﻟﺬﺍ ﻣﻦ ﺍﻟﺨﻄﺄ ﺍﺳﺘﻌﻤﺎﻟﻬﺎ ﻓﻲ ﺣﺎﻟﺔ ﺍﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﻜﺒﻴﺮﺓ ﻭﺍﻟﺘﻲ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﻤﺸﺎﺭﻛﺔ
ﻓﻲ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺑﻴﻦ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ) .ﻭﻫﺬﺍ ﻣﻦ ﺃﻫﻢ ﻋﻴﻮﺏ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ(.
ﻓﻚ ﺍﻟﻀﻐﻂ ،ﻭﺧﺬ ﻧﺴﺨﺔ ﻣﻦ ﺍﻟﻤﻠﻒ sqlite3.dllﻭﺿﻌﻬﺎ ﻓﻲ ﻣﺠﻠﺪ ﺧﺎﺹ ﻟﺘﺮﺟﻊ ﺇﻟﻴﻪ ﻻﺣﻘﺎً.
ﺻﻔﺤﺔ 4 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺍﻟﺒﺎﺏ ﺍﻷﻭﻝ
ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ
SQLDB
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ [SQLDB -
SQLDB
ﻳﺘﻢ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﻜﻞ ﺃﻧﻮﺍﻋﻬﺎ ﻓﻲ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ – ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ ﻣﻦ ﺧﻼﻝ )ﻭﺣﺪﺓ( ﺧﺎﺻﺔ
ﺑﻬﺬﺍ ﺍﻟﻌﻤﻞ ،ﻭﻫﻲ ﺍﻟﻮﺣﺪﺓ .SQLdb
ﻭﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻔﺌﺎﺕ )ﺍﻟﻜﻼﺳﺎﺕ (Classesﻧﺴﺘﻐﻠﻬﺎ ﻟﻼﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺇﺟﺮﺍﺀ
ﻣﺨﺘﻠﻒ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻴﻬﺎ ﻣﻦ ﺇﺿﺎﻓﺔ ﺳﺠﻼﺕ ﻭﺑﺤﺚ ﻭﻋﺮﺽ ﻭﺗﻌﺪﻳﻞ ﻭﺣﺬﻑ.
ﻭﺑﺼﻮﺭﺓ ﺃﺩﻕ ،ﺗﺤﺘﻮﻱ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺓ ﻋﻠﻰ ﺛﻼﺙ ﻛﻼﺳﺎﺕ ﺃﺳﺎﺳﻴﺔ ﻟﻠﺮﺑﻂ ﺑﻴﻦ ﺍﻟﺘﻄﺒﻴﻖ ﻭﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﺗﻤﻬﻴﺪﺍً ﻟﻠﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ ﻭﻫﻲ:
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﻜﻼﺱ
ﻭﻳﻤﺜﻞ ﺍﺗﺼﺎﻻً ﺑﻴﻦ ﺍﻟﺘﻄﺒﻴﻖ ﻭﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ .ﻭﻟﺪﻳﻪ ﻣﺠﻤﻮﻋﺔ ﻣﻦ
ﺍﻟﺨﺼﺎﺋﺺ ﺍﻟﺘﻲ ﻳﺠﺐ ﺿﺒﻄﻬﺎ ﻗﺒﻞ ﺍﻟﺸﺮﻭﻉ ﻓﻲ ﺍﻻﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
TSQLConnection
ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ .ﻭﻟﻜﻞ ﻧﻮﻉ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ Connectionﺧﺎﺹ ﺑﻪ،
ﻭﻳﺠﺐ ﺗﺬﻛّﺮ ﺫﻟﻚ
ﻫﻮ ﺑﻤﺜﺎﺑﺔ ﺻﻮﺭﺓ ﻣﻦ ﺍﻟﻔﺌﺔ ،Datasetﻭﻧﺴﺘﻐﻠﻪ ﻓﻲ ﺇﺟﺮﺍﺀ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻣﺜﻞ
ﺍﺳﺘﺮﺟﺎﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﺃﻭ ﺇﺿﺎﻓﺔ ﺍﻟﺴﺠﻼﺕ ،ﺃﻭ ﺗﻌﺪﻳﻠﻬﺎ ﻭﺣﺘﻰ ﺣﺬﻓﻬﺎ ﺑﻌﺪ TSQLQuery
ﺭﺑﻄﻪ ﺑﺎﻟﻜﻼﺱ Connection
ﻫﺬﺍ ﺍﻟﻜﻼﺱ ﻫﻮ ﺍﻟﻤﺴﺌﻮﻝ ﻋﻦ ﺗﻄﺒﻴﻖ ﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﺘﻲ ﻧﻘﻮﻡ ﺑﻬﺎ ﻋﻠﻰ
ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﻦ ﻋﺪﻣﻪ .ﺑﺤﻴﺚ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻛﺘﻠﺔ ﻛﺎﻣﻠﺔ ﻣﻦ ﺍﻷﻭﺍﻣﺮ ﺃﻭ TSQLTransaction
ﺍﻟﺘﺮﺍﺟﻊ ﻋﻨﻬﺎ ﺩﻓﻌﺔ ﻭﺍﺣﺪﺓ .ﻭﻳﺘﻢ ﺭﺑﻄﻪ ﺃﻳﻀﺎً ﺑﺎﻟﻜﻼﺱ Connection
ﻫﺬﻩ ﺍﻟﻜﻼﺳﺎﺕ ﻭﻏﻴﺮﻫﺎ ﻣﺘﻮﻓﺮﺓ ﻛﺄﺩﻭﺍﺕ ﻳﻤﻜﻦ ﺍﺳﺘﻌﻤﺎﻟﻬﺎ ﻣﺮﺋﻴﺎً ،ﻣﻦ ﺧﻼﻝ ﻓﺘﺢ ﺍﻟﺘﺒﻮﻳﺐ SQLdbﻓﻲ ﺃﻋﻠﻰ
ﺍﻟﺸﺎﺷﺔ ﺍﻟﺮﺋﻴﺴﻴﺔ ﻟﻠﺒﻴﺌﺔ ،ﻛﻤﺎ ﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﻭﺑﻤﺠﺮﺩ ﺇﺩﺭﺍﺝ ﺃﺣﺪﻫﺎ ،ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺓ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﻭﻟﻜﻦ ﻗﺒﻞ ﺗﻮﺿﻴﺢ ﺫﻟﻚ ،ﺃﻭﺩ ﺃﻥ ﺃﺷﺮﺡ
ﺍﻟﻤﺰﻳﺪ ﻋﻦ ﻫﺬﻩ ﺍﻟﻜﻼﺳﺎﺕ.
ﺻﻔﺤﺔ 6 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ [SQLDB -
- 1ﺍﻟﻜﻼﺱ TSQLConnection
ﻳﻤﺜﻞ ﺍﺗﺼﺎﻻً ﺑﻴﻦ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺬﻱ ﻧﺒﺮﻣﺠﻪ ﻭﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻭﺑﻤﺎ ﺃﻧﻪ ﻳﻮﺟﺪ ﻟﺪﻳﻨﺎ ﻋﺪﺓ ﺃﻧﻮﺍﻉ ﻣﻦ ﻗﻮﺍﻋﺪ
ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻓﻠﻜﻞ ﻧﻮﻉ ﻛﻼﺱ TSQLConnectionﺧﺎﺹ ﺑﻪ.
ﺍﻟﻜﻼﺱ TSQLConnectionﻟﺪﻳﻪ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺨﺼﺎﺋﺺ ﺍﻟﺘﻲ ﻳﺠﺐ ﺗﻌﻴﻴﻦ ﻗﻴﻤﻬﺎ ﻗﺒﻞ ﺍﻟﺒﺪﺀ ﻓﻲ
ﺍﻻﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ.
ﻭﻟﻜﻦ ﺑﺎﻋﺘﺒﺎﺭ ﺃﻥ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻳﻤﻜﻦ ﺗﺼﻨﻴﻔﻬﺎ ﺇﻟﻰ ﻗﺴﻤﻴﻦ ،ﻗﺴﻢ ﻳﻌﻤﻞ ﻣﻦ ﺧﻼﻝ ﺳﻴﺮﻓﺮ ،ﻭﻗﺴﻢ ﻗﺎﺋﻢ
ﺑﺬﺍﺗﻪ ،ﻓﺈﻥ ﺍﻟﺨﺼﺎﺋﺺ ﺳﺘﺨﺘﻠﻒ ﻓﻲ ﺍﻟﺤﺎﻟﺘﻴﻦ.
ﻓﻤﺜﻼً ،ﻓﻲ ﺣﺎﻟﺔ ﺍﻻﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ،MySqlﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﺳﻴﺮﻓﺮ ،ﻭﺑﺎﻟﺘﺎﻟﻲ
ﺳﻨﺨﺘﺎﺭ ﺍﻟـ Connectionﺍﻟﻤﻼﺋﻢ ﻟﻬﺎ ﻣﻦ ﺍﻟﺘﺒﻮﻳﺐ ،SQLdbﻭﻫﻮ ﺃﺣﺪ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ:
ﻭﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ،ﺳﻴﺘﻢ ﺗﻌﻴﻴﻦ ﻗﻴﻢ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺨﺼﺎﺋﺺ ﻗﺒﻞ ﺍﻻﺗﺼﺎﻝ ﻭﻫﻲHostName :
ﻭ DatabaseNameﻭ UserNameﻭ.Password
ﺃﻣﺎ ﻓﻲ ﺣﺎﻟﺔ ﺍﻟﻨﻮﻉ ﺍﻟﺜﺎﻧﻲ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻫﻮ ﺍﻟﻨﻮﻉ ﺍﻟﻘﺎﺋﻢ ﺑﺬﺍﺗﻪ ﻋﻠﻰ ﻫﻴﺌﺔ ﻣﻠﻒ ﻭﺍﺣﺪ،
ﻓﺨﺼﺎﺋﺺ ﺍﻟـ Connectionﺍﻟﻤﻄﻠﻮﺏ ﺗﻌﻴﻴﻦ ﻗﻴﻤﻬﺎ ﺗﺨﺘﻠﻒ ،ﻓﻼ ﻧﺤﺘﺎﺝ ﺇﻟﻰ HostNameﻭﻻ ﺇﻟﻰ
UserNameﻭﻻ .Password
ﻓﻌﻠﻲ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻋﻨﺪ ﺍﻻﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ – SQLite3ﻭﻫﻮ ﻣﻮﺿﻮﻉ ﺍﻟﻜﺘﺎﺏ – ﺳﻨﻌﻴﻦ
ﻗﻴﻤﺔ ﺍﻟﺨﺎﺻﻴﺔ DatabaseNameﻓﻘﻂ ،ﻭﺑﻜﻞ ﺗﺄﻛﻴﺪ ﺳﻴﺨﺘﻠﻒ ﻧﻮﻉ ﺍﻟـ Connectionﻋﻦ ﺍﻟﻨﻮﻉ
ﺳﺎﻟﻒ ﺍﻟﺬﻛﺮ.
ﺻﻔﺤﺔ 7 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ [SQLDB -
ﻭﻋﻠﻰ ﻛﻞ ﺣﺎﻝ ،ﺳﺄﺷﺮﺡ ﻛﺎﻓﺔ ﺍﻟﺨﺼﺎﺋﺺ ﺁﻧﻔﺔ ﺍﻟﺬﻛﺮ ،ﺑﺸﻲﺀ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ،ﺣﺘﻰ ﻳﺴﺘﻔﻴﺪ ﻣﻦ ﻳﺮﻳﺪ
ﺍﻻﺗﺼﺎﻝ ﺑﺄﻧﻮﺍﻉ ﺃﺧﺮﻯ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ:
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﺨﺎﺻﻴﺔ
ﻭﺗﻤﺜﻞ ﺍﺳﻢ ﺍﻟﺴﻴﺮﻓﺮ ﺍﻟﻤﺮﺍﺩ ﺍﻻﺗﺼﺎﻝ ﺑﻪ ،ﺃﻭ ﺭﻗﻢ ﺍﻟـ IPﺍﻟﺨﺎﺹ ﺑﻪ ،ﻗﺪ
ﻳﻜﻮﻥ ﻫﺬﺍ ﺍﻟﺴﻴﺮﻓﺮ ﻣﺤﻠﻴﺎً ) ﻋﻠﻰ ﻧﻔﺲ ﻛﻤﺒﻴﻮﺗﺮ ﺍﻟﺰﺑﻮﻥ( ﺃﻭ ﻛﻤﺒﻴﻮﺗﺮ HostName
ﺿﻤﻦ ﺷﺒﻜﺔ ﻣﺤﻠﻴﺔ ،ﺃﻭ ﻗﺪ ﻳﻜﻮﻥ ﻣﺴﺘﻀﺎﻓﺎً ﻋﻠﻰ ﺍﻹﻧﺘﺮﻧﺖ
ﻭﺗﻤﺜﻞ ﺍﺳﻢ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﻧﺮﻳﺪ ﺍﻻﺗﺼﺎﻝ ﺑﻬﺎ ﻭﻓﺘﺤﻬﺎ ﻭﺇﺟﺮﺍﺀ
DatabaseName
ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻴﻬﺎ
ﻭﺗﻤﺜﻞ ﺍﺳﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﻤﺴﻤﻮﺡ ﻟﻪ ﺑﺎﻻﺗﺼﺎﻝ ﺑﺴﻴﺮﻓﺮ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
UserName
ﻭﻟﺪﻳﻪ ﺻﻼﺣﻴﺎﺕ ﻣﻌﻴﻨﺔ
ﻭﺗﻤﺜﻞ ﻛﻠﻤﺔ ﺍﻟﻤﺮﻭﺭ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻤﺴﺘﺨﺪﻡ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﺃﻫﻠﻴﺘﻪ ﻟﻼﺗﺼﺎﻝ
Password
ﺑﺴﻴﺮﻓﺮ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻫﺬﻩ ﺍﻟﺨﺼﺎﺋﺺ ﻛﻤﺎ ﻗﻠﺖ ﻫﻲ ﺧﺎﺻﺔ ﺑﺎﻟـ Connectionﺍﻟﺬﻱ ﺳﻴﺘﺼﻞ ﺑﺴﻴﺮﻓﺮ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ،ﻭﻻ ﻧﺤﺘﺎﺟﻬﺎ
ﻟﻼﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ SQLite3ﻣﺜﻼ.
ﻫﺬﻩ ﻫﻲ ﺍﻟﺨﺼﺎﺋﺺ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺘﻲ ﻳﺠﺐ ﺗﺤﺪﻳﺪ ﻗﻴﻤﻬﺎ ﻗﺒﻞ ﻣﺤﺎﻭﻟﺔ ﺍﻻﺗﺼﺎﻝ ﺑﺴﻴﺮﻓﺮ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﺃﻱ
ﺇﻫﻤﺎﻝ ﻹﺣﺪﻯ ﻫﺬﻩ ﺍﻟﺨﺼﺎﺋﺺ ﻳﻮﻟﺪ ﺧﻄﺄ ،ﻭﻟﻦ ﻳﺘﻢ ﺍﻻﺗﺼﺎﻝ ﺑﻨﺠﺎﺡ ،ﻭﻟﻜﻦ ﺗﻮﺟﺪ ﺧﺼﺎﺋﺺ ﺃﺧﺮﻯ ﻣﺘﻤﻤﺔ
ﻟﻬﺎ ،ﻣﻨﻬﺎ:
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﺨﺎﺻﻴﺔ
ﻭﻣﻦ ﺧﻼﻟﻬﺎ ﻳﻤﻜﻦ ﺿﺒﻂ ﻧﻮﻉ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
CharSet
ﺍﻟﻤﻄﻠﻮﺑﺔ .ﺑﺎﻟﻨﺴﺒﺔ ﻟﻲ ،ﺃﻓﻀﻞ ﺩﻭﻣﺎً utf8
ﻭﻫﻲ ﺧﺎﺻﻴﺔ ﻣﻨﻄﻘﻴﺔ ،ﺗﺮﺟﻊ ﻗﻴﻤﺔ Trueﺇﺫﺍ ﻧﺠﺢ ﺍﻻﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ
ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻭ Falseﺇﺫﺍ ﻓﺸﻞ ﺍﻻﺗﺼﺎﻝ .ﻭﺗﺴﺘﺨﺪﻡ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﺍﺗﺼﺎﻝ Connected
ﺍﻟﺘﻄﺒﻴﻖ ﺑﻘﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﺻﻔﺤﺔ 8 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ [SQLDB -
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻹﺟﺮﺍﺀ
ﻭﻳﺴﺘﺨﺪﻡ ﻟﺘﻄﺒﻴﻖ ﺃﻭﺍﻣﺮ SQLﻋﻠﻰ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ .ﻛﻌﻤﻠﻴﺎﺕ ﺇﻧﺸﺎﺀ
ExecuteDirect
ﺍﻟﺠﺪﺍﻭﻝ ﻭﺇﺩﺧﺎﻝ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻭﻳﺴﺘﺨﺪﻡ ﻻﺳﺘﺮﺟﺎﻉ ﻗﺎﺋﻤﺔ ﺑﺄﺳﻤﺎﺀ ﺍﻟﺠﺪﺍﻭﻝ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
GetTableNames
ﺍﻟﻤﺤﺪﺩﺓ
ﻭﻳﺴﺘﺨﺪﻡ ﻻﺳﺘﺮﺟﺎﻉ ﻗﺎﺋﻤﺔ ﺑﺄﺳﻤﺎﺀ ﺍﻟﺤﻘﻮﻝ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﺍﻟﻤﺤﺪﺩ GetFieldNames
ﻭﻳﺴﺘﺨﺪﻡ ﻹﻧﺸﺎﺀ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﺟﺪﻳﺪﺓ) .ﻳﻌﻤﻞ ﻣﻊ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ
CreateDB
ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺳﻴﺮﻓﺮ(
ﻭﻳﺴﺘﺨﺪﻡ ﻟﺤﺬﻑ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﻣﻮﺟﻮﺩﺓ) .ﻳﻌﻤﻞ ﻣﻊ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ
DropDB
ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺳﻴﺮﻓﺮ(
ﻭﻳﺴﺘﺨﺪﻡ ﻟﻔﺘﺢ ﺍﻻﺗﺼﺎﻝ Open
ﻭﻳﺴﺘﺨﺪﻡ ﻹﻏﻼﻕ ﺍﻻﺗﺼﺎﻝ Close
ﻭﻳﺴﺘﺨﺪﻡ ﻟﺘﺤﺮﻳﺮ ﺍﻟﻤﻮﺍﺭﺩ ﺍﻟﻤﺴﺘﻌﻤﻠﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟـConnection Free
ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﻓﺮﻱ ﺑﺎﺳﻜﺎﻝ – ﺑﻴﺌﺔ ﻻﺯﺍﺭﻭﺱ ﻣﺴﻴﺮﺓ ﺑﺎﻷﺣﺪﺍﺙ .ﺑﻤﻌﻨﻰ ﺃﻧﻪ ﻟﻦ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﻜﻮﺩ ﺇﻻ ﻋﻨﺪ
ﻭﻗﻮﻉ ﺣﺪﺙ ﻣﺎ ،ﻛﻨﻘﺮ ﺯﺭ ،ﺃﻭ ﺗﺤﻤﻴﻞ ،Formﺃﻭ ﻋﻨﺪ ﺇﻏﻼﻗﻪ ،ﺃﻭ ﻋﻨﺪ ﺍﻟﻨﻘﺮ ﺍﻟﻤﺰﺩﻭﺝ ﻋﻠﻰ ﻛﺎﺋﻦ ﻣﺎ ،ﺃﻭ ﺍﻧﺘﻘﺎﻝ
ﺍﻟﺘﺮﻛﻴﺰ ،Focusﺃﻭ ﻏﻴﺮ ﺫﻟﻚ.
ﺃﻧﺴﺐ ﺣﺪﺙ ﻟﺘﻌﻴﻴﻦ ﻗﻴﻢ ﺧﺼﺎﺋﺺ ﺍﻟـ Connectionﻫﻮ ﺍﻟﺤﺪﺙ OnCreateﺍﻟﺘﺎﺑﻊ ﻟﻠﻔﻮﺭﻡ ﺍﻟﺮﺋﻴﺴﻲ
ﻟﻠﺘﻄﺒﻴﻖ .ﺑﻴﻨﻤﺎ ﻳﻜﻮﻥ ﺍﻟﺤﺪﺙ OnActivateﻟﻨﻔﺲ ﺍﻟﻔﻮﺭﻡ ﻫﻮ ﺍﻟﺤﺪﺙ ﺍﻷﻧﺴﺐ ﻟﻠﺒﺪﺀ ﻓﻲ ﺍﻻﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ
ﺍﻟﺒﻴﺎﻧﺎﺕ.
ﺻﻔﺤﺔ 9 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ [SQLDB -
ﺇﺫﺍ ﻗﻤﻨﺎ ﺑﺘﺤﺪﻳﺪ ﺍﺳﻢ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﻠـ ،Connectionﻭﻻ ﻳﻮﺟﺪ ﺍﻟﻤﻠﻒ ﻓﻌﻠﻴﺎً ،ﺳﻴﺘﻢ ﺇﻧﺸﺎﺀ
ﻣﻠﻒ ﺟﺪﻳﺪ ﻟﻘﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﻓﺎﺭﻏﺔ )ﻻ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺟﺪﺍﻭﻝ ﺃﻭ ﺑﻴﺎﻧﺎﺕ( ﺑﺎﻻﺳﻢ ﺍﻟﻤﻌﻄﻰ.
ﻭﻟﺬﻟﻚ ،ﻳﺠﺐ ﺍﻟﺘﺄﻛﺪ ﻣﻦ ﻭﺟﻮﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻗﺒﻞ ﺍﻟﺒﺪﺀ ﻓﻲ ﺗﺸﻐﻴﻞ ﺍﻟﺘﻄﺒﻴﻖ ﻓﻌﻠﻴﺎً،
ﻭﺍﻟﻘﻴﺎﻡ ﺑﺎﻟﺨﻄﻮﺍﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺟﻮﺩ ﺍﻟﻤﻠﻒ.
ﻗﻠﺖ ﻓﻲ ﻣﺎ ﺳﺒﻖ ،ﺃﻧﻪ ﻋﻨﺪﻣﺎ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ، SQLite3ﻓﺈﻧﻨﺎ ﻧﺤﺘﺎﺝ ﺇﻟﻰ ﻣﻜﺘﺒﺔ ﺧﺎﺻﺔ ،ﺃﻗﺼﺪ
ﺗﺤﺪﻳﺪﺍً ﺍﻟﻤﻠﻒ ) (sqlite3.dllﺍﻟﺬﻱ ﺳﺒﻖ ﻭﺃﻧﺰﻟﻨﺎﻩ ﻣﻦ ﺍﻟﻤﻮﻗﻊ ﺍﻟﺮﺳﻤﻲ ﻟـ. SQLite3
ﺍﻟﻜﻼﺱ TSQLDBLibraryLoader
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﺨﺎﺻﻴﺔ
ﻭﺗﻤﺜﻞ ﻧﻮﻉ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺮﻏﻮﺏ ﺍﻻﺗﺼﺎﻝ ﺑﻬﺎ .ﻓﻲ ﺣﺎﻟﺘﻨﺎ ﺳﺘﻜﻮﻥ
ConnectionType
SQLite3
ﻭﺗﻤﺜﻞ ﻣﺴﺎﺭ ﻭﺍﺳﻢ ﺍﻟﻤﻜﺘﺒﺔ ،ﻓﻲ ﺣﺎﻟﺘﻨﺎ ﺳﺘﻜﻮﻥ sqlite3.dll LibraryName
ﺧﺎﺻﻴﺔ ﻣﻨﻄﻘﻴﺔ True ،ﺗﻌﻨﻲ ﺃﻥ ﺍﻟﻜﻼﺱ ﻳﻌﻤﻞ Enabled
ﻭﻧﺴﺘﺨﺪﻣﻬﺎ ﻟﻠﺒﺪﺀ ﻓﻲ ﺗﺤﻤﻴﻞ ﺍﻟﻤﻜﺘﺒﺔ ﺇﻟﻰ ﺍﻟﺬﺍﻛﺮﺓ LoadLibrary
ﺃﻧﺴﺐ ﺣﺪﺙ ﻟﺘﺤﺪﻳﺪ ﻗﻴﻢ ﻫﺬﻩ ﺍﻟﺨﺼﺎﺋﺺ ﻫﻮ ﺍﻟﺤﺪﺙ OnCreateﻟﻠﻔﻮﺭﻡ ﺍﻟﺮﺋﻴﺴﻲ ﻟﻠﺘﻄﺒﻴﻖ.
ﺻﻔﺤﺔ 10 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ [SQLDB -
– 2ﺍﻟﻜﻼﺱ TSQLQuery
ﻫﻮ ﺑﻤﺜﺎﺑﺔ ﺻﻮﺭﺓ ﻣﻦ ﺍﻟﻔﺌﺔ ،Datasetﻭﻧﺴﺘﻐﻠﻪ ﻹﺟﺮﺍﺀ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻋﻠﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ،
ﻛﺎﻟﺒﺤﺚ ﻭﺍﻻﺳﺘﺮﺟﺎﻉ ﻭﺍﻟﻌﺮﺽ ،ﻭﺇﺿﺎﻓﺔ ﺳﺠﻼﺕ ،ﻭﺗﻌﺪﻳﻠﻬﺎ ،ﻭﺣﺬﻓﻬﺎ ﺑﻌﺪ ﺭﺑﻄﻪ ﺑﺎﻟﻜﻼﺱ .Connection
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﺨﺎﺻﻴﺔ
ﻭﻫﻲ ﺧﺎﺻﻴﺔ ﻧﺼﻴﺔ ،ﻭﺗﻜﻮﻥ ﻣﺴﺎﻭﻳﺔ ﻻﺳﻢ ﺍﻟـ.Connection Database
ﻭﻫﻲ ﺍﻟﻤﻜﺎﻥ ﺍﻟﺬﻱ ﻧﻜﺘﺐ ﻓﻴﻪ ﺟﻤﻞ SQLﻟﺘﻨﻔﻴﺬﻫﺎ ﻋﻠﻰ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ. SQL.Text
ﻭﻧﺴﺘﺨﺪﻣﻬﺎ ﻟﺘﻌﻴﻴﻦ ﻗﻴﻢ ﺍﻟﺒﺎﺭﺍﻣﺘﺮﺍﺕ ﻓﻲ ﺟﻤﻠﺔ SQLﺍﻟﻤﻄﻠﻮﺏ ﺗﻨﻔﻴﺬﻫﺎ
ParamByName
ﻓﻲ SQL.Text
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻹﺟﺮﺍﺀ
ﻭﻧﺴﺘﺨﺪﻣﻪ ﻟﻠﺒﺪﺀ ﻓﻲ ﺗﻨﻔﻴﺬ ﺍﺳﺘﻌﻼﻣﺎﺕ SQLﺍﻟﻤﺤﺪﺩﺓ ،ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ
Open
ﻟﻐﺮﺽ ﺍﻟﺒﺤﺚ ﻭﺍﺳﺘﺮﺟﺎﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻘﻂ.
ﻭﻧﺴﺘﺨﺪﻣﻪ ﻟﻠﺒﺪﺀ ﻓﻲ ﺗﻨﻔﻴﺬ ﺍﺳﺘﻌﻼﻣﺎﺕ SQLﺍﻟﻤﺤﺪﺩﺓ ،ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ
ExecSQL
ﺧﺎﺻﺔ ﺑﻌﻤﻠﻴﺎﺕ ﺍﻹﺿﺎﻓﺔ ﻭﺍﻟﺘﻌﺪﻳﻞ ﻭﺍﻟﺤﺬﻑ.
ﺑﻌﺒﺎﺭﺓ ﺃﺧﺮﻯ ،ﻧﺴﺘﺨﺪﻡ ﺍﻹﺟﺮﺍﺀ Openﻓﻲ ﺣﺎﻟﺔ ﺟﻤﻠﺔ ،selectﻭﻧﺴﺘﺨﺪﻡ ﺍﻹﺟﺮﺍﺀ ExecSQLﻓﻲ ﺣﺎﻻﺕ
insertﻭ updateﻭ.delete
ﺍﻟﻜﻼﺱ TDatasource
ﻓﻲ ﺣﺎﻟﺔ ﺍﺳﺘﻌﻤﺎﻝ ﺍﻹﺟﺮﺍﺀ Openﺃﻱ ﺃﻥ ﺍﻟﻌﻤﻠﻴﺔ ﻫﻲ ﻋﻤﻠﻴﺔ ﺑﺤﺚ ﻭﺍﺳﺘﺮﺟﺎﻉ ﻟﻠﺴﺠﻼﺕ ،ﺳﺘﻜﻮﻥ ﻧﺘﻴﺠﺔ
ﺍﻻﺳﺘﻌﻼﻡ ﻫﻲ Datasetﺗﺘﻜﻮﻥ ﻣﻦ ﺳﺠﻞ ﺃﻭ ﺃﻛﺜﺮ ،ﺳﻨﺤﺘﺎﺝ ﺇﻟﻰ ﻛﺎﺋﻦ ﻳﺴﺘﻘﺒﻞ ﺍﻟـ Datasetﺍﻟﻤﺴﺘﺮﺟﻌﺔ
ﻭﻣﻦ ﺛﻢ ﻳﻤﻜﻨﻨﺎ ﺍﺳﺘﻐﻼﻟﻪ ﻟﻌﺮﺽ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺨﺰﻧﺔ ﻓﻲ ﺗﻠﻚ ﺍﻟـ.Dataset
ﺻﻔﺤﺔ 11 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ [SQLDB -
ﻳﻤﻜﻨﻨﺎ ﻭﺿﻊ ﻫﺬﺍ ﺍﻟﻜﻼﺱ ﻋﻠﻰ ﺍﻟﻔﻮﺭﻡ -ﻻﺳﺘﻌﻤﺎﻟﻪ ﺑﺮﻣﺠﻴﺎً -ﻣﻦ ﺧﻼﻝ ﻟﺴﺎﻥ ﺍﻟﺘﺒﻮﻳﺐ Data Accessﻓﻲ
ﻻﺯﺍﺭﻭﺱ ،ﻭﻫﻮ ﻋﻨﺼﺮ ﻏﻴﺮ ﻣﺮﺋﻲ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ .ﻳﺘﻢ ﺭﺑﻄﻪ ﺑﺎﻟﻜﻼﺱ TSQLQueryﺑﻌﺪ ﺇﺟﺮﺍﺀ ﻋﻤﻠﻴﺔ
ﺍﻟﺒﺤﺚ ﻭﺍﻻﺳﺘﺮﺟﺎﻉ ﻣﻦ ﺧﻼﻝ ﺍﻟﺨﺎﺻﻴﺔ Datasetﺍﻟﺘﺎﺑﻌﺔ ﻟﻪ.
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﺨﺎﺻﻴﺔ
ﺗﺤﺪﺩ ﺍﻟـ TSQLQueryﺍﻟﺬﻱ ﺗﺴﺘﺮﺟﻊ ﻣﻨﻪ ﺍﻟﺴﺠﻼﺕ ،ﻭﺗﻜﻮﻥ ﻣﺴﺎﻭﻳﺔ
Dataset
ﻻﺳﻢ ﺍﻟـTSQLQuery
ﺑﻌﺪ ﺫﻟﻚ ﻳﺘﻢ ﺭﺑﻂ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻟﺘﻲ ﻧﺮﻏﺐ ﻓﻲ ﻋﺮﺽ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺴﺘﺮﺟﻌﺔ ﻋﻠﻴﻬﺎ ﻣﺜﻞ ﺻﻨﺎﺩﻳﻖ ﺍﻟﻨﺼﻮﺹ
Editsﻭ Labelsﻭ TDBGridsﻭﻏﻴﺮﻫﺎ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺨﺎﺻﻴﺔ Datasourceﺍﻟﺘﻲ ﺗﺘﺒﻌﻬﺎ.
– 3ﺍﻟﻜﻼﺱ TSQLTransaction
ﻭﻫﻮ ﺍﻟﻤﺴﺌﻮﻝ ﻋﻦ ﺗﻨﻔﻴﺬ ﺃﻭ ﺍﻟﺘﺮﺍﺟﻊ ﻋﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺘﻲ ﻳﻘﻮﻡ ﺑﻬﺎ ﺍﻟﻜﻼﺱ . TSQLQuery
ﺍﻟﻮﻇﻴﻔﺔ ﺍﻹﺟﺮﺍﺀ
ﻭﻳﻘﻮﻡ ﺑﺘﺄﻛﻴﺪ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﻲ ﻗﺎﻡ ﺑﻬﺎ ﺍﻟﻜﻼﺱ .TSQLQuery Commit
ﻭﻳﻘﻮﻡ ﺑﺎﻟﺘﺮﺍﺟﻊ ﻋﻦ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﺧﻴﺮﺓ. RollBack
ﻭﻳﻘﻮﻡ ﺑﺎﻟﺘﻤﻬﻴﺪ ﻟﻠﻌﻤﻠﻴﺔ ﺍﻟﺠﺪﻳﺪﺓ. StartTransaction
ﻭﻳﻘﻮﻡ ﺑﺈﻧﻬﺎﺀ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺠﺪﻳﺪﺓ. EndTransaction
ﻳﺘﻢ ﺭﺑﻂ ﻫﺬﺍ ﺍﻟﻜﻼﺱ ﺑﺎﻟﻜﻼﺱ TSQLConnectionﻣﻦ ﺧﻼﻝ ﺍﻟﺨﺎﺻﻴﺔ Transactionﺍﻟﺘﻲ ﺗﺘﺒﻊ ﺍﻷﺧﻴﺮ.
ﻭﺧﻼﺻﺔ ﺍﻟﻘﻮﻝ ،ﺃﻥ ﺃﻱ ﻋﻤﻠﻴﺔ ﺇﺿﺎﻓﺔ ﺃﻭ ﺗﻌﺪﻳﻞ ﺃﻭ ﺣﺬﻑ ﻟﻦ ﺗﺘﻢ ﻓﻌﻠﻴﺎً ﺇﻻ ﻣﻦ ﺧﻼﻝ ﻫﺬﺍ ﺍﻟﻜﻼﺱ.
ﺻﻔﺤﺔ 12 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻨﻈﺮﻱ [SQLDB -
ﺍﻟﺨﻼﺻﺔ
ﻟﻜﻲ ﻧﺴﺘﻄﻴﻊ ﺍﻟﺘﻌﺎﻣﻞ ﻣﻊ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLite3ﻓﻲ ﻻﺯﺍﺭﻭﺱ ﻧﺴﺘﺨﺪﻡ ﺍﻟﻜﻼﺳﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ:
ﺻﻔﺤﺔ 13 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺍﻟﺒﺎﺏ ﺍﻟﺜﺎﻧﻲ
ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ
ﻓﻜﺮﺓ ﻋﺎﻣﺔ
ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ ﻫﻮ ﺑﺮﻧﺎﻣﺞ ﺑﺴﻴﻂ ،ﻳﻤﻜﻦ ﻟﻤﺴﺘﺨﺪﻣﻪ ﺗﺴﺠﻴﻞ ﺑﻴﺎﻧﺎﺕ ﺍﻷﺷﺨﺎﺹ ﻭﺍﻟﺠﻬﺎﺕ
ﺍﻟﺘﻲ ﻳﺘﺼﻞ ﺑﻬﺎ ،ﻭﺗﻌﺪﻳﻠﻬﺎ ﻭﺣﺬﻓﻬﺎ ،ﻭﺣﺘﻰ ﺇﻇﻬﺎﺭ ﺗﻘﺮﻳﺮ ﻭﺳﺤﺒﻪ ﻋﻠﻰ ﺍﻟﻮﺭﻕ.
Contacts
ﺍﻟﻨﻮﻉ ﺍﻟﻮﺻﻒ ﺍﻟﺤﻘﻞ
INTEGER ﻳﻤﺜﻞ ﺍﻟﺮﻗﻢ ﺍﻟﺘﺴﻠﺴﻠﻲ ﻟﻠﺴﺠﻞ Id
STRING ﻳﻤﺜﻞ ﺍﺳﻢ ﺟﻬﺔ ﺍﻻﺗﺼﺎﻝ contactName
STRING ﻳﻤﺜﻞ ﺃﺭﻗﺎﻡ ﺍﻟﻬﻮﺍﺗﻒ phoneNumbers
STRING ﻳﻤﺜﻞ ﺍﻟﺒﺮﻳﺪ ﺍﻹﻟﻜﺘﺮﻭﻧﻲ emailAddress
ﺗﻨﻮﻳﻪ
ﺃﺣﺐ ﺃﻥ ﺃﺷﻴﺮ ﺇﻟﻰ ﺃﻥ ﻗﻮﺍﻋﺪ ﺑﻴﺎﻧﺎﺕ SQLite3ﻻ ﺗﺪﻋﻢ ﺧﺎﺻﻴﺔ ﺍﻟﺰﻳﺎﺩﺓ ﺍﻟﺘﻠﻘﺎﺋﻴﺔ ﻓﻲ ﺣﻘﻮﻝ ،IDﻭﻟﺬﺍ
ﺳﻨﻌﻤﻞ ﺣﺮﻛﺔ ﺍﻟﺘﻔﺎﻑ ﻋﻠﻴﻬﺎ ﻋﻦ ﻃﺮﻳﻖ ﺇﻧﺸﺎﺀ ﺟﺪﻭﻝ ﺧﺎﺹ )ﺑﺎﻟﻌﺪﺍﺩﺍﺕ( ﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
Counters
ﺍﻟﻨﻮﻉ ﺍﻟﻮﺻﻒ ﺍﻟﺤﻘﻞ
INTEGER ﻳﻤﺜﻞ ﺍﻟﺮﻗﻢ ﺍﻟﺘﺴﻠﺴﻠﻲ ﻟﻠﺴﺠﻞ ،ﻭﺳﻴﻜﻮﻥ ﺩﺍﺋﻤﺎً = 1 Id
INTEGER ﺳﻴﻤﺜﻞ ﻋﺪﺍﺩ ﺍﻟـ IDﺍﻟﺨﺎﺹ ﺑﺎﻟﺠﺪﻭﻝ Contacts contactid
ﺻﻔﺤﺔ 15 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻣﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻋﻨﺪ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ Countersﺑﺮﻣﺠﻴﺎً ،ﻳﺘﻮﺟﺐ ﻋﻠﻴﻨﺎ ﺇﺩﺭﺍﺝ ﺳﺠﻞ ﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
Counters
ﺍﻟﻘﻴﻤﺔ ﺍﻟﺤﻘﻞ
1 Id
0 contactid
ﻳﻌﻨﻲ:
ﺭﺑﻤﺎ ﻳﻜﻮﻥ ﺍﻟﻜﻼﻡ ﻣﺒﻬﻤﺎً ﺍﻵﻥ ،ﻭﻟﻜﻦ ﺳﻨﻔﻬﻤﻪ ﻋﻨﺪ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﻌﻤﻠﻲ ﺇﻥ ﺷﺎﺀ ﺍﷲ.
ﺻﻔﺤﺔ 16 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﺧﻄﺔ ﺍﻟﻌﻤﻞ
ﺇﻧﺸﺎﺀ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ.
ﺍﻟﺘﺄﻛﺪ ﻣﻦ ﻭﺟﻮﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ:
oﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺟﻮﺩﻩ:
ﺑﺮﻣﺠﺔ ﺇﺟﺮﺍﺀ ﺇﻧﺸﺎﺀ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ.
oﻓﻲ ﺣﺎﻟﺔ ﻭﺟﻮﺩﻩ:
ﺍﻻﺗﺼﺎﻝ ﺑﻘﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ.
ﺇﺿﺎﻓﺔ ﺍﻟﺴﺠﻼﺕ.
ﺍﻟﺒﺤﺚ ﻋﻦ ﺍﻟﺴﺠﻼﺕ.
ﺗﻌﺪﻳﻞ /ﺣﺬﻑ ﺍﻟﺴﺠﻼﺕ.
ﺇﻧﺸﺎﺀ ﺍﻟﺘﻘﺮﻳﺮ .
ﺻﻔﺤﺔ 17 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
ﺍﻟﻘﻴﻤﺔ ﺍﻟﺨﺎﺻﻴﺔ
bdRightToLeft BiDiMode
False BorderIcons -> biMaximize
bsSingle BorderStyle
ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ Caption
poScreenCenter Position
ﺗﺤﺪﻳﺚ Caption
txtSearchInNames Name TEdit
txtSearchInNumbers Name TEdit
pnlSelectedContact Name TPanel
LibLoader Name TSQLDBLibraryLoader
conn Name TSQLite3Connection
Trans Name TSQLTransaction
UpdateQuery Name TSQLQuery
UpdateDataSource Name UpdateDataSource
theReport Name TfrReport
repDataSet Name TfrDBDataSet
-1ﺗﻤﻬﻴﺪ
ﻫﻞ ﺗﺘﺬﻛﺮ – ﻋﺰﻳﺰﻱ – ﻣﻠﻒ sqlite3.dllﺍﻟﺬﻱ ﺃﻧﺰﻟﻨﺎﻩ ﻣﻦ ﻣﻮﻗﻊ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLite3؟ ﻓﻘﺪ ﺣﺎﻥ ﻭﻗﺖ
ﺗﺤﻤﻴﻠﻪ ﻭﺭﺑﻄﻪ ﺑﺎﻟﺘﻄﺒﻴﻖ.
;end
ﻧﻜﺘﺐ ﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ ﺑﻴﻦ Beginﻭ:End
;'LibLoader.ConnectionType:='SQLite3
;'LibLoader.LibraryName:='sqlite3.dll
;LibLoader.Enabled:=True
ﺻﻔﺤﺔ 20 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻗﻠﺖُ ﻗﺒﻞ ﻗﻠﻴﻞ ﺃﻧﻪ ﻋﻨﺪﻣﺎ ﻻ ﻧﺠﺪ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻳﺘﻮﺟﺐ ﻋﻠﻴﻨﺎ ﺍﻟﻘﻴﺎﻡ ﺑﺈﺟﺮﺍﺀ ﺇﻧﺸﺎﺀ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻭﺟﺪﺍﻭﻟﻬﺎ ،ﻭﺑﺎﻟﺘﺎﻟﻲ ﺳﻨﻜﺘﺐ ﺍﻟﻜﻮﺩ ﺍﻟﺨﺎﺹ ﺑﺬﻟﻚ ﻭﻧﺨﺰﻧﻪ ﻓﻲ ﻭﺣﺪﺓ ﺧﺎﺻﺔ ،ﺛﻢ ﻧﺴﺘﺪﻋﻲ ﺇﺟﺮﺍﺀ ﺇﻧﺸﺎﺀ
ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﻮﻗﺖ ﻭﺍﻟﻤﻜﺎﻥ ﺍﻟﻤﻨﺎﺳﺒﻴﻦ.
;unit Unit1
}{$mode objfpc}{$H+
interface
uses
;Classes, SysUtils
implementation
end.
;Uses frmMainUnit
ﺻﻔﺤﺔ 21 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
;procedure CreateDataBase
begin
;end
ﺍﻵﻥ ،ﻧﻌﺮﻑ ﻣﺘﻐﻴﺮﺍً ﻳﻌﻤﻞ ﻓﻲ ﻧﻄﺎﻕ ﻫﺬﺍ ﺍﻹﺟﺮﺍﺀ ﺑﺎﺳﻢ QueryStringﻭﺑﺎﻟﻨﻮﻉ ،Stringﻗﺒﻞ
ﻛﻠﻤﺔ Beginﻭﺑﺎﻟﺸﻜﻞ ﺍﻟﺘﺎﻟﻲ:
;procedure CreateDataBase
var
;QueryString: String
begin
;end
ﺍﻵﻥ ،ﺳﻨﻘﻮﻡ ﺑﻀﺒﻂ ﺑﻌﺾ ﺍﻟﺨﺼﺎﺋﺺ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺑﻜﺎﺋﻦ ﺍﻻﺗﺼﺎﻝ Connﺍﻟﺘﺎﺑﻊ ﺑﺪﻭﺭﻩ ﻟﻠﻔﻮﺭﻡ
frmMainﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
;procedure CreateDataBase
var
;QueryString: String
begin
;'frmMain.conn.DatabaseName:='Contacts.db
;frmMain.conn.Transaction:=frmMain.Trans
;frmMain.conn.Open
;end
ﺗﻢ ﺿﺒﻂ ﻗﻴﻤﺔ ﺍﻟﺨﺎﺻﻴﺔ DatabaseNameﻟﻠـ Connﺑﺎﺳﻢ ﻭﺍﻣﺘﺪﺍﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ،
ﻭﻋﻨﺪ ﺗﻨﻔﻴﺬ ﻫﺬﺍ ﺍﻟﺴﻄﺮ ﺳﻴﺘﻢ ﺇﻧﺸﺎﺀ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ Contacts.dbﻓﻲ ﻧﻔﺲ ﻣﺠﻠﺪ
ﺍﻟﺒﺮﻧﺎﻣﺞ ،ﻭﻻ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺃﻳﺔ ﺟﺪﺍﻭﻝ.
ﺗﻢ ﺿﺒﻂ ﻣﺪﻳﺮ ﺍﻟﻌﻤﻠﻴﺎﺕ Transﻟﻠﺨﺎﺻﻴﺔ Transactionﺍﻟﺘﺎﺑﻌﺔ ﻟﻠـ ،Connﻭﻫﻮ ﻣﻬﻢ ﻭﻻ
ﻳﻤﻜﻦ ﺗﻄﺒﻴﻖ ﺃﻭﺍﻣﺮ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﺍﻭﻝ ﺇﻻ ﻣﻦ ﺧﻼﻝ ﻣﺪﻳﺮ ﺍﻟﻌﻤﻠﻴﺎﺕ .Trans
ﺗﻢ ﻓﺘﺢ ﺍﺗﺼﺎﻝ ﺑﻤﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ Openﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Conn
ﺻﻔﺤﺔ 22 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
Classes, SysUtils;
: ﻧﻨﺰﻝ ﻗﻠﻴﻼً ﺛﻢ ﻧﻨﺴﺦ ﺍﻟﺴﻄﺮ،DataBaseWorks ﻓﻲ ﺍﻟﻮﺣﺪﺓ
procedure CreateDataBase;
:ﻭﻧﻠﺼﻘﻪ ﺗﺤﺘﻬﺎ ﻓﻴﺼﻴﺮ ﺍﻟﺸﻜﻞ ﺍﻟﻌﺎﻡ
unit DataBaseWorks;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
procedure CreateDataBase;
implementation
Uses frmMainUnit;
procedure CreateDataBase;
var
QueryString: String;
begin
frmMain.conn.DatabaseName:='Contacts.db';
frmMain.conn.Transaction:=frmMain.Trans;
frmMain.conn.Open;
end;
end.
... ﻧﺒﺪﺃ ﻋﻠﻰ ﺑﺮﻛﺔ ﺍﷲ... ﻧﺸﺮﻉ ﻓﻲ ﻛﺘﺎﺑﺔ ﺃﻭﺍﻣﺮ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﺍﻭﻝ،ﻭﺍﻵﻥ
Counters
ﺍﻟﻨﻮﻉ ﺍﻟﻮﺻﻒ ﺍﻟﺤﻘﻞ
INTEGER ﻳﻤﺜﻞ ﺍﻟﺮﻗﻢ ﺍﻟﺘﺴﻠﺴﻠﻲ ﻟﻠﺴﺠﻞ ،ﻭﺳﻴﻜﻮﻥ ﺩﺍﺋﻤﺎً = 1 Id
INTEGER ﺳﻴﻤﺜﻞ ﻋﺪﺍﺩ ﺍﻟـ IDﺍﻟﺨﺎﺹ ﺑﺎﻟﺠﺪﻭﻝ Contacts contactid
;frmMain.Trans.StartTransaction
;)frmMain.conn.ExecuteDirect(QueryString
;frmMain.Trans.Commit
ﺗﻢ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ SQLﻹﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ Countersﻭﺣﻘﻮﻟﻪ ،ﻭﻣﻦ ﺛﻢ ﻭﺿﻌﻬﺎ ﻓﻲ ﺍﻟﻤﺘﻐﻴﺮ
QueryStringﻟﺘﻨﻔﻴﺬﻫﺎ ﻻﺣﻘﺎً.
ﺇﻋﻄﺎﺀ ﺍﻷﻣﺮ ﻟﻠﺒﺪﺀ ﻓﻲ ﺍﻟﻌﻤﻠﻴﺔ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ StartTransactionﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Conn
ﺗﻨﻔﻴﺬ ﺍﻻﺳﺘﻌﻼﻡ QueryStringﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ ExecuteDirectﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Conn
ﺗﺄﻛﻴﺪ ﺃﻣﺮ ﺇﻧﺸﺎﺀ ﺍﻟﺠﺪﻭﻝ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ Commitﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Trans
;frmMain.Trans.StartTransaction
;)frmMain.conn.ExecuteDirect(QueryString
;frmMain.Trans.Commit
ﺻﻔﺤﺔ 24 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﺗﻢ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ﺇﻧﺸﺎﺀ ﻓﻬﺮﺱ ﺑﺎﺳﻢ CountersIndexﺍﻋﺘﻤﺎﺩﺍً ﻋﻠﻰ ﺍﻟﺤﻘﻞ idﻓﻲ ﺍﻟﺠﺪﻭﻝ
Countersﻭﺗﺨﺼﻴﺼﻬﺎ ﻟﻠﻤﺘﻐﻴﺮ QueryStringﻟﺘﻨﻔﻴﺬﻫﺎ ﻻﺣﻘﺎً.
ﺇﻋﻄﺎﺀ ﺍﻷﻣﺮ ﻟﻠﺒﺪﺀ ﻓﻲ ﺍﻟﻌﻤﻠﻴﺔ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ StartTransactionﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Conn
ﺗﻨﻔﻴﺬ ﺍﻻﺳﺘﻌﻼﻡ QueryStringﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ ExecuteDirectﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Conn
ﺗﺄﻛﻴﺪ ﺃﻣﺮ ﺇﻧﺸﺎﺀ ﺍﻟﻔﻬﺮﺱ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ Commitﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Trans
;frmMain.Trans.StartTransaction
;)frmMain.conn.ExecuteDirect(QueryString
;frmMain.Trans.Commit
ﺗﻢ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ﺇﺿﺎﻓﺔ ﺳﺠﻞ ﺟﺪﻳﺪ ﻓﻲ ﺍﻟﺠﺪﻭﻝ Countersﻭﺗﺨﺼﻴﺼﻬﺎ ﻟﻠﻤﺘﻐﻴﺮ QueryString
ﻟﺘﻨﻔﻴﺬﻫﺎ ﻻﺣﻘﺎً.
ﺇﻋﻄﺎﺀ ﺍﻷﻣﺮ ﻟﻠﺒﺪﺀ ﻓﻲ ﺍﻟﻌﻤﻠﻴﺔ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ StartTransactionﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Conn
ﺗﻨﻔﻴﺬ ﺍﻻﺳﺘﻌﻼﻡ QueryStringﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ ExecuteDirectﺍﻟﺘﺎﺑﻊ ﻟﻠـ.Conn
ﺗﺄﻛﻴﺪ ﺃﻣﺮ ﺇﺿﺎﻓﺔ ﺍﻟﺴﺠﻞ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ Commitﺍﻟﺘﺎﺑﻊ ﻟﻠـ. Trans
ﺻﻔﺤﺔ 25 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
Contacts
ﺍﻟﻨﻮﻉ ﺍﻟﻮﺻﻒ ﺍﻟﺤﻘﻞ
INTEGER ﻳﻤﺜﻞ ﺍﻟﺮﻗﻢ ﺍﻟﺘﺴﻠﺴﻠﻲ ﻟﻠﺴﺠﻞ Id
STRING ﻳﻤﺜﻞ ﺍﺳﻢ ﺟﻬﺔ ﺍﻻﺗﺼﺎﻝ contactName
STRING ﻳﻤﺜﻞ ﺃﺭﻗﺎﻡ ﺍﻟﻬﻮﺍﺗﻒ phoneNumbers
STRING ﻳﻤﺜﻞ ﺍﻟﺒﺮﻳﺪ ﺍﻹﻟﻜﺘﺮﻭﻧﻲ emailAddress
ﻓﻲ ﺍﻟﺠﺪﻭﻝid ﺍﻋﺘﻤﺎﺩﺍً ﻋﻠﻰ ﺍﻟﺤﻘﻞContactsIndex ﺗﻢ ﻛﺘﺎﺑﺔ ﺟﻤﻠﺔ ﺇﻧﺸﺎﺀ ﻓﻬﺮﺱ ﺑﺎﺳﻢ
.ً ﻟﺘﻨﻔﻴﺬﻫﺎ ﻻﺣﻘﺎQueryString ﻭﺗﺨﺼﻴﺼﻬﺎ ﻟﻠﻤﺘﻐﻴﺮContacts
.Conn ﺍﻟﺘﺎﺑﻊ ﻟﻠـStartTransaction ﺇﻋﻄﺎﺀ ﺍﻷﻣﺮ ﻟﻠﺒﺪﺀ ﻓﻲ ﺍﻟﻌﻤﻠﻴﺔ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ
.Conn ﺍﻟﺘﺎﺑﻊ ﻟﻠـExecuteDirect ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀQueryString ﺗﻨﻔﻴﺬ ﺍﻻﺳﺘﻌﻼﻡ
.Trans ﺍﻟﺘﺎﺑﻊ ﻟﻠـCommit ﺗﺄﻛﻴﺪ ﺃﻣﺮ ﺇﻧﺸﺎﺀ ﺍﻟﻔﻬﺮﺱ ﻣﻦ ﺧﻼﻝ ﺍﻹﺟﺮﺍﺀ
procedure CreateDataBase;
var
QueryString: String;
begin
frmMain.conn.DatabaseName:='Contacts.db';
frmMain.conn.Transaction:=frmMain.Trans;
frmMain.conn.Open;
;procedure CreateDataBase
ﻭﻧﻠﺼﻘﻪ ﺗﺤﺖ
uses
;Classes, SysUtils
;procedure Createdatabase
ﻓﻲ ﺍﻟﻮﺣﺪﺓ .DataBaseWorks
;Uses DataBaseWorks
ﺻﻔﺤﺔ 28 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻧﺄﺗﻲ ﺍﻵﻥ ﻟﻠﺘﺤﻘﻖ ﻓﻌﻠﻴﺎً ﻣﻦ ﻭﺟﻮﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻭ ﻓﻘﺪﺍﻧﻪ .ﻭﺃﻧﺴﺐ ﻭﻗﺖ ﻟﻌﻤﻞ ﺫﻟﻚ ﻫﻮ ﺍﻟﺤﺪﺙ
Activateﻟﻠﻔﻮﺭﻡ .frmMain
;end
ﺍﺳﺘﺨﺪﻣﻨﺎ ﺍﻟﺪﺍﻟﺔ FileExistsﻭﺍﻟﺘﻲ ﺗﺮﺟﻊ ﺍﻟﻘﻴﻤﺔ Trueﺇﺫﺍ ﻛﺎﻥ ﺍﺳﻢ ﺍﻟﻤﻠﻒ ﺍﻟﻤﻌﻄﻰ ﻣﻮﺟﻮﺩﺍً،
ﻭ Falseﺇﺫﺍ ﻟﻢ ﻳﻜﻦ ﻣﻮﺟﻮﺩﺍً ﺣﺘﻰ ﻧﺘﺄﻛﺪ ﻣﻦ ﻭﺟﻮﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻣﻦ ﻋﺪﻣﻪ.
ﻓﻲ ﺣﺎﻝ ﻭﺟﻮﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻧﺘﺼﻞ ﺑﻪ ﻋﻦ ﻃﺮﻳﻖ ،Connﻭﻓﻲ ﺣﺎﻟﺔ ﺗﺤﻘﻖ ﺍﻻﺗﺼﺎﻝ
ﺗﻈﻬﺮ ﺍﻟﺮﺳﺎﻟﺔ .Connected
ﺃﻣﺎ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺟﻮﺩ ﻣﻠﻒ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻓﻴﺘﻢ ﺍﺳﺘﺪﻋﺎﺀ ﺍﻹﺟﺮﺍﺀ Createdatabaseﺍﻟﺘﺎﺑﻊ
ﻟﻠﻮﺣﺪﺓ ،DataBaseWorksﺍﻟﺬﻱ ﺳﻴﻨﺸﺊ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺟﺪﺍﻭﻟﻬﺎ ،ﺛﻢ ﺇﻇﻬﺎﺭ ﺍﻟﺮﺳﺎﻟﺔ :
.Database was created
ﺻﻔﺤﺔ 29 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
Get_Grid_Ready ﺍﻹﺟﺮﺍﺀ
procedure Get_Grid_Ready;
begin
frmMain.dgvContacts.BiDiMode:=bdRightToLeft;
frmMain.dgvContacts.Columns[0].Title.Caption:='م.;'ر
frmMain.dgvContacts.Columns[0].Width:=50;
frmMain.dgvContacts.Columns[0].Alignment:=taCenter;
frmMain.dgvContacts.Columns[0].Title.Alignment:=taCenter;
frmMain.dgvContacts.Columns[2].Title.Caption:=';'أرﻗﺎم اﻟﮭﻮاﺗﻒ
frmMain.dgvContacts.Columns[2].Width:=250;
frmMain.dgvContacts.Columns[2].Title.Alignment:=taCenter;
frmMain.dgvContacts.Columns[2].Alignment:=taCenter;
frmMain.dgvContacts.Columns[3].Title.Caption:=';'اﻟﺒﺮﯾﺪ اﻹﻟﻜﺘﺮوﻧﻲ
frmMain.dgvContacts.Columns[3].Width:=250;
frmMain.dgvContacts.Columns[3].Title.Alignment:=taCenter;
frmMain.dgvContacts.Columns[3].Alignment:=taCenter;
end;
ﺗﻢ ﺗﻐﻴﻴﺮ ﺍﺗﺠﺎﻩ ﺍﻟﻜﺘﺎﺑﺔ ﻋﻠﻰ dgvContactsﻟﻴﻜﻮﻥ ﻣﻦ ﺍﻟﻴﻤﻴﻦ ﺇﻟﻰ ﺍﻟﻴﺴﺎﺭ.
ﺿﺒﻂ ﺍﻟﻨﺺ ﺍﻟﻈﺎﻫﺮ ﺃﻋﻠﻰ ﺍﻟﻌﻤﻮﺩ ﺍﻷﻭﻝ )ﺍﻟﺘﺮﻗﻴﻢ ﻳﺒﺪﺃ ﻣﻦ ﺍﻟﺼﻔﺮ( ﺑـ ﺭ.ﻡ.
ﺿﺒﻂ ﺍﺗﺴﺎﻉ ﺍﻟﻌﻤﻮﺩ ﺍﻷﻭﻝ ﻟﻴﺴﺎﻭﻱ .50
ﺿﺒﻂ ﻣﺤﺎﺫﺍﺓ ﻋﻨﻮﺍﻥ ﺍﻟﻌﻤﻮﺩ ﺍﻷﻭﻝ ﻓﻲ ﺍﻟﻮﺳﻂ.
ﺿﺒﻂ ﻣﺤﺎﺫﺍﺓ ﻣﺤﺘﻮﻳﺎﺕ ﺍﻟﻌﻤﻮﺩ ﺍﻷﻭﻝ ﻓﻲ ﺍﻟﻮﺳﻂ.
ﻭﻫﻜﺬﺍ ﻟﺒﻘﻴﺔ ﺍﻷﻋﻤﺪﺓ.
ﺍﻹﺟﺮﺍﺀ Update_Grid
;procedure Update_Grid
begin
;frmMain.UpdateQuery.Close
;frmMain.UpdateQuery.DataBase:=frmMain.conn
;'frmMain.UpdateQuery.SQL.Text:='SELECT * FROM Contacts
;frmMain.UpdateQuery.open
;frmMain.UpdateDataSource.DataSet:=frmMain.UpdateQuery
;frmMain.dgvContacts.DataSource:=frmMain.UpdateDataSource
;Get_Grid_Ready
;end
ﻭﻓﻴﻪ:
ﺻﻔﺤﺔ 31 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
ﻭﻧﻌﺪﻟﻪ ﺑﺤﻴﺚ ﻳﺘﻢ ﻋﺮﺽ ﺍﻟﺴﺠﻼﺕ ﻓﻲ ﺣﺎﻟﺔ ﻭﺟﻮﺩ ﻣﻠﻒ،FormActivate ﻧﻌﻮﺩ ﻟﺒﺮﻣﺠﺔ ﺍﻟﺤﺪﺙ،ﻭﺑﺎﻟﺘﺎﻟﻲ
: ﻭﻧﺤﺬﻑ ﺍﻟﺮﺳﺎﻟﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻨﺠﺎﺡ ﺍﻻﺗﺼﺎﻝ ﻭﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ،ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﺇﺿﺎﻓﺔ ﺍﻟﺴﺠﻼﺕ
ﻗﻤﻨﺎ ﻓﻴﻤﺎ ﺳﺒﻖ ﺑﺈﻧﺸﺎﺀ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺟﺪﺍﻭﻟﻬﺎ ،ﻭﺍﻻﺗﺼﺎﻝ ﺑﻬﺎ ،ﻭﻋﺮﺽ ﺍﻟﺴﺠﻼﺕ ﻋﻠﻰ
ﺍﻟـ ،dgvContactsﺑﺎﻟﻄﺒﻊ ﻟﻦ ﻳﻜﻮﻥ ﻫﻨﺎﻙ ﺳﺠﻼﺕ ،ﻷﻧﻨﺎ ﻟﻢ ﻧﻀﻒ ﺃﻳﺎً ﻣﻨﻬﺎ ﺑﻌﺪ.
ﻹﺿﺎﻓﺔ ﺳﺠﻼﺕ ﺟﺪﻳﺪﺓ ،ﻧﻘﻮﻡ ﺑﺈﻧﺸﺎﺀ ﻧﺎﻓﺬﺓ ﺟﺪﻳﺪﺓ ،ﻭﻧﺴﻤﻴﻬﺎ ،frmNewContactﻭﺍﻟﻮﺣﺪﺓ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ
ﻧﺴﻤﻴﻬﺎ frmNewContactUnitﻭﻧﻀﻊ ﻋﻠﻴﻬﺎ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻟﺘﺎﻟﻴﺔ:
ﺻﻔﺤﺔ 33 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
implementation
;uses frmMainUnit, MainWindowSetup
implementation
;uses DatabaseWorks, MainWindowSetup, frmNewContactUnit
ﻧﻘﻮﻡ ﺑﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻣﺤﻠﻲ ﻣﻦ ﺍﻟﻨﻮﻉ Integerﻟﻴﻤﺜﻞ ﺭﻗﻢ ﺁﺧﺮ ﺳﺠﻞ ﺗﻤﺖ ﺇﺿﺎﻓﺘﻪ ﻣﺴﺒﻘﺎً ﻓﻲ ﺍﻟﺠﺪﻭﻝ
،Contactsﺗﺤﺖ ﺍﻟﻘﺴﻢ Privateﻓﻲ ﺍﻟﻮﺣﺪﺓ frmNewContactUnitﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
private
} { private declarations
;LastID: Integer
ﻟﻨﻔﺘﺮﺽ ﺃﻥ ﺍﻟﺤﻘﻮﻝ ﺍﻹﺟﺒﺎﺭﻳﺔ ﻫﻲ ﺣﻘﻞ ﺍﺳﻢ ﺟﻬﺔ ﺍﻻﺗﺼﺎﻝ ﻭﺣﻘﻞ ﺃﺭﻗﺎﻡ ﺍﻟﻬﻮﺍﺗﻒ ،ﺑﻴﻨﻤﺎ ﺣﻘﻞ ﺍﻟﺒﺮﻳﺪ
ﺍﻹﻟﻜﺘﺮﻭﻧﻲ ﺍﺧﺘﻴﺎﺭﻱ.
ﺍﻵﻥ ..ﻧﻨﻘﺮ ﺍﻟﺰﺭ btnSaveﻭﻧﻜﺘﺐ ﻓﻲ ﺣﺪﺙ ﺍﻟﻨﻘﺮ ﺍﻟﺨﺎﺹ ﺑﻪ ﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ :
ﺻﻔﺤﺔ 34 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻭﻓﻲ ﺍﻟﻜﻮﺩ ﺍﻟﺴﺎﺑﻖ ﻳﺘﻢ ﺇﻇﻬﺎﺭ ﺭﺳﺎﻟﺔ ﺗﻔﻴﺪ ﺑﻮﺟﻮﺏ ﻛﺘﺎﺑﺔ ﺃﺭﻗﺎﻡ ﺍﻟﻬﻮﺍﺗﻒ ﻓﻲ ﺣﺎﻝ ﻟﻢ ﻳﺪﺧﻠﻬﺎ ﺍﻟﻤﺴﺘﺨﺪﻡ،
ﺛﻢ ﻧﻘﻞ ﺍﻟﺘﺮﻛﻴﺰ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺮ ،txtPhoneNumbersﻭﺍﻟﺨﺮﻭﺝ ﻣﻦ ﺍﻹﺟﺮﺍﺀ ﺍﻟﺤﺎﻟﻲ ﻭﻫﻮ ﺇﺟﺮﺍﺀ ﺣﺪﺙ ﺍﻟﻨﻘﺮ
ﻋﻠﻰ ﺍﻟﺰﺭ btnSaveﺑﺴﺒﺐ ﺗﻨﻔﻴﺬ ﺍﻹﺟﺮﺍﺀ .Exit
;OpQuery.Close
;OpQuery.DataBase:= frmMain.conn
;'OpQuery.SQL.Text:= 'SELECT * FROM Counters WHERE id = 1
;OpQuery.Open
ﻭﻓﻴﻪ ﺭﺑﻄﻨﺎ ﺑﻴﻦ ﺍﻟـ OpQueryﻭﺍﻟـ Connﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﺍﻟﻔﻮﺭﻡ . frmMainﺛﻢ ﻛﺘﺒﻨﺎ ﺟﻤﻠﺔ ﺍﻻﺳﺘﻌﻼﻡ
ﻭﺍﻟﺘﻲ ﺗﺮﺟﻊ ﺍﻟﺴﺠﻞ ﺭﻗﻢ 1ﻓﻲ ﺍﻟﺠﺪﻭﻝ .Counters
;LastIDDataSource.DataSet:= OpQuery
ﺣﻘﻞ contactedﻳﺤﺘﻔﻆ ﺑﺂﺧﺮ ﺭﻗﻢ ﻟﻠـ idﺍﻟﺨﺎﺹ ﺑﺎﻟﺠﺪﻭﻝ .Contactsﻓﻤﺜﻼً ،ﺭﺑﻤﺎ ﻳﻜﻮﻥ ﺁﺧﺮ ﺭﻗﻢ id
ﻫﻮ ) ،(xﻧﻘﻮﻡ ﺑﺈﺿﺎﻓﺔ ) (1ﺇﻟﻴﻪ ،ﻟﻴﻜﻮﻥ ﺭﻗﻢ ﺍﻟـ idﻟﻠﺴﺠﻞ ﺍﻟﺠﺪﻳﺪ ،ﻭﻧﺨﺰﻧﻪ ﻓﻲ ﺍﻟﻤﺘﻐﻴﺮ LastIDﻭﺑﺎﻟﺼﻮﺭﺓ
ﺍﻟﺘﺎﻟﻴﺔ:
ﺻﻔﺤﺔ 35 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻳﻌﻨﻲ ﺃﻧﻨﺎ ﺍﻵﻥ ﻧﺤﺘﻔﻆ ﺑﻘﻴﺔ ﺍﻟـ idﻟﻠﺴﺠﻞ ﺍﻟﺠﺪﻳﺪ ﻓﻲ ﺍﻟﻤﺘﻐﻴﺮ .LastID
ﻻﺣﻆ ﻛﻴﻔﻴﺔ ﺗﺤﺪﻳﺪ ﻗﻴﻤﺔ ﺍﻟﺤﻘﻞ ﺍﻟﺬﻱ ﻧﺮﻳﺪ ﺗﻌﺪﻳﻠﻪ ،ﻧﻜﺘﺐ ﺍﺳﻤﻪ ﺛﻢ )=( ﺛﻢ ) (:ﺛﻢ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺨﺼﺼﺔ ﻟﻪ
ﻋﻠﻰ ﻫﻴﺌﺔ ﺑﺎﺭﺍﻣﺘﺮ.
;OpQuery.ParamByName('contactid').AsInteger:=LastID
;OpQuery.ExecSQL
ﻭﻻ ﻧﻨﺲ ﺃﻥ ﻧﺆﻛﺪ ﺍﻟﺘﺤﺪﻳﺚ ﻣﻦ ﺧﻼﻝ ﺍﻟﻌﻨﺼﺮ Transﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﺍﻟﻔﻮﺭﻡ :frmMain
;frmMain.Trans.Commit
ﻋﻤﻠﻴﺔ ﺍﻹﺿﺎﻓﺔ
ﺍﻵﻥ ...ﺗﺤﺼﻠﻨﺎ ﻋﻠﻰ ﺭﻗﻢ ﺍﻟـ idﺍﻟﺨﺎﺹ ﺑﺎﻟﺴﺠﻞ ﺍﻟﺠﺪﻳﺪ ،ﻓﻠﻨﺸﺮﻉ ﻓﻲ ﻛﺘﺎﺑﺔ ﺃﻛﻮﺍﺩ ﻋﻤﻠﻴﺔ ﺍﻹﺿﺎﻓﺔ.
ﺻﻔﺤﺔ 36 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻭﻫﻲ ﺟﻤﻠﺔ SQLﺧﺎﺻﺔ ﺑﺈﺩﺭﺍﺝ ﺳﺠﻞ ﺟﺪﻳﺪ ،ﻭﺣﺪﺩﻧﺎ ﻓﻴﻬﺎ ﺑﺎﺭﺍﻣﺘﺮﺍﺕ ﺗﻤﺜﻞ:
;OpQuery.ParamByName('id').AsInteger:=LastID
;OpQuery.ParamByName('contactName').AsString:=txtContactName.Text
;OpQuery.ParamByName('phoneNumbers').AsString:=txtPhoneNumbers.Text
;OpQuery.ParamByName('emailAddress').AsString:=txtEmailAddress.Text
ﻛﻤﺎ ﻧﺮﻯ ،ﻳﺠﺐ ﺗﺤﺪﻳﺪ ﻧﻮﻉ ﻛﻞ ﺑﺎﺭﺍﻣﺘﺮ ﺑﺤﻴﺚ ﻳﻜﻮﻥ ﻣﺘﻮﺍﻓﻘﺎً ﻣﻊ ﺍﻟﻨﻮﻉ ﺍﻟﻤﻘﺎﺑﻞ ﻟﻪ ﻓﻲ ﺍﻟﺠﺪﻭﻝ.
;OpQuery.ExecSQL
ﻭﻛﻜﻞ ﻣﺮﺓ ،ﻻ ﻧﻨﺲ ﺃﻥ ﻧﺆﻛﺪ ﺍﻟﺘﺤﺪﻳﺚ ﻣﻦ ﺧﻼﻝ ﺍﻟﻌﻨﺼﺮ Transﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﺍﻟﻔﻮﺭﻡ :frmMain
;frmMain.Trans.Commit
ﻓﻲ ﻧﻬﺎﻳﺔ ﻫﺬﺍ ﺍﻹﺟﺮﺍﺀ ،ﻧﻘﻮﻡ ﺑﺘﺤﺪﻳﺚ ﻣﺤﺘﻮﻳﺎﺕ ﺍﻟـ dgvContactsﻋﻦ ﻃﺮﻳﻖ ﺍﺳﺘﺪﻋﺎﺀ ﺍﻹﺟﺮﺍﺀ:
;Update_Grid
;Close
ﺻﻔﺤﺔ 37 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
// Getting last id
OpQuery.Close;
OpQuery.DataBase:= frmMain.conn;
OpQuery.SQL.Text:= 'SELECT * FROM Counters WHERE id = 1';
OpQuery.Open;
LastIDDataSource.DataSet:= OpQuery;
LastID:= LastIDDataSource.DataSet.FieldByName('contactid').AsInteger + 1;
frmMain.Trans.Commit;
// -------------- end getting last id --------------
OpQuery.ParamByName('contactName').AsString:=txtContactName.Text;
OpQuery.ParamByName('phoneNumbers').AsString:=txtPhoneNumbers.Text;
OpQuery.ParamByName('emailAddress').AsString:=txtEmailAddress.Text;
OpQuery.ExecSQL;
frmMain.Trans.Commit;
Update_Grid;
close;
end;
ﻭﻟﻜﻲ ﻧﺠﻬﺰ ﻟﻌﻤﻠﻴﺔ ﺍﻹﺿﺎﻓﺔ ﺍﻟﺘﺎﻟﻴﺔ ،ﻧﻤﺴﺢ ﺻﻨﺎﺩﻳﻖ ﺍﻟﻨﺼﻮﺹ ،ﻭﻧﺼﻔﺮ ﺍﻟﻤﺘﻐﻴﺮ ، LastIDﺛﻢ ﻧ ﻀﻊ
ﺍﻟﺘﺮﻛﻴﺰ ﻓﻲ ﺻﻨﺪﻭﻕ ﺍﻟﻨﺼﻮﺹ ﺍﻟﺨﺎﺹ ﺑﺎﺳﻢ ﺟﻬﺔ ﺍﻻﺗﺼﺎﻝ ،ﻭﺫﻟﻚ ﺑﻜﺘﺎﺑﺔ ﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﺤﺪﺙ
FormCloseﺍﻟﺘﺎﺑﻊ ﻟﻠﻔﻮﺭﻡ :frmNewContact
ﻟﻮ ﺷﻐﻠﻨﺎ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻵﻥ ،ﻭﻧﻘﺮﻧﺎ ﻋﻠﻰ ﺍﻟﺰﺭ )ﺟﺪﻳﺪ( ﻟﻦ ﻳﺤﺪﺙ ﺃﻱ ﺷﻲﺀ ،ﻭﺍﻟﺴﺒﺐ ﻫﻮ ﺃﻧﻨﺎ ﻟﻢ ﻧﻜﺘﺐ ﺍﻟﻜﻮﺩ
ﺍﻟﺨﺎﺹ ﺑﺎﻟﻨﻘﺮ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﺰﺭ.
ﻧﺘﻘﻞ ﺇﻟﻰ ﺍﻟﻔﻮﺭﻡ ،frmMainﻧﻨﻘﺮ ﻋﻠﻰ ﺍﻟﺰﺭ )ﺟﺪﻳﺪ( ﻧﻘﺮﺗﻴﻦ ﺳﺮﻳﻌﺘﻴﻦ ﻭﻧﻜﺘﺐ ﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺣﺪﺙ
ﺍﻟﻨﻘﺮ :
ﺻﻔﺤﺔ 39 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﺍﻟﺒﺤﺚ ﻋﻦ ﺍﻟﺴﺠﻼﺕ
ﺑﺎﻟﻨﻈﺮ ﺇﻟﻰ ﺍﻟﻨﺎﻓﺬﺓ :frmMain
ﻧﺠﺪ ﺃﻥ ﻫﻨﺎﻙ:
ﻭﺍﻟﻔﻜﺮﺓ ﻫﻲ ﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﺎﻟﺒﺤﺚ ﻋﻦ ﺍﺳﻢ ﺟﻬﺔ ﺍﻻﺗﺼﺎﻝ ﻣﺜﻼً ﺑﻤﺠﺮﺩ ﺇﺩﺧﺎﻝ ﺃﻭﻝ ﺣﺮﻑ ،ﻓﻴﺘﻢ ﻓﻠﺘﺮﺓ
ﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﻲ ﻳﻮﺟﺪ ﻓﻴﻬﺎ ﺫﻟﻚ ﺍﻟﺤﺮﻑ ،ﺛﻢ ﺇﻋﺎﺩﺓ ﺍﻟﻔﻠﺘﺮﺓ ﻋﻨﺪ ﺇﺩﺧﺎﻝ ﺍﻟﺤﺮﻑ ﺍﻟﺜﺎﻧﻲ ،ﻭﺍﻟﺜﺎﻟﺚ ﻭﻫﻜﺬﺍ،
ﻟﺘﻀﻴﻴﻖ ﺩﺍﺋﺮﺓ ﺍﻟﺒﺤﺚ ،ﻭﻋﺮﺽ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻤﻔﻠﺘﺮﺓ ﻟﺤﻈﻴﺎً ﻋﻠﻰ ﺍﻟﻌﻨﺼﺮ .dgvContacts
ﻭﻓﻲ ﺣﺎﻝ ﻻ ﻳﻮﺟﺪ ﺗﻄﺎﺑﻖ ﺑﻴﻦ ﺍﻟﺤﺮﻭﻑ ﺍﻟﻤﺪﺧﻠﺔ ﻭﻧﻈﻴﺮﺗﻬﺎ ﻓﻲ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻻ ﻳﺘﻢ ﻋﺮﺽ ﺃﻱ ﺷﻲﺀ
ﻋﻠﻰ ﺍﻟـ.dgvContacts
ﻳﻌﻨﻲ ﺗﺘﻢ ﻋﻤﻠﻴﺔﺍﻟﻔﻠﺘﺮﺓ ﻭﻋﺮﺽ ﺍﻟﻤﻘﺘﺮﺣﺎﺕ ﻓﻲ ﻛﻞ ﻣﺮﺓ ﻳﺪﺧﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻴﻬﺎ ﺣﺮﻓﺎً ،ﺃﻭ ﺭﻗﻤﺎً.
ﺻﻔﺤﺔ 40 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻧﻨﻘﺮ ﻋﻠﻰ ﺻﻨﺪﻭﻕ ﺍﻟﻨﺼﻮﺹ txtSearchInNamesﻧﻘﺮﺗﻴﻦ ﺳﺮﻳﻌﺘﻴﻦ ،ﻓﻴﻈﻬﺮ ﺍﻟﻜﻮﺩ ﺍﻟﺨﺎﺹ ﺑﺎﻟﺤﺪﺙ
Changeﺍﻟﺨﺎﺹ ﺑﻬﺬﺍ ﺍﻟﻌﻨﺼﺮ:
;end
ﻓﻲ ﻛﻞ ﻣﺮﺓ ﻳﻘﻮﻡ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺈﺩﺧﺎﻝ ﺣﺮﻑ ،ﻧﻘﻮﻡ ﺑﺎﻟﺒﺤﺚ ﻋﻦ ﻣﺎ ﻳﺸﺎﺑﻪ ﺍﻟﻤﻜﺘﻮﺏ ﻓﻲ
txtSearchInNames.Textﻓﻲ ﺳﺠﻼﺕ ﺍﻟﺠﺪﻭﻝ ،Contactsﻭﻋﺮﺽ ﺍﻟﻨﺘﻴﺠﺔ ﻋﻠﻰ ﺍﻟـ.dgvContacts
ﺃﻣﺎ ﺇﻥ ﻟﻢ ﻧﺠﺪ ﺗﺸﺎﺑﻬﺎً ﺃﻭ ﺗﻄﺎﺑﻘﺎً ،ﻓﻼ ﻳﺘﻢ ﻋﺮﺽ ﺃﻱ ﺷﻲﺀ.
ﻭﻓﻲ ﺍﻟﻜﻮﺩ ﺍﻟﺴﺎﺑﻖ ،ﻧﻔﺤﺺ ﺍﻟﻤﻜﺘﻮﺏ ﻓﻲ ﺍﻟﻌﻨﺼﺮ ،txtSearchInNamesﻓﺈﻥ ﻛﺎﻥ ﻓﺮﺍﻏﺎً ،ﻧﻌﺮﺽ ﻛﺎﻓﺔ
ﺍﻟﺴﺠﻼﺕ ﻋﻠﻰ dgvContactsﺛﻢ ﻧﺨﺮﺝ ﻣﻦ ﺍﻹﺟﺮﺍﺀ .ﺃﻣﺎ ﺇﻥ ﻟﻢ ﻳﻜﻦ ﻓﺮﺍﻏﺎً ،ﺃﻱ ﺃﻥ ﺍﻟـ
txtSearchInNamesﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺣﺮﻑ ﻋﻠﻰ ﺍﻷﻗﻞ ،ﻓﻨﺒﺤﺚ ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻋﻦ ﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﻲ
ﻳﻜﻮﻥ ﻓﻴﻬﺎ ﺣﻘﻞ ﺍﻟـ contactNameﻣﺸﺎﺑﻬﺎً ﻟﻠﻘﻴﻤﺔ ﺍﻟﻤﻌﻄﺎﺓ ﻓﻲ :txtSearchInNames
;UpdateQuery.Close
UpdateQuery.SQL.Text:='SELECT * FROM Contacts ' +
''WHERE contactName LIKE ''%
;'''+ txtSearchInNames.Text + '%
;UpdateQuery.Open
;UpdateDataSource.DataSet:=UpdateQuery
;dgvContacts.DataSource:=UpdateDataSource
ﺻﻔﺤﺔ 41 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
Get_Grid_Ready;
. ﻭﺍﻟﺤﻘﻞ ﺍﻟﺬﻱ ﻧﺮﻳﺪ ﺍﻟﺒﺤﺚ ﻣﻦ ﺧﻼﻟﻪ، ﻓﻘﻂ ﻏﻴﺮﻧﺎ ﺍﺳﻢ ﺻﻨﺪﻭﻕ ﺍﻟﻨﺼﻮﺹ،ﻭﻫﻮ ﻧﻔﺲ ﺍﻟﻜﻮﺩ ﺍﻟﺴﺎﺑﻖ
. ﻧﺸﻐﻞ ﻭﻧﺠﺮﺏ
ﺻﻔﺤﺔ 43 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﺍﻟﻔﻜﺮﺓ ﻛﺎﻟﺘﺎﻟﻲ :ﻓﻲ ﺍﻟﻨﺎﻓﺬﺓ ﺍﻟﺮﺋﻴﺴﻴﺔ ،ﻳﺨﺘﺎﺭ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺳﺠﻼً ﻣﻌﻴﻨﺎً ﺑﺎﻟﻨﻘﺮ ﺍﻟﻤﺰﺩﻭﺝ ﻋﻠﻴﻪ ،ﻭﺑﺬﻟﻚ ﻳﺘﻢ
ﺗﻔﻌﻴﻞ ﺍﻟﺰﺭ )ﺗﻌﺪﻳﻞ( ،ﻭﻋﻨﺪ ﺍﻟﻨﻘﺮ ﻋﻠﻴﻪ ﻳﺘﻢ ﺇﺭﺳﺎﻝ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺴﺠﻞ ﺇﻟﻰ ﺍﻟﻔﻮﺭﻡ ،frmEditDeleteﻭﻳﺘﻢ
ﻋﺮﺿﻪ ﺃﻣﺎﻡ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻟﻴﺘﺨﺬ ﻗﺮﺍﺭﻩ ﺇﻣﺎ ﺑﺎﻟﺘﻌﺪﻳﻞ ،ﺃﻭ ﺑﺎﻟﺤﺬﻑ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺘﺄﺷﻴﺮ ﻋﻠﻰ ﺍﻟﺨﻴﺎﺭ )ﺣﺬﻑ ؟(
ﺃﺳﻔﻞ ﺍﻟﻔﻮﺭﻡ ،ﺛﻢ ﺍﻟﻨﻘﺮ ﻋﻠﻰ ﺍﻟﺰﺭ )ﺣﻔﻆ(.
ﺍﻵﻥ ..ﻧﺤﺘﺎﺝ ﺇﻟﻰ ﺗﻌﺮﻳﻒ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻌﻤﻮﻣﻴﺔ ،Publicﻓﻨﺼﻌﺪ ﺇﻟﻰ ﺑﺪﺍﻳﺔ ﺍﻟﻮﺣﺪﺓ
،frmEditDeleteUnitﻭﺗﺤﺖ ﺍﻟﻘﺴﻢ Publicﻧﻜﺘﺐ:
public
} { public declarations
;ContactID: Integer
;ContactName: String
;ContactPhones: String
;ContactEmail: String
ﺣﻴﺚ ContactIDﻳﻤﺜﻞ ﺭﻗﻢ ﺍﻟـ idﺍﻟﺨﺎﺹ ﺑﺎﻟﺴﺠﻞ ContactName ،ﻳﻤﺜﻞ ﺍﺳﻢ ﺟﻬﺔ ﺍﻻﺗﺼﺎﻝ،
ContactPhonesﻳﻤﺜﻞ ﺃﺭﻗﺎﻡ ﺍﻟﻬﻮﺍﺗﻒ ،ﻭ ContactEmailﻳﻤﺜﻞ ﺍﻟﺒﺮﻳﺪ ﺍﻹﻟﻜﺘﺮﻭﻧﻲ .
;Opquery.Close
;Opquery.DataBase:=frmMain.conn
ﺛﻢ ﻧﻘﻮﻡ ﺑﻮﺿﻊ ﺍﻟﻘﻴﻢ ﺍﻟﻤﺴﺘﻘﺒﻠﺔ ﻣﻦ ﺍﻟﻔﻮﺭﻡ ﺍﻟﺮﺋﻴﺴﻲ ﻓﻲ ﻣﺎ ﻳﻘﺎﺑﻠﻬﺎ ﻣﻦ ﺻﻨﺎﺩﻳﻖ ﺍﻟﻨﺼﻮﺹ ﻋﻠﻰ
ﺍﻟﻔﻮﺭﻡ ﺍﻟﺤﺎﻟﻲ:
;txtContactName.Text:=ContactName
;txtPhoneNumbers.Text:=ContactPhones
;txtEmailAddress.Text:=ContactEmail
ﺻﻔﺤﺔ 44 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
txtContactName.SelectAll;
:ﻓﻴﻜﻮﻥ ﺍﻟﻜﻮﺩ ﻛﺎﻣﻼً ﻛﺎﻟﺘﺎﻟﻲ
txtContactName.Text:=ContactName;
txtPhoneNumbers.Text:=ContactPhones;
txtEmailAddress.Text:=ContactEmail;
txtContactName.SelectAll;
end;
.ContactID ﻟﺪﻳﻨﺎ ﺭﻗﻢ ﺍﻟﺤﻘﻞ ﺍﻟﻤﻄﻠﻮﺏ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺗﻪ ﺃﻭ ﺣﺬﻓﻪ ﻣﺨﺰﻧﺎً ﻓﻲ ﺍﻟﻤﺘﻐﻴﺮ..ﺍﻵﻥ
، ﻓﺈﻥ ﻛﺎﻥ ﻣﺆﺷﺮﺍً )ﻋﻠﻴﻪ ﻋﻼﻣﺔ ﺻﺢ( ﻧﻘﻮﻡ ﺑﺤﺬﻑ ﺍﻟﺴﺠﻞ ﺍﻟﺤﺎﻟﻲ،chkDelete ﺑﻌﺪ ﺫﻟﻚ ﻧﻔﺤﺺ ﺍﻟﻌﻨﺼﺮ
:ﻭﺗﺤﺪﻳﺚ ﺍﻟﻔﻮﺭﻡ ﺍﻟﺮﺋﻴﺴﻲ
: ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ ﺍﻟﻌﻤﻠﻴﺔ ﺗﻌﺪﻳﻞ ﻋﻠﻰ ﺍﻟﺴﺠﻞ ﺍﻟﺤﺎﻟﻲ،ﺃﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻏﻴﺮ ﻣﺆﺷﺮ ﺑﻌﻼﻣﺔ ﺻﺢ
close;
: ًﻭﻓﻴﻤﺎ ﻳﻠﻲ ﺍﻟﻜﻮﺩ ﻛﺎﻣﻼ
ﻧﻜﺘﺐ ﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺣﺪﺙ ﺍﻹﻏﻼﻕ ﻟﻠﻔﻮﺭﻡ، ﺍﻟﺤﺬﻑ ﺍﻟﺘﺎﻟﻴﺔ/ ﻭﻟﻠﺘﻤﻬﻴﺪ ﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﻌﺪﻳﻞ
:frmEditDelete
ContactID:=0;
ContactName:='';
ContactPhones:='';
ContactEmail:='';
chkDelete.Checked:=False;
end;
ﻟﻠﺘﺠﻬﻴﺰfrmMain ﻭﺍﻵﻥ ﻧﻘﻮﻡ ﺑﺒﺮﻣﺠﺔ ﺍﻟﻔﻮﺭﻡ،frmEditDelete ﻛﺎﻥ ﻫﺬﺍ ﻣﺎ ﻳﺘﻌﻠﻖ ﺑﺒﺮﻣﺠﺔ ﺍﻟﻔﻮﺭﻡ
. ﺍﻟﺤﺬﻑ/ ﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﻌﺪﻳﻞ
ﻫﻨﺎ ﻓﻲ ﺍﻟﻔﻮﺭﻡfrmEditDelete ﻧﻌﺮﻑ ﻧﻔﺲ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺘﻲ ﻋﺮﻓﻨﺎﻫﺎ ﻋﻠﻰ ﺍﻟﻔﻮﺭﻡ،ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ
: ﻭﻛﻤﺎ ﻳﻠﻲPrivate ﺗﺤﺖ ﺍﻟﻘﺴﻢ،ﺍﻟﺮﺋﻴﺴﻲ
private
{ private declarations }
ContactID: Integer;
ContactName: String;
ContactPhones: String;
ContactEmail: String;
ﻭﻧﻨﺘﻘﻞ ﺇﻟﻰ ﻧﺎﻓﺬﺓ، ﻧﺨﺘﺎﺭﻫﺎ ﻓﻲ ﻭﺿﻊ ﺍﻟﺘﺼﻤﻴﻢ،dgvContactsﻧﺒﺮﻣﺞ ﺣﺪﺙ ﺍﻟﻨﻘﺮ ﺍﻟﻤﺰﺩﻭﺝ ﻟﻠـ
: ﻓﻨﻜﺘﺐ ﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ، ﻧﺨﺘﺎﺭ ﺣﺪﺙ ﺍﻟﻨﻘﺮ ﺍﻟﻤﺰﺩﻭﺝEvents ﻓﻲ ﺍﻟﺘﺒﻮﻳﺐ،ﺍﻟﺨﺼﺎﺋﺺ
ContactID:=
dgvContacts.DataSource.DataSet.FieldByName('id').AsInteger;
ContactName:=
dgvContacts.DataSource.DataSet.FieldByName('contactName').AsString;
ContactPhones:=
dgvContacts.DataSource.DataSet.FieldByName('phoneNumbers').AsString;
ContactEmail:=
dgvContacts.DataSource.DataSet.FieldByName('emailAddress').AsString;
btnEdit.Enabled:=true;
end
else begin
;''=pnlSelectedContact.Caption:
;ContactID:= 0
;'' =ContactName:
;'' =ContactPhones:
;'' =ContactEmail:
;btnEdit.Enabled:=false
;end
;end
ﻭﻓﻲ ﺍﻟﻜﻮﺩ ﺍﻟﺴﺎﺑﻖ:
ﺗﻢ ﻓﺤﺺ ﻗﻴﻤﺔ ﺣﻘﻞ ﺍﻟـ idﻟﻠﺼﻒ ﺍﻟﻤﺤﺪﺩ ﻓﻲ ﺍﻟـ ،dgvContactsﻓﺈﻥ ﻛﺎﻧﺖ ﻗﻴﻤﺘﻪ ﺃﻛﺒﺮ ﻣﻦ
ﺍﻟﺼﻔﺮ ،ﻳﻌﻨﻲ ﺗﻢ ﺍﺧﺘﻴﺎﺭ ﺳﺠﻞ ﺣﻘﻴﻘﻲ ،ﻭﺑﺎﻟﺘﺎﻟﻲ ﻧﻘﻮﻡ ﺑﺘﺨﺼﻴﺺ ﻗﻴﻢ ﺍﻟﺤﻘﻮﻝ ﺇﻟﻰ ﻣﺎ ﻳﻘﺎﺑﻠﻬﺎ
ﻣﻦ ﻣﺘﻐﻴﺮﺍﺕ.
ﻃﺒﺎﻋﺔ ﺍﺳﻢ ﺟﻬﺔ ﺍﻻﺗﺼﺎﻝ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺮ pnlSelectedContactﻛﻲ ﻳﺮﺍﻩ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﻳﺘﺄﻛﺪ
ﺑﺄﻧﻪ ﺍﺧﺘﺎﺭ ﺍﻟﺴﺠﻞ ﺍﻟﻤﻄﻠﻮﺏ.
ﺗﻔﻌﻴﻞ ﺍﻟﺰﺭ )ﺗﻌﺪﻳﻞ( ﻹﺗﺎﺣﺔ ﺍﻟﻔﺮﺻﺔ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﺎﻟﻘﻴﺎﻡ ﺑﻌﻤﻠﻴﺔ ﺍﻟﺘﻌﺪﻳﻞ ﺃﻭ ﺍﻟﺤﺬﻑ.
ﺃﻣﺎ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﺍﺧﺘﻴﺎﺭ ﺳﺠﻞ ،ﻓﻴﺘﻢ ﺗﺼﻔﻴﺮ ﺭﻗﻢ ﺍﻟـ idﻭﻣﺴﺢ ﻗﻴﻢ ﺑﻘﻴﺔ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ،ﺛﻢ ﺇﺑﻄﺎﻝ
ﻋﻤﻞ ﺍﻟﺰﺭ )ﺗﻌﺪﻳﻞ(.
ﻧﺄﺗﻲ ﺍﻵﻥ ﻟﺒﺮﻣﺠﺔ ﺍﻟﺰﺭ )ﺗﻌﺪﻳﻞ( ﻭﺍﻟﺬﻱ ﻳﻌﻤﻞ ﻓﻘﻂ ﻓﻲ ﺣﺎﻝ ﺍﺧﺘﻴﺎﺭ ﺳﺠﻞ ﻣﻦ ﺍﻟـ: dgvContacts
;''=pnlSelectedContact.Caption:
;ContactID:= 0
;'' =ContactName:
;'' =ContactPhones:
;'' =ContactEmail:
;btnEdit.Enabled:=false
;end
ﺣﻴﺚ ﺗﻢ:
ﺻﻔﺤﺔ 48 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻭﺑﻌﺪ ﺍﻟﻘﻴﺎﻡ ﺑﻤﺎ ﻫﻮ ﻣﻄﻠﻮﺏ ﻭﺇﻏﻼﻕ ﺍﻟﻔﻮﺭﻡ ،frmEditDeleteﻧﻘﻮﻡ ﺑﺘﺼﻔﻴﺮ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻋﻠﻰ
ﺍﻟﻔﻮﺭﻡ .frmMain
ﺯﺭ ﺍﻟﺘﺤﺪﻳﺚ
ﻭﻇﻴﻔﺔ ﻫﺬﺍ ﺍﻟﺰﺭ ﻫﻮ ﺇﻟﻐﺎﺀ ﻋﻤﻠﻴﺔ ﺍﺧﺘﻴﺎﺭ ﺳﺠﻞ ﻣﻌﻴﻦ ،ﻭﺗﺼﻔﻴﺮ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ،ﻭﻣﺴﺢ ﺻﻨﺎﺩﻳﻖ ﻧﺼﻮﺹ
ﺍﻟﺒﺤﺚ ،ﻭﺇﺑﻄﺎﻝ ﻋﻤﻞ ﺍﻟﺰﺭ )ﺗﻌﺪﻳﻞ( ،ﻭﺃﺧﻴﺮﺍً ﻋﺮﺽ ﺳﺠﻼﺕ ﺍﻟﺠﺪﻭﻝ :Contacts
ﺻﻔﺤﺔ 49 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﺇﻧﺸﺎﺀ ﺍﻟﺘﻘﺮﻳﺮ
ﺳﺄﻓﺘﺮﺽ– ﻋﺰﻳﺰﻱ – ﺃﻥ ﻭﺣﺪﺓ ﺗﻘﺎﺭﻳﺮ LazReportsﻣﺜﺒﺘﺔ ﻣﻊ ﻧﺴﺨﺔ ﻻﺯﺍﺭﻭﺱ ﺧﺎﺻﺘﻚ.
ﻋﻠﻰ ﺍﻟﻔﻮﺭﻡ ﺍﻟﺮﺋﻴﺴﻲ ،frmMainﻧﻨﻘﺮ ﻓﻮﻕ ﺍﻟﻌﻨﺼﺮ TheReportﻧﻘﺮﺗﻴﻦ ﺳﺮﻳﻌﺘﻴﻦ )ﺃﻭ ﻧﻘﺮﺓ ﻳﻤﻴﻦ
ﻭﺍﺧﺘﻴﺎﺭ (Design reportﻟﻔﺘﺢ ﻣﺼﻤﻢ ﺍﻟﺘﻘﺎﺭﻳﺮ ﻭﺍﻟﺬﻱ ﺳﻴﻜﻮﻥ ﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﺗﺘﻜﻮﻥ ﻧﺎﻓﺬﺓ ﻣﺼﻤﻢ ﺍﻟﺘﻘﺎﺭﻳﺮ ﻣﻦ ﺷﺮﻳﻂ ﺍﻟﻘﻮﺍﺋﻢ ،ﻭﺃﺷﺮﻃﺔ ﺍﻷﺩﻭﺍﺕ ﺍﻷﻓﻘﻴﺔ ﻟﻠﺘﺤﺮﻳﺮ ،ﻭﺷﺮﻳﻂ ﺟﺎﻧﺒﻲ
ﻟﻤﻜﻮﻧﺎﺕ ﺍﻟﺘﻘﺮﻳﺮ.
ﻗﺒﻞ ﺍﻟﺒﺪﺀ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﺘﻘﺮﻳﺮ ﻳﺘﻮﺟﺐ ﺗﻌﺪﻳﻞ ﺧﺼﺎﺋﺺ ﺻﻔﺤﺔ ﺍﻟﺘﻘﺮﻳﺮ ،ﻭﺗﺤﺪﻳﺪ ﺣﺠﻢ ﺍﻟﻮﺭﻕ ،ﻣﻦ ﺧﻼﻝ
ﻓﺘﺢ ﺍﻟﻘﺎﺋﻤﺔ Fileﺛﻢ .Page Options
ﺻﻔﺤﺔ 50 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻳﺘﻢ ﺗﻘﺴﻴﻢ ﺻﻔﺤﺔ ﺍﻟﺘﻘﺮﻳﺮ ﺇﻟﻰ ،Bandsﻭﻛﻞ Bandﻳﺨﺘﺺ ﺑﺠﺰﺋﻴﺔ ﻣﻌﻴﻨﺔ .
ﻓـ Report titleﻣﺜﻼً ﻳﺨﺘﺺ ﺑﻌﻨﻮﺍﻥ ﺍﻟﺘﻘﺮﻳﺮ ،ﺑﻴﻨﻤﺎ Page Headerﻟﺮﺃﺱ ﺍﻟﺼﻔﺤﺔ ..ﻭﻫﻜﺬﺍ.
ﻹﺩﺭﺍﺝ ﺣﻘﻞ ﻓﻲ ﺃﻱ Bandﻧﺴﺘﺨﺪﻡ ﺍﻟﻌﻨﺼﺮ rectangleﻭﺑﺪﺍﺧﻠﻪ ﻧﻜﺘﺐ ﺍﺳﻢ ﺍﻟﺤﻘﻞ ﺑﻴﻦ ﻗﻮﺳﻴﻦ
ﻣﺮﺑﻌﻴﻦ .
][contactName
ﻣﺜﻼً.
ﺻﻔﺤﺔ 51 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﺍﻟﺒﺪﺀ ﻓﻲ ﺍﻟﻌﻤﻞ
;UpdateQuery.Close
;UpdateQuery.DataBase:=conn
;'UpdateQuery.SQL.Text:='SELECT * FROM Contacts
;UpdateQuery.open
;UpdateDataSource.DataSet:=UpdateQuery
ﺑﻌﺪ ﺫﻟﻚ ﻧﺮﺑﻂ ﺑﻴﻦ ﺍﻟـ RepDataSetﻭﻫﻲ Datasetﺧﺎﺻﺔ ﺑﺎﻟﺘﻘﺎﺭﻳﺮ ،ﻣﻊ ﺍﻟـUpdateDataSource
ﻛﻤﺎ ﻳﻠﻲ:
;RepDataset.DataSource:=UpdateDataSource
ﺗﺒﻘﻰ ﺟﺰﺋﻴﺔ ﻋﺮﺽ ﺍﻟﺘﻘﺮﻳﺮ ،ﻟﻜﻨﻨﺎ ﺳﻨﺮﺟﻊ ﻭﻧﻜﺘﺐ ﻛﻮﺩﻫﺎ ﺑﻌﺪ ﺗﺠﻬﻴﺰ ﺍﻟﺘﻘﺮﻳﺮ ﺃﻭﻻً.
ﻧﺨﺘﺎﺭ ﺍﻟـ Bandﻣﻦ ﺷﺮﻳﻂ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻌﻤﻮﺩﻱ ،ﻭﻧﻀﻌﻪ ﻋﻠﻰ ﺍﻟﺼﻔﺤﺔ ،ﻓﺘﻈﻬﺮ ﻧﺎﻓﺬﺓ ﺗﺤﺪﻳﺪ ﺍﻟـBand
ﺍﻟﻤﻄﻠﻮﺏ:
ﺻﻔﺤﺔ 52 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻓﻨﺨﺘﺎﺭ .Page Headerﻓﻴﺘﻢ ﻭﺿﻊ ﺍﻟـ Bandﻋﻠﻰ ﺍﻟﺼﻔﺤﺔ ﻛﻤﺎ ﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﺍﻵﻥ ﻧﻀﻊ ﻣﺮﺑﻊ ﻧﺼﻲ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﺒﺎﻧﺪ ،ﻓﺘﻈﻬﺮ ﻧﺎﻓﺬﺓ ﻟﻠﻜﺘﺎﺑﺔ ﻓﻴﻪ ﻛﻤﺎ ﺍﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﻓﻨﻜﺘﺐ ﻓﻴﻬﺎ ﻣﺜﻼً :ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ ،ﺛﻢ ﻧﻨﻘﺮ ﺍﻟﺰﺭ .Okﻧﻌﺪﻝ ﻧﻮﻉ ﻭﺣﺠﻢ ﺧﻂ ﺍﻟﻤﺮﺑﻊ ﺍﻟﻨﺼﻲ
ﺣﺘﻰ ﻳﻈﻬﺮ ﺑﺸﻜﻞ ﻣﻨﺎﺳﺐ.
ﺻﻔﺤﺔ 53 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻧﻌﻮﺩ ﻟﻤﺼﻤﻢ ﺍﻟﺘﻘﺮﻳﺮ ،ﻧﻀﻊ ﺑﺎﻧﺪ ﺟﺪﻳﺪ ﻣﻦ ﺍﻟﻨﻮﻉ ،Master Dataﻓﺘﻈﻬﺮ ﻧﺎﻓﺬﺓ ﻻﺧﺘﻴﺎﺭ ﻣﺼﺪﺭ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﺍﻟﺘﻲ ﺳﻨﻌﺮﺿﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﺒﺎﻧﺪ ،ﻛﻤﺎ ﺍﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﻟﻦ ﻧﻌﺮﺽ ﺃﻱ ﺷﻲﺀ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﺒﺎﻧﺪ ،ﻭﻟﻜﻦ ﻭﺟﻮﺩﻩ ﺿﺮﻭﺭﻱ ﺣﺘﻰ ﺗﻈﻬﺮ ﺑﻘﻴﺔ ﺃﺟﺰﺍﺀ ﺍﻟﺘﻘﺮﻳﺮ ﻋﻨﺪ ﺍﻟﺘﻨﻔﻴﺬ .
ﻧﻀﻊ ﺑﺎﻧﺪ ﺟﺪﻳﺪ ﻣﻦ ﻧﻮﻉ Detail Headerﻋﻠﻰ ﺻﻔﺤﺔ ﺍﻟﺘﻘﺮﻳﺮ ،ﻧﻨﻘﺮ ﻋﻠﻴﻪ ﻳﻤﻴﻦ ﺛﻢ ﻧﺨﺘﺎﺭ Show on
.all pagesﻧﻀﻊ ﺛﻼﺛﺔ ﻣﺮﺑﻌﺎﺕ ﻧﺼﻴﺔ ﻭﻧﺴﻘﻬﺎ ﻛﻤﺎ ﺑﺎﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﺻﻔﺤﺔ 54 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ SQLITE3ﻓﻲ ﻻﺯﺍﺭﻭﺱ
]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ[
ﻧﻀﻊ ﺑﺎﻧﺪ ﺟﺪﻳﺪ ﻣﻦ ﺍﻟﻨﻮﻉ ،Detail Dataﻓﺘﻈﻬﺮ ﻧﺎﻓﺬﺓ ﻻﺧﺘﻴﺎﺭ ﻣﺼﺪﺭ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺳﻨﻌﺮﺿﻬﺎ ﻓﻲ ﻫﺬﺍ
ﺍﻟﺒﺎﻧﺪ ،ﻛﻤﺎ ﺍﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﻧﻀﻊ ﺛﻼﺛﺔ ﻣﺮﺑﻌﺎﺕ ﻧﺼﻮﺹ ،ﻭﻧﻨﺴﻘﻬﺎ ﺑﺤﻴﺚ ﺗﻈﻬﺮ ﻛﻤﺎ ﻓﻲ ﺍﻟﺼﻮﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ:
ﻧﻌﻮﺩ ﻟﺒﺮﻣﺠﺔ ﺍﻟﺰﺭ ) ﻋﺮﺽ ﺍﻟﺘﻘﺮﻳﺮ( ،ﻭﺗﺤﺖ ﺁﺧﺮ ﺳﻄﺮ ﻓﻴﻪ ﻧﻜﺘﺐ:
;)'TheReport.LoadFromFile('ContactsReport.lrf
;TheReport.ShowReport
ﺍﻟﺴﻄﺮ ﺍﻷﻭﻝ ﻟﺘﺤﺪﻳﺪ ﺍﺳﻢ ﻣﻠﻒ ﺍﻟﺘﻘﺮﻳﺮ ،ﻭﺍﻟﺜﺎﻧﻲ ﻟﻠﺒﺪﺀ ﻓﻲ ﻋﺮﺽ ﺍﻟﺘﻘﺮﻳﺮ ﺃﻣﺎﻡ ﺍﻟﻤﺴﺘﺨﺪﻡ.
;Update_Grid
ﺻﻔﺤﺔ 55 ﺇﻋﺪﺍﺩ /ﻡ .ﺃﺑﻮﺑﻜﺮ ﺷﺮﻑ ﺍﻟﺪﻳﻦ ﺳﻮﻳﺪﺍﻥ -ﻭﻗﻒ ﷲ ﺗﻌﺎﻟﻰ
ﻓﻲ ﻻﺯﺍﺭﻭﺱSQLITE3 ﺑﺮﻣﺠﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ
[]ﺍﻟﺠﺰﺀ ﺍﻟﻌﻤﻠﻲ – ﺑﺮﻧﺎﻣﺞ ﺇﺩﺍﺭﺓ ﺟﻬﺎﺕ ﺍﻻﺗﺼﺎﻝ
UpdateDataSource.DataSet:=UpdateQuery;
RepDataset.DataSource:=UpdateDataSource;
TheReport.LoadFromFile('ContactsReport.lrf');
TheReport.ShowReport;
Update_Grid;
end;