재접속 했을 때 Select 자체가 안된다는 것인가요?
위에 답변한 것은, 이미 끊어진 상태에서 insert/update한 자료에 대해서
SELECT할 수 없다는 것인데..Select 자체가 안된다는 의미는 아니었거든요.
그런데, 끊어지고 재접속했는데.. Select 자체가 안된다는 의미인 거지요?
이상하네요.. 함 해봐야겠네요..
.....
테스트를 해보았는데.. 잘 되는데요..
아래는 제가 테스트한 코드입니다. 재접속하고 Select 잘 되는데... 이상하네요..
//---------------------------------------------------------------------------
// open
void __fastcall TForm2::Button4Click(TObject *Sender)
{
ADOConnection1->Connected = true;
}
//---------------------------------------------------------------------------
// reopen => 재접속하는 루틴으로 간주..
void __fastcall TForm2::Button5Click(TObject *Sender)
{
if ( ADOConnection1->Connected ) {
ADOConnection1->Connected = false;
Sleep(1000); // Sleep for while
}
ADOConnection1->Connected = true;
}
//---------------------------------------------------------------------------
// query
void __fastcall TForm2::Button6Click(TObject *Sender)
{
UnicodeString sName;
UnicodeString sSQL = " SELECT * FROM USER ";
ADOQuery1->Active = false;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Text = sSQL;
ADOQuery1->Active = true;
while ( !ADOQuery1->Eof ) {
sName = ADOQuery1->FieldByName("UserName")->AsString;
ShowMessage(sName);
ADOQuery1->Next();
}
}
//---------------------------------------------------------------------------
// Afterconnect event
void __fastcall TForm2::ADOConnection1AfterConnect(TObject *Sender)
{
m_bConnected = true;
ShowMessage("Connected");
}
//---------------------------------------------------------------------------
// Afterdisconnect event
void __fastcall TForm2::ADOConnection1AfterDisconnect(TObject *Sender)
{
m_bConnected = false;
ShowMessage("Disconnected");
}
//---------------------------------------------------------------------------
알론소 님이 쓰신 글 :
: 우선 답변감사드립니다.
: 제가 정리를 안해서 썼나보군요.ㅠㅠ
: 아무튼 답변하신 내용을 읽어봤는데요.
:
: 디비와 연결이 끊어졌는데 다시연결하면
: 당연히 select가 안된다고 하셨는데
: 왜 안되는지 궁금해요..
: 다시 연결되었으니까 디비에서 읽어올수도있고
: 넣을수도있지않나요??
:
: ADO Component에서 끊어졌는지 안끊어졌는지
: 알려주지않으니 나름대로 타이머만들어서
: 일정주기가 되면 select문을 통해 의미없는
: 쿼리를 날리는걸 해놨구요
: exception이 떨어진다면
: 끊어졌거나뭐 에러라고 생각하여
: close 시키고 다시 open시킵니다
:
: 근데 open을 해서 재연결해도 select가 되질않으니
: db접속정보를 다시 넣어야하나 해서
: 다시넣어서 open해서 재연결했더니
: 역시나 select도안되지 insert도안되고 다안되니까
: 전 이부분이 왜 안되는지 궁금합니다
:
: 위에도 썼지만 다시 open 시켜 재연결해서
: select가 당연히 안되는거라면
: 왜안되는지도 궁금하구요..ㅠㅠ
: 안되는거라면 재연결해서 다시 디비를 읽는
: 방법없을까요.ㅠㅠ
:
:
:
:
:
:
: 땅주인 님이 쓰신 글 :
: : 알론소 님이 쓰신 글 :
: : : ADOConnection을 생성시키고
: : : DB접속정보를 입력한뒤에
: : : Open()함수를 이용해서 오픈시키거든요
: : :
: : : 근데 만약에 DB와 연결이 끊어졌는데
: : : select라던지 update가 안되고
: : : 오라클 연결접속 에러라던지 이런 에러가뜨면
: : :
: : : 이제 ADOConnection은 CLOSE가 되고
: : : 연결 안되었으니
: : : conneted는 false가 될것이고
: : :
: : : 계속 DB와의 재접속을 시도하는데
: : : OPEN()가 되면 이제 연결이 된거잖아요
: : :
: : : 그럼 이제 SELECT라던디 INSERT UPDATE같이
: : : 이런 것들을 수행이 되야하는데 연결이되었으니
: : : 연결만 되었을뿐이지
: : : 수행이 되지않으면 무슨문제인가요???
: : :
: : : 연결이 끊어지지않는다면 문제는 안생깁니다.
: : : 근데 연결이 끊어지고 다시 재접속 되는경우에
: : : 연결은 되었는데 select가 안되는거에요 물론 db에 데이터도
: : : 들어가지도않구요
: : :
: : : 그래서 다시 연결되어서 open()을 할때
: : : 그전에 디비접속정보를 다시 또넣었습니다.
: : : 그런대도 안되던데 왜그런지모르겠습니다
: : :
: : : 도움좀주세요.ㅠㅠ
: :
: : 정리를 좀 해서 쓰시지.. 읽어봐도 아리까리 해서..
: : 암튼..
: : 디비가 끊어진 상태에서 insert를 하고(당연히 Exception이 나겠지요..)
: : 다시 디비를 연결해서 select를 하면 데이터는 당연히 없겠지요.
: :
: : MySQL에서 그런 경우를 보았는데.. 세션 유지 시간을 짧게 잡아놔서..
: : 일정 시간이 지나면 DB Connection이 끊어지는 경우를 보았는데요..
: : ADO Component에서 이벤트로 알려주지도 않구요..
: : 그래서,
: : 일정 시간 주기로 해서 DB에 의미 없는 쿼리를 계속 날리는 것으로 해결을 했는데요.(30초 Term)
: : 만약, 이런 쿼리에 응답이 없거나 Exception이 계속 날 겨우 DB가 끊어진 것으로 간주하고
: : 재접속하는 루틴등을 만들어 주어야 합니다. DB 접속 상태가 불안한 경우에 한하지요.
: :
: : 그런데, DB Connection이 불안한 것이 아마 네트워크 상태가 불안하던 지,
: : 서버가 상태가 좋지 않던가 그런 경우가 더 많을 것 같네요.
: : DB Connection 유지에 많은 공을 드리는 것을 잘 보지를 못해서..
: : 암튼, DB가 자꾸 끊어진다면 네트워크나, 서버의 상태를 점검하는게 먼저이지 않을까 하네요.
: : 그럼 이만..