PDA

View Full Version : سوال: مشکل با پیغام connection failure در اتوماسیون



soft-c
جمعه 18 اردیبهشت 1394, 14:05 عصر
سلام
در برنامه اتوماسیون من یک مشکل به وجود امده که نیاز به راهنمایی دارم :
برنامه من تحت شبکه است . مشکل از اینجا است که وقتی کاربری در حال درج است یک باتن است که با کلیک بر روی آن برنامه ورد با استفاده از olecontainer باز می شود هنگامی که فایل ورد را ذخیره می کند و برنامه را minimize می کند (یعنی هنوز دکمه تایید را نزده است) بعد از مدتی یک دفعه پیغام connection failure روی صفحه نمایش داده میشه که به صورت پشت سرهم این عمل صورت می گیرد و دسکتاپ پر میشه از پنجره های نمایش این پیغام و در آخر مجبور میشم که برنامه را end process کنم .
کسی می تونه راهنمایی کنه ؟
آیا مشکل از ویندوز است که البته در 3 تا از سیستم ها تا حالا مشاهده شده است ؟ یا مشکل از connection است ؟

Mask
جمعه 18 اردیبهشت 1394, 15:23 عصر
فایل Word داره از چه سیستمی باز میشه؟

soft-c
جمعه 18 اردیبهشت 1394, 15:29 عصر
از روی کلاینت (هر سیستم برای خودش)
به نظر شما مشکل نمی تونه از connection مربوط به sql باشه و نیاز به reconnect شدن داشته باشه ؟

Mask
جمعه 18 اردیبهشت 1394, 15:38 عصر
پس اگه هر فایل وردی از روی سیستم خودش باز بشه ،مشکل از جای دیگست.

soft-c
جمعه 18 اردیبهشت 1394, 16:23 عصر
اگر مشکل می تونه از ورد باشه پس شاید مشکل از کدها است :
برای باز کردن ورد :


wp:=TOleContainer.Create(Self);
wp.Parent:=FrmWord;
wp.Visible:=True;
wp.Align:=alClient;
// setmasoul;
wp.CreateObjectFromFile(programpath+'\office\Head\ 1.rtf',True);
wp.DoVerb(ovShow);



برای بستن و ذخیره کردن فایل :


CreateDir(programpath+'\office\temp\'+filename) ;
wp.SaveAsDocument(programpath+'\office\temp\'+file name+'\'+filename+'.rtf');


که البته از یک کد هم برای جایگزینی بعضی از اطلاعات استفاده می کنم :


WordApp := CreateOLEObject('word.application');
WordApp:=wp.OleObject.Application;
// load a document from your file
//WordApp.Documents.Open('D:\Rahpooyan_Aouto\office\ Head\1.rtf');
// WordApp.Visible:=True;
WordApp.Selection.Find.ClearFormatting;
//
WordApp.Selection.Find.Text :=str_masoul;
WordApp.Selection.Find.Replacement.Text :=Masoul_Name ;


WordApp.Selection.Find.Forward := True;
WordApp.Selection.Find.MatchAllWordForms := False;
WordApp.Selection.Find.MatchCase :=False;
WordApp.Selection.Find.MatchWildcards := False;
WordApp.Selection.Find.MatchSoundsLike := False;
WordApp.Selection.Find.MatchWholeWord := False;
WordApp.Selection.Find.MatchFuzzy := False;
WordApp.Selection.Find.Wrap := wdFindContinue;
WordApp.Selection.Find.Format := False;
WordApp.Selection.Find.Execute(Replace := wdReplaceAll);

hadisalahi2
شنبه 19 اردیبهشت 1394, 09:01 صبح
خطایی که گفتی مشخصه که به دلیل قطع ارتباط برنامه با بانک اطلاعاتی سرور نشون داده میشه

و اینکه صفحه پر میشه از این پیام خطا ، علتش اینه که شما از یک تایمر استفاده کردی که داخلش یک دسترسی به بانک اطلاعاتی وجود داره
و چون نمیتونه به بانک متصل بشه ، پشت سر هم این خطا ظاهر میشه

شما مدت زمان اتصال به بانک رو افزایش بده
منم روی یکی از برنامه هام این مشکل رو داشتم ، با این روش مشکل برطرف شد

اما به شرطی که مشکل از برنامه باشه نه از خود شبکه محل استفاده برنامه

یا حق

soft-c
پنج شنبه 24 اردیبهشت 1394, 23:44 عصر
خطایی که گفتی مشخصه که به دلیل قطع ارتباط برنامه با بانک اطلاعاتی سرور نشون داده میشه

و اینکه صفحه پر میشه از این پیام خطا ، علتش اینه که شما از یک تایمر استفاده کردی که داخلش یک دسترسی به بانک اطلاعاتی وجود داره
و چون نمیتونه به بانک متصل بشه ، پشت سر هم این خطا ظاهر میشه

شما مدت زمان اتصال به بانک رو افزایش بده
منم روی یکی از برنامه هام این مشکل رو داشتم ، با این روش مشکل برطرف شد

اما به شرطی که مشکل از برنامه باشه نه از خود شبکه محل استفاده برنامه

یا حق
ببینید خوب بررسی کردم . مشکل از شبکه است . یعنی چون ارتباط وایرلس است بعضی مواقع ارتباط در حد چند ثانیه قطع می شود و این مشکل بروز پیدا می کند . یعنی به نظر شما باز هم با این روش مشکل حل نمی شود ؟
در خانه با یک روش آزمایشی تست کردم :
آمدم و وسط کار سرویس sql server را stop کردم تا ارتباط با دیتاببس قطع شود و بعد از چند ثانیه مجددا ارتباط را start کردم . منتها یک خطایی می دهد و بعد برنامه close می شود و از برنامه خارج می شود .
لطفا راهنمایی کنید
این هم کدی که در application event نوشتم :


if (E is EDatabaseError) OR (e is EOleException) then
begin
try
if udl then
begin
if DMCon.ADOConMain.Connected then
begin
DMCon.ADOConMain.Close;
//ShowMessage('Error : Connection is Open');
end;
DMCon.ADOConMain.ConnectionString:=ّFile NAme';
DMCon.ADOConMain.LoginPrompt:=False;
DMCon.ADOConMain.CommandTimeout:=120;
DMCon.ADOConMain.CommandTimeout:=120 ;
DMCon.ADOConMain.Open;

end
finally


end;
end;



در ضمن زمان را هم روی 120 تنظیم کردم
این هم تصویر خطا :
131242

و یک سوال : چرا با اینکه زمان command timeout و connection timeout را زیاد کردم ولی به محضی که ارتباط با دیتابیس را قطع کردم برنامه هنگ کرد واین اتفاقات افتاد ؟

golbafan
جمعه 25 اردیبهشت 1394, 01:13 صبح
شما نباید دیتابیس رو تحت فشار بزاری (در حال کانکت)

باید تغییرات در حافظه کلاینت انجام بشه بعد که خواست تایید کنه با استفاده از transaction داده هات رو یکجا انتقال بدی

golbafan
جمعه 25 اردیبهشت 1394, 01:15 صبح
در مورد مدیریت داده ها در سبکه های وایرلس و unStable مطالعه کنید

soft-c
جمعه 25 اردیبهشت 1394, 07:50 صبح
شما نباید دیتابیس رو تحت فشار بزاری (در حال کانکت)

باید تغییرات در حافظه کلاینت انجام بشه بعد که خواست تایید کنه با استفاده از transaction داده هات رو یکجا انتقال بدی
میشه بیشتر توضیح بدید . یک مثال بزنید ؟

soft-c
جمعه 25 اردیبهشت 1394, 07:52 صبح
در مورد مدیریت داده ها در سبکه های وایرلس و unStable مطالعه کنید
چی سرچ کنم . با این موضوعی که گفتید چیزی پیدا نمیشه ؟

soft-c
شنبه 26 اردیبهشت 1394, 22:13 عصر
شما نباید دیتابیس رو تحت فشار بزاری (در حال کانکت)

باید تغییرات در حافظه کلاینت انجام بشه بعد که خواست تایید کنه با استفاده از transaction داده هات رو یکجا انتقال بدی

اونوقت خوب یک بحث :
آخر در مراحلی از کار نیاز به اتصال به بانک وجود دارد . خوب اگر مشکل حل نشود که در این قسمت باز هم دچار مشکل می شویم .

reza_ali202000
شنبه 02 خرداد 1394, 01:16 صبح
دوست عزیز برا اتصال به پایگاه اگه از ویزارد استفاده کنید و مدیریت خطا انجام بدین به هیچ وجه اینجور اتفاقاتی نمی افته.

soft-c
شنبه 02 خرداد 1394, 07:58 صبح
دوست عزیز برا اتصال به پایگاه اگه از ویزارد استفاده کنید و مدیریت خطا انجام بدین به هیچ وجه اینجور اتفاقاتی نمی افته.
مدیریت خطا را در پاسخ7 انجام داده ام . ولی گفتم خطا می دهد و دچار مشکل می شود .

hadisalahi2
شنبه 02 خرداد 1394, 10:24 صبح
عزیزم ، من هم یک برنامه برای اداره راه نوشتم که شبکشون وایرلس بود و دقیقا همین مشکل رو داشتن
بماند اینکه بالخره مجبور شدن شبکه رو سیمی کنند
اما من هر موقع که نیاز به ذخیره یا بازیابی اطلاعات بود ، به دیتابیس وصل میشدم ، و بعدش اتصال رو کلوز میکردم

soft-c
شنبه 02 خرداد 1394, 13:46 عصر
عزیزم ، من هم یک برنامه برای اداره راه نوشتم که شبکشون وایرلس بود و دقیقا همین مشکل رو داشتن
بماند اینکه بالخره مجبور شدن شبکه رو سیمی کنند
اما من هر موقع که نیاز به ذخیره یا بازیابی اطلاعات بود ، به دیتابیس وصل میشدم ، و بعدش اتصال رو کلوز میکردم
خوب اگر دقت کنید بحث من همین است که اگر هنگامی که می خواهم به دیتابیس وصل شوم و ارتباط قطع شود چه عملیاتهایی باید انجام بدهیم ؟
در پست 7 مثلا من خطا را مدیریت کردم ولی در حین عملیات خطا می دهد .
و یک سوال دیگه :
اگر بخواهیم در هنگام نیاز به دیتابیس وصل شویم و بعد دوباره قطع کنیم ، آیا این باعث کاهش سرعت و همچنین سخت شدن مدیریت برنامه نمی شود ؟