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


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

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

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

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