Fa یه سوال در مورد جستجو با پلاگین sqlite

aryana2500

Active Member
باسلام
لطفا یکی از اساتید محترم راهنمای کنه
یه پروژه داریم که اطلاعاتش توسط پلاگین sqlite ذخیره و فراخوانی میشه یه مشکل توی سرچ کردن دارم مشکل اینجاست که اگه مثلا جستجو بر اساس نام خانوادگی باشه اگه دو نفر با نام خانوادگی یکسان ذخیره شوند ولی سایر اطلاعات از جمله id اونها با هم تفاوت داشته باشه وقتی از لیست انتخاب میکنیم فقط اطلاعات شخصی رو نمایش میده که بعد از همه ثبت شده حتا اگه گزینه های قبلی که نام خانوادگی مشابه دارند رو انتخاب کنیم.
تمامی کدها رو از خود آموزش پلاگین تو انجمن گرفتم ولی نمیدونم مشکل کجاست
(فکر کنم قبلا هم یه نفر در این مورد پرسیده بود ولی پیداش نکردم)
با تشکر
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
کدی که استفاده کردید رو بنویسید.
و همچنین کدی که برای نمایش داده استفاده می کنید.
 

aryana2500

Active Member
سلام ببخشید که دیر شد این نمونه رو ببینید مثلا شما تو کادر جستجو فامیلی" بختیاری" رو سرچ کنید تعداد رکوردها دو عدد هست(یکی مونث و دیگری مذکر) ولی وقتی روی لیست برای نمایش اطلاعات کلیک میشه فقط اطلاعات فرد مونث نشون داده میشه برای بقیه هم همینطوره فقط اطلاعات فردی نشون داده میشه که بعد از همه رکوردهای مشابه ثبت شده باشه
باتشکر


مشاهده پیوست test.rar
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
کد:
If (select_field=1) Then
  sql_query$ = 'SELECT * FROM data WHERE famili LIKE "' + search$ + '";'
End
If (select_field=2) Then
  sql_query$ = 'SELECT * FROM data WHERE melli LIKE ' + search$ + ';'
End
PluginSet("SQL_Plugin","sql_query$")
PluginRun("SQL_Plugin","Query")
PluginGet("SQL_Plugin","Result$")
PluginGet("SQL_Plugin","Rows")
PluginGet("SQL_Plugin","Rows$")
LoadText("raw","Rows$")
If (Rows>0) Then
  For i=1 To Rows
    record$[i]=GetArrayItem(Result$,'#',i)
    record$[i]=record$[i]+'|'
    For j=1 To 8
      field$[j]=GetArrayItem(record$[i],'|',j)
    Next j
  Next i
End
Hide("CBK_Menu")
LoadText("id","field$[1]")
LoadText("melli","field$[2]")
LoadText("tarikhp","field$[3]")
LoadText("nam","field$[4]")
LoadText("famili","field$[5]")
LoadText("pedar","field$[6]")
LoadText("sen","field$[7]")
LoadText("jens","field$[8]")
کد بالا کدی هست که استفاده کردید. ۸ خط آخر این کد وظیفه ی نمایش داده رو به عهده داره، توجه کنید که شما مقدار رو از متغیر [field$[2 دریافت می کنید، این یعنی اینکه مهم نیست چندتا نتیجه پیدا بشه، شما همیشه اطلاعات مربوط به آخرین نتیجه رو نمایش میدید.

ضمن اینکه من در مثالتون ندیدم که روشی برای پیمایش بین نتیجه ها ایجاد کرده بودید، که مثلاً اگر ۱۰ نتیجه یافت بشه، کاربر بتونه هرکدوم رو از لیست انتخاب کنه یا دکمه ی Prev/Next موجود باشه تا به رکوردهای بعدی و قبلی بره.
 

aryana2500

Active Member
سلام
بله شی پیمایش ایجاد نشده ولی من هدفم اینه که وقتی تو کادر جستجو عبارتی جستجو میشه نتایج تو یه لیست (در اینجا CBK_Menu) نمایش داده بشه و کاربر هرکدام از موارد رو از لیست انتخاب کرد اطلاعات همون مورد نمایش داده بشه


توجه کنید که شما مقدار رو از متغیر [field$[2 دریافت می کنید، این یعنی اینکه مهم نیست چندتا نتیجه پیدا بشه، شما همیشه اطلاعات مربوط به آخرین نتیجه رو نمایش میدید.
خب راه حل چیست
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
خب اگر هدفتون اینه، متد رو اشتباه انتخاب کردید.

ببینید شما یکبار در حین جستجو اطلاعات رو از دیتابیس میخونید، در کدهاتون فقط فیلد مربوط به نام خانوادگی رو SELECT کرده بودید، با فرض اینکه هر رکورد فیلدی با عنوان ID که عددی منحصر بفرد هست داره، علاوه بر فیلد famili فیلد ID‌رو هم انتخاب کنبد.
وقتی کاربر یکی از اسامی پیدا شده رو انتخاب کرد، جستجو رو بر اساس ID انجام بدید که قطعاً فقط یک رکورد رو بر میگردونه.
 

aryana2500

Active Member
با تشکر
فقط یه لطف کنید بگید کدوم کد رو باید تغییر بدم کد مربوط به search یا کد مربوط به listbox چون یه ساعته دارم به به کدها ور میرم اما نتیجه نگرفتم
اگه لطف کنید کد اصلاح شده رو بزارید ممنون میشم
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
اول کد مربوط به اسکریپت listbox:
کد:
If (select_field=1) Then
  sql_query$ = 'SELECT famili,id FROM data WHERE famili LIKE "%' + search$ + '%";'
End
If (select_field=2) Then
  sql_query$ = 'SELECT melli,id FROM data WHERE melli=' + search$ + ';'
End
PluginSet("SQL_Plugin","sql_query$")
PluginRun("SQL_Plugin","Query")
PluginGet("SQL_Plugin","Result$")
PluginGet("SQL_Plugin","Rows")
[B][SIZE=4][COLOR=#000000].
.
.[/COLOR][/SIZE][/B]
علاوه بر داده ای که قراره نمایش داده بشه (مثلاً نام خانوادگی)، id رو هم دریافت میکنیم.
حالا در حلقه ای که استفاده شده برای استخراج داده و اضافه کردن به لیست باکس، id رو هم دریافت کنید و در یک آرایه ذخبره کنید.

مرحله ی بعد اسکریپت مربوط به شئ ListBox هست، چون ما به ترتیب داده ها رو در لیست باکس نمایش دادیم، اندیس (index) هر آیتم، برابر با موقعیت اون در آرایه هست (آرایه ای که برای idها در نظر گرفتیم)، پس با بدست آوردن اندیس آیتم، میشه آیدی مربوط به اون آیتم رو بدست آورد:
کد:
ItemID$ = IDsArray$[index]
حالا در اسکریپت search شرط جستجو رو بر اساس ID تنظیم کنید:
کد:
sql_query$ = 'SELECT * FROM data WHERE id = "' + ItemID$ + '";'
 

aryana2500

Active Member
در ضمن فکر کنم تو مثال شماره 5 (یعنی tell5) که آقای evil_gates عزیز تو آموزش قدم به قدم پلاگین زحمتشو کشیده بودند همچین موردی هست
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
مثالتون رو دیدم، مشکلش راحت حل میشه. فقط من الان با ویندوز نیستم و چون داده ها فارسی هست باید صبر کنید تا روی سیستم عامل ویندوز تست کنم و مثال تصحیح شده رو براتون بزارم
 

aryana2500

Active Member
در حلقه ای که استفاده شده برای استخراج داده و اضافه کردن به لیست باکس، id رو هم دریافت کنید و در یک آرایه ذخبره کنید.

مرحله ی بعد اسکریپت مربوط به شئ ListBox هست، چون ما به ترتیب داده ها رو در لیست باکس نمایش دادیم، اندیس (index) هر آیتم، برابر با موقعیت اون در آرایه هست (آرایه ای که برای idها در نظر گرفتیم)، پس با بدست آوردن اندیس آیتم، میشه آیدی مربوط به اون آیتم رو بدست آورد:
به نظر شما آیا اندیس هر آیتم یا موقعیت اون در آرایه برابر با id اون آیتم خواهد بود چو شاید(حتما) نتایج ما با idهای متوالی نباشد
اگه یکی از دوستان یه کمکی بکنن ممنون میشم
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
ما هنگام دریافت پاسخ از دیتابیس، دو فیلد famili و id رو میگیریم.
به همون ترتیبی که famili رو وارد لیسا باکس میکنیم، به همون ترتیب هم id ها رو در آرایه ذخیره می کنیم.

پس با فرض اینکه هیچ جابجایی در لیت باکس رخ نده، با دریافت اندیس آیتم در لیست باکس، می تونیم این اندیس رو بدیم به آرایه و مقدار ذخیره شده در اون اندیس از آرایه رو دریافت کنیم که میشه id مربوط به اون famili
 

aryana2500

Active Member
سلام آقای مدیر از اینکه به رغم مشغله زیاد جوابمو میدید ممنون.
راستش خودتون هم شاهد هستید که چند روزه درگیر این چند خط کد هستم منم تلاش کردم تا خودم با راهنماییهای شما اصلاحش کنم ولی نتونستم اگه ممکنه خودتون زحمتشو بکشید
باتشکر
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
کدها رو الکی پیچیده کرده بودید، ضمن اینکه کلی طول کشید تا متوجه شدم دلیل اینکه داده درست دریافت نمیشه اینه که پارامترهای تابع ListBoxGetSelectedItems رو اشتباه وارد کردید.
نتونستم تستش کنم اما گمان میکنم مشکلش حل شده
 

پیوست ها

  • list.mbd.zip
    234 کیلوبایت · بازدیدها: 32

aryana2500

Active Member
سلام از اینکه وقت گذاشتید و بنده رو راهنمایی کردید ممنون
تو مثالی که گذاشته بودید دوباره یه ایراد وجود داشت. اینبار نتایج هر چی بود (چه مشابه چه غیر مشابه) با کلیک روی لیست فقط نتیجه آیتم آخری نمایش داده میشد و فقط وقتی نتیجه درست بود که نتیجه جستجو فقط یه مورد باشه.
با اجازتون مثال رو اصلاح کردم تا اگه دیگران هم خواستند ازش استفاده کنند
باز هم از شما متشکرم
 

پیوست ها

  • list.mbd.rar
    866.3 کیلوبایت · بازدیدها: 48
ای کاش زودتر این صفحه را میدیدم تا به بهترین شکل ممکن راهنماییتون کنم.

عین کاری که میخواهید انجام بدید در مثالی که جناب سیلورکاور (حامدتکمیل) بهمراه پلاگینشون ارائه دادند موجوده. البته فقط ظاهر و نوع جستجو فرق میکنه که خب طبیعیه.
نیازی نیست آدم جمع تک تک اعداد را یاد بگیره, فقط کافیه راه جمع کردنو یاد بگیره.
با تشکر
 

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

بالا