PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : The search key was not found in any record ایراد



TAHA
11-22-2009, 08:13 PM
The search key was not found in any record ایراد




کد:

Microsoft JET Database Engine error '80040e21'

The search key was not found in any record.

/myfile.asp, line 113



یه روز یه برنامه ASP که از بانک اطلاعاتی ACCESS استفاده میکرد نوشته بودم که وقتی فرمان update يا delete را بر روی بانک اعمال ميکردم پيام فوق برام می آمد و به من میگفت که چنین رکوردی در بانک وجود ندارد.این در حالی بود که وقتی Query میگرفتم همه چیز درست بود . فکر کردم مشکل از سرور است .دیتابیس رو از سایت دانلود کردم تا رکورد موردنظر را در اکسس بصورت دستی پاک کنم ، اما با کمال تعجب دیدم که در حالی که رکورد موردنظر جلوی چشمان منه ، میگه چنین رکوردی موجود نیست . هر چی کتاب در این زمینه داشتم زیر و رو کردم ، اما چیزی پیدا نکردم . یه دفعه یاد یه کتابخانه خیلی بزرگ افتادم که میدونستم حتما حداقل یه مقاله در این مورد توش هست ! بله ، اینترنت !

مشابه این برنامه را قبلا نوشته بودم و درست کار میکرد .اما این برنامه با قبلی کمی فرق داشت . این برنامه در بانک اطلاعاتی اش دارای یک فیلد MEMO بود . بانک اکسس من صدمه دیده بود و برای درست کردن آن راه زیر را پیدا کردم :


برای تعمیر دیتابیس : اگر بانک روی سرور است آنرا دانلود کنید و در اکسس آن را باز کنید . به منوی Tools بروید و 'Database Utilities را باز کنید و Compact and Repair Database را انتخاب کنید . با اینکار اکسس دیتابیس را تعمیر میکند . حال آنرا ذخیره کنید و دوباره میتوانید رکورد ها را حذف یا آپدیت کنید.


این کار را کردم ودرست شد و من دیتابیس را آپلود کردم . اما بار دیگر این اتفاق افتاد .خوب ، باید یه راه درستی باشه که از بروز این مشکل پیشگیری کنه، نمیشه که هر روز من فایل رو دانلود کنم. ( همیشه پیشگیری بهتر از درمان است ) و بالاخره راه حل را یافتم .


برای پیشگیری از بروز مشکل : فیلد MEMO نباید Index آن برابر YES باشد . چون فیلد های memo نمی توانند اندیس داشته باشند این مشکل روی میدهد .
یک مشکل و یک راه دیگر : این مشکل در موقعی که نام یک فیلد دارای فاصله باشد نیز روی میدهد . هنگام استفاده از درایور ODBC با یک کرسر سمت سرور ، اجازه آپدیت داده نمیشود و بجای آن ADO یک فرمان SQL برای آن میسازد ، ولی از گذاشتن علامت [ ] در اطراف نام فیلد غفلت میکند و این امر باعث ایجاد Error میشود . برای پیشگیری از این مشکل در نام فیلد از فاصله استفاده نکنید و یا بجای ADO از فرامین SQL استفاده کنید .