मेरे डेटासेट क्लाइंट एप्लिकेशन में मैं अपने तरीकों और प्रदाता कनेक्शन के लिए 1 TSQLConnection का उपयोग करता हूं। कनेक्शन खो जाने पर समस्याएं उत्पन्न होती हैं। दोनों TSQLConnection.Connected और TSQLConnection.ConnectionState इसे पकड़ नहीं है।क्लाइंट-सर्वर डिस्कनेक्ट के माध्यम से SQLConnection/Datasnap का प्रबंधन
जब मेरा टीएसक्यूएलकनेक्शन खुला है लेकिन मैं इंटरनेट कनेक्शन खो देता हूं, या सर्वर बंद हो जाता है। डेटासेट क्लाइंट एप्लिकेशन बहुत सारी त्रुटियां देता है। (सर्वर विधि या क्लाइंटडेटासेट्स)
मैंने अपने सर्वर विधियों के लिए अपने SQL कनेक्शन को प्रबंधित करने के लिए एक फ़ंक्शन बनाया है। लेकिन अधिक समस्या तब उत्पन्न होती है जब उदाहरण के लिए क्लाइंटडेटसेट बंद होता है जो TDSProviderConnection के माध्यम से जुड़ा होता है।
प्रश्न: आप अपने क्लाइंट एप्लिकेशन को TSQLconnection पर किसी भी डिस्कनेक्ट को सुरक्षित रूप से पकड़ने के लिए कैसे प्रबंधित करते हैं। क्यू: आप डाउनटाइम का प्रबंधन कैसे करते हैं, और आप सहेजे गए क्लाइंट स्थिति के साथ क्या करते हैं।
डाउनटाइम के बाद पुन: कनेक्शन समस्या नहीं है।
सर्वर विधि को कॉल करते समय: यह अपवाद फेंक देगा।
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
तो मैं डमी विधि के साथ अपने डेटामैड्यूल से TSQLCONNECTION प्राप्त करने के लिए अगली विधि लिखता हूं।
function TDMForm.DSConnection: TSQLConnection;
var
tmpM:TServerMethodsClient;
begin
result:=nil;
if assigned(MYTSQLCONNECTION) then begin
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
try
try
tmpM.Ping;
result:=MYTSQLCONNECTION
except
ReconnectForm.ShowModal; // has a reconnect button that tries to reconnect + shutdownbutton
if ReconnectForm.modalresult=mrOK then
result:=MYTSQLCONNECTION
else
MainForm.Close;
end;
finally
tmpm.Free;
end;
end;
end;
मैं विधि इस तरह से लिखा है, क्योंकि केवल पता लगाने के लिए अगर कनेक्शन खो जाता है जिस तरह से डमी विधि है जो के माध्यम से होता है ... एक ही त्रुटि फेंक तो मैं पुनः कनेक्ट या करीबी कार्यक्रम के लिए क्वेरी कर सकते हैं होगा।
संपादित करें: (मैं सामान्य जवाब और दिशा निर्देशों, क्या करें किसी तरह की उम्मीद कर रहा हूँ और अभी मैं क्या पल में कर रहा हूँ नहीं दिखा मेरी कोड की नहीं एक सुधार, यह करने के लिए।।)
आप कहते हैं "उपयोगकर्ता फिर से लॉगिन करने में सक्षम है" लेकिन आप यह नहीं कहते कि आपने यह कैसे किया? अपने स्वयं के डेटासैप ऐप में, TSQLConnection1 को भी एक कॉल। कनेक्ट किया गया: = गलत, अपवाद (10053) बढ़ाता है क्योंकि यह सर्वर को बताने की कोशिश कर रहा है (जो अब और नहीं है) कुछ। मैं यहां कैच -22 में हूं। आप _that_ के आसपास कैसे पहुंचे? – nolaspeaker
@ नोलास्पीकर - चूंकि मुझे पता है कि मैं पुनः प्रमाणित करने जा रहा हूं, मुझे वास्तव में अपवाद की परवाह नहीं है। तो मैं बस 'sqlcon कोशिश करें। बंद करो; अंत को छोड़कर; ', जो कोई अपवाद खाता है। फिर मैं चुपचाप फिर से प्रमाणीकृत कर सकता हूं या उपयोगकर्ता को मैन्युअल रूप से लॉग इन करने के लिए लॉगिन संवाद को फिर से प्रमाणित कर सकता हूं। –
हां, यह संभालना मेरे लिए भी हुआ - मैंने आपको प्रश्न पूछने के बाद! :-) उत्तर देने के लिये धन्यवाद। – nolaspeaker