티스토리 뷰
VB 6.0 & java(JSP, Servlet) etc
[vb 6.0] ADO - RecordSet 타임아웃 속성 걸기 - Connection 응용
nwairr 2009. 6. 2. 20:02반응형
vb에는 DB접근 쿼리실행 등의 구문을
실행시키기 위한
ADO(ActiveX Data Object)란 놈이있다.
뭐 워낙에 유명한 놈이기 때문에 다들
알고있으리라 생각 되어지지만,
오늘은
ADO 중에서 이벤트를 제공하고 있는
RecordSet과 Connection 개체에 대해서 알아보고자 한다.
.
.
.
자 그럼 이야기에 앞서 간단하게 ADO를 어떻게 사용할 수 있는가에 대해서
잠깐 설명하는 시간을 갖도록 하겠다.
- 설명 -
SDI툴상
참조를 설정하는 부분에서 ActiveX Data Object 2.7 Library를 선택해주면 준비 끝이다.
(↑ 요렇게 등록하면 된다. 사용체크를 하고 확인하면 목록의 위쪽에 자리하게 된다.
참고로 위에서 6번째 체크된 놈이다...포커스가 왜 다른데 있냐면 걍 웃지요... 허허허...)
아마 라이브러리 버전은 2.7보다 상위버전 2.8도 있을 것인데, 뭐 아무거나 사용해도 관계없다.
- 이상 설명 끗 -
.
.
.
.
.
그럼 본격적으로 알아보도록 하자.
앞서 말했듯이 RecordSet(이하 Rs)과 Connection(이하 Con)에는 이벤트가 있다고 했다.
그럼 왜 어차피 DB 핸들링이 목적이 이 둘의 개체의 이벤트가 각각 나뉘는 것일까.
그 차이는 Rs와 Con의 이용 목적이 다르기 때문이다.
모두들 잘 알고 있듯
Rs 개체는 DB 핸들링 이 후 반환값이 존재 할 경우 사용하며
Con 개체는 반환값이 없다.
굳이 예를 들자면....
Con은 서브프로시져 혹은 void로 선언된 함수, Rs는 리턴값이 존재하는 함수
정도랄까....
Rs와 Con..... 서로에겐 없지만
대표적인(실무에서 아~주 즐겨 사용되는) 이 둘의 이벤트를 한 번 나열해 보겠다.
Rs : EOF, BOF, fields, maxRecords, move 시리즈들, RecordCount 등
Con : BeginTrans, CommandTimeout, CommitTrans, RollbackTrans 등
음.... 보자... 뭐가 다른가....
그냥 딱 한눈에 봐도 Rs쪽이 이벤트는 더 많은 거 같고.....
그리고 위에서도 설명했듯이
Rs쪽이 쿼리 실행 후 반환되는 값을 핸들링하는 이벤트들로 보이고,
Con쪽은 '실행되면 더이상 난 몰라~~' 라고 말하는 듯한 무책임+삭막한 이벤트들이 있다.
아... 그런데
Con쪽의 CommandTimeout이라는 이벤트가 눈에 들어온다....
음.... 통상적으로
Rs는 select, Con은 update, insert, delete 구문에 자주 사용되는데,
update, insert, delete와 같은 구문들은
만약 실행타임에 동일한 데이터에 적용됐다고 가정했을 때
데이터 무결성이 깨져 버릴 수도 있는 무서운+막나가는 애들이다. (심각도 매우 높음.... Red Alert)
그렇기 때문에 여러 관계형DB에서는 얘네들이 발동 될 때 Lock(잠금)을 발생시켜서
데이터의 무결성을 보호 할 수 있도록 장치가 마련되어있다.
그러나.... 어느 한쪽을 좋게하면 다른쪽에 말썽이기 마련....
update, insert, delete 얘네들이 질서를 잘~~ 지켜서 딱딱 맞아 떨어지면 좋으련만......
이게 실무에서는 쿼리간 교착상태(DeadLock)나 차단(Blocking)이 발생하는 경우가 꽤 빈번히
일어나기 때문에, 교착상태 발생 시 쿼리를 실행하기 위해서 하염없이 지 차례를 기다리는 사태가 발생
하는 경우가 생길 수가 있다.
그런 경우를 대비하기 위해서 이 타임아웃이란 놈이 존재하는 것이다.
그런데 이 타임아웃은 위의 경우에만 해당하는 것이 아니라
데이터 Row가 너무 많은 경우 이거나
예기치 못하게 검색에 시간이 너무 많이 걸리는 상황이 발생한다면
Rs에도 걸어주면 꽤 유용할 것 같다는 것이다.
.
.
.
.
그렇다.
이제까지 이 얘기를 하기 위해서 이 기나긴 문장을 써 내려왔던 것이다.
흐흐흐~~ 결국 위에서 했던 얘기 다~~~~(는 아니고...) 필요없고.....
질문
Rs에 없는 Con의 이벤트를 Rs에 설정해 줄수가 있느냐~~!!!
대답
있다.
가 내가 하고싶은 이야기인 것이다.
휴....
.
.
.
각설하고
당장에 구현 방법을 알아보도록 하자.
''// Rs와 Con을 각각 선언하고
Dim Adors as ADODB.Recoreset
Dim AdoCn as ADODB.Connection
Dim strSql as String
''// 먼저 Con의 객체를 생성하고, Con의 타임아웃 속성을 설정한다.
Set AdoCn = new ADODB.Connection
AdoCn.CommandTimeout = 6 ''// 단위는 초단위이다. 밀리세컨드로 생각하면 절대 안됨~~!!!!!
''// 쿼리문 생성
strSql = "select * form table"
''// AdoRs의 객체생성, 여기가 포인트임 ㅎㅎㅎ
Set AdoRs = AdoCn.Execute(strSQL)
AdoRs.Open..... 그 이후는 뭐 블라블라.......
요 몇줄 설명할라고 서문이 너무 길었나... 갑자기 귀차니즘이 몰려오는구만..
아무튼
요 위에 코드를 사용하면 Rs에서도 타임아웃 설정을 사용할 수가 있다는 것.
요게 오늘의 포인트 되시겠다.
그럼 요게 실제로 되나 안되나... 혹시 구라는 아닐까... 의심이 된다거나... -_-;;;;
건수가 많아서 시스템에 영향을 미칠 것 같은 쿼리가 있다면
적절하게 타임아웃을 설정해 놓고 사용해 보길 바란다.
- 끗 -
집에가자..... 응???? 나만빼고???
반응형
'VB 6.0 & java(JSP, Servlet) etc' 카테고리의 다른 글
FileOpenConstants - CommonDialog 파일관련 Flags속성 (0) | 2009.06.30 |
---|---|
[VB 6.0] Early Binding과 Late Binding - 객체 참조 (0) | 2009.06.16 |
[vb 6.0] mouse wheel 사용하기 (0) | 2009.06.09 |
CommonDialog(공통대화상자) - 2. 파일저장하기 편 (0) | 2009.05.22 |
CommonDialog(공통대화상자) - 1. 파일열기편 (6) | 2009.05.14 |
댓글
반응형
02-16 00:01
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- XML
- 고전게임
- 8비트
- 플래시게임
- 고전명작
- C
- c#
- 플래쉬 게임
- J.S Bach
- 플래쉬
- 브롤스타즈
- XML Programming with VB 6.0
- 좀비게임
- 추억의 게임
- 틀린그림찾기
- 중독성짱게임
- xml강좌
- 플래쉬게임
- 8비트상성
- Excel
- 엑셀
- 오락실 게임
- 플래시
- 오락실게임
- 다른그림찾기
- SQL
- 레트로게임
- brawlstars
- MS-SQL
- 플래시 게임
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함