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

واسه پلاگين اين جوري نوشتم ولي عمل نكرد و فقط شماره فيلد رو ميده
PluginRun("PlugIn1","GetText")
PluginGet("PlugIn1","get$")
If (get$ <> '') Then
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ get$+'\' OR LastName LIKE \''+get$+'%\';'
PluginSet("PlugIn","SearchQuery$")
PluginRun("PlugIn","Query")
PluginGet("PlugIn","Results$")
PluginGet("PlugIn","Rows")
Else
End
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("Paragraph","substr$[9] ")

شرمنده evil جان اگه ميشه درستش كني ممنون ميشم.
در ضمن مقدار Search = 1 در مثال پلاگين در اسكريپت سرچ هست و مربوط به من نيست.
 

evil_gates

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

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

ضمن اينكه پيشنهاد ميكنم تمام كدها رو داخل شرط قرار بديد و در ضمن در صورتي كه مقدار شرط صحيح نبود براي else چه دستوراتي رو پيش‌بيني كرديد؟

و ديگه پيشنهاد ميكنم به طور موقت تو خط بعد از شرط از فرمان Message براي نمايش مقدار $get استفاده كنيد و نتيجه رو بررسي كنيد. همينطور بعد از فرمان plugin get مقدار $result رو با فرمان message نمايش بديد و نتيجه رو بررسي كنيد.

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

... در ضمن مقدار Search = 1 در مثال پلاگين در اسكريپت سرچ هست و مربوط به من نيست....
اگه همه بخشهاي اون مثال رو با دقت بررسي كرده باشيد ميبينيد كه مقدار متغير Search كه در قسمت جستجو معادل 1 قرار ميگيره در اسكريپت ReadFirstRow بعنوان شرط در نظر گرفته ميشه. در صورتي كه شرط صحيح باشه يعني Search=1 باشه فيلدهاي ركورد حاصل از جستجو فراخواني ميشه.
 
PluginRun("PlugIn1","GetText")
PluginGet("PlugIn1","get$")
str_len=LEN(get$)-2
get$=StrCopy(get$,1,str_len)
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ get$+'\' OR LastName LIKE \''+get$+'%\';'
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("Paragraph","substr$[9] ")


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

evil_gates

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

دوست عزيز
دستور جستجو رو تو حلقه قرار بديد و با تابع POS عبارت موجود تو EditBox رو تو رشته $substr چك كنيد و يك شرط بزاريد كه اگه شرط صحيح بود فيلد مورد نظر از اون ركورد رو تو ليست باكس اضافه كنه.
 
شرمنده evil جان خودم هركاري كردم واقعا نشد اصلا جواب نداد در ضمن اديت باكسي وجود نداره و مقدار get از پلاگين گرفته ميشه و در دستور جستجو چك ميشه.يه چيزي بنويس من دنبالشو بگيرم .
من منتظر جوابم البته خودمم سعي ميكنم حلش كنم اگه ممكنه دستو ر رو برام بنويس.
 

evil_gates

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

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

اگه دستور جستجو رو تو يك حلقه بزاريد چه اتفاقي ميفته؟
حلقه شما به چه شرطي ميتونه خاتمه پيدا كنه؟
حلقه شما چندبار بايد بچرخه تا خروجي مطلوب بدست بياد؟
براي اينكه تعداد چرخش حلقه شما بدست بياد چه كار بايد انجام بديد؟
تعداد ركوردهاي ديتابيس ميتونه پارمتري براي تعداد چرخش حلقه باشه يا گزينه ديگه اي هم وجود داره؟
هر بار كه دستورات حلقه اجرا ميشن خروجي چي خواهد بود؟
براي اينكه بتونيد مقدار موجود تو متغير $get رو تو خروجي دستورات حلقه چك كنيد چه ميكنيد؟
تابع POS رو تو توابع رشته اي ميشناسيد؟ ميدونيد چه كار ميكنه؟
 
[FONT=&quot]PluginRun[/FONT][FONT=&quot]("PlugIn1","GetText")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot]PluginGet[/FONT][FONT=&quot]("PlugIn1","get$")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot]str_len=[/FONT][FONT=&quot]LEN[/FONT][FONT=&quot](get$)-[/FONT][FONT=&quot]2[/FONT][FONT=&quot][/FONT]​
[FONT=&quot]get$=[/FONT][FONT=&quot]StrCopy[/FONT][FONT=&quot](get$,[/FONT][FONT=&quot]1[/FONT][FONT=&quot],str_len)[/FONT][FONT=&quot][/FONT]​
[FONT=&quot]For[/FONT][FONT=&quot] i=[/FONT][FONT=&quot]1[/FONT][FONT=&quot] [/FONT][FONT=&quot]To[/FONT][FONT=&quot] arraynum[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] SearchQuery$ = [/FONT][FONT=&quot]'SELECT * FROM contacts WHERE FirstName LIKE \''[/FONT][FONT=&quot]+ get$+[/FONT][FONT=&quot]'\'[/FONT][FONT=&quot] OR LastName LIKE \[/FONT][FONT=&quot]''[/FONT][FONT=&quot]+get$+[/FONT][FONT=&quot]'%\';'[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]PluginSet[/FONT][FONT=&quot]("PlugIn","SearchQuery$")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]PluginRun[/FONT][FONT=&quot]("PlugIn","Query")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]PluginGet[/FONT][FONT=&quot]("PlugIn","Results$")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]PluginGet[/FONT][FONT=&quot]("PlugIn","Rows")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]PluginRun[/FONT][FONT=&quot]("PlugIn","DBError")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]PluginGet[/FONT][FONT=&quot]("PlugIn","DBError$")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]ScriptTimer[/FONT][FONT=&quot]("ReadFirstRow","[/FONT][FONT=&quot]100[/FONT][FONT=&quot]")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] Results$=Results$+[/FONT][FONT=&quot]'|'[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] arraynum=[/FONT][FONT=&quot]GetArrayNum[/FONT][FONT=&quot](Results$,[/FONT][FONT=&quot]'|'[/FONT][FONT=&quot])[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] substr$=[/FONT][FONT=&quot]GetArrayItem[/FONT][FONT=&quot](Results$,[/FONT][FONT=&quot]'|'[/FONT][FONT=&quot],i)[/FONT][FONT=&quot][/FONT]

[FONT=&quot] x=[/FONT][FONT=&quot]POS[/FONT][FONT=&quot](get$,substr$)[/FONT][FONT=&quot][/FONT]

[FONT=&quot] [/FONT][FONT=&quot]If[/FONT][FONT=&quot] (x<>[/FONT][FONT=&quot]0[/FONT][FONT=&quot]) [/FONT][FONT=&quot]Then[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]ListBoxSelectItem[/FONT][FONT=&quot]("ListBox","i")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]End[/FONT][FONT=&quot][/FONT]​
[FONT=&quot]Next[/FONT][FONT=&quot] i[/FONT][FONT=&quot][/FONT]​
[FONT=&quot]If[/FONT][FONT=&quot] (x<[/FONT][FONT=&quot]1[/FONT][FONT=&quot]) [/FONT][FONT=&quot]Then[/FONT][FONT=&quot][/FONT]​
[FONT=&quot] [/FONT][FONT=&quot]Message[/FONT][FONT=&quot]("Nothing found!","")[/FONT][FONT=&quot][/FONT]​
[FONT=&quot]End[/FONT][FONT=&quot][/FONT]​
من كه گفنم خودم سعي كردم نشد . حالا شما بگو كجا اشتباه كردم كه نشد.
 
در ضمن يه مشكل ديگه اي هم كه هست اينه كه كلمه مورد جستجو حتما بايد كامل تايپ بشه مثلا اگه علي رضا ثبت شده باشه و من بخوام علي كه تايپ كردم علي رضا رو نشون بده چه كار بايد بكنم
 

evil_gates

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

لطفا با دقت خطوطي كه نوشتيد رو بخونيد و بگيد دقيقا منظورتون از اين دستور چي بوده و انتظار داشتيد چه اتفاقي بيفته.
مثلا :
کد:
PluginRun("Plugin1","GetText")
[COLOR="SeaGreen"]اين خط دستور دريافت متن رو به پلاگين ارسال ميكنه[/COLOR]

PluginGet("Plugin1","get$")
[COLOR="SeaGreen"]اين خط مقدار بازگشتي از دستور قبل رو تو متغير رشته اي بر ميگردونه
با اجراي اين دوتا دستور انتظار ميره كه متن موجود تو پلاگين تو اين متغير ثبت بشه [/COLOR]
[COLOR="SeaGreen"]
و الي آخر[/COLOR]

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

PluginRun("PlugIn1","GetText
PluginGet("PlugIn1","get$")
str_len=LEN(get$)-2
get$=StrCopy(get$,1,str_len)
قطعه كد بالا متن رو از پلاگين ميخونه توي متغير رشته اي ميريزه و عينا مقدار متغير رو برابر مقدار كاراكترهاي داده شده قرار ميده البته در مورد كاراكترهاي متني.تا جاي كه من ياد گرفتم.


For i=1 To arraynum
شما خودت گفتي كه دستور جستجورو در حلقه قرار بدم و چون معلوم نيست حلقه چند بار تكرار بشه من مقدار رو برابر arraynum قرار دادم
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ get$+'\' OR LastName LIKE \''+get$+'%\';'​
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$,'|')
substr$=GetArrayItem(Results$,'|',i)
قسمت بالا هم كه دستور تفكيك و جدا سازي مقدار برگشت داده شده از دستور جستجو هست چون دستور جستجو يك ركورد رو برميگردونه و براي تفكيك فيلدهاي اين ركورد اون رو بايد به صورت متغير آرايه اي تفكيك كنيم
x=POS(get$,substr$)
If (x<>0) Then
ListBoxAdd Item("ListBox","i")
End
Next i
If (x<1) Then
Message("Nothing found!","")
End
حالا مشكل اينجاست كه من در مورد تابع pos زياد نميدونم و اينو در يك مثال ديگه ديدم و نوشتم حالا اگر مقدارx مخالف صفر باشه به آيتم ليست باكس اصافه ميشه و در غير اين صورت پيغام يافت نشد نشون داده ميشه.
حالا اگه دوباره بيست سوالي واسم طرح نميكني دوست داشتي جواب بذار.

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

evil_gates

اين نيز بگذرد ...
دوست عزیز
من بیست سوالی طرح نمیکنم. سعی میکنم کمکتون کنم که مشکلتون حل شه اما میخوام به جای اینکه بهتون یک ماهی بدم ماهیگیری یاد بگیرید.

علت سوالات و پاسخ هایی که دادمم همین بوده. مختارید اگه میخواید به همون یک ماهی بسنده کنید براتون دستوراتش رو مینویسم. شما هم دقیقا همونا رو کپی کنید تو برنامه مشکلتون حل میشه

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

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

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

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

evil_gates

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

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

اينطوري بهتر نيست دوست بزرگتر من؟
 
[FONT=&quot]PluginRun[/FONT][FONT=&quot]("PlugIn1","GetText")[/FONT]
[FONT=&quot]اجرا و فراخواني پلاگين[/FONT]
[FONT=&quot]PluginGet[/FONT][FONT=&quot]("PlugIn1","get$")[/FONT]
[FONT=&quot]گرفتن مقدار تايپ شده داخل پلاگين و ريختن آن در يك متغير رشته اي بنام[/FONT][FONT=&quot]get[/FONT]
[FONT=&quot]str_len=[/FONT][FONT=&quot]LEN[/FONT][FONT=&quot](get$)-[/FONT][FONT=&quot]2[/FONT]
[FONT=&quot]get$=[/FONT][FONT=&quot]StrCopy[/FONT][FONT=&quot](get$,[/FONT][FONT=&quot]1[/FONT][FONT=&quot],str_len)[/FONT]
[FONT=&quot]دوخط بالا رو نميدونم چكار ميكنه و توي يك مثال مشابه ديدم و ميدونم كه اگه نباشه مقدار درستي از پلاگين گرفته نميشه در واقع نميدونم دوتا تابع [/FONT][FONT=&quot]len[/FONT][FONT=&quot] و [/FONT][FONT=&quot]strcopy[/FONT][FONT=&quot] چكار ميكنن[/FONT]

[FONT=&quot]For[/FONT][FONT=&quot] i=[/FONT][FONT=&quot]1[/FONT][FONT=&quot]To[/FONT][FONT=&quot] arraynum[/FONT]
[FONT=&quot]دستور حلقه تكرار هست كه در اون [/FONT][FONT=&quot]حلقه از عدد يك تا تعداد نامشخصي كه نميدونيم چه عدديه تكرار ميشه [/FONT]

[FONT=&quot] SearchQuery$ = [/FONT][FONT=&quot]'SELECT * FROM contacts WHERE FirstName LIKE \''[/FONT][FONT=&quot]+ get$+[/FONT][FONT=&quot]'\'[/FONT][FONT=&quot] OR LastName LIKE \[/FONT][FONT=&quot]''[/FONT][FONT=&quot]+get$+[/FONT][FONT=&quot]'%\';'[/FONT]
[FONT=&quot]دستور جستجوي ديتابيس هست كه در اون [/FONT][FONT=&quot]select[/FONT][FONT=&quot] فرمان جستجوست و علامت ستاره يعني همه ركوردها ومعني دستور اينه كه جستجو ميكنه فيلد [/FONT][FONT=&quot]firstname[/FONT][FONT=&quot] رو از جدول [/FONT][FONT=&quot]contacts[/FONT][FONT=&quot] و ركوردهايي از اين جدول رو كه فيلد نام اونها برابر مقدار جستجوي [/FONT][FONT=&quot]get[/FONT][FONT=&quot] هست برميگردونه[/FONT]

[FONT=&quot]PluginSet[/FONT][FONT=&quot]("PlugIn","SearchQuery$")[/FONT]
[FONT=&quot]مقدار جستجو شده رو در پلاگين قرار ميده [/FONT]
[FONT=&quot]PluginRun[/FONT][FONT=&quot]("PlugIn","Query")[/FONT]
[FONT=&quot]دستور مربوط به پلاگينه و نميدونم دقيقا چكار ميكنه[/FONT]
[FONT=&quot]PluginGet[/FONT][FONT=&quot]("PlugIn","Results$")[/FONT]
[FONT=&quot]مقدار [/FONT][FONT=&quot]Results$[/FONT][FONT=&quot] مقدار يافته شده از حاصل جستجوست[/FONT]

[FONT=&quot]PluginGet[/FONT][FONT=&quot]("PlugIn","Rows")[/FONT]
[FONT=&quot]فكر كنم ركوردهايي رو ميگيره كه مقدار فيلد نام اونها برابر مقدار جستجو شده هست[/FONT]

[FONT=&quot]PluginRun[/FONT][FONT=&quot]("PlugIn","DBError")[/FONT]
[FONT=&quot]PluginGet[/FONT][FONT=&quot]("PlugIn","DBError$")[/FONT]
[FONT=&quot]دقيقا نميدونم دو دستور بالا چكار ميكنه ولي تا اونجايي كه ميدونم براي گرفتن خطاهاي مربوط به دستورات پلاگين ديتابيس هست[/FONT]

[FONT=&quot]ScriptTimer[/FONT][FONT=&quot]("ReadFirstRow","[/FONT][FONT=&quot]100[/FONT][FONT=&quot]")[/FONT]
[FONT=&quot]سطر اول يا همون ركورد اول خونده ميشه ولي معنيش رو نميدونم[/FONT]

[FONT=&quot] Results$=Results$+[/FONT][FONT=&quot]'|'[/FONT]
[FONT=&quot]دقيقا نميتونم توضيح بدم ولي اينقدر ميدونم كه مقدار يافته شده به صورت ركورد هست كه بايد بعد از اين تفكيك بشه و مقدار هر فيلد در قسمت مربوط به خودش نمايش داده بشه[/FONT]

[FONT=&quot] arraynum=[/FONT][FONT=&quot]GetArrayNum[/FONT][FONT=&quot](Results$,[/FONT][FONT=&quot]'|'[/FONT][FONT=&quot])[/FONT]
[FONT=&quot]نميتونم توضيحش بدم ولي فكر كنم مقدار آرايه هاي جستجو رو در يك آرايه ديگه ميريزه[/FONT]
[FONT=&quot] substr$=[/FONT][FONT=&quot]GetArrayItem[/FONT][FONT=&quot](Results$,[/FONT][FONT=&quot]'|'[/FONT][FONT=&quot],i)[/FONT]
[FONT=&quot]نميتونم توضيحش بدم[/FONT]
[FONT=&quot] x=[/FONT][FONT=&quot]POS[/FONT][FONT=&quot](get$,substr$)[/FONT]
[FONT=&quot]از تابع [/FONT][FONT=&quot]pos[/FONT][FONT=&quot] هم چيزي نميدونم و از يك مثال برداشت كردم[/FONT]
[FONT=&quot]If[/FONT][FONT=&quot] (x<>[/FONT][FONT=&quot]0[/FONT][FONT=&quot]) [/FONT][FONT=&quot]Then[/FONT]
[FONT=&quot]دستور شرطي هست كه اگر مقدار مخالف صفر بود اونوقت به خط بد ميره[/FONT]
[FONT=&quot]ListBoxAddItem[/FONT][FONT=&quot]("ListBox","substr$")[/FONT]
[FONT=&quot]اضافه كردن آيتمي به لست باكس كه فكر كنم متغير آرايه ايه[/FONT]
[FONT=&quot]End[/FONT]
[FONT=&quot]تمام شدن شرط[/FONT]
[FONT=&quot]Next[/FONT][FONT=&quot] i[/FONT]
[FONT=&quot]پايان حلقه تكرار[/FONT]
[FONT=&quot]LoadText[/FONT][FONT=&quot]("Paragraph","substr$ ")[/FONT]
[FONT=&quot]ريختن مقدار متغير آرايه اي در يك شي پاراگراف [/FONT]
[FONT=&quot]If[/FONT][FONT=&quot] (x<[/FONT][FONT=&quot]1[/FONT][FONT=&quot]) [/FONT][FONT=&quot]Then[/FONT]
[FONT=&quot]اگه مقدار كوچكتر از يك باشه[/FONT]
[FONT=&quot]Message[/FONT][FONT=&quot]("Nothing found!","")[/FONT]
[FONT=&quot]پيغامي مبني بر پيدا نشدن به كاربر ميده.[/FONT]
[FONT=&quot]End[/FONT]
[FONT=&quot]پايان[/FONT]
[FONT=&quot]در مورد متغير هاي رشته اي و آرايه اي و استفاده از اونها كاملا اطلاعاتم ضعيفه.[/FONT]
[FONT=&quot]بازم از توجه شما دوستان ممنون.
متاسفانه كدها يه كم به هم ريخته و پرانتزها و علامت متغيرها به اول خطها اومده بايد ببخشيد نميدونم چرا موقع ارسال اينطوري ميشه.
[/FONT]
 
آخرین ویرایش:

evil_gates

اين نيز بگذرد ...
عزيز

اول اينكه كدهاتون رو تو تگ قرار بديد تا بهم ريخته نشن.

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

شما ديتابيس داريد حاوي تعدادي ركورد

براي جستجو ركورد مورد نظر و بازگشت نتيجه لازمه يك كادر دريافت كننده (EditBox) داشته باشيد تا بتونيد عبارتي كه ميخوايد جستجو بشه رو به ديتابيس بفرستيد و عمليات جستجو رو انجام بديد.

شما براي اين كادر دريافت كننده از پلاگين ديگه اي به نام TRichEdit استفاده كرديد.

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

کد:
PluginRun("PlugIn1","GetText")
دستور GetText به پلاگين ارسال ميشه

کد:
PluginGet("PlugIn1","get$")
نتيجه ارسال دستور تو متغير $get برگردونده ميشه. انتظار ميره عبارتي كه تو پلاگين تايپ كرده بوديم تو اين متغير باشه. اما نكته اي هست كه شايد خيلي به چشم نياد. مقداري كه تو اين متغير هست دقيقا اون متني كه ما تو پلاگين تايپ كرديم نيست.

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

اين رو ميتونيد با تابع LEN متوجه بشيد. فرض كنيد شما يك كلمه 4 حرفي رو تو پلاگين تايپ كرديد.
وقتي با تابع LEN طول رشته اي كه تو متغير $get بدست اومده رو بررسي ميكنيد ميبينيد كه عدد 6 رو به شما نشون ميده.
اين كد رو به انتهاي دو خط بالا اضافه كنيد و نتيجه رو چك كنيد.
کد:
x=LEN(get$)
Message("","x")

اين مشكل رو قبلا تو يكي ديگه از پستها براتون حل كرده بودم:
کد:
str_len=LEN(get$)-2
get$=StrCopy(get$,1,str_len)
تو خط اول اين كد من طول رشته $get رو بدست آوردم و ازش 2 واحد كم كردم. و تو خط دوم با تابع StrCopy از ابتداي رشته تا محلي كه مورد نظر هست (يعني همون طول رشته) كپي كردم و مجددا تو همون متغير $get ريختم. بنابراين اون دوتا كاراكتر اضافه انتهاي متن از بين رفت.

دوباره طول رشته و مقدار موجود تو متغير $get رو بررسي كنيد. اينبار ميبيند كه طول رشته همون 4 هست و مقدار موجود هم دقيقا همون چيزي كه شما تو پلاگين تايپ كرديد.

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

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

براي اينكار بايد بيايم سراغ پلاگين SQLite و دستورات و توابع مربوط به اون.

ما با دستور Query از ديتابيس گزارشگيري ميكنيم. اما لازمه قبل از استفاده از اين دستور دقيقا مشخص كنيم كه چي رو قصد داريم گزارش بگيريم.
براي اينكار احتياج هست كمي هم زبان SQL بدونيم.
 

evil_gates

اين نيز بگذرد ...
کد:
SELECT * FROM tablename WHERE fieldname LIKE myvariable
اين دستور تو زبان SQL به دنبال هر چيزي در جدول پايگاه داده شما ميگرده كه فيلد مشخص شده اون با مقدار متغير مشخص شما برابر باشه.
نتيجه اينكه ركوردي كه متغير myvariable با مقدار فيلد fieldname برابر باشه بدست مياد.

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

بنابراين:
کد:
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ get$+'\' OR LastName LIKE \''+get$+'%\';'
اين خط دستور SELECt زبان SQL رو براي جستجوي هر چيزي در جدول contact كه فيلد FirstName اون برابر با متغير $get يا فيلد LastName اون برابر با متغير $get باشه رو به صورت يك متغير رشته اي در $SearchQuery ذخيره ميكنه.

کد:
PluginSet("PlugIn","SearchQuery$")
اين خط مقدار متغير $SearchQuery رو به پلاگين ميفرسته

کد:
PluginRun("PlugIn","Query")
و اين خط دستور گزارش گيري رو در پلاگين اجرا ميكنه.

نتيجه اينكه اگه ركوردي وجود داشته باشه كه مقدار Firstname يا Lastname اون با مقدار $get برابر باشه بدست مياد.

حالا ميتونيد نتيجه جستجو رو با اين دستور به mmb ارسال كنيد:
کد:
PluginGet("PlugIn","Results$")
نتيجه بدست اومده تو متغير $Results ذخيره ميشه. چيزي كه اين متغير ذخيره شده يك رشته متني حاوي فيلدهاي مختلف يك ركورد هست كه با يك كاراكتر خاص (|) از همديگه جدا شدن.

کد:
PluginGet("PlugIn","Rows")
اين خط تعداد ركوردهاي بدست اومده رو برميگردونه. بعنوان مثال اگه تو ديتابيس شما 3 تا ركورد موجود باشه كه با شرط شما در دستور SELECt برابر باشه عدد 3 تو متغير Rows بر ميگرده.

کد:
PluginRun("PlugIn","DBError")
PluginGet("PlugIn","DBError$")
اين دو خط ارور هاي احتمالي حاصل از جستجو رو بر ميگردونه. مقدار موجود تو $DBError براي شرط شما در زماني كه جستجو دچار اشكال ميشه مورد استفاده قرار ميگيره.

کد:
ScriptTimer("ReadFirstRow","100")
اين خط هم كه احتمالا از رو مثال جناب silvercover كپي كرديد اسكريپت ReadFirstRow رو تو همون مثال اجرا ميكنه. اين خط شايد تو پروژه شما كاربردي نداشته باشه (اگه از روش ديگه اي براي نمايش اطلاعات تو فرمتون استفاده كرديد) بنابراين ميشه ازش چشم پوشي كرد.
 

evil_gates

اين نيز بگذرد ...
بعد از اينكه دستورات بالا اجرا شد و نتيجه جستجو تو متغير $Results برگشت همونطور كه قبلا هم گفتم يك رشته متني خواهيد داشت كه با يك كاراكتر خاص فيلدهاي مختلف از هم جدا شدن. چيزي شبيه به اين firstname|lastname|age|address|call

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

براي اينكه به روش من رشته شما تفكيك بشه لازمه يك كاراكتر | به انتهاي اين رشته اضافه كنيد بنابراين از اين كد استفاده ميكنيم:
کد:
Results$=Results$+'|'
نتيجه: فرض بالا به اين صورت خواهد شد |firstname|lastname|age|address|call

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

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

پس با اين دستور تعداد كاراكترهاي | رو در رشته خودمون بدست مياريم.
کد:
arraynum=GetArrayNum(Results$,'|')
دستور GetArrayNum ميتونه تعداد كاراكترهاي موجود تو رشته $Results رو بدست بياره و تو متغير عددي به نام arraynum بريزه

تو فرض رشته بالا يعني همون |firstname|lastname|age|address|call بايد عدد 5 تو متغير arraynum ذخيره بشه چون 5 تا كاراكتر | وجود داره.

پس ما ميتونيم بگيم كه حلقه ما 5 بار بايد بچرخه پس شروع و پايان حلقه اين خط خواهد بود:
کد:
For i=1 To arraynum
Next i

به ازاي هربار چرخش حلقه بايد يك بخش از اين رشته تفكيك بشه و تو يك متغير ديگه ذخيره بشه. براي اينكار ما از دستور GetArrayItem استفاده ميكنيم. به برنامه ميگيم رشته ما رو تا محل جداساز رشته يا همون كاراكتر | رو بعنوان يك زير رشته در نظر بگير و از رشته اصلي جدا كن و در متغير جديدي بريز. بهترين انتخاب ميتونه متغير آرايه اي باشه پس:
کد:
substr$[i]=GetArrayItem(Results$,'|',i)

خروجي اين دستور در پايان حلقه چنين نتيجه اي خواهد بود:
کد:
substr$[1]=firstname
substr$[2]=lastname
substr$[3]=age
substr$[4]=address
substr$[5]=call
شما ميتونيد مقدار هركدوم از اين متغيرها رو هرجايي كه مدنظرتون هست نمايش بديد.


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

موفق باشيد
 
سلام واقعا دستت درد نكنه ما رو شرمنده كردي اميدوارم بتونم جبران كنم.
كد:
str_len=LEN(get$)-2​
get$=StrCopy(get$,1,str_len)​

چون پلاگين به صورت خودكار دوتا كاراكتر به رشته اضافه ميكنه پس با تابع len طول رشته بدست مياد و 2 واحد از اون در خط اول كد كم ميشه حالا در خط دوم كد با تابع strcopy از طول رشته كپي گرفته شده و دوباره توي متغير get ريخته ميشه
سوال اينه كه اين عدد1 توي خط دوم بين get و strlen چكار ميكنه.
در مورد استفاده از پلاگين هم بايد بگم خب ما توي ايران داريم زندگي ميكنيم و زبان رسمي ما فارسيه ديگه اينكه من شخصا نرم افزارهاي آموزشي و ساخته هاي مولتي مدياي ديگه اي رو كه ديدم هيچكدوم مشكلي با فارسي نداشتن و فارسي رو از چپ به رات پيكربندي نميكنن. حالا واسم يه كم عجيبه كه توي اين انجمن كسي زياد بهش نپرداخته.
كد:
SearchQuery$ = 'SELECT * FROM contacts WHERE FirstName LIKE \''+ get$+'\' '%\';'​
در دستور بالا select يعني فرمان جستجو به زبان sql * يعني تمام ركوردها از جدول contacts كه فيلد firstname آنها برابر متغير get$ باشه
اول اينكه من فيلد last name آيا درست حذف كردم ؟
دوم اين علايم منو سردرگم ميكنه
Like\'' يا %\',' ميدونم زبان sql هست ميخوام بدونم براي مثلا يه مثال ديگه كدوم ازين علايم نياز هست و كدوم نه چون جايي از صحبتهاي آقا محمد شنيدم كه گفته بودن ميتونيد مورد جستجو رو بين دوتا علامت درصد قرار بدبد البته فكر كنم براي جستجوهاي مشابه بود.

براي اينكه به روش من رشته شما تفكيك بشه لازمه يك كاراكتر | به انتهاي اين رشته اضافه كنيد بنابراين از اين كد استفاده ميكنيم:
کد:
Results$=Results$+'|'
اينكه ميگيد به روش شما يعني چي آيا روش ديگه اي هم وجود داره و آيا روش كلي وجود داره كه من بتونم بر اساس اون توي يك مثال ديگه هم عمل كنم.
براي خروجي زير آيا من بايد شماره فيلدهارو بدونم و اگه بخوام چهار آيتم زير رو به يك ليست باكس اضافه كنم چكار بايد بكنم خودم كه فكر ميكنم بايد از حلقه تكرار استفاده كنم اما نميدونم چطور.
كد:
substr$[1]=firstname​
substr$[2]=lastname​
substr$[3]=age​
substr$[4]=address​
substr$[5]=call​
در ضمن اگه از اين متغير رشته اي مثالهاي ساده داري كه بتونه بهم كمك كنه واسم لينك بذار بلكه بتونم بيشتر ياد بگيرم.
بازم ممنون.
 

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

بالا