C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[63861] Re:Re:Re:ADOConnection에 대해서
땅주인 [heaven2] 1333 읽음    2011-03-03 11:05
재접속 했을 때 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가 자꾸 끊어진다면 네트워크나, 서버의 상태를 점검하는게 먼저이지 않을까 하네요.
: : 그럼 이만..

+ -

관련 글 리스트
63853 ADOConnection에 대해서 알론소 1416 2011/03/02
63856     Re:ADOConnection에 대해서 땅주인 1957 2011/03/02
63859         Re:Re:ADOConnection에 대해서 알론소 1465 2011/03/03
63861             Re:Re:Re:ADOConnection에 대해서 땅주인 1333 2011/03/03
63868                 Re:Re:Re:Re:ADOConnection에 대해서 알론소 1858 2011/03/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.