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

델파이 Q&A
Delphi Programming Q&A
[13820] DB커넥션 관련 고민이 있네요.
무간류 [] 1929 읽음    2011-09-02 16:40
복잡한 쿼리를 DB에서 처리할경우 어느 정도 시간이 걸립니다.
저희 개발서버에 있는 DB에도 데이터 건수가 많은 관계로 복잡한 쿼리를 수행하면
결과 표출까지
7~8분 많게는 10분 넘게 걸리는경우가 많습니다.
이런 쿼리를 기준으로 DB 조회 프로그램을 설계할 때 보통 쓰레드를 많이 쓰지않나요?

저에게는 다음과 같은 고민이 있습니다.
DB환경:오라클/ 컴포넌트 환경: TSQLQuery
TSQLQuery가 OPEN 된 시점에서는 대기상태가 됩니다. 즉 엑세스가 불가능하죠.
이 때  수행하는 쿼리가 복잡하다면 대기상태는 더 길어지고 사용자는 지루해 하며, 쿼리를 취소하고 싶어질 것입니다.
일단 TSQLQuery가 메인폼에 있다면 MainForm이 얼어버리는 관계로 일단은 TSQLQuery를 쓰레드에 위치시켰습니다.

사용자가 쿼리수행명령을 내리면 쓰레드가 생성되고 TSQLQuery가 동적생성이 되어서 쿼리를 수행합니다.
하지만 사용자는 쿼리 결과가 한참이 지나도 안나오자 수행중이던 쿼리를 중지 시키고 싶어 합니다.
이럴때는 머 TSQLQuery가 Open이 끝나는 시점이 되면 쓰레드는 종료되는 관계로 쓰레드 종료 이벤트에서 처리하면 되지요. 그리고 쓰레드가 종료될 때 동적할당한 TSQLQuery를 해제하는겁니다.
여기까지는 문제가 없습니다만. 
제가 고민이 되는 부분은 바로 쿼리가 쓰레드에서 수행중인 시점에서 사용자가 프로그램 종료 할 때 입니다.
지금 쓰레드에서 수행중이던 쿼리가 언제 완료될지도 모르는데 사용자는 이미 프로그램 종료 명령을 내린 상태에서
쿼리 수행이 끝이 나길 마냥 기다릴 수 없는 상황입니다.
쓰레드는 강제종료 후 프로그램을 종료 할 수 있지만  그렇게 되면 동적 할당 된 TSQLQuery는 해제 할 수 없게 됩니다.
음 제가 개발경험이 적다보니 이런 고민을 하게 되네요.
어떤 방향으로 가야 사용자 편의와 메모리관리가 잘 이루어지는 프로그램을 만들수 있을까요?
많은 조언부탁드립니다.

+ -

관련 글 리스트
13820 DB커넥션 관련 고민이 있네요. 무간류 1929 2011/09/02
13821     Re:DB커넥션 관련 고민이 있네요. Lyn 1690 2011/09/02
13822         Re:Re:DB커넥션 관련 고민이 있네요. 무간류 1962 2011/09/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.