نمایش نتایج 1 تا 17 از 17

نام تاپیک: چك كردن ديتابيس SQL در هنگام اجراي برنامه

  1. #1

    چك كردن ديتابيس SQL در هنگام اجراي برنامه

    با سلام

    ميخوام وقتي برنامه رو اجرا مي كنم چك كنم ببينم SQL 2000 نصب هستش يا STOP نشده يا اينكه ديتابيس مورد نظر در داخل SQL هستش يا نه؟

    با AdoConnection با SQL ارتباط برقرار كردم وقتي STOP مي كنم 3 تا پيغام ميده و داخل برنامه ميره اما كار نميكنه و اول چك كنم اگر ديتابيس ايراد داشت پيغام بده و بره بيرون

    با تشكر از دوستان

  2. #2
    کاربر دائمی آواتار سعید صابری
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    برازجان
    پست
    1,431

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    راحت ترین و بی دردسرترین راهش دستوراتت در try...except بنویس.

  3. #3

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

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

    با تشكر

  4. #4

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    با سلام
    خواهشن يكي از دوستان كمك كنه !!!!!

    با تشكر

  5. #5
    کاربر دائمی آواتار سعید صابری
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    برازجان
    پست
    1,431

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه


    TRY
    دستورات اتصال
    except
    on E : Exception do
    ShowMessage(E.ClassName+' خطا در اتصال: : '+E.Message)
    END;

    حالا بر هر دلیل دستورات اتصال با خطا روبرو بشه هر کدی در قسمت except اجرا میشه.

  6. #6
    کاربر دائمی آواتار M_Maskout
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    تهران
    سن
    46
    پست
    150

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    نقل قول نوشته شده توسط pandco مشاهده تاپیک
    با سلام
    خواهشن يكي از دوستان كمك كنه !!!!!

    با تشكر
    شیئ Application، ویژگی‌ها، متدها و وقفه‌های جالبی داره که به کمک اونا می‌شه خیلی از مدیریت‌ها رو روی کل برنامه انجام داد.
    پیشنهاد می‌دم یه روتین برای وقفه‌ی OnException اون بنویسین و توی اون وقفه، خطاهای پیش اومده در کل برنامه رو مدیریت کنین، هم برنامه خیلی حرفه‌تر می‌شه، هم دست شما برای انواع کنترل روی کل برنامه در زمان بروز خطا باز می‌شه.
    مثلاً در وقفه FormCreate از فرم اصلی برنامه دستور
    Application.OnException := OnException;
    رو قرار بدین بعد هم روتین OnException رو در ادامه به عنوان یکی از متدهای همین فرم تعریف کنین. یه چیزی مثل این:

     
    uses ComObj;
    TfrmMainForm = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure OnException(Sender: TObject; E: Exception);
    end;

    procedure TfrmMainForm.FormCreate(Sender: TObject);
    begin
    Application.OnException := OnException;
    end;

    procedure TfrmMainForm.OnException(Sender: TObject; E: Exception);
    begin
    ShowMessage(E.Message + ' (Error Code: ' + IntToStr(EOleException(E).ErrorCode) + ')');
    end;


    از پارامتر E برای تشخیص نوع خطا می‌تونید استفاده کنین. وقتی خطایی در برنامه رخ می‌ده، دلفی یه نمونه از کلاس TObject می‌سازه و خطای بوجود اومده رو با اون نمایش می‌ده.
    با استفاده از پارامتر E و تبدیل اون به کلاس ساخته شده، می‌شه خطای بوجود اومده رو مدیریت کرد.
    در اینجا اگر بجای دستور

    ShowMessage(E.Message + ' (Error Code: ' + IntToStr(EOleException(E).ErrorCode) + ')');

    از دستور


    ShowMessage(E.Message+' ('+E.ClassName+')');
    استفاده بشه، در زمان بروز خطا، عبارت داخل پرانتز در پنجره نمایش داده شده، نام کلاسی که خطا رو کنترل کرده (ایجاد کرده) نمایش داده می‌شه.
    در خطاهایی که در اثر استفاده از AdoConnection ایجاد می‌شه، نام کلاس، EDatabaseError هست و البته با استفاده از این کلاس نمی‌شه مدیریت چندانی روی خطا انجام داد. اما چون AdoConnection یه شیء OLE هست، می‌شه با استفاده از تبدیل کلاس خطای ایجاد شده به EOleException و استفاده از ویژگی ErrorCode اون کل خطای بوجود اومده رو مدیریت کرد. فقط لازمه کد خطا رو بدونید که برای این منظور می‌تونید از ساختار case ... of و شاخه else اون استفاده کنین یه چیزی مثل این:

    [LTR_INLINE]
    case EOleException(E).ErrorCode of
    .
    .
    .
    else
    ShowMessage(E.Message + ' (Error Code: ' + IntToStr(EOleException(E).ErrorCode) + ')');
    end;
    [/LTR_INLINE]


    با استفاده از ساختار کد بالا شماره خطاهای پیش بینی نشده (فقط خطاهای اشیاء OLE) مشخص می‌شه و می‌شه بعداً این شماره خطاها رو هم در برنامه مدیریت کرد.
    توجه: به استفاده از یونیت ComObj در قسمت uses توجه کنید، در غیر اینصورت نمی‌تونین از کلاس EOleException استفاده کنین.
    آخرین ویرایش به وسیله M_Maskout : جمعه 12 فروردین 1390 در 16:46 عصر دلیل: مشکلات نمایش پست تو IE

  7. #7

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    با سلام
    تو برنامه چند تا فرم دارم و تو Data Module اتصالات دیتابیس رو انجام دادم و این کد رو تو فرم اصلی برنامه میذارم بازم پیغام میده یعنی قبل از فرم اصلی اتصال دیتابیس انجام میده کجا این برنامه رو قرار بدم ؟ امکان داره یه نمونه برنامه بذارین!!!!

    با تشکر از دوستان

  8. #8
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    تهران
    پست
    106

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    نقل قول نوشته شده توسط M_Maskout مشاهده تاپیک
    شیئ Application، ویژگی‌ها، متدها و وقفه‌های جالبی داره که به کمک اونا می‌شه خیلی از مدیریت‌ها رو روی کل برنامه انجام داد.
    پیشنهاد می‌دم یه روتین برای وقفه‌ی OnException اون بنویسین و توی اون وقفه، خطاهای پیش اومده در کل برنامه رو مدیریت کنین، هم برنامه خیلی حرفه‌تر می‌شه، هم دست شما برای انواع کنترل روی کل برنامه در زمان بروز خطا باز می‌شه.
    مثلاً در وقفه FormCreate از فرم اصلی برنامه دستور
    Application.OnException := OnException;
    رو قرار بدین بعد هم روتین OnException رو در ادامه به عنوان یکی از متدهای همین فرم تعریف کنین. یه چیزی مثل این:

     
    uses ComObj;
    TfrmMainForm = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure OnException(Sender: TObject; E: Exception);
    end;

    procedure TfrmMainForm.FormCreate(Sender: TObject);
    begin
    Application.OnException := OnException;
    end;

    procedure TfrmMainForm.OnException(Sender: TObject; E: Exception);
    begin
    ShowMessage(E.Message + ' (Error Code: ' + IntToStr(EOleException(E).ErrorCode) + ')');
    end;


    از پارامتر E برای تشخیص نوع خطا می‌تونید استفاده کنین. وقتی خطایی در برنامه رخ می‌ده، دلفی یه نمونه از کلاس TObject می‌سازه و خطای بوجود اومده رو با اون نمایش می‌ده.
    با استفاده از پارامتر E و تبدیل اون به کلاس ساخته شده، می‌شه خطای بوجود اومده رو مدیریت کرد.
    در اینجا اگر بجای دستور

    ShowMessage(E.Message + ' (Error Code: ' + IntToStr(EOleException(E).ErrorCode) + ')');

    از دستور


    ShowMessage(E.Message+' ('+E.ClassName+')');
    استفاده بشه، در زمان بروز خطا، عبارت داخل پرانتز در پنجره نمایش داده شده، نام کلاسی که خطا رو کنترل کرده (ایجاد کرده) نمایش داده می‌شه.
    در خطاهایی که در اثر استفاده از AdoConnection ایجاد می‌شه، نام کلاس، EDatabaseError هست و البته با استفاده از این کلاس نمی‌شه مدیریت چندانی روی خطا انجام داد. اما چون AdoConnection یه شیء OLE هست، می‌شه با استفاده از تبدیل کلاس خطای ایجاد شده به EOleException و استفاده از ویژگی ErrorCode اون کل خطای بوجود اومده رو مدیریت کرد. فقط لازمه کد خطا رو بدونید که برای این منظور می‌تونید از ساختار case ... of و شاخه else اون استفاده کنین یه چیزی مثل این:

    [LTR_INLINE]
    case EOleException(E).ErrorCode of
    .
    .
    .
    else
    ShowMessage(E.Message + ' (Error Code: ' + IntToStr(EOleException(E).ErrorCode) + ')');
    end;
    [/LTR_INLINE]


    با استفاده از ساختار کد بالا شماره خطاهای پیش بینی نشده (فقط خطاهای اشیاء OLE) مشخص می‌شه و می‌شه بعداً این شماره خطاها رو هم در برنامه مدیریت کرد.
    توجه: به استفاده از یونیت ComObj در قسمت uses توجه کنید، در غیر اینصورت نمی‌تونین از کلاس EOleException استفاده کنین.
    دوست عزیز بارها بحث شده که رویداد OnException برای این هست که نحوه نمایش پیغام رو پیشرفته تر یا بخواهیم لوگ کنیم. این استفاده از این رویداد چندان جالب نیست. تا اونجایی که من می دونم پیغام خطای مناسب در ADO داده میشه و نیازی به کشف کد خطا نیست. اینجوری تنها حجم کد بالا میره بدون اینکه کار مثبتی انجام شه. شیوه minair2004 جذاب تر هست. منتها خوشحال می شم تجربه های شخصی تون رو در اینباره بیشتر بدونم.

  9. #9
    کاربر دائمی آواتار M_Maskout
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    تهران
    سن
    46
    پست
    150

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    نقل قول نوشته شده توسط a_mosavian مشاهده تاپیک
    دوست عزیز بارها بحث شده که رویداد OnException برای این هست که نحوه نمایش پیغام رو پیشرفته تر یا بخواهیم لوگ کنیم. این استفاده از این رویداد چندان جالب نیست. تا اونجایی که من می دونم پیغام خطای مناسب در ADO داده میشه و نیازی به کشف کد خطا نیست. اینجوری تنها حجم کد بالا میره بدون اینکه کار مثبتی انجام شه. شیوه minair2004 جذاب تر هست. منتها خوشحال می شم تجربه های شخصی تون رو در اینباره بیشتر بدونم.
    بله حق با شماست، این پست رو قبل از بحث مورد نظر شما زدم. تمام دانشم رو دارم خرج لاگ کزدن Error تو دلفی می‌کنم، ولی ظاهراً اون چیزی که دنبالشم، تو دلفی وجود نداره.
    لاگ کردن Errorها تو VB خیلی راحت انجام می‌شه (البته مثل خیلی کارای دیگه) ولی طبعاً کار با زبان حرفه‌ای‌تر، دانش عمیق‌تری نیاز داره.
    برنامه‌های VB با هر جور خطایی از کار می‌افته (مگر اینکه اونا رو Log کنیم) ولی دلفی تقریباً اصلاً اینطور نیست. ولی به نظر من این اشکال رو داره که در صورتیکه تو یه پروسه، خطایی وجود داشته باشه، هیچ جور نمی‌شه اون خطا رو در همون لحظه بر طرف کرد (البته بدون استفاده از بلاک try...except). به نظر آقای کانتو (Marco Cantu)، استفاده زیادی از بلاک مذکور، کار درستی نیست. فکر می‌کنم، اگه راهی وجود داشته باشه تا بشه فقط کد خطاها رو در زمان رخداد پیدا کرد، راحتر می‌شه اونا رو مدیریت کرد. (دارم دنبالش می‌گردم)

  10. #10

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    ولی به نظر من این اشکال رو داره که در صورتیکه تو یه پروسه، خطایی وجود داشته باشه، هیچ جور نمی‌شه اون خطا رو در همون لحظه بر طرف کرد (البته بدون استفاده از بلاک try...except).
    میشه در مورد این جمله بیشتر توضیح بدین. یعنی چی که نمیشه خطا رو همون لحظه کنترل کرد؟!!!
    به نظر آقای کانتو (Marco Cantu)، استفاده زیادی از بلاک مذکور، کار درستی نیست.
    بله، طبیعتاً اگر 200 بلاک try/except تو در تو داشته باشیم باید بگویم که این کار مناسب نیست. ولی کدام برنامه نویسی این کار وحشتناک را انجام می دهد؟؟!!
    اگه راهی وجود داشته باشه تا بشه فقط کد خطاها رو در زمان رخداد پیدا کرد، راحتر می‌شه اونا رو مدیریت کرد.
    چنین چیزی در واقعیت برای تمام کلاسهای استثنا امکان ندارد. به عنوان مثال کلاس Exception فاقد فیلدی برای نگهداری کد مربوط به خطا است. به همین دلیل بهتر است که شما با نام کلاس استثنا کار کنید و نه کد مربوط به آن.

  11. #11
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    تهران
    پست
    106

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    نقل قول نوشته شده توسط M_Maskout مشاهده تاپیک
    بله حق با شماست، این پست رو قبل از بحث مورد نظر شما زدم. تمام دانشم رو دارم خرج لاگ کزدن Error تو دلفی می‌کنم، ولی ظاهراً اون چیزی که دنبالشم، تو دلفی وجود نداره.
    لاگ کردن Errorها تو VB خیلی راحت انجام می‌شه (البته مثل خیلی کارای دیگه) ولی طبعاً کار با زبان حرفه‌ای‌تر، دانش عمیق‌تری نیاز داره.
    برنامه‌های VB با هر جور خطایی از کار می‌افته (مگر اینکه اونا رو Log کنیم) ولی دلفی تقریباً اصلاً اینطور نیست. ولی به نظر من این اشکال رو داره که در صورتیکه تو یه پروسه، خطایی وجود داشته باشه، هیچ جور نمی‌شه اون خطا رو در همون لحظه بر طرف کرد (البته بدون استفاده از بلاک try...except). به نظر آقای کانتو (Marco Cantu)، استفاده زیادی از بلاک مذکور، کار درستی نیست. فکر می‌کنم، اگه راهی وجود داشته باشه تا بشه فقط کد خطاها رو در زمان رخداد پیدا کرد، راحتر می‌شه اونا رو مدیریت کرد. (دارم دنبالش می‌گردم)
    دلفی جدا از شباهت های ظاهریش با VB بگونه ای بنیادین با اون فرق داره. شما باید یاد بگیرید مانند دلفی بیاندیشید تا بتونید از تمام امکاناتش بهره بگیرید. سیستم استثنا کارش اینه که مدیریت خطا را از حیطه کار برنامه نویس بیرون می آورد و به VCL و دلفی وا می گذارد. اگر شما استثنای پرتاب شده را نگیرید، دلفی این کار را خواهد کرد.
    درباره لوگ، در صورتی که لوگ کردن ساده نظیر ثبت مشخصات استثنا در یک پرونده و فرستاده شدن آن به توسعه گر است، با همان رویداد OnException براحتی قابل پیاده سازی است. برای راحتی کار هم می توانید از سیستم XML استفاده کنید. اگر لوگ های پیشرفته بمانند آنچه که در ویندوز و آفیس می بینیم در نگرش شماست، کمپوننت هایی بمانند EurekaLog می توانند به شما کمک کنند.

  12. #12
    کاربر دائمی آواتار M_Maskout
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    تهران
    سن
    46
    پست
    150

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    بحث داره جالب می‌شه (البته به نظر من)، ولی حیف که جاش توی این تاپیک نباید باشه. حالا...
    نقل قول نوشته شده توسط شاهین عشایری مشاهده تاپیک
    میشه در مورد این جمله بیشتر توضیح بدین. یعنی چی که نمیشه خطا رو همون لحظه کنترل کرد؟!!!
    برای من بارها پیش اومده که در زمان انجام یه کاری تو یه برنامه (یه چیزی شبیه مضمون همین تاپیک)، مثلاً ارتباط دستگاه با دیتا بیس قطع شده. کاربر هم متوجه نشده و یه فرم طولانی رو پر کرده (اسم، فامیل، تلفن، آدرس طولانی و ...) بعد هم دکمه ثبت رو زده. تو برنامه‌های ساخته شده با VB، دقیقاً تو این لحظه یه پیام Run time error روی صفحه میاد و کل برنامه بسته می‌شه. اما تو دلفی حتی پنجره مربوطه هم بسته نمی‌شه (اینکه خوبه!) ولی تو VB می‌شه با یه On Error حساب شده، جلوی بسته شدن برنامه رو گرفت و یه پیغام (در حد فهم همه) به کاربر نشون داد. در اینصورت اگه اشکال مثلاً از قطع موقتی کابل شبکه باشه و کاربر هم فقط یه کم آموزش دیده باشه، مشکل بدون هیچ دردسری برطرف می‌شه. حالا تو دلفی، تا جایی که من باهاش برخورد کردم (البته بدون استفاده از بلاک try...except) پنجره بسته نمی‌شه ولی دیگه عملیات ثبت هم انجام نمی‌شه (می‌دونم این شرایط فقط به خاطر برنامه نویسی افتضاح پیش می‌یاد. ولی پیش می‌یاد!) اینجاست که کاربر خودش با دستان توانای خودش باید پنجره (و یا در بعضی مواقع کل برنامه) رو ببنده و دوباره باز کنه.
    پیشنهاد من برای استفاده از یه Error Logger سراسری مثل Application.OnException به همین خاطره. البته به غیر دلفی بودن (=غیر حرفه‌ای بودن) کار تأکید می‌کنم. ولی کار رو پیش می‌بره.

    نقل قول نوشته شده توسط شاهین عشایری مشاهده تاپیک
    بله، طبیعتاً اگر 200 بلاک try/except تو در تو داشته باشیم باید بگویم که این کار مناسب نیست. ولی کدام برنامه نویسی این کار وحشتناک را انجام می دهد؟؟!!
    ‏200 تا رو که اصلاً صحبتش رو نکنید، یه جاهایی شاید 2 یا 3 تا بلاک تو در تو هم یه کار وحشتناک (یا شاید هم خیلی وحشتناک) باشه. منتها تا جایی که من از جمله کتاب آقای کانتو فهمیدم، نظرش اینه که باید برنامه اونقدر دقیق و حساب شده باشه که نیازی به این بلاک نباشه. و تو جاهایی هم که چاره نیست کار رو به خود دلفی بسپاریم.

    نقل قول نوشته شده توسط شاهین عشایری مشاهده تاپیک
    چنین چیزی در واقعیت برای تمام کلاسهای استثنا امکان ندارد. به عنوان مثال کلاس Exception فاقد فیلدی برای نگهداری کد مربوط به خطا است. به همین دلیل بهتر است که شما با نام کلاس استثنا کار کنید و نه کد مربوط به آن.
    بله، درسته. ولی از روی نام کلاس (و البته فکر کنم نوع کلاس بهتره) هم نمی‌شه تمام Exceptionها رو شناسایی کرد. تو VB، امکان نداره دو تا خطای مختلف یه کد رو برگردونه (من که هرگز ندیدم. تو VB هر خطایی یه کد منحصر به فرد برمی‌گردونه البته بعضی از کدها خیلی متفاوتن مثلا 2134478002-، ولی بازم منحصر به فرده). تو دلفی خیلی از خطاها برای اعلان از کلاس‌های مشابه استفاده می‌کنند. (مثلاً تقریباً تمام خطاهای دسترسی به دیتابیس از EDatabaseError استفاده می‌کنن). یه وقتی تو یه سایت (شاید همین سایت) دیدم یکی پیشنهاد داده بود، خطاها رو از روی متن خطا مدیریت کنیم (عملیات مقایسه‌ی رشته‌ای). من به هیچ عنوان فکر نمی‌کنم اینکار، کار درستی باشه. به نظرم باری که در زمان بروز هر خطا روی برنامه می‌یاد خیلی زیاد می‌شه (البته شاید یکی، دوتا رو بشه یه جورایی تحمل کرد)

    نقل قول نوشته شده توسط a_mosavian مشاهده تاپیک
    دلفی جدا از شباهت های ظاهریش با VB بگونه ای بنیادین با اون فرق داره. شما باید یاد بگیرید مانند دلفی بیاندیشید تا بتونید از تمام امکاناتش بهره بگیرید.
    کاملاً صحیحه، اما من هیچ کار رو سراغ ندارم که VB (حتی VB.net) بتونه انجام بده و دلفی نتونه. تقریباً مطمئنم که هر کاری با VB (بازم تاکید می‌کنم حتی VB.net) بشه انجام داد، تو دلفی، بهتر، سریعتر و راحتر می‌شه انجامش داد (من بیشتر منظورم دلفی 7 هست وگرنه تو نسخه‌های جدید که این مسأله اینقدر بدیهیه که اصلاً اصل مقایسه اشتباهه).

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

  13. #13

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    منتها تا جایی که من از جمله کتاب آقای کانتو فهمیدم، نظرش اینه که باید برنامه اونقدر دقیق و حساب شده باشه که نیازی به این بلاک نباشه. و تو جاهایی هم که چاره نیست کار رو به خود دلفی بسپاریم.
    همچین برداشتی کلا اشتباه هست!
    بلوک های try-except و try-finally در همه زبان هایی که Structural Exception Handling رو پشتیبانی می کنند، به نوعی وجود دارند، و وظیفه برنامه نویس هست که از اونها به درستی استفاده کنه. در برخی از زبان ها مثل جاوا، حتی لازم هست که برنامه نویس قید کنه هر متد ممکنه چه Exception هایی تولید کنه. برنامه نویس باید در طرح خودش مشخص کنه که در هر بخش از برنامه چه Exception هایی ممکنه رخ بدند، و این Exception ها کجا باید مدیریت بشند. برنامه نویسی که بی هدف، برای خودش try-except و try-finally بسازه، موجب کاهش کارایی برنامه و افزایش حجم کد ماشین تولید شده میشه، بدون اینکه چیز خاصی به دست بیاره؛ مثل این برنامه نویس هایی که من می بینم مرتبا بلوک های try-except می نویسند، و بخش except رو خالی میزارند، فکر می کنند این کار یعنی مدیریت خطا !!

    اینکه مدیریت خطا رو باید به دلفی بسپاریم هم غلط هست؛ دلفی فقط مکانیزم مربوط به مدیریت خطا رو به ما میده، کار خاصی برای خطای بوجود اومده انجام نمیده. هر کدی که ممکنه Exception تولید کنه، باید جایی مکانیزمی برای مدیریت اون Exception وجود داشته باشه؛ حالا در یک جا ممکنه همون کد خودش Exception رو مدیریت کنه، در جای دیگه ممکنه مجبور باشه اون Exception رو به کد فراخوان خودش منتقل کنه، تا اون کد مدیریت رو انجام بده. البته مدیریت Exception هم Log کرد خطا، یا نمایش پیغام خطا نیست، بلکه مجموعه اقداماتی هست که برنامه برای برطرف کردن اون خطا، یا کاهش اثرات اون خطا یا آگاه سازی کاربر از وجود اون خطا انجام میده. برای بعضی Exception ها، مثل Exception هایی که مستقیما توسط OS به برنامه ارسال میشند، منطقی ترین کاری که برنامه میتونه انجام بده اینه که در کوتاه ترین زمان ممکن، خودش را ببنده، چون اجرای برنامه در اون شرایط میتونه منجر به بروز آسیب های جدی تر به داده های کاربر یا سایر بخش های برنامه بشه. نمونه این رفتار رو در سیستم عامل ویندوز در اون خطاهای معروف صفحه آبی (BSoD) می بینید که در اون حالت، ویندوز به این نتیجه میرسه که ادامه کارش ممکنه موجب بروز مشکلات جدی تر بشه، و بلافاصله بعد از دامپ کردن داده های کرنل، خودش رو از کار میاندازه.

    پس باید اول بدونید Exception چی هست، اثراتش چی هست، مکانیزم های کنترل Exception چی هست، اصلا SEH چی هست؛ بعدش مشخص کنید که در برنامه شما باید این مدیریت به چه شکلی انجام بشه؛ و نهایتا اون طرح تون رو با استفاده از ابزارهای موجود پیاده سازی کنید. وقتی این کار رو نکنید، به اینجا می رسید که برنامه نوشته شده با VB بسته نمیشه، برنامه نوشته شده با دلفی بسته میشه!


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  14. #14

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

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

  15. #15

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    سلام :
    نقل قول نوشته شده توسط pandco مشاهده تاپیک
    تو برنامه چند تا فرم دارم و تو Data Module اتصالات دیتابیس رو انجام دادم و این کد رو تو فرم اصلی برنامه میذارم بازم پیغام میده یعنی قبل از فرم اصلی اتصال دیتابیس انجام میده کجا این برنامه رو قرار بدم ؟
    نقل قول نوشته شده توسط pandco مشاهده تاپیک
    من در اون جايي كه با برنامه ارتباط برقرار ميكنه از Try استفاده كردم اما قبل از اين برنامه ايراد ميگيره
    شما در برنامه و قبل از کامپایل ارتباط را False نمایید .
    پیشنهاد میکنم یک رابط اصلی مانند یک ADOConnection برای ارتباط داشته باشید و دیگر ابزار ها رو از راه اون به بانک ارتباط بدین و با این روش در هنگام اجرای برنامه ابتدا وصل شدن (Connect) همین ADOConnection رو بررسی نمایید و اگر شد دیگر ابزار را وصل نمایید .
        try
    ADOConnection.Connected:=True;
    //-- Connect Other =>
    except on E: Exception do
    //-- Error -
    end;

  16. #16

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    اگر میخواهید وقتی ارتباط با دیتابیس قطع میشود، کاربر متوجه شود باید از رویدادهایی مثل BeforClose جدول استفاده کرد.
    شما اگر بجای اجرای برنامه با F9 از F8 استفاده کنید،میبینید که datamodule قبل از فرم اصلی ایجاد(create) میشود.باید کدهای خود را در DataModuleCreate بنویسید.یونیت Forms را به DataModule اضافه کنید و در صورتیکه ارتباط با بانک برقرار نشد پس از نمایش پیغام خطا از Application.Terminate استفاده کنید.

    procedure TDataModule1.DataModuleCreate(Sender: TObject);
    begin
    try
    ADOConnection.Connected:=True;
    //-- Connect Other =>
    except on E: Exception do
    //-- Error -
    Application.Terminate;
    end;
    end;

  17. #17

    نقل قول: چك كردن ديتابيس SQL در هنگام اجراي برنامه

    با سلام
    با تشكر از راهنمايي دوستان من از كد بالا استفاده كردم وقتي ديتابيس run هستش كد بخش اولي رو اجرا ميكنه و connection رو true ميكنه و ميشكلي پيش نمياد ولي وقتي ديتابيس stop هستش بازهم هم خطا ميگيره كه ديتابيس رو پيدا نميكنه. امكان داره يه نمونه كد كامل دوستان لطف كنن.

    با تشكر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •