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

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

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
مساله اینجاست که حتی در صورت ارائه ی همچین مثالی برای شما، باز هم هیچ تفاوتی در "سنگینی" یا "سبکی" مثال برای شما نخواهد داشت
چون باز هم از همون متد و شیوه ی ارائه شده در مثال های همراه پلاگین که جناب Silvercover زحمتش رو کشیدن استفاده خواهد شد

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

پس از بررسی مثالها اگر سوالی داشتید در خدمتتون خواهم بود.
موفق و پیروز باشید.
 
مساله اینجاست که حتی در صورت ارائه ی همچین مثالی برای شما، باز هم هیچ تفاوتی در "سنگینی" یا "سبکی" مثال برای شما نخواهد داشت
چون باز هم از همون متد و شیوه ی ارائه شده در مثال های همراه پلاگین که جناب silvercover زحمتش رو کشیدن استفاده خواهد شد

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

پس از بررسی مثالها اگر سوالی داشتید در خدمتتون خواهم بود.
موفق و پیروز باشید.


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

پیوست ها

  • test.rar
    228.3 کیلوبایت · بازدیدها: 390
دوست عزیز

این مثالی که دوستان زحمت تولیدش رو کشیدن ببینید

مثال

مبحث اصلی این مثال

این مثال ساده تر و فیلدهای کمتری داره.

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

evil_gates

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

دوست عزیز
متاسفانه فعلا دسترسی ندارم که مثال شما رو ببینم یا نمونه رو براتون تکمیل کنم. اجازه بدید تو یک فرصت مناسب.

اما برای ایجاد یک دیتابیس با SQLite بعد از ایجاد بانک و مشخص کردن نام و نوع هر فیلد. باید تو برنامه اول دیتابیس رو بارگذاری کنید.
دیتابیس رو باز کنید.
رکوردها رو چک کنید و در صورتی که همه مراحل بالا به طور صحیح اجرا شد و پیغام خطایی نداشتید (به نمونه جناب silvercover مراجعه کنید) تا جایی که یادم میاد میتونید برای جستجو این دستور رو به پلاگین ارسال و مقدار بازگشتی رو دریافت کنید.
کد:
Search$ = 'SELECT * FROM mycontactdb WHERE Lastname LIKE \''+ SearchEditBox$+'\''
PluginSet("PlugIn","Search$")
PluginRun("PlugIn","Query")
PluginGet("PlugIn","result$")
تو کد بالا فرض بر این بوده که جدول شما mycontactdb و فیلدی که به دنبال جستجوی اون هستید Lastname هست.

پلاگین در دیتابیس شما به دنبال رکوردی میگرده که فیلد Lastname اون برابر با مقدار بازگشتی از کادر جستجو شما باشه.

و اگه اون رو پیدا کرد مقدار اون رکورد رو تو یک متغیر رشته ای به نام $result بر میگردونه.

حالا شما میتونید مقدار این متغیر رشته ای رو با یک حلقه ، متغیر آرایه ای و GetArrayItem تقسیم کنید و تو کادرهای مربوط به خودش نمایش بدید.

اگه بر این اساس شما قصد داشته باشید یک دیتابیس بسازید حاوی دوتا فیلد که فقط نام و نام خانوادگی باشه.

پس مقدار بازگشتی از $result چیزی شبیه به این خواهد بود (Firstname|Lastname)

موفق باشید
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
[آپدیت مثال]

بنده مثال رو همونطور که خواسته بودید آپدیت کردم، ولی درواقع هیچ تغییر خاصی نیاز نبود که انجام بدم !
همه چیز خودش آماده بود

اگر هر مشکلی در درک مثال داشتید، حتماً مطرح بفرمایید تا توضیحات تکمیلی ارائه بشه
ولی بنظرم بهتر بود سوالتون این میبود که روال کار براتون توضیح داده بشه، نه تغییر مثال بنحوی که نیازتون رو مرتفع کنه.
 

پیوست ها

  • Database System.rar
    227.6 کیلوبایت · بازدیدها: 334
سلام.
از شما جناب nevercom واقعا ممنون البته نه به خاطر مثال چون هنوز نديدمش بلكه به خاطر راهنماييتون. شايد در مورد پرسش در باره روال كار درست باشه اما من تقريبا همونطور كه در بالا گفتگ بيلدر رو از راه شكستن مثالهاش ياد ميگيرم در اين مورد هم خواستم دو تا مثال شبيه به هم داشته باشم تا بتونم با تغيراتي كه در مثالها ميدم مبحث بانك اطلاعاتي رو هم ياد بگيرم.
بگذريم با جستجو هايي كه كردم و مثالهاي خود پلاگين ديتابيس و نمونه اي كه جناب evil gates لطف كردن و گذاشتن به اين نتايج دست پيدا كردم :
در مرحله اول بايد پايگاه داده رو با برنامه هاي ساخت بانك اطلاعاتي ايجاد كرد كه البته من در اين مورد مشكل دارم چون نه برنامه رو دارم و نه زياد با دستورات sql آشنايي دارم.
در مرحله دوم فرا خواني پلاگين sqlite و مسير دهي فايل db ساخته شده توسط خودمون هست كه با اسكريپت Initialization كه تقريبا در همه مثالها يكسان هست انجام ميشه.
بعد با استفاده از اسكريپت ReadFirstRow مقادير فيلدها خوانده ميشه و يكي يكي برابر مقدار آيتمهاي مو جود قرار داده ميشه. و بعداسكريپت ReadAllRows اجرا ميشه و در اسكريپت سرچ هم با استفاده از دستور select در جدول به طور مثال contacts و فيلد first name جستجو صورت ميگيره. دو اسكريپت DeleteRecord و UpdateRecord كه كارشون كاملا مشخصه . يعني ركوردهارو حذف كرده و پس از حذف يا تغير يك ركورد بانك داده ها آپديت ميشه.
اين برداشتي بود كه من از مثال sample1 كه همراه دموي پلاگين بود به طور خلاصه داشتم. حالا اگه لطف كنيد به سوال هام جواب بديد ممنون ميشم.
1- در پيج استارت : R=1 يعني چي و چرا از اسكريپت تايمر استفاده ميشه و مثلا از ران اسكريپت استفاده نميشه؟
2- در اسكريپت ReadAllRows
If (Search = 1) Then
If (DBError$='') Then
Delimiter$ = '#'
FirstRows$ = GetArrayItem(Results$,Delimiter$,1)
FirstRows$ = FirstRows$ + '|'
NumberOfFields = GetArrayNum(FirstRows$,|)
******************************************
Country$ = GetArrayItem(FirstRows$,|,1)
LoadText("Country","Country$")
******************************************
ID$ = GetArrayItem(FirstRows$,|,2)
******************************************
Telephone$ = GetArrayItem(FirstRows$,|,3)
LoadText("Telephone","Telephone$")
City$ = GetArrayItem(FirstRows$,|,4)
LoadText("City","City$")
Comment$ = GetArrayItem(FirstRows$,|,5)
LoadText("Comment","Comment$")
Company$ = GetArrayItem(FirstRows$,|,6)
LoadText("Company","Company$")
Email$ = GetArrayItem(FirstRows$,|,7)
LoadText("Email","Email$")
FirstName$ = GetArrayItem(FirstRows$,|,8)
LoadText("FirstName","FirstName$")
LastName$ = GetArrayItem(FirstRows$,|,9)
LoadText("LastName","LastName$")
State$ = GetArrayItem(FirstRows$,|,10)
LoadText("State","State$")
Street$ = GetArrayItem(FirstRows$,|,11)
LoadText("Street","Street$")
Website$ = GetArrayItem(FirstRows$,|,12)
LoadText("Website","Website$")
ZipCode$ = GetArrayItem(FirstRows$,|,13)
LoadText("ZipCode","ZipCode$")
DisplayValue("TotalRecords","Rows")
DisplayValue("CurrentRecord","1")
**************************************
/*
*/
ScriptTimer("ReadAllRows","100")
Else
Message("Error occured:","DBError$")
Return()
End
Else
SQLQuery$ = 'SELECT * FROM contacts;'
PluginSet("PlugIn","SQLQuery$")
PluginRun("PlugIn","Query")
PluginGet("PlugIn","Results$")
PluginGet("PlugIn","Rows")
PluginRun("PlugIn","DBError")
PluginGet("PlugIn","DBError$")
** We have search feature and you know when user search
** for somethings result set changes to what he/she is
** looking for, so we should be aware of that to make
** appropriate result set.
If (DBError$='') Then
Delimiter$ = '#'
FirstRows$ = GetArrayItem(Results$,Delimiter$,1)
FirstRows$ = FirstRows$ + '|'
NumberOfFields = GetArrayNum(FirstRows$,|)
******************************************
Country$ = GetArrayItem(FirstRows$,|,1)
LoadText("Country","Country$")
******************************************
ID$ = GetArrayItem(FirstRows$,|,2)
******************************************
Telephone$ = GetArrayItem(FirstRows$,|,3)
LoadText("Telephone","Telephone$")
City$ = GetArrayItem(FirstRows$,|,4)
LoadText("City","City$")
Comment$ = GetArrayItem(FirstRows$,|,5)
LoadText("Comment","Comment$")
Company$ = GetArrayItem(FirstRows$,|,6)
LoadText("Company","Company$")
Email$ = GetArrayItem(FirstRows$,|,7)
LoadText("Email","Email$")
FirstName$ = GetArrayItem(FirstRows$,|,8)
LoadText("FirstName","FirstName$")
LastName$ = GetArrayItem(FirstRows$,|,9)
LoadText("LastName","LastName$")
State$ = GetArrayItem(FirstRows$,|,10)
LoadText("State","State$")
Street$ = GetArrayItem(FirstRows$,|,11)
LoadText("Street","Street$")
Website$ = GetArrayItem(FirstRows$,|,12)
LoadText("Website","Website$")
ZipCode$ = GetArrayItem(FirstRows$,|,13)
LoadText("ZipCode","ZipCode$")
DisplayValue("TotalRecords","Rows")
DisplayValue("CurrentRecord","1")
**************************************
/*
After showing first record we need To read other
records and save them in arrays To be able To navigate
through them.
*/
ScriptTimer("ReadAllRows","100")
Else
Message("Error occured:","DBError$")
Return()
End
End
قسمت اول دستور قبل از اولين خط سبز يعني چي؟ و چرا از قيلد Country شروع بايد كرد و چرا مقدار دهي در اسكريپت دوبار نوشته شده اونم عين هم.
و اين دستور چكاري انجام ميده؟
ID$ = GetArrayItem(FirstRows$,|,2)
در واقع IDچيه و عدد 2 اينجا چكار ميكنه.
شرمنده ديگه حالا اگه شد اينو جواب بديد تا به بقيه اسكريپتها هم برسيم.
يه سوال ديگه اي كه داشتم اينه كه چرا وقتي تعداد ركوردها مثلا از 60 تا بالا تر ميره برنامه زمان ميبره تا بالا بياد ؟
بازم ممنون.
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
سلام

برای ایجاد دیتابیس شاید برنامه های زیادی وجود داشته باشه که از SQLite پشتیبانی کنن، ولی یک مورد خیلی ساده و رایگان، نرم افزار SQLite Database Browser هست، لینکش در انجمن موجود هست، میتونید جستجو کنید و دانلودش کنید.

پس از ایجاد دیتابیس، باید اون رو در برنامه لود کنید
در مثالها این عمل در اسکریپت Initialization انجام میگیره که نیاز به تغییر زیادی هم نداره و معمولاً فقط نیاز هست که مسیر دیتابیس رو تغییر بدید

بعد از اون باید عملیات موردنظر رو روی دیتابیس انجام بدید که اینکار توسط کدهای SQL انجام میشه، پس تا اینجای کار نیاز دارید که بصورت سطحی با کدهای SQL آشنایی داشته باشید، در مبحث مربوط به این پلاگین و در مباحث دیگه به یک کتاب الکترونیک در این زمینه ارجاع داده شده که زحمت معرفیش رو محسن عزیز (Splinter Cell) کشیدن...، بنده خودم هم از اون کتاب جهت آشنایی مقدماتی با زبان SQl استفاده کردم.

پس از انجام عملیات موردنظر احتمال داره مقدار برگشتی از پلاگین وجود داشته باشه که نیاز به تجزیه و تحلیل داره
بدلیل اینکه دیتابیس ها حاوی اطلاعات زیادی میتون باشن و در فیلدهای مختلف دسته بندی شدن، پلاگین اطلاعات موردنظر ما رو در قالب آرایه در اختیار ما قرار میده که بتونیم بخوبی تفکیکش کنیم.
پس ما نیاز داریم که با آرایه ها و استفاده از اونها در MMB آشنایی داشته باشیم که البته خیلی هم ساده هست.


1- در پيج استارت :R=1 يعني چي و چرا از اسكريپت تايمر استفاده ميشه و مثلا از ران اسكريپت استفاده نميشه؟
متغیر R حاوی شماره ی رکورد یا ID اون رکورد هست که در اسکریپت مربوط به Delete و Update از این متغیر استفاده میشه، و چون برنامه همیشه اولین رکورد رو نمایش میده، این متغیر در شروع برنامه مقدار 1 رو به خودش اختصاص میده تا برای کار اون اسکریپتها مشکلی بوجود نیاد
استفاده از اسکریپت تایمر هم یک اجبار نیست، این بستگی به نحوه ی کدنویسی هرشخص داره....

قسمت اول دستور قبل از اولين خط سبز يعني چي؟
اگر منظورتون کد زیر هست:
کد:
[SIZE=2][COLOR=#010101][FONT=Courier New]NumberOfFields = [/FONT][/COLOR][/SIZE][SIZE=2][COLOR=blue][FONT=Courier New]GetArrayNum[/FONT][/COLOR][/SIZE][SIZE=2][COLOR=#010101][FONT=Courier New](FirstRows$,|)[/FONT][/COLOR][/SIZE]
این کد تعداد فیلدهایی که در مقدار برگشتی از پلاگین وجود دارن رو مشخص میکنه (با شمردن تعداد آیتم های آرایه که با کاراکتر | از هم جدا شدن)
این مقدار زمانی مفید هست که تعداد فیلدها کاملاً مشخص نباشه، و ما میتونیم با یک حلقه فیلدها رو از هم جدا کنیم

چرا از قيلد Country شروع بايد كرد و چرا مقدار دهي در اسكريپت دوبار نوشته شده اونم عين هم.
دلیل اینکه از فیلد Country شروع شده این هست که با توجه به آرایش فیلدها در دیتابیس، همیشه اولین فیلد این فیلد خواهد بود، و عدد 1 مربوط به اون خط از اسکریپت هم به این موضوع اشاره داره، اون دستور میاد و اولین آیتم از آرایه رو که در واقع حاوی اطلاعات مربوط به فیلد Country در دیتابیس هست رو به یک متغیر نسبت میده.

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

اين دستور چكاري انجام ميده؟
(ID$ = GetArrayItem(FirstRows$,|,2
در واقع IDچيه و عدد 2 اينجا چكار ميكنه.
این دستور میاد و آیتم دوم از آرایه رو در متغیر میریزه که این آیتم حاوی ID هر رکورد در دیتابیس که عدد منحصربفردی هست، هست
از این ID برای اشاره به رکوردها در شرطها استفاده میشه.

يه سوال ديگه اي كه داشتم اينه كه چرا وقتي تعداد ركوردها مثلا از 60 تا بالا تر ميره برنامه زمان ميبره تا بالا بياد ؟
شاید بخاطر این هست که قبل از بالا اومدن کامل برنامه اسکریپتها پشت سرهم اجرا میشن، میتونید مقدار ScriptTimer در PageStart رو کمی بیشتر کنید
الان حضورذهن ندارم که دقیقاً براتون شرح بدم....

اگر هر سوال دیگه ای داشتید بنده با کمال میل در خدمتتون هستم و تا جایی که دانسته هام بهم اجازه بده کمتون خواهم کرد

موفق و پیروز باشید.
 
خيلي خيلي ممنون از توضيحات كامل شما آقا محمد عزيز.
خب من ناچار شدم يكي دو تا سوال ديگه هم بپرسم و اول اينكه فهميدم كه يه مقدار از كاهش سرعت مربوط ميشه به لود شدن مقادير در ليست باكسها.
برنامه هايي مثل تلفن 118 و... معمولا براي جستجو و نشان دادن نتيجه جستجوست و ممولا در هنگام اجراي عادي چيزي لود نميشه.
من ميخوام كه در هنگام اجراي برنامه چيزي داخل ليست باكسها لود نشه و بعد از جستجوي من ، نتيجه جستجو درون ليست باكسها لود بشه دستور سرچ هم كه به اين صورته:
Search = 1
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ Search$+'\' OR LastName LIKE \''+Search$+'%\';'
اينم ميدونم كه دستور بالا جستجو ميكنه در جدول contacts و در فيلد firstname و مقدار lastname رو برميگردونه.

PluginSet("PlugIn","SearchQuery$")
PluginRun("PlugIn","Query")
PluginGet("PlugIn","Results$")
PluginGet("PlugIn","Rows")
PluginRun("PlugIn","DBError")
PluginGet("PlugIn","DBError$")
ScriptTimer("ReadFirstRow","100")
حالا چه تغيري در اين دستور بايد ايجاد كنم تا وقتي در كادر جستجو نامي رو مينويسم در ليست باكس last name نام خانوادگي مربوطه رو به من بده
و نكته دوم اينكه چون من نميخوام مقداري در ابتداي برنامه لود بشه و در كادرها نشون داده بشه آيا بايد مقادير load text رو از اسكريپت read first row حذف كنم يا خير؟
در يك كلام من فقط ميخوام داخل ديتابيس جستجو كرده و نتيجه رو ببينم.هرچند كه فكر كنم اين دستور سرچ بايد حالات مختلفي در نمايش دادن و برگردوندن مقادير پيدا شده داشته باشه.
بازم شرمنده از اينكه وقت شما رو ميگرم با سوالاتم.
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
خب این موضوع که چطور کاری کنید که در ابتدای برنامه مقادیر لود نشن، جزو موارد ساده ی اسکریپت نویسی هست، ببینید که این عملیات در کدوم اسکریپت انجام میشه، و از اجرای اون اسکریپت هنگام اجرای برنامه جلوگیری کنید (اگر اشتباه نکنم اسکریپت ReadFirstRow)

در مورد جستجو:
توجه کنید، وقتی شما دستورات رو به پلاگین ارسال میکنید، پلاگین جوابی به شما خواهد داد
قبلاً عرض شد که این پاسخ از جانب پلاگین بصورت آرایه هست، پس شما باید ارایه رو تفکیک کنید
بعد از تفکیک آرایه، شما مقادیری رو در اختیار دارید که از هم تفکیک شدن، مثل نام، نام خانوادگی و غیره
حالا شما میتونید هرکدوم از این مقادیر که در متغیرهای متفاوتی ذخیره شدن، هرزمان به هرشکلی که نیاز داشتید نمایششون بدید (اونها متغیرهایی هستند، میتونید تو لیست باکس لودشون کنید، میتونید در یک شئ متنی نمایششون بدید و یا حتی بصورت یک فایل HTML ذخیره شون کنید و در شئ Browser نمایششون بدید، این به خلاقیت شما بستگی داره)
 

evil_gates

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

جناب nevercom در مورد اینکه چه کنید راهنماییتون کردن اما چون تو پستهای قبلی گفته بودید

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

عرض میکنم که من معمولا وقتی مثالی رو میبینم که الگوریتمش کمی پیچیدس و قادر به درک هدف نویسنده برنامه نیستم سعی میکنم تو خطوط برنامه از فرمان message استفاده کنم تا قبل از اینکه خود مثال عملیاتش رو به طور دقیق اجرا کنه بتونم مقادیر بازگشتی از هر خط رو بخونم و بعد با تحلیل نتایجی که در message box میبینم و خطوط برنامه الگوریتم برنامه رو بفهمم.

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

هرجا هم که عبارتی، دستوری، متغیری برام نامفهوم بود سعی میکنم با حذفش از برنامه نتایج بعدی رو ببینم و اینطوری درک بهتری از مثال پیدا میکنم.

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

گفتم شاید این روش بتونه به شما برای درک بهتر مثال کمک کنه.

سال خوبی داشته باشید
 
سلام evil جان ببخشيد مزاحم شدم شرمنده يه مشكل دارم با دستور جستجويي كه برام قبلا نوشتي دستور جستجو در ديتابيس به صورت زير هستش و در اين دستور با تايپ مقدار firstname در كادر جستجو مقدار lastname در كادر lastname لود ميشه
Search = 1
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ Search$+'\' OR LastName LIKE \''+Search$+'%\';'
******************************************************************************************************
PluginSet("PlugIn","SearchQuery$")
PluginRun("PlugIn","Query")
PluginGet("PlugIn","Results$")
PluginGet("PlugIn","Rows")
PluginRun("PlugIn","DBError")
PluginGet("PlugIn","DBError$")
ScriptTimer("ReadFirstRow","100")
آيا ميشه در اين دستور كاري كرد كه مقدار يا مقادير يافته شده در يك ليست باكس نشون داده بشه؟شرمنه اگه ميشه دستور رو واسم تغير بده. بازم ممنون.در ضمن آيا مثالهاي ديگه اي از حالات مختلف جستجو در ديتابيس هست؟
 

evil_gates

اين نيز بگذرد ...
دوست عزيز
براي اضافه کردن يک مقدار به ليست باکس از ListBoxAddItem استفاده کنيد.

تو دستور بالا مقدار بازگشتي از فرمان جستجو در $Results ذخيره ميشه که همون اطلاعات رکورد مورد نظر هست که جستجو و پيدا شده.

شما يک متغير رشته اي داريد حاوي مقادير فيلدهاي مختلف يک رکورد که پشت سر هم و با علامت ( | ) از همديگه جدا شدن. مثلا (...firstname|lastname|age|adress|or)

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

براي تفکيک يک رشته اينطوري من اين کد رو پيشنهاد ميکنم.
کد:
Results$=Results$+'|'
arraynum=GetArrayNum(Results$,'|')
For i=1 To arraynum
  substr$[i]=GetArrayItem(Results$,'|',i)
Next i

مقدار بازگشتي در [substr$[i رو مي تونيد با دستور ListBoxAddItem به ليست باکس اضافه کنيد يا هرجاي ديگه اي که مدنظرتون هست فراخواني کنيد


در ضمن آيا مثالهاي ديگه اي از حالات مختلف جستجو در ديتابيس هست؟
مثال دیکشنری جناب nevercom
 
شرمنده evil جان چون من هر كاري كردم نتونستم مقادير باز گشتي رو از هم تفكيك كنم.
من در كار كردن با پلاگين هاي ساده هم كم ميارم واي به حال اين sqlite .
يه خواهش دارم اونم اينكه يكي رو شما واسم تفكيك كني تا من بدونم چه خبره و كي به كيه اگه ميشه از همين مثال مقدار lastname رو كه در Results برميگردونه واسم با دستور load text بنويس.
يعني در واقع از ركوردي كه برميگردونه مقدار lastname رو در يه آبجكت بر فرض مثالtext1 دستور لود شدنش رو بنويس.فقط دستور رو ميخوام .همين و بس.
بازم ممنون.
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
چرا نمیتونید تفکیکشون کنید ؟
جناب evil_gates که براتون دستور مربوطه رو قید کردن !!!
اگه از اون دستور استفاده کنید، دقیقاً از هم تفکیک میشن، و اگه طبق توضیحاتشون از دستور ListBoxAddItem در آخر حلقه استفاده کنید، این مقادیر به لیست باکس اضافه میشن !
شما این کدها رو تست کردین اصلاً ؟ سعی کردین کمی تغییرشون بدید تا نتایج متفاوت رو مشاهده کنید ؟...
 

evil_gates

اين نيز بگذرد ...
دوست عزیز
کدی که بالاتر عرض کردم ربطی به پلاگین نداره. یک حلقه با یک متغیر آرایه ای هست که مقدار بازگشتی از پلاگین رو به چند زیررشته تقسیم میکنه همین.

شما با دستور LoadText مقدار $Results رو تو یک TextBox نمایش بدید و با دقت اون رو ببینید.

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

کاری که شما باید انجام بدید اینه که این رشته رو از محل | به زیر رشته های مختلف تقسیم کنید و هر زیر رشته رو تو یک متغیر رشته ای دیگه بریزید و بعد اون متغیر رو هرجایی که مدنظرتون هست استفاده کنید.

دستوراتی که بالاتر گفتم رو یکبار دیگه با دقت مطالعه بفرمایید.

این خط کاراکتر | رو به انتهای متغیر رشته ای $Results اضافه میکنه.
کد:
Results$=Results$+'|'
این خط تعداد کاراکترهای | رو در زیرشته بدست میاره و در یک متغیر عددی به نام arraynum میریزه. به خاطر اینکه بدونیم حلقه ما چندبار باید بچرخه به این متغیر احتیاج داریم.
کد:
arraynum=GetArrayNum(Results$,'|')
این خط شروع حلقه ماست که به ازای i=1 تا مقدار arraynum حلقه خواهد چرخید.
کد:
For i=1 To arraynum
با GetArrayItem از ابتدای رشته $Results تا اولین کاراکتر | مقدار رشته بدست میاد و تو یک متغیر آرایه ای از نوع رشته ای $substr ذخیره میشه.
کد:
substr$[i]=GetArrayItem(Results$,'|',i)
حلقه تکرار خواهد شد و قسمت دوم رشته $Results تو متغیر آرایه ای بر میگرده.
کد:
Next i

نتیجه:
اگه فرض کنیم رشته $Results معادل firstname|lastname|age|address باشه مقدار متغیر آرایه ای شما عبارت های زیر خواهد بود.
کد:
substr$[1] = firstname
substr$[2] = lastname
substr$[3] = age
substr$[4] = address
حالا شما میتونید هر کدوم از این متغیرهای بدست اومده بالا رو تو هر تکست باکسی با دستور LoadText فراخوانی کنید.

امیدوارم مشکلتون با این توضیحات حل بشه اگه نشد فایلتون رو پیوست تا بعد از تعطیلات براتون اصلاح کنم.

سال خوبی داشته باشید
 
باور كنيد من هم طبق گفته هاي شما عمل كردم فقط نميدونم چرا بار اول جواب نميده
در واقع من يه كليد جستجو درست كردم و با كليك روي اين كليداسكريپت سرچ اجرا ميشه من اول كه از روي دستور شما عمل كردم فكر ميكردم اشتباه كردم ولي حالا ديدم كه نه اينطور نيست فقط نميدونم كه چرا در بار اول با كليك روي دكمه جستجو چيزي پيدا نميشه و بعد از دومين كليك روي اين دكمه مقدار مورد نظر پيدا ميشه واسه خودم هم عجيبه چون تنها دستوري كه داخل اين دكمه هست دستور ران اسكريپته در ضمن در جواب جناب nevwrcom كه در مورد كلو گيري از لود نشدن مقادير در هنگام اجراي برنامه پرسيدم مقصود اين نبود كه نميدونم مقادير لود شده در اسكريپت first row هست منظورم اين بود كه به برنامه خللي وارد نميشه يا خير؟
البته با حذف مقادير لود شده و حتي با حذف اسكريپت red all row هم مشكل ايجاد نميشه و سرعت هم بالا ميره البته زماني حذف مقادير لود شونده و اسكريپت red all row مشكل ساز نخاهد بود كه ديگه قصد اضافه كردن مقداري به ديتابيس رو نداشته باشيم.
واقعا از شما دوستان ممنون.
اگه تونستم حلش كنم كه هيچ و گرنه باز مزاحمتون خواهم شد.
 
دستور جستجو به صورت زير شده:
Search = 1
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ Search$+'\' OR LastName LIKE \''+Search$+'%\';'
PluginSet("PlugIn","SearchQuery$")
PluginRun("PlugIn","Query")
PluginGet("PlugIn","Results$")
PluginGet("PlugIn","Rows")
PluginRun("PlugIn","DBError")
PluginGet("PlugIn","DBError$")
ScriptTimer("ReadFirstRow","100")
Results$=Results$+'|'
arraynum=GetArrayNum(Results$,'|')
For i=1 To arraynum
substr$=GetArrayItem(Results$,'|',i)
Next i
LoadText("Text1","substr$[9] ")

حالا اگر اين دستور درسته والبته من امتحانش كردم ديگه مشكلي نداشت اگر به نظر شما هم درسته حلا من ميخوام به جاي اديت باكس قسمت جستجو از پلاگين TrichEditPlugIn استفاده كنم به خاطر اينكه بازم اديت باكس فارسي رو از چپ پيكر بندي ميكنه.
دستورات مربوط به اين پلاگين رو كه مربوط به اجرا و فونت و ديگر اجزاي اون ميشه بلدم حالا ميخوام با كليك روي دكمه جستجو مقدار داخل اين پلاگين گرفته بشه و داخل ديتابيس جستجو بشه.
مشكلي كه هست اينه كه نميدونم چطور دستورات زير رو به اسكريپت جستجو كه در بالاست اضافه كنم در ضمن مثال ديكشنري رو هم جستجو كردم (منظورم اسكريپت Add Entry هستش) ولي اين مثال واسم خيلي پيچيده هستش لطفا اگه شد جواب بذاريد.
PluginRun("PlugIn","GetText")
PluginGet("PlugIn","get$")
در ضمن در اسكريپت جستجو در ديتابيس كه در بالا نوشته شده مقدار Search = 1 كه در خط اول آورده شده يعني چي؟ و در حط بعد مقدار Search$ كه دو بار آورده شده چكار ميكنه و علايم (+'\') و ('%\';') يعني چي و چكار ميكنن؟
ببخشيد با اين همه سوال كه پرسيدم ولي حق بديد كه مطلب سنگين تر از اينه كه با چند تا سوال بشه يادش گرفت؟
بازم از راهنماييتون ممنون.
 

evil_gates

اين نيز بگذرد ...
دوست عزیز
همونطوری که خودتون هم بالاتر گفتید با دستور GetText مقدار داخل پلاگین رو تو یک متغیر رشته ای بر میگردونید. $get مقدار حاوی پلاگین هست. تو خط زیر در پلاگین sqlite
کد:
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ Search$+'\' OR LastName LIKE \''+Search$+'%\';'
به جای $Searech از $get استفاده کنید. تا مقدار بازگشتی از پلاگین ادیت باکس رو تو دیتابیس جستجو کنه.

مقدار Search = 1 كه در خط اول آورده شده يعني چي؟
این رو شما باید بگید چه معنی داره. وقتی یک متغیر رو در برنامه استفاده میکنید باید بدونید دلیلش چیه و قرار هست چه کاری انجام بده.

علايم (+'\') و ('%\';') يعني چي و چكار ميكنن؟
پارامترهایی از دستورات به زبان SQL هستن. چون نمیشه به طور مستقیم دستورات SQL رو تو mmb نوشت با استفاده از یک متغیر رشته ای این دستورات رو تو یک خط مینویسیم و با دستور plugin set اون رو به پلاگین ارسال میکنیم.
 

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

بالا