PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تست ارتباط و قطع ارتباط شبکه



farzaneh23
16 / February / 1970, 11:36 AM
با سلام و خسته نباشید
برنامه من اطلاعات خود را از mysql در یافت می کند. در صورتیکه شبکه سازمان قطع شود کاربر متوجه این امر نشده و بر روی دکمه ها که یک query را فراخوانی می کند مدام کلیک نموده و برنامه هنگ می کند.چطور می توان برنامه را در صورتی که ارتباط قطع شده است کنترل کرد؟ آیا از طریق کنترل Ado connection اینکه false است یا True باید انجام داد؟

admin
19 / May / 2014, 03:33 AM
سلام.
میشه کد اون دکمه ای که کوئری رو فراخوانی میکنه رو اینجا بزارید ؟
میخوام ببینم اصول کد نویسی رو رعایت کردید ...

farzaneh23
19 / May / 2014, 12:03 PM
procedure Tmeeting_client.BitBtn2Click(Sender: TObject);
begin
DataModule_client.meeting_all_query.SQL.Clear;
DataModule_client.meeting_all_query.SQL.Add("selec t * from meeting where (pid="+Quotedstr(login_client.pid_box.text)+")ORDE R BY mdate DESC");
DataModule_client.meeting_all_query.Open;
all_meeting_F.Show;
end;

admin
20 / May / 2014, 05:06 PM
یقینا شما برای ارتباط اتون از ابزاری استفاده می کنید.
بعنوان مثال در شبکه اگر از Indy استفاده کنید.
به صورت زیر ارور اتون رو هندل کنید :



کد:



try

with IdTCPClient1 do
begin
if Connected then
Disconnect;
Host := trim(آدرس Ip هاست اتون);
Port := 80;
Connect;

try

ShowMessage(IOHandler.LocalName); // این لاین فقط جهت تست برنامه است
finally
Disconnect;
end;

end;
except
ShowMessage("خطایی در ارتباط اتون رخ داده است");
end;






البته میتونید دقیقا مشخص کنید که اگه کد ارور 10061 بود فلان ارور رو بده ...

شما از ado برای ارتباط با دیتابیس استفاده می کنید یا از unidac ؟؟؟
از چه ابزاری ؟
مثلا در ado و SQLServer ما به صورت زیر با خطاها رفتار می کنیم.
اولا : جدول خطاها رو میتونید با کد زیر ببینید :




کد:



use master
go

select * from sysmessages
go







حالا کافیه کد خطاهایی رو که بیشتر اتفاق میفته رو پیدا کرده و معادل فارسی اونها رو در بیارید :
مثلا :




کد:



error...... severity .......dlevel ....description .................................................. ..msglangid
156 .......15 .............. 0 .......Incorrect syntax near the keyword "%.*ls". .........1033






در مرحله ی بعد با هر روشی که دوست دارید کدها رو با کد خطایی که اتفاق افتاده مطابق زیر مقایسه می کنید و خطای مناسب رو به نمایش می گذارید :






کد:



var
LastErrorIndex :double;
begin
try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("select * from dataBase");
ADOQuery1.Open;
except
// Log Exception..
on E: Exception do
begin


LastErrorIndex:=ADOConnection1.Errors.Count-1 ;

ShowMessage(VarToStr(ADOConnection1.Errors.Item[LastErrorIndex].Source ));
ShowMessage(VarToStr(ADOConnection1.Errors.Item[LastErrorIndex].Description ));
ShowMessage(VarToStr(ADOConnection1.Errors.Item[LastErrorIndex].NativeError ));

if ( ADOConnection1.Errors.Item[LastErrorIndex].NativeError = 156 ) then
begin
ShowMessage("ارور شماره 156 در دیتابیس رخ داده است");
end;


end;
end;






موفق و موید باشید

farzaneh23
21 / May / 2014, 12:21 PM
خیلی ممنون
یه سوال اینکه آیا این خطاهایی که دلفی میده رو میشه فارسی اش کرد.مثلا وقتی شبکه قطع میشه و ارتباط سوکت قطع میشه این پیغام به کاربر نمایش داده میشه

Can’t connect to mysql server on 192.168.10.12(10061)
Socket error on connect.WSAGetLastErrror returen 10065($2751)

admin
22 / May / 2014, 05:06 PM
از try , except استفاده کنید :


کد:



try
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add("select * from dataBase");
ADOQuery1.Open;
except
// Log Exception..
on E: Exception do
begin
ShowMessage(" Exception Message : "+ E.Message );
end;
end;

mhsama
01 / February / 2015, 06:24 PM
اگر کامپیوتری که برنامه من روی آن نصب است به طریقی از شبکه قطع شود، برنامه ام کانکشن فیلور میدهد و خودش ارتباط را مجدداً بازسازی نمی کند و کاربر مجبور است با تسک منیجر ویندوز از برنامه خارج شده مجدداً وارد برنامه شود. چگونه می توانم از داخل برنامه به محض قطع شدن مجدداً ارتباط را که با ado زده ام را بازسازی کنم که نیازی به خروج از برنامه نباشد؟

irandelphi
02 / February / 2015, 11:36 AM
سلام.
راه حل اصلی استفاده از try ,except است که در بالا بهش اشاره شده و شما میتونید در قسمت except پیام مورد نظر رو بنویسید و برنامه رو به فرم ترمیم ارجاع دهید و در آن فرم ارتباط را چک کرده و پس از برقراری ارتباط به فرم Main باز گردید...
در کل بسته به سلیقه ی طراح نرم افزار و درخواست مشتری میشه تغییرات لازم رو اعمال کرد.