PDA

View Full Version : مدیریت پیغام های خطا در sql server یا ado



vjp
یک شنبه 09 اسفند 1383, 22:54 عصر
با سلام
چندی پیش پستی را به سایت با همین عنوان ارسال کردم و راهکار خوبی از طرف کاربران عزیز دریافت نکردم اما پس از چندی به روشی دست یافتم که با همه نقاط ضعف آن ذکر آن را خالی از لطف نمیبینم:
ما توسط یک شیء ADOTable به یک جدول متصل شده ایم و این جدول حد اقل دارای یک کلید اصلی میباشد یکی از خطاهای متداول در جداول بانک اطلاعاتی خالی گذاشتن مقدار فیلد کلید اصلی است (از قواعد جامعیت بانک) که مثال ذکر شده در پست من نیز این پیغام را مدیریت میکند مهمترین کاری که در این روال ما انجام میدهیم این است که در هنگام بروز خطا تشخیص دهیم نوع این خطا چیست و این را با استفاده از متن پیغام خطا به دست میاوریم سپس به سلیقه خود متن پیغام را تغییر میدهیم و از این پس در صورت بروز آن خطا پیعام ما دیده خواهد شد توجه داشته باشید که توسط بعضی از دوستان روشهایی از قبیل try و exception پیشنهاد میشود، به نظر من این روشها هر چقدر هم که کارا باشند ولی ما با استفاده از آنها بخشی از امکانات سیستمهای مدیریت بانک اطلاعاتی (ِِِِّDBMS) را نادیده گرفته ایم و راه خود را دشوارتر کرده ایم ، حال آنکه خود این سیستمها (که SQL Server نیز یکی از آنهاست) به شکلی قوی این مسائل را مدیریت میکنند و ما باید فقط بتوانیم از این ابزارها استفاده کنیم روش کار به این صورت است:
(فرض بر این است که خواننده این سطور با ایجاد یک برنامه ساده کاربردی بانکی توسط نرم افزار دلفی و و اشیاء ADO آشنایی دارد)
1- فرض میکنیم بانک اطلاعاتی را مثلاٌ در SQL Server ساخته ایم و یک جدول هم داریم که حتماٌ کلید اصلی دارد
2- در یکی از فرم های دلفی توسط اشیاء ADO به بانک اطلاعاتی متصل شده ایم و سایر تشکیلات مانند ADOTable و DataSourse و DbGreed هم موجود هستند
3- آنچه که ما با آن کار داریم رویداد OnPostError مربوط به شیء ADOTable میباشد
4- کد زیر را در رویداد مذکور بنویسید:
if copy(e.Message,1,24)='Violation of PRIMARY KEY' then
e.message:='shomare tekrari ast';
if copy(e.Message,1,28)='Cannot insert the value NULL' then
e.Message:='shomare nemitavanad khali bashad' ;
پس از کامایل برنامه اگر فایل اجرایی آن را در محیط ویندوز اجرا نمایید پیغام خود را در صورت بروز خطا خواهید دید البته اجرای چنین برنامه ای از محیط خود دلفی منجر به قطع اجرا و صدور پیامهای دیگری خواهد شد که مسلماٌ اجرا نوع اول هدف اصلی ماست این را هم اضافه کنم که به دلیل مشکلات انواع ویندوزهای فارسی متن خطاها را به صورت فینگلیش نوشته ام.
البته این قطعه کد مشکل کوچکی هم دارد(شاید هم از دیدگاه نکته بینان مشگل بزرگی باشد) و آن هم این است که اگر به جای شناخت متن خطا با کد آنها کار کنیم منطقی تر باشد نگارنده این مطلب را نتوانسته است پیدا کند و عزیزانی که در این مورد آموخته هایی دارند با نظرهای تکمیلی و بهتر خود در این زمینه راهگشا خواهند بود متشکرم

AminSobati
دوشنبه 24 اسفند 1383, 11:57 صبح
دوست عزیزم،
اگر اصولی بخواهید به این مطلب نگاه کنید، ویرایش پیغامهای خود SQL Server توصیه نمیشه.
هر خطا در SQL Server چهار قسمت داره:
1) Error Number
2) Error Message
3) Severity Level
4) State

که دو مورد اول مورد نیاز ماست. وقتی شما یک فیلد رو PK قرار میدین، میتونین نام Constraint رو به دلخواه تعیین کنین. وقتی مقدار تکراری وارد PK بشه، SQL Server نام Constraint رو در Error Message به شما برمیگردونه. لذا با داشتن کد خطا و نام Constraint، دقیقا متوجه نوع خطا خواهید شد و پیغام مناسب رو به کاربر نمایش میدین.