|
안녕하세요.
제가 동일한 문제로 고민을 한 겸험이 있어서요.
아시다시피 C++ Builder 6.0 이상은 변경이 가능하지만
C++ Builder 5.0 이하버전에서는
TADOQuery CommandTimeout 프로퍼티값이 변경이 안됩니다.
TADOConnection* pConnection = new TADOConnection(this);
pConnection ->CommandTimeout = 600; // 쿼리실행제한 Default = 30초이지만 600초로 늘려서 설정
...
TADOQuery* pQuery = new TADOQuery(this);
pQuery->Connect = pConnection;
...
여기서 ADOQuery의 Connect를 ADOConnection와 연결한다고 해서
pQuery->CommandTimeout 값이 변하는건 아니더군요.
디버깅해서 보면 여전히 Default 30초 입니다.
그렇다고
pQuery->CommandTimeout = pConnection ->CommandTimeout;
이렇게 하면 Access거부가 일어나서 컴파일에러가 걸립니다.
아래 한분이 TADOQuery를 쓰지말고 TADODataSet을 사용하라고 하셨는데
맞는 말씀이십니다. TADODataSet은 CommandTimeout 값 변경이 가능하거든요.
그러나 저같은 경우는 TADOQuery를 사용한 소스가 너무 많이 걸려있어서
전체를 프로퍼티까지 바꾸어야하고 없던 문제가 발생하지않을까 부담스러워서
이렇게 해결했습니다.
어차피 TADOQuery는 TADODataSet의 ChildClass이거든요
따라서,
((TADODataSet*)pQuery)->CommandTimeout = pConnection ->CommandTimeout;
이렇게 타입캐스팅을 해주면 문제없이 TADOQuery를 사용하면서 CommandTimeout값을 변경할 수 있습니다.
결론적인 소스의 형태는 아래처럼 되겠습니다.
TADOConnection* pConnection = new TADOConnection(this);
pConnection ->CommandTimeout = 600; // 쿼리실행제한 Default = 30초이지만 600초로 늘려서 설정
...
TADOQuery* pQuery = new TADOQuery(this);
pQuery->Connect = pConnection;
((TADODataSet*)pQuery)->CommandTimeout = pConnection ->CommandTimeout;
...
혹시나 저처럼 이 문제로 검색을 해보신 분들에게 도움이 되길 바랍니다^^
PS. 조언을 주셨던 회웅형님~ 감사해요^^
초보 님이 쓰신 글 :
: ADOQuery 과 sql을 씁니다.
: 조금 많은 양의 데이타를 쿼리하면 잠시후
: "시간제한이 만료되었읍니다"
: 라는 에러 메세지가 뜹니다.
:
: 이것을 제어 할수 있는 방법을 알고 계신분은
: 알려주십시오..
:
:
: 감사합니다.
:
|