براي ساختن دفتر تلفن همونطور كه تو مباحث قبلي ديديد طرح دستي برنامه رو تهيه كرديم. بعد بر اساس طرح ديتابيس موردنظر رو ساختيم.
ديتابيس ما شامل يك جدول به نام tell با 5 فيلد زير بود:
رديف ( id ) از نوع عددي يا INTEGER و خصوصيت كليد اصلي PRIMARY KEY
نام و نام خانوادگي ( name ) از نوع متني يا CHAR
شماره ثابت ( home ) از نوع عددي يا INTEGER
شماره همراه ( mob ) از نوع عددي يا INTEGER
و آدرس ( address ) از نوع متني يا CHAR
يكي از بخشهاي برنامه دفتر تلفن ما بخش ورود اطلاعات بود. يعني صفحه كه بتونه اطلاعات موردنظر رو دريافت و تو ديتابيس ثبت كنه.
من يه برنامه براي اين منظور آماده كردم بيايد
برنامه پيوست شده رو با جزئياتش بررسي كنيم:
قبل از هر چيزي بايد اشياء مورد نظر رو وارد صفحه اصلي برنامه كنيم.
من يك پلاگين SQLite وارد برنامه ميكنم. 5 تا كادر EditBox براي دريافت مقادير ورودي از كاربر و يك شي متني براي توضيح. دوتا كليد و دو تا اسكريپت
كادر id_editbox براي دريافت رديف استفاده شده و عدد وارد شده رو تو متغيري به نام $id ثبت ميكنه
كادر name_editbox براي دريافت نام و نام خانوادگي استفاده شده و عبارت وارد شده رو تو متغيري به نام $name ثبت ميكنه
كادر home_editbox و mob_editbox براي دريافت شماره ثابت و شماره همراه استفاده شده اعداد وارد شده رو به ترتيب تو متغيرهايي به نام $home و $mob ثبت ميكنه
و كادر address_editbox براي دريافت آدرس استفاده شده و عبارت وارد شده رو تو متغيري به نام $address ثبت ميكنه
كليد add براي اضافه كردن داده هاي ما به ديتابيس استفاده ميشه. اين كليد دستورات اسكريپت add_record رو اجرا خواهد كرد.
كليد reset براي زماني استفاده ميشه كه قصد داشته باشيم اطلاعاتي كه تو كادرهاي EditBox نوشتيم رو پاك كنيم.
در زمان اجراي برنامه ابتدا با دستوري كه تو page start نوشتيم:
کد:
[COLOR="Navy"][B]RunScript[/B][/COLOR]("initialization")
دستورات اسكريپت initialization اجرا خواهند شد.
پس اول اين دستورات رو بررسي ميكنيم:
کد:
[B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","SQLiteInit")
[B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Initialized")
[COLOR=Blue]If [/COLOR](Initialized = 1) [COLOR=Blue]Then[/COLOR]
db_path$ =[COLOR=DarkRed] '<SrcDir>\mytelldb.db'[/COLOR]
[B][COLOR=Navy]PluginSet[/COLOR][/B]("SQL_Plugin","db_path$")
[B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","GetDBFileName")
[B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","OpenSQLDB")
[B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Opened")
[COLOR=Blue]If [/COLOR](Opened = 0) [COLOR=Blue]Then[/COLOR]
[B][COLOR=Navy]Message[/COLOR][/B]("","Unable To open database")
[COLOR=Navy]Exit[/COLOR]()
[COLOR=Blue]End[/COLOR]
[COLOR=Blue]Else[/COLOR]
[B][COLOR=Navy]Message[/COLOR][/B]("","Unable To initialize SQLite plugin")
[B][COLOR=Navy]Exit[/COLOR][/B]()
[COLOR=Blue]End[/COLOR]
ميدونيد كه هميشه در زمان كار با پلاگين SQLite اول بايد اين پلاگين رو راه اندازي كرد.
پس طبق معمول تو خط اول با دستور SQLiteInit اين پلاگين رو راه اندازي ميكنيم
تو خط بعدي با PluginGet مقدار بازگشتي از اين دستور رو تو متغيري به نام Initialized ثبت ميكنيم. در صورتي كه پلاگين به درستي راه اندازي شده باشه مقدار Initialized = 1 خواهد بود.
پس با يك شرط اون رو چك ميكنيم.
در صورتي كه مقدار Initialized = 1 نباشه يعني پلاگين به درستي راه اندازي نشده. پس برنامه پيغام خطاي عدم موفقيت راه اندازي صادر ميكنه و بلافاصله با دستور Exit از برنامه خارج ميشه.
(البته اين بسته به ميل شماست كه دستور Exit رو استفاده كنيد يا نه يا هر دستور ديگه اي به جاي اون استفاده كنيد.)
اما اگه مقدار Initialized = 1 باشه يعني پلاگين به درستي راه اندازي شده پس ميتونيم مراحل بعدي رو طي كنيم.
بعد از راه اندازي پلاگين نوبت باز كردن ديتابيس ماست.
من آدرس ديتابيس رو تو متغير رشته اي به نام $db_path ريختم و با PluginSet اين آدرس رو به پلاگين ارسال كردم. با دستور GetDBFileName و OpenSQLDB ديتابيس خودم رو باز كردم.
آيا ديتابيس به درستي باز شده؟ اين نكته رو ميشه با PluginGet بدست آورد و با يك شرط چك كرد.
PluginGet نتيجه اجراي دستور بالا رو تو متغيري به نام Opened ثبت ميكنه.
اگه ديتابيس به درستي باز شده باشه مقدار Opened بايد مخالف صفر باشه. تو شرطي كه من نوشتم اگه مقدار Opened = 0 باشه يعني ديتابيس به درستي باز نشده پس يك پيغام خطا صادر ميشه و با دستور Exit از برنامه خارج ميشيم.
(البته بازهم اينجا استفاده از اين دستور به نظر خودتون بستگي داره.)
خب تا اينجا پلاگين راه اندازي شد و ديتابيس ما هم باز شد.
نوبت ميرسه به اضافه كردن اطلاعاتمون. يادتون هست كه گفتيم اطلاعات مورد نظر رو بايد با دستور INSERT INTO به ديتابيس صادر كنيم تا به صورت ركورد در جدولمون ثبت بشه؟
اطلاعات ما اينجا شامل 5 بخش رديف، نام و نام خانوادگي، شماره ثابت، شماره همراه و آدرس هست.
پس اين اطلاعات رو به ترتيب تو كادرهاي EditBox كه ايجاد كرديم وارد ميكنيم. با كليك كردن روي دكمه ثبت اطلاعات دستورات اسكريپت add_record اجرا خواهند شد. اين اسكريپت براي ارسال داده هاي ما به ديتابيس نوشته شده.
بيايد دستورات اين اسكريپت رو بررسي كنيم:
کد:
[COLOR=Blue]If [/COLOR](id$=[COLOR=Black]''[/COLOR] | name$='' | home$='' | mob$='' | address$='') [COLOR=Blue]Then[/COLOR]
[B][COLOR=Navy]Message[/COLOR][/B]("","Error : You must fill all blank box")
[B][COLOR=Navy]Return[/COLOR][/B]()
[COLOR=Blue]End[/COLOR]
sql_query1$ =[COLOR=DarkRed] 'INSERT INTO tell (id,name,home,mob,address)'[/COLOR]
sql_query2$ =[COLOR=DarkRed] ' VALUES '[/COLOR]+id$+[COLOR=DarkRed]',"'[/COLOR]+name$+[COLOR=DarkRed]'",'[/COLOR]+home$+[COLOR=DarkRed]','[/COLOR]+mob$+[COLOR=DarkRed]',"'[/COLOR]+address$+[COLOR=DarkRed]'");'[/COLOR]
query$ = sql_query1$ + sql_query2$
[B][COLOR=Navy]PluginSet[/COLOR][/B]("SQL_Plugin","query$")
[B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","UpdateDB")
[B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","update")
[B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","DBError")
[B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Error$")
[COLOR=Blue]If [/COLOR](update<>0) [COLOR=Blue]Then[/COLOR]
[B][COLOR=Navy]Message[/COLOR][/B]("","Your record has been saved successfully")
[COLOR=Blue]Else[/COLOR]
[B][COLOR=Navy]Message[/COLOR][/B]("","Error$")
[B][COLOR=Navy]Return[/COLOR][/B]()
[COLOR=Blue]End[/COLOR]
[COLOR=Green]*****************[/COLOR]
temp$=[COLOR=DarkRed]''[/COLOR]
[B][COLOR=Navy]LoadText[/COLOR][/B]("id_editbox","temp$")
[B][COLOR=Navy]LoadText[/COLOR][/B]("name_editbox","temp$")
[B][COLOR=Navy]LoadText[/COLOR][/B]("home_editbox","temp$")
[B][COLOR=Navy]LoadText[/COLOR][/B]("mob_editbox","temp$")
[B][COLOR=Navy]LoadText[/COLOR][/B]("address_editbox","temp$")
قبل از هر چيزي من با يك شرط چك كردم كه آيا محتويات تمام EditBox ها پر شده يا نه.
اگه مقدار $id يا $name يا $home يا $mob يا $address تهي باشه يعني يكي از اون كادرها هنوز پر نشده.
پس يك پيغام خطا صادر ميشه كه ميگه بايد تمام كادرها تكميل بشن و بلافاصله با دستور Return از ادامه عمليات اين اسكريپت جلوگيري ميشه.
اما اگه محتواي تمام كادرها پر شده باشه دستورات بعد از شرط به ترتيب اجرا خواهند شد.
حتما ميدونيد كه براي كار با پلاگين SQLite لازمه دستورات به زبان SQL رو تو متغيرهاي رشتهاي بريزيم و بعد مقدار متغير رو به پلاگين ارسال و دستور مربوطه رو اجرا كنيم.
دستور ثبت اطلاعات در ركوردهاي جدول به زبان SQL اين صورت بود:
کد:
INSERT INTO tablename (field 1, field 2, field 3, …) VALUE (value 1, value 2, value 3, …);
من تو متغير رشتهاي sql_query1$ بخش اول اين دستور يعني دستور، نام جدول و نام فيلدهاي جدول رو ثبت كردم.
کد:
sql_query1$ =[COLOR=DarkRed] 'INSERT INTO tell (id,name,home,mob,address)'[/COLOR]
تو بخش دوم اين دستور هم مقاديري كه از كادرهاي EditBox بدست ميان رو بعنوان مقادير فيلدها تو يك متغير رشتهاي ديگه به نام sql_query2$ ثبت كردم.
کد:
sql_query2$ =[COLOR=DarkRed] ' VALUES '[/COLOR]+id$+[COLOR=DarkRed]',"'[/COLOR]+name$+[COLOR=DarkRed]'",'[/COLOR]+home$+[COLOR=DarkRed]','[/COLOR]+mob$+[COLOR=DarkRed]',"'[/COLOR]+address$+[COLOR=DarkRed]'");'[/COLOR]
فرض كنيد ما اين اطلاعات رو تو كادرهاي EditBox وارد كرده باشيم:
کد:
id = 1
name = evil_gates
home = 1234567
mob = 09151234567
address = زمين آسيا ايران پلاك 10
در اين صورت مقدار متغير sql_query2$ برابر با اين رشته خواهد شد:
کد:
VALUE (1, "evil_gates", 123456789, 09151234567, "زمين آسيا ايران پلاك 10");
تو اين عبارت دقت كنيد كه evil_gates و زمين آسيا ايران پلاك10 درون يك جفت دابل كوتيشين (
" " ) محصور شدن اما اعدادي كه مربوط به فيلد رديف و شماره ثابت و شماره همراه بودن به تنهايي درون رشته قرار گرفتن.
دليل اين امر اين بوده كه چون نوع داده فيلدهاي name و address از نوع متني يا CHAR هستند بنابراين مقداري كه درون اين فيلدها بايد ثبت بشه بايد درون يك جفت دابل كوتيشن قرار بگيره تا تمايز اون با داده هاي عددي رو مشخص كنه.
بعد از اين دو خط به كمك يك متغير رشتهاي ديگه به نام $query مقدار دو متغير $sql_query1 و $sql_query2 رو با هم جمع كردم تا دستور INSERT INTO كامل بشه.
در واقع مقدار $query عبارت زير خواهد شد:
کد:
INSERT INTO tell (id,name,home,mob,address) VALUE (1, "evil_gates", 123456789, 09151234567, "زمين آسيا ايران پلاك 10");
حالا من يك دستور به زبان SQL دارم كه يك ركورد با مقادير موردنظر به جدول tell ديتابيس من اضافه ميكنه.
با PluginSet مقدار متغير رشتهاي $query رو به پلاگين ارسال ميكنم. و با دستور UpdateDB دستور مربوطه رو تو پلاگين اجرا ميكنم.
نتيجه اضافه شدن ركورد مورد نظر به ديتابيس خواهد بود.
ميتونيم صحت اين نتيجه رو بررسي كنيم. نتيجه حاصل از دستور بالا تو متغيري به update ثبت ميشه كه با PluginGet بدست مياد.
با يك شرط چك ميكنيم كه آيا مقدار update <> 0 هست يا خير. اگه مقدار متغير مخالف صفر بود يعني اطلاعات به درستي ثبت شده. پس برنامه يك پيغام موفقيت صادر ميكنه و به سراغ دستورات بعد از شرط ميره.
اما اگه مقدار update = 0 باشه يعني در ثبت اطلاعات خطايي به وجود اومده. براي اينكه بدونيم چه خطايي با دستور DBError خطا رو پيدا ميكنيم و با PluginGet تو متغيري به نام $Error ميريزيم.
من تو خط بعدي با دستور Message مقدار $Error رو نمايش ميدم تا خطاي مورد نظر رو ببينم. و بلافاصله با دستور Return از انجام عمليات بعدي اسكريپت جلوگيري ميكنم.
اگه اطلاعات به درستي ثبت بشه و شرط ما هم اين مسئله رو تاييد كنه برنامه سراغ دستورات بعد از شرط ميره.
کد:
temp$=[COLOR=DarkRed]''[/COLOR]
[B][COLOR=Navy]LoadText[/COLOR][/B]("id_editbox","temp$")
[B][COLOR=Navy]LoadText[/COLOR][/B]("name_editbox","temp$")
[B][COLOR=Navy]LoadText[/COLOR][/B]("home_editbox","temp$")
[B][COLOR=Navy]LoadText[/COLOR][/B]("mob_editbox","temp$")
[B][COLOR=Navy]LoadText[/COLOR][/B]("address_editbox","temp$")
بر اي اينكه بعد از ثبت يك ركورد برنامه آماده ثبت ركوردهاي جديد بشه لازمه كه كادرهاي EditBox خالي و آماده دريافت اطلاعات بشن.
من يك متغير خالي به نام $temp ايجاد ميكنم و مقدارش رو با دستور LoadText تو كادرهاي EditBox نمايش ميدم. درواقع به اين روش كادرها رو خالي ميكنم.
از همين كدها براي كليد بازنويسي (reset) هم ميشه استفاده كرد تا در هر زماني كه مايل بوديم محتواي كادرهاي EditBox رو خالي كنيم.
خب دوستان با روشي كه تا اينجا يادگرفتيم ركوردهاي مختلفي رو تو ديتابيس ثبت كنيد تا تو مباحث بعدي روشهاي جستجو، بازيابي، ويرايش و حذف اطلاعات رو بررسي كنيم.