آموزش قدم به قدم پلاگين SQLite

evil_gates

اين نيز بگذرد ...
پي نوشت:

ظاهرا بعضي از دوستان تو دانلود و extract فايلهاي پيوست شده مشكل داشتن در حالي كه من چندين بار خودم اين فايلها رو دانلود و اجرا كردم.

دوستان ديگه‌اي كه اين مبحث رو دنبال ميكنن اگه تونستن به درستي تمام فايلها رو دانلود كنن يا مشكلي با دانلود داشتن لطفا تو پيام خصوصي بگن تا بتونيم منبع مشكل رو بررسي كنيم.

ممنون و موفق باشيد
 

evil_gates

اين نيز بگذرد ...
تو مثال جستجو قبلي بر اساس شرطي كه تو دستور SELECT نوشته بوديم:
کد:
sql_query$ = [COLOR=DarkRed]'SELECT * FROM tell WHERE name LIKE "'[/COLOR] + search$ + [COLOR=DarkRed]'";'[/COLOR]
عبارتي كه تو كادر جستجو نوشته ميشه بايد دقيقا برابر با مقدار فيلد name جدول باشه تا ركوردي بدست بياد. مثلا اگه تو كادر جستجو عبارت ali نوشته بشه فقط يك ركورد تو جدول وجود داره كه فيلد name اون برابر با ali هست.

پس نتيجه جستجو فقط يك ركورد خواهد بود.

اما اگه ركوردهاي ديگه اي هم وجود داشته باشه كه فيلد name اونها ali باشه ! يا اگه دستور SELECT رو تغيير بديم جوري كه عبارتهاي مشابه بيشتري رو پيدا كنه ! مثلا دستور بالا رو به اين شكل تغيير بديم:
کد:
sql_query$ =[COLOR=DarkRed] 'SELECT * FROM tell WHERE name LIKE "%' [/COLOR]+ search$ +[COLOR=DarkRed] '%";'[/COLOR]
يعني انتخاب كن در جدول هر ركوردي رو كه فيلد name اون شبيه به ali و عبارتهاي مشابه ali هستند.

در اينصورت نتيجه جستجو بيشتر از يك ركورد خواهد بود. اما با توجه به كدهايي كه تو مثال قبلي ديديم فقط فيلدهاي يك ركورد قابل نمايش هست.

چطور ميتونيم ركوردهاي ديگه حاصل از جستجو رو هم نمايش بديم؟

من براي حل اين مشكل كمي كدهاي مثال قبلي رو تغيير دادم و همونطور كه تو تصوير زير ميبينيد دوتا كليد و يك اسكريپت جديد هم به برنامه اضافه كردم.

attachment.php


حالا ميتونيم طبق روال قبلي ركوردي كه تو جستجو بدست اومده رو نمايش بديم همچنين ركوردهاي بعدي رو هم با كليد Next جايگزين ركورد فعلي كنيم و نمايش بديم يا براي بازگشت به ركورد قبلي با كليد Back يك ركورد به عقب برگرديم.

در واقع نتيجه جستجو هر چندتا ركورد كه باشه يكي يكي اونا رو نمايش خواهيم داد.

فايل پيوست شده رو دانلود و اجرا كنيد تا تغييرات جديد رو بررسي كنيم:

اسكريپت initialization چون فقط وظيفه راه اندازي پلاگين و بازكردن ديتابيس رو داره و كار ديگه اي انجام نميده بنابراين تغييري هم نكرده.

اما در اسكريپتsearch
کد:
sql_query$ =[COLOR=DarkRed] 'SELECT * FROM tell WHERE name LIKE "%'[/COLOR] + search$ +[COLOR=DarkRed] '%";'[/COLOR]
[B][COLOR=Navy]PluginSet[/COLOR][/B]("SQL_Plugin","sql_query$")
[B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","Query")
[B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Result$")
[B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Rows")
[COLOR=Blue]If [/COLOR](Rows>0) [COLOR=Blue]Then[/COLOR]
  [COLOR=Blue]For [/COLOR]i=1 [COLOR=Blue]To [/COLOR]Rows
    record$[i]=[COLOR=Blue]GetArrayItem[/COLOR](Result$,[COLOR=DarkRed]'#'[/COLOR],i)
    record$[i]=record$[i]+[COLOR=DarkRed]'|'[/COLOR]
  [COLOR=Blue]Next [/COLOR]i
  i=1
  [COLOR=Blue]For [/COLOR]j=1 [COLOR=Blue]To [/COLOR]5
    field$[j]=[COLOR=Blue]GetArrayItem[/COLOR](record$[i],[COLOR=DarkRed]'|'[/COLOR],j)
  [COLOR=Blue]Next [/COLOR]j
[COLOR=Blue]Else[/COLOR]
  [B][COLOR=Navy]Return[/COLOR][/B]()
[COLOR=Blue]End[/COLOR]
[B][COLOR=Navy]LoadText[/COLOR][/B]("id_text","field$[1]")
[B][COLOR=Navy]LoadText[/COLOR][/B]("name_text","field$[2]")
[B][COLOR=Navy]LoadText[/COLOR][/B]("home_text","field$[3]")
[B][COLOR=Navy]LoadText[/COLOR][/B]("mob_text","field$[4]")
[B][COLOR=Navy]LoadText[/COLOR][/B]("address_text","field$[5]")
تو خط اول كه دستور SELECT نوشته شده من كاراكتر ( % ) رو به ابتدا و انتهاي متغير $search اضافه كردم تا بازه جستجو گسترش پيدا كنه.

فرض كنيد عبارتي كه تو كادر جستجو نوشته شده ali هست بنابراين دستور SELECT به اينصورت به پلاگين ارسال خواهد شد:
کد:
SELECT * FROM tell WHERE name LIKE "%ali%";
يادآوري ميكنم كه اين كاراكتر باعث ميشه تو جدول هر ركوردي كه فيلد name اون شبيه به مقدار متغير موردنظر ما باشه انتخاب بشه

اگه كاراكتر ( % ) رو فقط در انتهاي متغير $search اضافه كنيم يعني چيزي شبيه به اين رشته:
کد:
SELECT * FROM tell WHERE name LIKE "ali%";
تمامي ركوردهايي كه فيلد name اونها با عبارت ali آغاز ميشن جستجو و بازيابي ميشه ( يعني ركوردهاي ali و alireza )

يا اگه كاراكتر ( % ) رو فقط به ابتداي متغير $search اضافه كنيم يعني چيزي شبيه به اين رشته:
کد:
SELECT * FROM tell WHERE name LIKE "%ali";
تمامي ركوردهايي كه فيلد name اونها به عبارت ali ختم ميشن جستجو و بازيابي خواهد شد ( يعني ali و amirali )

قبلا راجع به اين كاراكتر توضيحاتي رو ديديم. اينجا صرفا براي يادآوري نكاتي رو گفتم. برگرديم به بحث اصلي خودمون:

تو خط اول با اضافه كردن كاراكتر ( % ) بازه جستجو گسترش پيدا ميكنه و عبارتهاي مشابهي كه در جدول وجود دارن هم بازيابي خواهند شد.

من تو خطوط بعدي اين دستور رو به پلاگين ارسال و اجرا ميكنم و نتيجه تو متغيري به نام $Result ثبت خواهد شد.

همچنين با PluginGet و متغير Rows ميشه فهميد كه چندتا ركورد پيدا شده.

با يك شرط به برنامه ميگم اگه ركوردي پيدا شده يعني اگه Rows>0 هست بنابراين حلقه اول يعني حلقه i رو اجرا كن:
کد:
[COLOR=Blue]For [/COLOR]i=1 [COLOR=Blue]To [/COLOR]Rows
  record$[i]=[COLOR=Blue]GetArrayItem[/COLOR](Result$,[COLOR=DarkRed]'#'[/COLOR],i)
  record$[i]=record$[i]+[COLOR=DarkRed]'|'[/COLOR]
[COLOR=Blue]Next [/COLOR]i
قبلا ديديم كه تو اين حلقه و با دستور GetArrayItem ركوردها از هم تفكيك ميشن و تو متغير آرايه اي [record$[i ثبت ميشن.

و همونطور كه قبلا هم گفتيم چون لازمه براي تفكيك فيلدهاي ركوردها مخصوصا فيلد آخر يك كاراكتر ( | ) به انتهاي ركورد بدست اومده اضافه بشه بنابراين بلافاصله با اين دستور:
کد:
record$[i]=record$[i]+[COLOR=DarkRed]'|'[/COLOR]
اين كاراكتر رو به انتهاي ركورد اضافه ميكنم.

اگه فرض كنيم كه عبارت موردنظر ما براي جستجو ali هست. خروجي اين حلقه نتيجه زير خواهد شد:
کد:
record$[1] = 3|ali|02100004561|09120003834|تهران|
record$[2] = 5|amirali|03410005885|09130008270|كرمان|
record$[3] = 7|alireza|02610002217|09120003003|كرج|
در اينجا ما سه تا ركورد داريم كه بايد به ترتيب اونا رو نمايش بديم.

من براي اينكه اولين ركورد رو نمايش بدم تو خط بعدي متغير i=1 قرار ميدم.

بنابراين وقتي بگيم [record$[i يعني [record$[1 و حلقه دوم يعني حلقه j رو براي تفكيك فيلدهاي اين ركورد مينويسم:
کد:
[COLOR=Blue]For [/COLOR]j=1 [COLOR=Blue]To [/COLOR]5
  field$[j]=[COLOR=Blue]GetArrayItem[/COLOR](record$[i],[COLOR=DarkRed]'|'[/COLOR],j)
[COLOR=Blue]Next [/COLOR]j
تو اين اين حلقه با همون دستور GetArrayItem فيلدهاي ركورد اول رو تفكيك ميكنم و تو متغير آرايه اي به نام [field$[j ثبت ميكنم. خروجي اين حلقه نتيجه زير خواهد شد:
کد:
field$[1] = 3
field$[2] = ali
field$[3] = 02100004561
field$[4] = 09120003834
field$[5] = تهران
همونطور كه قبلا هم ديديم ميتونيم با دستور LoadText اين فيلدها رو تو شي متني مربوطه نمايش بديم.


براي اينكه ركوردهاي بعدي رو نمايش بدم كليدهاي Next و Back و يك اسكريپت به نام other_record به برنامه اضافه ميكنم.

حتما حدس ميزنيد براي نمايش ركورد دوم چه كاري بايد انجام بديم؟

آره فقط كافيه به مقدار i يك واحد اضافه كنيم يعني i=i+1 و باز به همون ترتيب قبلي با يك حلقه فيلدهاي ركورد موردنظر رو تفكيك و نمايش بديم.

تو اسكريپت other_record اين حلقه براي تفكيك فيلدها و دستور LoadText براي نمايش مقادير فيلدها در شي متني نوشته شده:
کد:
[COLOR=Blue]For [/COLOR]j=1 [COLOR=Blue]To [/COLOR]5
  field$[j]=[COLOR=Blue]GetArrayItem[/COLOR](record$[i],[COLOR=DarkRed]'|'[/COLOR],j)
[COLOR=Blue]Next [/COLOR]j
[B][COLOR=Navy]LoadText[/COLOR][/B]("id_text","field$[1]")
[B][COLOR=Navy]LoadText[/COLOR][/B]("name_text","field$[2]")
[B][COLOR=Navy]LoadText[/COLOR][/B]("home_text","field$[3]")
[B][COLOR=Navy]LoadText[/COLOR][/B]("mob_text","field$[4]")
[B][COLOR=Navy]LoadText[/COLOR][/B]("address_text","field$[5]")
هربار كه اين اسكريپت اجرا بشه با توجه به مقدار i حلقه مقدار متغير [record$[i رو تفكيك ميكنه نمايش ميده

اما اينكه چطور به برنامه بگيم متغير i چه عددي هست و چه ركوردي بايد انتخاب بشه با استفاده از كدهايي كه تو كليدهاي Next و Back نوشتيم اين كار رو انجام ميديم.

من تو كليد Next اين كد رو نوشتم:
کد:
[COLOR=Blue]If [/COLOR](i < Rows) [COLOR=Blue]Then[/COLOR]
  i=i+1
  [B][COLOR=Navy]RunScript[/COLOR][/B]("other_record")
[COLOR=Blue]End[/COLOR]
همونطور كه ميبينيد كافيه بنويسيم i=i+1 تا يك واحد به متغير i اضافه بشه و بلافاصله اسكريپت other_record رو اجرا كنيم.

دراينصورت چون i=1 بوده يك واحد به اون اضافه ميشه و i=2 ميشه پس محتواي ركورد دوم تفكيك، و همينطور به ازاي هربار كليك كردن رو اين كليد اين عمليات براي ركوردهاي بعدي تكرار خواهد شد.

اما من اين دستورات رو تو يك شرط قرار دادم. ميتونيد بگيد چرا؟

فرض كنيد نتيجه جستجو 3 تا ركورد باشه. ولي ما 10 بار اين كليد كليك كنيم. بنابراين مقدار i=10 خواهد شد اما آيا ما 10 تا ركورد داريم؟

براي جلوگيري از اين اشتباه كه متغير i مقدار زيادي نگيره شرطي رو مينويسيم كه در صورتي كه مقدار i<Rows بود اين عمليات انجام بشه.

در صورتي كه i مساوي يا بزرگتر از Rows باشه بنابراين بعد از اون ركوردي وجود نداره كه بخواد تفكيك بشه پس دليلي نداره كه عمليات ما اجرا بشه.

ما با كليد Next ركوردهاي بعدي رو نمايش ميديم اما اگه بخوايم برگرديم و ركوردهاي قبلي رو مجددا نمايش بديم چطور؟

كافيه از i يك واحد كم كنيم تا بشه ركورد قبلي رو هم مجددا بدست آورد.

من اين كد رو براي كليد Back نوشتم تا بتونم يك ركورد به عقب برگردم:
کد:
[COLOR=Blue]If [/COLOR](i>1) [COLOR=Blue]Then[/COLOR]
  i=i-1
  [B][COLOR=Navy]RunScript[/COLOR][/B]("other_record")
[COLOR=Blue]End[/COLOR]
با توجه به توضيحاتي كه بالاتر گفتم حتما ميتونيد بگيد كه اين كدها چه معنايي دارن و چه خروجي حاصل ميشه.

عمليات جستجو و نمايش نتايج ميتونه روشهاي ديگه اي هم داشته باشه. در ادامه اون روشها رو هم بررسي ميكنيم.
 

پیوست ها

  • p3.jpg
    p3.jpg
    193.5 کیلوبایت · بازدیدها: 672
  • tell2.zip
    743.2 کیلوبایت · بازدیدها: 683
آخرین ویرایش:

evil_gates

اين نيز بگذرد ...
يكي ديگه از روشهاي جستجو نمايش اطلاعات براي دسترسي بهتر ميتونه اضافه كردن يك ليست به كادر جستجو باشه.

من يه ليست به كادر جستجو اضافه ميكنم تا به محض اينكه كاراكتري رو تو كادر جستجو وارد كرديم تمام كلمات مشابه تو ليست نمايش داده بشه. بعد با انتخاب كلمه موردنظر از ليست جستجو دقيقتر انجام بشه و نتيجه بدست بياد.

جزئيات برنامه پيوست شده رو بررسي ميكنيم:

attachment.php


در واقع به همون برنامه جستجو كه تو پستهاي قبلي ديديم يك شي ListBox و يك اسكريپت اضافه شده.

من نام ليست باكس رو CBK_Menu انتخاب كردم. اين ليست باكس در حالت عادي مخفي هست و فقط زماني كه كاراكتري تو كادر جستجو وارد بشه نمايش داده ميشه. به همين دليل اين نام رو انتخاب كردم تا اگه خارج از محدوده ليست باكس كليك كرديم اين ليست مخفي بشه.

براي اينكه عمليات نمايش اطلاعات در ليست باكس در هر زماني كه كاراكتري تو كادر جستجو وارد شد انجام بشه من يه اسكريپت به نام listbox ايجاد كردم و نام اين اسكريپت رو تو قسمت Optional Action كادر جستجو اضافه كردم.

attachment.php


دستورات اسكريپت listbox شامل:
کد:
sql_query$ = [COLOR=DarkRed]'SELECT name FROM tell WHERE name LIKE "%'[/COLOR] + search$ +[COLOR=DarkRed] '%";'[/COLOR]
[B][COLOR=Navy]PluginSet[/COLOR][/B]("SQL_Plugin","sql_query$")
[B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","Query")
[B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Result$")
[B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Rows")
[COLOR=Blue]If [/COLOR](Rows>0) [COLOR=Blue]Then[/COLOR]
  [B][COLOR=Navy]Show[/COLOR][/B]("CBK_Menu")
  [B][COLOR=Navy]ListBoxDeleteItem[/COLOR][/B]("CBK_Menu","-1")
  [COLOR=Blue]For [/COLOR]i=1 [COLOR=Blue]To [/COLOR]Rows
    record$[i]=[COLOR=Blue]GetArrayItem[/COLOR](Result$,'#',i)
    [B][COLOR=Navy]ListBoxAddItem[/COLOR][/B]("CBK_Menu","record$[i]")
  [COLOR=Blue]Next [/COLOR]i
[COLOR=Blue]Else[/COLOR]
  [B][COLOR=Navy]Hide[/COLOR][/B]("CBK_Menu")
[COLOR=Blue]End[/COLOR]
چون تو اين برنامه مبناي جستجو در ديتابيس نام و نام خانوادگي هست بنابراين اگه من تو كادر جستجو عبارتي رو وارد كنم كافيه فقط تو فيلد name جدول به دنبال عبارت موردنظر بگرديم و نتايج مشابه رو بدست بياريم.

تو خط اول اين اسكريپت :
کد:
sql_query$ =[COLOR=DarkRed] 'SELECT name FROM tell WHERE name LIKE "%'[/COLOR] + search$ + [COLOR=DarkRed]'%";'[/COLOR]
يعني انتخاب كن تمام name ها رو از جدول tell به شرطي كه مقدار متغير $search شبيه به فيلد name باشه.

همونطور كه ميدونيد با اين دستور پلاگين فقط مقدار فيلد name ركوردي كه پيدا ميشه رو برميگردونه نه تمام فيلدهاي ركورد.

اين دستور رو به پلاگين ارسال و اجرا ميكنيم و نتيجه تو متغير $Result بدست مياد.

فرض كنيد عبارت ali رو كادر جستجو وارد كرديم. نتيجه اي كه تو $Result بدست اومده رشته زير خواهد بود:
کد:
ali#amirali#alireza#
همونطور كه ميبينيد فقط فيلد name ركوردهاي 3 و 5 و 7 تو اين متغير ثبت شده.

پس با يك حلقه و يك متغير آرايه اي اين رشته رو تفكيك ميكنيم. و با دستور ListBoxAddItem نتيجه رو به ليست باكس اضافه ميكنيم.

تو دستورات داخل شرط در صورتي كه شرط صحيح باشه يعني ركوردي پيدا بشه ابتدا با دستور Show ليست باكس كه مخفي بود ظاهر ميشه.

بعد با دستور ListBoxDeleteItem و پارامتر 1- تمامي آيتم هاي ليست باكس حذف ميشه.

اين دستور زماني مفيد هست كه قصد داشته باشيم عبارات مختلفي رو جستجو كنيم. هربار در شروع عمليات جستجو و ثبت نتايج اول تمام آيتمهايي كه مربوط به جستجو قبل بود حذف ميشه و ليست باكس خالي آماده دريافت نتايج جديد خواهد شد.

تو خط بعدي با حلقه i و دستور GetArrayItem عمليات تفكيك رشته بدست اومده شروع ميشه و بلافاصله با دستور ListBoxAddItem نتيجه به ليست باكس اضافه ميشه.

اگه فرض بالا رو در نظر بگيريم (يعني عبارت ali رو جستجو كنيم) بنابراين در پايان حلقه ليست باكس 3 تا آيتم رو نمايش ميده كه به ترتيب ali – amirali – alireza هستند.

اما اگه شرط صحيح نباشه يعني جستجو نتيجه اي نداشته باشه ليست باكس با دستور Hide مخفي ميشه.

تا اينجا عبارتهاي مشابه تو ليست باكس بدست اومد. حالا نوبت اينه كه اگه رو آيتمي در ليست باكس كليك كرديم ركورد معادل اون عبارت بدست بياد و نتيجه تو شي متني مربوطه نمايش داده بشه.

براي اين منظور تو قسمت Action شي ليست باكس بايد دستوراتي رو بنويسيم:
کد:
[B][COLOR=Navy]ListBoxGetSelectedItems[/COLOR][/B]("CBK_Menu","Items$,ItemsNum$,#,NumItems")
x=[COLOR=Blue]LEN[/COLOR](Items$)
Items$ = [COLOR=Blue]StrDel[/COLOR](Items$,x,1)
[B][COLOR=Navy]Hide[/COLOR][/B]("CBK_Menu")
[B][COLOR=Navy]LoadText[/COLOR][/B]("search_ed","Items$")
[B][COLOR=Navy]RunScript[/COLOR][/B]("search")
تو خط اول اين كد با دستور ListBoxGetSelectedItems آيتمي كه كاربر انتخاب ميكنه دريافت ميشه.

مثلا اگه كاربر رو آيتم شماره 2 ليست باكس كليك كنه (يعني عبارت amirali) اين كلمه دريافت و تو متغيري به نام $Item ثبت ميشه.

نكته ظريفي وجود داره كه اگه دقت نكنيم ممكنه در نتيجه جستجو تاثير زيادي داشته باشه.

اين دستور عبارت amirali رو بر ميگردونه اما به انتهاي اون يك كاراكتر # هم اضافه ميكنه. (يعني #amirali) كه اين مطلوب ما نيست. ما فقط عبارت amirali رو لازم داريم.

بنابراين بايد اون كاراكتر اضافه انتهاي كلمه رو حذف كنيم.

براي حل اين مشكل من ابتدا با تابع LEN طول كلمه موردنظر رو بدست ميارم و تو متغيري به نام x ثبت ميكنم.

تو خط بعدي با StrDel كاراكتري كه در محل x قرار داره يعني آخرين كاراكتر كلمه موردنظر رو حذف ميكنم و نتيجه رو تو همون متغير $Item ثبت ميكنم.

اين دو تابع از توابع رشته اي هستن كه تو صفحات دوم و سوم اين آموزش راجع بهشون مطالبي رو يادگرفتيم.

بعد از اينكه كلمه موردنظر رو از كاراكتر اضافه پاك كردم با دستور Hide ليست باكس رو مخفي ميكنم و با دستور LoatText مقدار متغير $Item كه همون كلمه انتخاب شده ما (يعني amirali) هست رو تو كادر جستجو نمايش ميدم.

حالا فقط كافيه اسكريپت search رو اجرا كنم و نتيجه رو ببينم.

با دستورات اين اسكريپت تو پستهاي قبلي به طور مفصل آشنا شديم.
 

پیوست ها

  • tell3.zip
    743.3 کیلوبایت · بازدیدها: 569
  • p4.jpg
    p4.jpg
    194.6 کیلوبایت · بازدیدها: 671
  • p5.jpg
    p5.jpg
    102.3 کیلوبایت · بازدیدها: 654
آخرین ویرایش:

evil_gates

اين نيز بگذرد ...
تا اينجا مبناي تمام جستجوهاي ما نام و نام خانوادگي بود. اما اگه قصد داشته باشيم آيتم هاي ديگه اي رو هم مدنظر قرار بديم براي جستجو چطور؟

مثلا جستجو بر اساس شماره تلفن ثابت يا همراه !

راه حل پيشنهادي من اينه كه اول تعيين كنيم جستجو بر چه اساسي هست و بعد متناسب با انتخاب نوع جستجو دستور SELECT رو تغيير بديم و به پلاگين ارسال كنيم.

من تو برنامه اي كه پيوست كردم با استفاده از اين راه حل امكان جستجو بر اساس نام و نام خانوادگي يا شماره تلفن رو فراهم كردم.

جزئيات اين برنامه رو بررسي ميكنيم:

attachment.php


تو اين برنامه كه در واقع همون برنامه جستجو و نمايش اطلاعات قبلي هست يك شي متني به نام select_title براي عنوان و توضيحات و سه تا شي دايره اضافه شده.

دايره اول به نام select_name و دايره دوم به نام select_tell كه با كليك روي هر كدوم دايره سوم كه به نام circle هست به مركز دايره مربوطه منتقل ميشه.

درواقع من با اين ترفند سعي كردم Radio button بسازم.

شما فقط ميتونيد يكي از گزينه ها رو انتخاب كنيد يعني جستجو بر اساس نام يا جستجو بر اساس شماره تماس رو انتخاب كنيد.

چون دستور SELECT بر اساس نام با شماره تماس كمي تفاوت داره بنابراين به محض كليك كردن روي يكي از دايره ها كدي اجرا ميشه و متناسب با اون كد دستور SELECT هم تغيير ميكنه.

چه كدي؟

دايره اول يعني select_name رو انتخاب و كدهاي داخل اين كليد رو بررسي ميكنيم:
کد:
[B][COLOR=Navy]MoveObject[/COLOR][/B]("circle","152,30")
select_field=1
temp$=[COLOR=DarkRed]''[/COLOR]
[B][COLOR=Navy]LoadText[/COLOR][/B]("search_ed","temp$")
تو خط اول اين كد دايره كوچكتر يعني circle رو با دستور MoveObject به محل موردنظر يعني مركز دايره اصلي منتقل ميكنيم.

يك متغير به نام select_field در نظر ميگيريم و عدد 1رو تو اين متغير ثبت ميكنيم.

يك متغير رشته اي ديگه به نام $temp هم در نظر ميگيريم و مقدارش رو تهي قرار ميديم. و با دستور LoadText مقدار اين متغير رو تو كادر جستجو نمايش ميديم. درواقع به اينصورت كادر جستجو رو خالي ميكنيم.

كدهاي دايره دوم يعني select_tell رو هم بررسي ميكنيم:
کد:
[B][COLOR=Navy]MoveObject[/COLOR][/B]("circle","67,30")
select_field=2
temp$=[COLOR=DarkRed]''[/COLOR]
[B][COLOR=Navy]LoadText[/COLOR][/B]("search_ed","temp$")
تنها تفاوتي كه كدهاي اين دايره با قبلي داره در محل جابجايي circle هست كه مركز دايره دوم منتقل ميشه و مقدار متغير select_field كه معادل عدد 2 هست.

حالا نوبت به بررسي كدهاي اسكريپت هايي هست كه تو برنامه قرار داديم.

اسكريپت initialization طبق معمول فقط براي راه اندازي پلاگين و باز كردن ديتابيس استفاده ميشه.

تو اسكريپت listbox خط اول رو كه دستور SELECT براي عمليات جستجو در ديتابيس تو يك متغير رشته اي قرار داشت رو با دوتا شرط عوض مي‌كنيم.
کد:
[COLOR=Blue]If [/COLOR](select_field=1) [COLOR=Blue]Then[/COLOR]
  sql_query$ = [COLOR=DarkRed]'SELECT name FROM tell WHERE name LIKE "%'[/COLOR] + search$ +[COLOR=DarkRed] '%";'[/COLOR]
[COLOR=Blue]End[/COLOR]
[COLOR=Blue]If [/COLOR](select_field=2) [COLOR=Blue]Then[/COLOR]
  sql_query$ = [COLOR=DarkRed]'SELECT home FROM tell WHERE home='[/COLOR] + search$ +[COLOR=DarkRed] ';'[/COLOR]
[COLOR=Blue]End[/COLOR]
اگه كاربر دايره اول يعني select_name رو انتخاب كرده باشه يعني قصد داره جستجو بر اساس نام و نام خانوادگي انجام بشه. بنابراين مقدار متغير select_field=1 خواهد بود پس شرط اولي محقق ميشه.

تو اين شرط دستور SELECT براي جستجو در فيلد name نوشته شده كه تو متغير رشته اي $sql_query ثبت ميشه.

اما اگه كاربر دايره دوم يعني select_tell رو انتخاب كرده باشه يعني قصد داره جستجو بر اساس شماره تلفن انجام بشه. بنابراين مقدار متغير select_field=2 خواهد بود پس شرط دوم محقق ميشه.

تو اين شرط دستور SELECT براي جستجو در فيلد home كه همون شماره تلفن ثابت ديتابيس بود تو متغير رشته اي $sql_query ثبت ميشه.

نكته قابل ذكر تو اين قسمت اينه كه چون جستجو بر اساس اعداد هست و از طرفي ميدونيم كه به طور طبيعي هيچ دو شماره تلفن كاملا مشابهي نميتونه وجود داشته باشه و چون نوع داده فيلد home عددي هست، تو شرط دستور SELECT از عملگر مساوي استفاده ميكنيم و ميگيم انتخاب كن ركورد رو به شرطي كه فيلد home مساوي متغير $search باشه.

تو خطوط بعد از اين شرطها طبق معمول اول مقدار متغير به پلاگين ارسال و اجرا ميشه و ساير عمليات كه تفكيك نتايج بدست اومده و نمايش و ... هست انجام ميشه.

با اين دستورات تو مثالهاي قبلي آشنا شديم.

همين شرط ها (اما با يك تفاوت خيلي كوچك كه همون حذف كاراكتر % هست. دليلش رو حتما ميدونيد ديگه؟!) تو اسكريپت search هم نوشته ميشن تا در صورت انتخاب آيتم موردنظر كاربر از ليست باكس عمليات جستجو در ركوردهاي جدول انجام بشه و نتيجه صحيح بدست بياد.

در پايان اين كد رو هم به دستورات Page Start اضافه ميكنيم:
کد:
select_field=1
بايد بتونيد بگيد چه دليلي براي اين كار هست؟!

در ادامه، مباحث ويرايش و حذف داده ها از جدول رو بررسي ميكنيم.
 

پیوست ها

  • tell4.zip
    743.7 کیلوبایت · بازدیدها: 518
  • p6.jpg
    p6.jpg
    198.4 کیلوبایت · بازدیدها: 645
آخرین ویرایش:

evil_gates

اين نيز بگذرد ...
براي ويرايش اطلاعات جدول اول بايد ركوردي انتخاب بشه و بعد فيلدهاي ركورد رو تغيير و مجددا نتيجه رو تو جدول ثبت كنيم.

تو برنامه پيوست شده عمليات ويرايش اطلاعات در جدول رو بررسي ميكنيم:

attachment.php


اين برنامه در واقع همون برنامه جستجو هست كه تو پستهاي قبلي بررسي كرديم و فقط بخش ويرايش اطلاعات بدست اومده به اون اضافه شده.

گروهي به نام edit_group داريم كه شامل يك شي مربع براي پشت زمينه، تعدادي كادر EditBox براي ورود اطلاعات، كليد ثبت اطلاعات و بازگشت و يك اسكريپت به نام edit_record هست.

گروه edit_group در حالت عادي مخفي هست و با كليد ويرايش (edit_key) نمايش داده ميشه.

قبل از اينكه اين كليد گروه ويرايش اطلاعات رو نمايش بده لازمه ركوردي كه قصد داريم ويرايش كنيم رو جستجو و اطلاعاتش رو نمايش بديم.

اگه جستجو صحيح باشه و ركورد موردنظر بدست بياد، همونطور كه ميدونيد نتيجه جستجو تفكيك ميشه و تو متغير آرايه اي به نام [field$[i ثبت ميشه.

بنابراين بعد از جستجو متغير [field$[i حتما مقداري خواهد داشت.

كدهاي كليد ويرايش رو بررسي ميكنيم:
کد:
[COLOR=Blue]If [/COLOR](field$[1]<>[COLOR=DarkRed]''[/COLOR]) [COLOR=Blue]Then[/COLOR]
  [B][COLOR=Navy]Show[/COLOR][/B]("edit_group")
  [B][COLOR=Navy]LoadText[/COLOR][/B]("name_editbox","field$[2]")
  [B][COLOR=Navy]LoadText[/COLOR][/B]("home_editbox","field$[3]")
  [B][COLOR=Navy]LoadText[/COLOR][/B]("mob_editbox","field$[4]")
  [B][COLOR=Navy]LoadText[/COLOR][/B]("address_editbox","field$[5]")
[COLOR=Blue]Else[/COLOR]
  [B][COLOR=Navy]Message[/COLOR][/B]("","Error: you must select a record")
[COLOR=Blue]End[/COLOR]
قبل از هر چيزي براي اينكه مطمئن بشيم جستجويي انجام شده و ركوردي بدست اومده با يك شرط چك ميكنيم كه آيا متغير آرايه اي [field$[1 كه شماره رديف ركورد موردنظر درونش ثبت شده واقعا مقداري داره يا تهي هست.

اگه مقدار اين متغير تهي باشه يعني نتيجه جستجو صحيح بدست نيومده يا اصلا جستجويي صورت نگرفته بنابراين نميشه چيزي رو ويرايش كرد. اما اگه مقدار اين متغير مخالف تهي باشه يعني عمليات جستجو صحيح بود و ركورد موردنظر هم بدست اومده و فيلدهاي اين ركورد همونطور كه تو پستهاي قبلي هم ديديم با يك حلقه تفكيك شدن.

پس اگه مقدار متغير مخالف تهي باشه دستورات داخل شرط اجرا ميشه اما اگه مقدار متغير تهي باشه پيغام خطايي مبتني بر اينكه اول بايد ركوردي انتخاب بشه صادر ميشه.

دستورات داخل شرط به ما كمك ميكنن تا آماده ويرايش اطلاعات بشيم

من با دستور Show گروه ويرايش رو كه مخفي بودن نمايش ميدم.

مثل صفحه ورود اطلاعات جديد كه قبلا ديديم ما تو اين گروه چهارتا كادر EditBox براي دريافت نام و نام خانوادگي، شماره تلفن ثابت، شماره تلفن همراه و آدرس داريم.

پس به ترتيب مقدار متغيرهاي آرايه اي زير رو با دستور LoadText به كادر مربوطه ارسال ميكنم

[Field$[2 مقدار نام و نام خانوادگي ركورد موردنظر رو تو خودش ثبت كرده پس مقدار اين متغير به كادر name_editbox صادر ميشه
[Field$[3 مقدار شماره تلفن ثابت ركورد موردنظر رو تو خودش ثبت كرده پس مقدار اين متغير به كادر home_editbox صادر ميشه
[Field$[4 مقدار شماره تلفن همراه ركورد موردنظر رو تو خودش ثبت كرده پس مقدار اين متغير به كادر mob_editbox صادر ميشه
[Field$[5 مقدار آدرس ركورد موردنظر رو تو خودش ثبت كرده پس مقدار اين متغير به كادر address_editbox صادر ميشه

وقتي گروه ويرايش نمايش داده ميشه ميبينيد كه تو كادرهاي EditBox همون فيلدهايي كه تو جستجو بدست اومده بود نمايش داده ميشه.

ميتونيم عبارت داخل اين كادرها رو تغيير بديم و با كليد ثبت اطلاعات ( set_record ) اين اطلاعات رو جايگزين اطلاعات قبلي ركورد موردنظر كنيم.

عبارت داخل كادر name_editbox تو متغيري به نام $name ثبت ميشه

عبارت داخل كادر home_editbox تو متغيري به نام $home ثبت ميشه

عبارت داخل كادر mob_editbox تو متغيري به نام $mob ثبت ميشه

و عبارت داخل كادر address_editbox تو متغيري به نام $address ثبت ميشه

كليد ويرايش (set_record) دستورات اسكريپت edit_record رو اجرا ميكنه.

کد:
msg$=[COLOR=DarkRed]'Do you really want to edit this record?,4'[/COLOR]
[B][COLOR=Navy]MessageEx[/COLOR][/B]("","msg$")
[COLOR=Blue]If [/COLOR](CBK_MsgEx=6) [COLOR=Blue]Then[/COLOR]
  sql_query$=[COLOR=DarkRed]'UPDATE tell SET name="'[/COLOR]+name$+[COLOR=DarkRed]'", home='[/COLOR]+home$+[COLOR=DarkRed]', mob='[/COLOR]+mob$+[COLOR=DarkRed]', address="'[/COLOR]+address$+[COLOR=DarkRed]'" WHERE id='[/COLOR]+field$[1]+[COLOR=DarkRed]';'[/COLOR]
  [B][COLOR=Navy]PluginSet[/COLOR][/B]("SQL_Plugin","sql_query$")
  [B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","UpdateDB")
  [B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","update")
  [COLOR=Blue]If [/COLOR](update=1) [COLOR=Blue]Then[/COLOR]
    [B][COLOR=Navy]Message[/COLOR][/B]("","ok")
  [COLOR=Blue]Else[/COLOR]
    [B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","DBError")
    [B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Error$")
    [B][COLOR=Navy]Message[/COLOR][/B]("","Error$")
  [COLOR=Blue]End[/COLOR]
[COLOR=Blue]End[/COLOR]
قبل از اينكه اطلاعات ركورد ويرايش بشه بايد از انجام اين عمليات مطمئن بشيم.

به همين خاطر من پيغامي مبني بر اينكه آيا واقعا قصد ويرايش اطلاعات را داريد رو به كمك MessageEx صادر ميكنم.

اين پيغام همونطور كه ميبينيد تو يك متغير رشته‌اي به نام $msg همراه با پارامتر ( 4, ) ثبت ميشه و دستور MessageEx مقدار اين متغير رو نمايش ميده.

در واقع من يك پيام با دوتا كليد No و Yes صادر ميكنم كه اگه كليد Yes انتخاب بشه يعني ما واقعا قصد ويرايش اطلاعات رو داريم. پارامتر ( 4, ) تو اين دستور به همين دليل مورد استفاده قرار ميگيره تا پيغامي با كليدهاي No و Yes بسازه.

چطور ميتونيم متوجه بشيم كه كليد Yes تو پنجره پيغام انتخاب شده؟

هر كليدي كه تو اين پنجره پيغام انتخاب بشه عددي رو تو متغيري به نام CBK_MsgEx ثبت ميكنه. براي كليد Yes عدد 6 ثبت خواهد شد.

بنابراين اگه يك شرط داشته باشيم تا بررسي كنه كه آيا مقدار CBK_MsgEx = 6 هست يا نه به هدفمون رسيديم. پس در صورتي كه اين شرط برقرار باشه يعني كليد Yes انتخاب شده و برنامه بايد اطلاعات ركورد موردنظر رو تو ديتابيس ويرايش كنه.

دستورات داخل شرط:

براي ويرايش ركوردها تو SQL دستوري به نام UPDATE داشتيم

شكل كلي اين دستور به اين صورت بود:
کد:
UPDATE tablename SET field1=value1, field2=value2, field3=value3, … WHERE condition ;
همونطور كه ميدونيد تو اين اين دستور به جاي tablename نام جدول، به جاي field ها و value ها فيلد موردنظر و مقدار فيلد و به جاي condition هم شرط موردنظر رو وارد ميكنيم.

تو خط اول من اين دستور رو به متغير رشته‌اي $sql_query ارسال ميكنم.
کد:
sql_query$=[COLOR=DarkRed]'UPDATE tell SET name="'[/COLOR]+name$+[COLOR=DarkRed]'", home='[/COLOR]+home$+[COLOR=DarkRed]', mob='[/COLOR]+mob$+[COLOR=DarkRed]', address="'[/COLOR]+address$+[COLOR=DarkRed]'" WHERE id='[/COLOR]+field$[1]+[COLOR=DarkRed]';'[/COLOR]
اين دستور در جدول tell در ركوردي كه فيلد رديف (id) با مقدار متغير [field$[1 برابر باشه (يعني همون ركورد موردنظري كه در جستجو بدست اومده)، مقدار متغير $name رو در فيلد name ، مقدار متغير $home رو در فيلد home ، مقدار متغير $mob رو در فيلد mob و مقدار متغير $address رو در فيلد address قرار ميده.

اين دستور ويرايش اطلاعات به زبان SQL بود كه طبق معمول بايد به پلاگين ارسال و اجرا بشه.

بنابراين من با دستور PluginSet مقدار متغير $sql_query رو به پلاگين ارسال ميكنم.

تو خط بعد با دستور UpdateDB دستور رو اجرا ميكنم.

اطلاعات موردنظر تو ديتابيس ويرايش ميشه و ميشه نتيجه رو با دستور PluginGet تو متغيري به نام update بدست آورد.

اگه اطلاعات ما به درستي ويرايش شده باشه مقدار update = 1 خواهد بود.

من ميتونم با يك شرط چك كنم كه آيا update = 1 هست يا نه.

در صورتي كه شرط صحيح باشه پيغام موفقيت صادر ميشه اما اگه شرط صحيح نباشه يعني در ثبت ركورد خطايي رخ داده.

من ميتونم با دستور DBError خطاي موردنظر رو بدست بيارم و تو متغير رشته‌اي به نام $Error بريزم و با دستور Message مقدار اين متغير كه همون خطاي به وجود اومده هست رو نمايش بدم.

تا اينجا اطلاعات ما ويرايش و ثبت شد.

براي بازگشت به حالت قبل هم از كليد بازگشت (cancel_key) استفاده ميكنم.

توي اين كليد دو خط كد نوشته شده.

خط اول با دستور Hide گروه ويرايش رو مجددا مخفي ميكنم و تو خط دوم با دستور RunScript اسكريپت search رو اجرا ميكنيم تا عمليات جستجو و نمايش اطلاعات مجددا انجام بشه و نتيجه جديد نمايش داده بشه.

ادامه دارد ...
 

پیوست ها

  • p7.jpg
    p7.jpg
    222.6 کیلوبایت · بازدیدها: 643
  • tell5.zip
    746.7 کیلوبایت · بازدیدها: 575

evil_gates

اين نيز بگذرد ...
براي حذف اطلاعات از جدول هم مثل ويرايش اطلاعات اول لازمه ركوردي رو انتخاب كنيم و بعد دستور حذف رو به زبان SQL به پلاگين ارسال و اجرا كنيم.

تو برنامه پيوست شده من يك كليد و يك اسكريپت براي حذف اطلاعات موردنظر اضافه كردم:

attachment.php


مثل كليد ويرايش كه ابتدا با يك شرط چك ميكنيم كه آيا ركوردي انتخاب شده يا نه. تو كليد حذف هم همين شرط رو تكرار ميكنيم:
کد:
[COLOR=Blue]If [/COLOR](field$[1]<>[COLOR=DarkRed]''[/COLOR]) [COLOR=Blue]Then[/COLOR]
  [B][COLOR=Navy]RunScript[/COLOR][/B]("delete_record")
[COLOR=Blue]Else[/COLOR]
  [B][COLOR=Navy]Message[/COLOR][/B]("","Error: you must select a record")
[COLOR=Blue]End[/COLOR]
در صورتي كه مقدار متغير [field$[1 كه همون فيلد رديف ركوردي بود كه تو جستجو بدست اومده مخالف تهي باشه يعني عمليات جستجو به درستي انجام شده و نتيجه اي بدست اومده. پس دستورات اسكريپت delete_record اجرا خواهند شد.

اما اگه مقدار اين متغير تهي باشه يعني نتيجه موردنظر تو جستجو بدست نيومده يا اصلا جستجويي انجام نشده. پس يك پيغام خطا صادر ميشه.

اگه نتيجه شرط بالا صحيح باشه دستورات اسكريپت delete_record براي حذف ركورد موردنظر اجرا خواهند شد:
کد:
msg$=[COLOR=DarkRed]'Do you really want to delete this record?,4'[/COLOR]
[B][COLOR=Navy]MessageEx[/COLOR][/B]("","msg$")
[COLOR=Blue]If [/COLOR](CBK_MsgEx=6) [COLOR=Blue]Then[/COLOR]
  sql_query$=[COLOR=DarkRed]'DELETE FROM tell WHERE id='[/COLOR]+field$[1]+[COLOR=DarkRed]';'[/COLOR]
  [B][COLOR=Navy]PluginSet[/COLOR][/B]("SQL_Plugin","sql_query$")
  [B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","UpdateDB")
  [B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","update")
  [COLOR=Blue]If [/COLOR](update=1) [COLOR=Blue]Then[/COLOR]
    [B][COLOR=Navy]Message[/COLOR][/B]("","Your record has been deleted successfully")
    temp$=[COLOR=DarkRed]''[/COLOR]
    [B][COLOR=Navy]LoadText[/COLOR][/B]("id_text","temp$")
    [B][COLOR=Navy]LoadText[/COLOR][/B]("name_text","temp$")
    [B][COLOR=Navy]LoadText[/COLOR][/B]("home_text","temp$")
    [B][COLOR=Navy]LoadText[/COLOR][/B]("mob_text","temp$")
    [B][COLOR=Navy]LoadText[/COLOR][/B]("address_text","temp$")
    [B][COLOR=Navy]LoadText[/COLOR][/B]("search_ed","temp$")
  [COLOR=Blue]Else[/COLOR]
    [B][COLOR=Navy]PluginRun[/COLOR][/B]("SQL_Plugin","DBError")
    [B][COLOR=Navy]PluginGet[/COLOR][/B]("SQL_Plugin","Error$")
    [B][COLOR=Navy]Message[/COLOR][/B]("","Error$")
  [COLOR=Blue]End[/COLOR]
[COLOR=Blue]End[/COLOR]
در اينجا باز هم مثل اسكريپت ويرايش ابتدا براي اطمينان از انجام عمليات حذف پيغامي رو با MessageEX صادر ميكنيم و با يك شرط چك ميكنيم كه آيا كليد Yes انتخاب ميشه يا نه. توضيحات مربوط به اين كدها رو تو پست قبلي و ويرايش اطلاعات به طور مفصل ديديم.

اگه شرط CBK_MsgEx = 6 صحيح باشه يعني تو پنجره پيغام كليد Yes انتخاب شده باشه پس دستور حذف ركورد به زبان SQL رو در متغير رشته‌اي $sql_query قرار ميديم و مقدار اين متغير رو به پلاگين ارسال ميكنيم.

يادتون مياد شكل كلي اين دستور رو؟
کد:
DELETE FROM tablename WHERE condition ;
در قسمت tablename نام جدول و در قسمت condition شرط موردنظر رو مينويسيم.

بنابراين:
کد:
sql_query$=[COLOR=DarkRed]'DELETE FROM tell WHERE id='[/COLOR]+field$[1]+[COLOR=DarkRed]';'[/COLOR]
دستور بالا ميگه حذف كن ركورد رو از جدول tell جايي كه فيلد id برابر با مقدار [field$[1 هست. (مقدار اين متغير همون رديف موردنظر هست)

اين دستور رو با PluginSet به پلاگين ارسال ميكنيم و بازهم با دستور UpdateDB اون رو اجرا ميكنيم.

نتيجه اين عمليات حذف ركورد موردنظر هست.

اگه ركورد به درستي حذف شده باشه ميشه نتيجه رو با PluginGet تو متغيري به نام update برگردوند.

من باز هم طبق معمول با يك شرط چك ميكنم كه آيا مقدار update=1 هست يا نه (يعني آيا ركورد به درستي حذف شده يا نه)

در صورتي كه شرط صحيح باشه پيغامي مبني بر موفقيت حذف ركورد صادر ميكنم و تو خط بعدي متغير رشته‌اي رو به نام $temp معادل تهي قرار ميدم.

بعد با دستور LoadText مقدار اين متغير رو تو شي متني مربوط به نمايش فيلدها و همينطور كادر جستجو فراخواني ميكنم.

در واقع چون ركورد جاري حذف شده سعي ميكنم كه تمام اطلاعاتي كه در حال نمايش هستند رو پاك كنم و همينطور كادر جستجو رو خالي كنم تا آماده دريافت اطلاعات جديد بشه.

اما اگه شرط برقرار نشه يعني ركورد به درستي حذف نشده باشه. اين به معناي اين هست كه خطايي در عمليات رخ داده. پس باز طبق معمول با دستور DBError خطا رو بدست ميارم و تو متغير $Error ثبت ميكنم و با دستور Message مقدار اين متغير رو نمايش ميدم تا بتونم بفهمم چه خطايي در زمان حذف رخ داده.


خب دوستان اينم از حذف ركوردها.

:cool:
 

پیوست ها

  • tell6.zip
    747 کیلوبایت · بازدیدها: 617
  • p8.jpg
    p8.jpg
    209.4 کیلوبایت · بازدیدها: 615

evil_gates

اين نيز بگذرد ...
آنچه تا اينجا گذشت:

1- با زبان SQL آشنا شديم.

2- با دستوراتي كه با پلاگين‌ها سر و كار دارن و همينطور توابع رشته‌اي و آرايه‌اي آشنا شديم.

3- يادگرفتيم چطور ميشه يك ديتابيس جديد همراه با جداول و فيلدهاي مختلف ساخت.

4- چطور ميشه برنامه اي ساخت كه بتونه در هر زماني به سرعت و با چندتا كليك ساده ديتابيس جديدي رو بسازه.

5- چطور ميشه برنامه اي ساخت كه ركوردهايي رو در ديتابيس ثبت كنه.

6- چطور ميشه تو ديتابيس جستجو كرد و نتيجه موردنظر رو بدست آورد.

7- چطور ميشه ركوردهايي رو تو ديتابيس ويرايش يا حذف كرد.

ميبينيد كه پلاگين SQLite اونقدرا هم كه ظاهرش نشون ميده سخت و پيچيده نيست.

اين پلاگين يك سري دستورات انگشت شمار داره كه با تركيب دستورات SQL ميتونه يك بانك اطلاعاتي جامع و كامل در كنار برناممون قرار بده و نيازهاي ما رو برطرف كنه.

(اتفاقي كه بارها و بارها در طول آموزش افتاد و ديديم كه بسياري از كدها و دستورات بسيار ساده بودن و تكراري)

مسئله اصلي تو كار با اين پلاگين ايده و الگوريتم شما براي ساختن يك برنامه مبتني بر بانك اطلاعاتي هست.

همونطور كه تو اولين پست اين آموزش هم گفتم ميشه با يك الگوريتم مطلوب پايه هاي يك برنامه بزرگ رو بر دوش بانك‌هاي اطلاعاتي گذاشت و كارهاي غير ممكني رو انجام داد.

ما با يك دفتر تلفن كار با اين پلاگين رو شروع كرديم اما الان به جرات ميشه گفت كه ميتونيم بانكهاي اطلاعاتي متنوعي مبتني بر پلاگين SQLite رو بسازيم.

تو اين مرحله پيشنهاد ميكنم دوستاني كه اين مباحث رو دنبال ميكردن اگه مشكلاتي در طول كار با اين پلاگين داشتن مطرح كنن تا با كمك هم بررسي كنيم.

ضمن اينكه براي تمرين بيشتر پيشنهاد ميكنم برنامه ديگه‌اي مبتني بر اين پلاگين شروع كنيم به ساختن. دوستان پيشنهاد اينكه چه برنامه‌اي رو كار كنيم بدن تا با نظرسنجي برنامه بعدي رو مشخص كنيم.

از دوست خوبم جناب silvercover به خاطر ارائه اين پلاگين پركاربرد و راهنماييهاشون در طول اين آموزش ممنونم.

و از طرف خودم و دوست عزيزم جناب nevercom كه كمك زيادي در تكميل اين آموزش دارن، ممنونيم از همه دوستاني كه با صبر و حوصله اين مباحث رو دنبال كردن و البته اگه كاستي تو فرايند آموزش مشاهده شد به بزرگواري خودشون و كم سوادي بنده ببخشن.

موفق باشيد.

:rose:
 
آخرین ویرایش:

blue-rays

New Member
سلام.:)
ميخواستم بدونم چطور ميشه يه عكس رو در ديتابيس ذخيره و فراخواني كرد. اصلآ همچين كاري امكان داره؟

يه موضوع ديگه اينكه من يه برنامه نوشتم كه نوشته هاش و فونتاش به كل تو ويندوز 7 بهم ميريزه با اينكه همش tahoma هستش و اين اتفاق در مورد اطلاعات فراخواني شده از ديتابيس هم رخ ميده!! نميدونم شايد مشكل از پلاگين ليست باشه كه از UO استفاده كردم كه كار جناب Freeman بود فكر ميكنم.

ممنون ميشم راهنمايي كنيد
 

evil_gates

اين نيز بگذرد ...
سلام.:)
ميخواستم بدونم چطور ميشه يه عكس رو در ديتابيس ذخيره و فراخواني كرد. اصلآ همچين كاري امكان داره؟

يه موضوع ديگه اينكه من يه برنامه نوشتم كه نوشته هاش و فونتاش به كل تو ويندوز 7 بهم ميريزه با اينكه همش tahoma هستش و اين اتفاق در مورد اطلاعات فراخواني شده از ديتابيس هم رخ ميده!! نميدونم شايد مشكل از پلاگين ليست باشه كه از UO استفاده كردم كه كار جناب Freeman بود فكر ميكنم.

ممنون ميشم راهنمايي كنيد

دوست عزيز

امكان ثبت يك عكس تو ديتابيس وجود نداره. راه حل پيشنهادي اينه كه مسير عكس موردنظر تو ديتابيس ذخيره كنيد و بعد همين مسير رو از ديتابيس بخونيد و عكس رو نمايش بديد.

ثبت خود عكس تو ديتابيس فرايند پيچيده‌اي داره كه فكر ميكنم قبلا دوستان در همين زمينه سوال پرسيدن و پاسخش داده شده.

مشكلتون فكر نميكنم ربطي به پلاگين SQLite داشته باشه. لطفا سورس فايلتون رو در صورت امكان قرار بديد تا بهتر مشكلش رو بررسي كنيم.

ضمن اينكه قبلا من يه مشكل شبيه به اين داشتم و اونم وقتي بود كه اطلاعات ثبت شده تو ديتابيسم رو ميخواستم ويرايش كنم.

بعد از ويرايش تمام اطلاعات تو ديتابيسم بهم ريخته ميشد.

اون ديتابيس رو به طور كامل پاك كردم و يك ديتابيس جديد ساختم و اين مشكل رفع شد ولي دليلش رو هيچوقت نفهميدم كه چرا اون ديتابيس قبلي چنين مشكلي به وجود اومد براش. :wink:
 

Pensive-pith

Active Member
سلام دوسته عزیز
چرا نمیشه تو برنامتون ویرایش کرد بعدش با mmb وقتی برنامرو باز می کنم میگه Unable To open database
و اینکه فایل SQLite.dll میشه بدید.
 

evil_gates

اين نيز بگذرد ...
سلام دوسته عزیز
چرا نمیشه تو برنامتون ویرایش کرد بعدش با mmb وقتی برنامرو باز می کنم میگه Unable To open database
و اینکه فایل SQLite.dll میشه بدید.

دوست عزيز
منظورتون رو از ويرايش متوجه نميشم. شما چه نوع ويرايشي ميخوايد انجام بديد كه امكانش رو نداريد؟

پيغام Unable To open database ميگه كه برنامه در زمان اجرا نميتونه ديتابيس رو باز كنه. اين ممكنه به اين دليل باشه كه ديتابيس تو مسيري كه برنامه قصد داره از اونجا ديتابيس رو باز كنه قرار نداره.

اگه تو كدهاي اسكريپت initialization دقت كرده باشيد ميبينيد كه من از ماكرو SrcDir استفاده كردم و ديتابيس رو كنار برنامه قرار دادم. و از اونجايي كه احتمالا شما سورس برنامه رو تو mmb باز ميكنيد و run رو ميزنيد چون فايل player كنار برنامه قرار نداره ماكرو SrcDir اينجا به درستي عمل نميكنه و آدرس ديتابيس صحيح خونده نميشه.

بنابراين ميتونيد 1- آدرس ديتابيس رو اصلاح و آدرس مستقلي رو براي ديتابيستون قرار بديد. يا 2- سورس فايل رو تو همون مسيري كه قرار داره كامپايل كنيد و فايل كامپايل شده رو اجرا كنيد. 3- از منوي Tools گزينه Designer Setting رو انتخاب كنيد و تو پنجره مربوطه گزينه ...Run External player رو انتخاب كنيد بعد مسير پوشه‌اي كه فايل شما قرار داره رو بديد و Ok كنيد تا يك Player خارجي تو همون مسير ساخته بشه.

در مورد سوال آخرتون هم ميتونيد از اين مبحث نسخه 1.1 پلاگين SQLite رو دانلود كنيد:

http://forum.majidonline.com/showpost.php?p=758527&postcount=1ژ

موفق باشيد
 

Pensive-pith

Active Member
سلام دوستان
من یه سوال داشم
مثلا من یه db دارم که توش اطلاعاتی مثه جدول زیر:
attachment.php


حالا می خوام همین جدولو در mmb نشون بدم. منظورم اینه که با استفاده از پلاگین Liste view اطلاعات dbرو مثه عکس بالا نشون بدم
اگه از دوستان یکی بلده ممنون میشم به ما هم یاد بده
 

پیوست ها

  • p1.jpg
    p1.jpg
    52.2 کیلوبایت · بازدیدها: 390
آخرین ویرایش:
  • Like
Reactions: pcj

evil_gates

اين نيز بگذرد ...
سلام دوستان
من یه سوال داشم
مثلا من یه db دارم که توش اطلاعاتی مثه جدول زیر:
attachment.php


حالا می خوام همین جدولو در mmb نشون بدم. منظورم اینه که با استفاده از پلاگین Liste view اطلاعات dbرو مثه عکس بالا نشون بدم
اگه از دوستان یکی بلده ممنون میشم به ما هم یاد بده

دوست عزيز

تو مثالي كه جناب silvercover تو اين مبحث گذاشتن نمونه كاملي براي سوال شما وجود داره.

http://forum.majidonline.com/t111891-p758527.html#post758527
 

Pensive-pith

Active Member
  • Like
Reactions: pcj

evil_gates

اين نيز بگذرد ...
دوست عزيز
شما پيوستي كه تو لينك دانلود پلاگين SQLite توسط جناب silvercover تهيه شده رو دانلود كرديد؟

http://forum.majidonline.com/attachment.php?attachmentid=26381&d=1230563251

تو اين پيوست يك مثال هست به نام sample1 كه تو صفحه آخر اون يك List view هست و اطلاعات ديتابيس رو نمايش ميده. اون مثال (مخصوصا دستورات اسكريپت ShowInListView) رو با دقت بررسي كنيد
 

Pensive-pith

Active Member
بابت جواب های که دادین ممنونم دوسته عزیز
حالا یه سوال از پلاگین List View دارم چطوری میشه سطر بالای جدول برداشتو مثه عکس زیر:
attachment.php

بالاشو بردارم بشه مثه عکس پایین:
attachment.php
 

پیوست ها

  • 2.jpg
    2.jpg
    30.5 کیلوبایت · بازدیدها: 386
  • 1.jpg
    1.jpg
    25.8 کیلوبایت · بازدیدها: 386
  • Like
Reactions: pcj

evil_gates

اين نيز بگذرد ...
دوست عزيز

اول اينكه اين مبحث به طور خاص در مورد پلاگين SQLite صحبت ميكنه و اگه سوالاتتون در زمينه پلاگين‌هاي ديگه‌اي هست لطفا تو مباحث ديگه‌اي سوالتون رو پيگيري كنيد.

ضمنا ازتون ميخوام پست‌هايي كه محتوي خاصي نداره (سوال يا آموزش) رو حذف كنيد تا دوستان ديگه‌اي كه پستهاي اين بخش رو دنبال ميكنن راحتتر بتونن از مطالب استفاده كنن.

ممنون از همكاريتون

اما درمورد سوالتون عرض ميكنم خير امكان حذف عنوان رو نداريد. البته ميتونيد اون قسمت رو خالي بزاريد يعني جاي نام ستون رو خالي بزاريد تا عنواني درج نشه :

کد:
set$=' ,90, 1'
PluginSet("ListViewPlugIn","set$")
PluginRun("ListViewPlugIn","ListViewCreateColumn")

البته اگه از پلاگين UO استفاده كنيد ميتونيد با دستور LVShowHeaders عنوان ليستتون رو حذف كنيد:
کد:
set$='false'
PluginSet("UOPlugin","set$")
PluginRun("UOPlugin","LVShowHeaders")
 
آخرین ویرایش:

Amit13

Well-Known Member
سلام
نرم افزار sqlite database browser ‎‏ از زبان فارسي پشتيباني نميكنه?

نرم افزار راحت كه فارسي هم داشته باشه,واسه پلاگين نداريم?
 

جدیدترین ارسال ها

بالا