مشكل با جستجو و ويرايش در پلاگين SQLite

evil_gates

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

من يك مشكل عجيب با پلاگين SQLite پيدا كردم.

من يك پروژه جديد ايجاد كردم با تعدادي شي Editbox براي گرفتن مقادير ورودي و چند تا دكمه شامل ثبت ركورد جديد - ركورد قبل - ركورد بعد - جستجو در ركورد - ويرايش ركورد - حذف ركورد

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

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

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

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

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

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

دكمه جستجو من هم از كار ميفته و هيچ عملي رو انجام نميده.

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

نميدونم تونستم مشكلم رو واضح توضيح بدم يا نه.

ممنون ميشم راه حل دوستان رو بدونم

thnx a lot every body

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

evil_gates

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

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
همونطور که حامد عزیز هم اشاره کردن، بهتر بود (قسمتی) از سورس پروژه رو قرار میدادید تا بشه بهتر بررسیش کرد، چون با توضیحات فعلی شما واقعاً سخته که اشکال رو پیدا کرد...
مثلاً من یادمه توی پروژه ی دیکشنری تو درج اطلاعات مشکل داشتم و اونهم بخاطر این بود که لغت هایی که نیاز بود ثبت بشن دقیقاً مشخص نبود چه کاراکترهایی درشون وجود داره....، چندین راه رو امتحان کردم که نتیجه نداد ولی در آخر خیلی ساده در کد sql ی که نوشته بودم بجای سینگل کوتیشن ( ' ) از دابل کوتیشن ( " ) استفاده کردم، همین...، حالا شما فرض کنید در این شرایط اگر کسی همچین موردی رو تجربه نکرده باشه چقدر مشکل هست که نقص کار رو پیدا کرد.

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

مثلاً کدی که برای ویرایش یا حذف اطلاعات ازش استفاده میشه (چون میفرمایید محل بروز خطا ها از همینجاست) نیاز هست که بررسی بشه.
 

evil_gates

اين نيز بگذرد ...
ممنون از پاسختون

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

قبلا دوتا بانك ديگه براي شهرداري و آستان قدس با همين پلاگين و همون الگوريتمي كه جناب SilverCover تو نمونه هاشون گذاشته بودن با كمي تغييرات نوشتم و هيچ مشكلي هم نداشتم.

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

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

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

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

احتمالات مختلف رو هم در نظر گرفتم مثل اينكه ممكنه پلاگين SQLite مشكلي داشته باشه، mmb من مشكلي داشته باشه، ويندوزم مشكلي داشته باشه و ... اما بازم نشد.

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

بازم ممنون از وقتي كه گذاشتيد.

:rose:
 

evil_gates

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


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

کد:
meseg$='        شما قصد ويرايش اطلاعات اين ركورد را داريد'+CHR(13)+CHR(13)+'             آيا عمليات را تاييد مي نماييد؟'+',3'+CHR(13)
MessageEx("ويرايش اطلاعات","meseg$")
If (CBK_MsgEx=6) Then
  editquery$=ed1$+ed2$+ed3$+ed4$+ed5$+ed6$
  PluginSet("PlugIn","editquery$")
  PluginRun("PlugIn","UpdateDB")
  PluginGet("PlugIn","ed_ret")
  PluginRun("PlugIn","DBError")
  PluginGet("PlugIn","Error$")
  If (ed_ret = 1) Then
    MessageEx("ثبت اطلاعات","اطلاعات شما با موفقيت ويرايش شد")
    R=1
    RunScript("ReadFirstRow")
    Return()
  Else
    MessageEx("خطا در ثبت","متاسفانه ويرايش صحيح صورت نگرفت")
    Return()
  End
End


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

کد:
meseg$='        شما قصد حذف اطلاعات اين ركورد را داريد'+CHR(13)+CHR(13)+'             آيا عمليات را تاييد مي نماييد؟'+',3'+CHR(13)
MessageEx("حذف اطلاعات","meseg$")
If (CBK_MsgEx =6) Then
  del_query$ = 'DELETE FROM contacts WHERE ac=\''+ac$[R]+'\';'
  PluginSet("PlugIn","del_query$")
  PluginRun("PlugIn","UpdateDB")
  PluginGet("PlugIn","del_ret")
  If (del_ret = 1) Then
    MessageEx("حذف اطلاعات","اطلاعات شما با موفقيت حذف شد")
    R=1
    RunScript("frs_script")
    Return()
  Else
    MessageEx("خطا در حذف","متاسفانه برنامه قادر به حذف اين اطلاعات نيست")
    Return()
  End
End

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

پیوست ها

  • Untitled-1.jpg
    Untitled-1.jpg
    241.9 کیلوبایت · بازدیدها: 24
آخرین ویرایش:

BEHESHT

Well-Known Member
جالبه هیچ مشکلی تو عدد ها و نوشته ها لاتین نیست تو تصویر که شم قرار دادید.:-<

و نوشته ها به همون صورتی در میاد که وقتی فارسی وقتی ساپورت نمیشه:idea:

مطمئن هم هستید که از آخرین ویرایش پلاگین آقا حامد استفاده می کنید و اشتباهی نشده؟:?:

ولی به نظر من برای همچین پروژه مهمی بهتر بود از یه زبون برنامه نویسی قدرتمند تو زمینه دیتابیس مثل دلفی استفاده می کرد:-?
 
آخرین ویرایش:

evil_gates

اين نيز بگذرد ...
جالبه هیچ مشکلی تو عدد ها و نوشته ها لاتین نیست تو تصویر که شم قرار دادید.:-<

و نوشته ها به همون صورتی در میاد که وقتی فارسی وقتی ساپورت نمیشه:idea:

مطمئن هم هستید که از آخرین ویرایش پلاگین آقا حامد استفاده می کنید و اشتباهی نشده؟:?:

ولی به نظر من برای همچین پروژه مهمی بهتر بود از یه زبون برنامه نویسی قدرتمند تو زمینه دیتابیس مثل دلفی استفاده می کرد:-?


ممنون دوست عزيز

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

http://forum.majidonline.com/showthread.php?t=111891

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

هر راه حلي هم كه ذهنم ميرسيد رو تست كردم. :-?

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

اما اينكه چرا از mmb استفاده ميكنم چون اولا كاربريش برام راحت تره در ضمن اينجور برنامه ها پيچيدگي خاصي نداره كه احتياج به زبان ديگه اي باشه. همه كارهايي كه ميخوام رو ميشه باهاش انجام داد. اين دفعه هم استثنائاً دچار اين مشكل شدم. :cry:

:rose:
 

splinter cell

Well-Known Member
عجیبه!!!
اما بیشتر شبیه وقتیه که اسکریپت فونت ادیت باکسها روی وسترن تنظیم شده(نه روی عربیک).و شاید به همین خاطر ایمیل و شماره ها رو که لاتین هستند درست نشون میده.پس احتمال زیاد اطلاعات دیتابیس درست هستن فقط مشکل توی نمایش اونهاست.
 

evil_gates

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

ممنون دوست عزيز

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

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

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

evil_gates

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

پیوست ها

  • Untitled-2.jpg
    Untitled-2.jpg
    77.9 کیلوبایت · بازدیدها: 11

BEHESHT

Well-Known Member
اگه طبق فرموده هاتون با ضافه کردن مشکل نداره با ویرایش مشکل داره :


یه کار کن موقعی که فایلت رو ویرایش کردی اضافه اش کن آخر لیست بعدش اونی که بوده رو حذف کن :)
 

Saman

مدیر انجمن مولتی مدیا بیلدر
سلام
شما یک فایل دیتابیس حاوی 2 الی 3 رکورد ذخیره شده با همین نرم افزاری رو که نوشتید ، اینجا بذارید.
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
کد:
editquery$=ed1$+ed2$+ed3$+ed4$+ed5$+ed6$
کوئری ای که شما استفاده کردید خیلی گویا نیست، شاید اشکال از همین کدها باشه.

ضمن اینکه یک توصیه دارم و اینکه بهتره در کدهاتون بجای سینگل کوتیشن از دابل کوتیشن استفاده کنید تا احتمال بروز خطاها رو کاهش بدید:
کد:
del_query$ = 'DELETE FROM contacts WHERE ac="'+ac$[R]+'";'
 

evil_gates

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

من مشكلمو حل كردم اما خودمم نميدونم دقيقا چه اتفاقي افتاد. :oops::-?

بنا به پيشنهاد جناب [SaMaN] براي اينكه بتونم نمونه بزارم اومدم يك ديتابيس جديد ايجاد كردم با همون فيلدها و مشخصات ديتابيس قبلي و به جاي ديتابيس فعلي برنامه اون رو جايگزين كردم.

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

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

يك سوال: به نظر شما به حجم بالاي داده هامون اين مشكل تو ديتابيس قبلي بوجود اومده بود؟

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

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

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



در ضمن جناب nevercom

editquery$=ed1$+ed2$+ed3$+ed4$+ed5$+ed6$

کوئری ای که شما استفاده کردید خیلی گویا نیست، شاید اشکال از همین کدها باشه.

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

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

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

--------------------------------

بازم از همه دوستان از اينكه وقت گذاشتيد و مشكلمو بررسي كرديد ممنون
:rose:
 

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

بالا