텍스트 강좌 내용 : ADO
작 성 자 : 익명
편 집 자 : Danny(전 성대)
강좌 제목 : ADO cursor type_4GuysFromRolla
ADO 를 이용하여 데이터베이스에 있는 데이터를 가지고 올 때 레코드셋 객체를 이용하게 된다 . 레코드셋 객체는 은연중 (implicitly) 에 생성할 수도 있고 명확하게 (explicitly) 생성할 수도 있다 . 다음과 같은 코드를 보자 :
|
Dim objConn |
위의 코드에서 objRS 가 레코드셋 객체이다 . 그것은 개발자가 명시적으로 생성한 것이 아니라 ADO 에 의해 은연중 생성된 것이다 . 이와 같은 방식으로 레코드셋 객체가 생성되면 그 레코드셋 객체는 디폴트 커서와 디폴트 락타입 (locktype) 이 정해진다 .
쿼리 (query) 를 수행하게 되면 일련의 데이터 집합이 반환된다 . 이 때 커서는 각각의 레코드 행의 반복 위치를 결정하고 현재 데이터베이스 상태를 정확히 일치시켜주는 역할을 한다 . 이 커서에는 ForwardOnly, Static, Dynamic, Keyset 과 같은 4 가지 종류가 있다 . 이에 대한 자세한 내용은 다음 글을 참조하기 바란다 :
- 레코드셋 커서의 4 가지 종류
|
ADO 에서 레코드셋 객체를 다음과 같이 명시적으로 생성하면 커서 유형을 원하는 대로 지정할 수 있다 .
하지만 다음과 같이 레코드셋 객체 생성을 명시적으로 지정하지 않고 그 생성을 ADO 에게 맡기면 포워드 - 온리 커서 (forward-only cursor) 를 가진 레코드셋 객체가 생성된다 .
Set rs=Server.CreateObject("ADODB.Recordset") 이라고 명시적으로 레코드셋 객체를 개발자가 직접 생성해주면 커서 타입을 원하는 타입으로 다음과 같이 지정해 줄 수 있다 .
커서 타입에는 다음과 같은 네 가지 중 하나를 이용하면 된다 .
포워드 - 온리 커서 (Forward-only cursor) : 최소한의 오버헤드를 지닌 커서로 가장 좋은 성능을 낸다 . 또한 레코드셋의 디폴트 커서이다 . 유일한 단점이라면 오직 한 방향으로만 움직일 수 있다는 것이다 . 즉 , 레코드셋의 앞 부분에서 끝 부분으로 이동하는 명령만 사용할 수 있다 . 예를 들어 , rs.MoveNext 는 사용할 수 있어도 rs.MovePrev 는 사용할 수가 없다 . 만일 포워드 - 온리 커서를 지닌 레코드셋 객체에서 rs.MovePrev 명령어를 사용하면 에러가 발생한다 . 이 커서를 명시적으로 사용하려면 다음과 같이 지정해 주면 된다 :
adOpenForwardOnly 는 adovbs.inc 에 정의되어 있다 . adovbs.inc 에 대한 자세한 내용은 다음 글을 참조하기 바란다 . ( 만일 Adovbs.inc 파일에서 일부 상수만 사용하는 경우는 해당 ASP 파일 안에서 직접 정의하여 사용하는 것이 좋을 수 있다는 것도 참조하기 바란다 ) 스태틱 커서 (static cursor) : 이 커서는 어떤 방향으로도 이동할 수가 있다 . 하지만 사용자가 레코드셋을 보고 있는 동안은 레코드셋에 update, delete, add 등을 반영할 수가 없다 . 이것은 요청 당시의 데이터 스냅샷 (snapshot) 과도 같다 . 이 커서 타입의 레코드셋은 MoveFirst, MoveLast, MovePrev, MoveNext, RecordCount 등 모든 명령어를 사용할 수가 있다 . 커서 지정은 다음과 같다 :
다이내믹 및 키셋 커서 (Dynamic & Keyset cursor) : 이 커서를 사용하면 데이터에 변화가 일어났을 때 바로 알 수 있도록 해준다 . 이것은 비주얼 베이직으로 작성한 애플리케이션에는 좋을 수 있지만 웹 상에서는 바람직하지가 않다 . 다이내믹 또는 키셋 커서는 스태틱 또는 포워드 - 온리 커서보다 더 많은 리소스를 잡아먹기 때문에 웹 상에서는 사용하지 않을 것을 권한다 . 레코드셋의 데이터를 앞 뒤로 내비게이션 해야하거나 , 레코드셋 개수를 카운트할 때에만 스태틱 커서를 사용하고 나머지 경우에는 포워드 - 온리 커서를 사용하는 것이 좋다 . 레코드셋에 있는 내용을 앞으로만 내비게이션 해도 상관 없는 경우 포워드 - 온리 커서를 사용함으로써 시스템의 리소스를 절약하고 성능을 증가시킬 수 있다 . |
락타입 (locktype) 은 레코드셋에 들어 있는 어떤 레코드를 업데이트 시키려할 때 레코드를 어떻게 잠글지에 대한 것을 결정한다 . 이런 락타입에는 ReadOnly, LockOptimistic, LockPessimistic, LockBatchOptimistic 과 같은 4 가지 종류가 있다 . 만일 레코드셋을 ReadOnly 락타입으로 열었다면 레코드셋을 업데이트 시킬 수 없을 것이다 . 차라리 테이블에 들어 있는 레코드를 업데이트 시키고 싶다면 UPDATE SQL 문을 사용하거나 스토어드 프로시져를 사용하는 것이 더 바람직하다 .
앞에서 설명하였듯이 레코드셋을 생성할 때 명시적으로 생성하지 않으면 디폴트 커서와 디폴트 락타입이 설정된다고 하였다 . 이 말은 레코드셋의 커서와 락타입을 변경시킬 수 없음을 의미한다 . 그러므로 커서와 락타입을 임의로 설정하고자 한다면 다음과 같이 레코드셋을 명시적으로 생성해줄 필요가 있다 :
|
Dim objConn |
위의 코드에서 adLockReadOnly 등과 같은 상수를 사용하려면 ADOVBS.inc 파일을 인클루드 시키거나 그와 관련된 상수를 미리 선언해야 한다 . ADOVBS.inc 에 대한 내용은 다음 글을 참조하기 바란다 :
- ADO 이용시 Adovbs.inc 파일 사용하는 방법
개요
이 글은 ASP 를 시작한지 얼마 안됐고 다른 사람의 ASP 코드를 보면서 분석을 하고 있는 사람들을 위한 글이다 . ASP 중급자들에게는 어찌 보면 당연한 얘기일 수 있지만 ASP 를 막 시작한 사람들에게는 궁금한 내용일 수 있는 .inc 파일과 ADO 를 사용할 때 이용하는 adovbs.inc 파일에 대해 살펴 보도록 하자 .
도대체 .inc 파일은 무엇인가 ?
.inc 파일은 단지 인클루드 (include) 파일이다 . 인클루드 파일이란 자주 사용할 수 있는 코드들을 하나의 파일로 묶어 다른 ASP 파일 안에서도 그 파일을 참조할 수 있도록 한 파일이다 . 대부분의 ASP 개발자들이 여러 이유로 인클루드 파일의 확장자를 .asp 로 하여 사용하고 있지만 원래 인클루드 파일의 확장자는 .inc 이다 . 이 확장자를 사용하는 이유는 기존 ASP 파일의 확장자와 구분시키기 위해서이다 .
Adovbs 란 무엇인가 ?
Adovbs 는 VBS(Visual Basic Script) 를 위한 ADO(ActiveX Data Objects) 의 약자이다 . ADO 는 ASP 및 VBScript 에서 가장 보편적으로 사용되고 있는 데이터 처리와 관련된 인터페이스이다 . 만일 ASP 에서 데이터베이스에 접근하여 어떤 작업을 했던 적이 있다면 틀림없이 이 ADO 를 사용하였을 것이다 .
그렇다면 JScript 를 위한 것은 없는가 ?
있다 . 그 이름은 adojavas.inc 파일이다 . 이 파일은 Adovbs.inc 파일과 내용은 똑같지만 JScript 를 위한 것이다 .
Adovbs.inc 엿보기
다음은 Adovbs.inc 파일의 일부분이다 :
|
<% '-------------------------------------------------------------------- ' Microsoft ADO ' ' Copyright (c) 1996-1998 Microsoft Corporation. ' ' ' ' ADO constants include file for VBScript ' '-------------------------------------------------------------------- '---- CursorTypeEnum Values ---- Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 '---- CursorOptionEnum Values ---- Const adHoldRecords = &H00000100 Const adMovePrevious = &H00000200 Const adAddNew = &H01000400 Const adDelete = &H01000800 '... '... Lots more lines like the ones above go here ... '... '---- RecordTypeEnum Values ---- Const adSimpleRecord = 0 Const adCollectionRecord = 1 Const adStructDoc = 2 %> |
위의 예를 보면 알 수 있듯이 대부분 상수 (const) 를 선언한 것이다 . 대략 파일 사이즈는 15K 정도 된다 .
Adovbs.inc 파일은 왜 필요한가 ?
ASP 에서 데이터베이스와 관련된 작업을 할 때 ADO 를 사용하게 된다 . ADO 를 효과적으로 사용하려면 이 Adovbs.inc 파일의 내용을 잘 알아 사용하는 것이 도움이 된다 . 모든 다른 컴퓨터 프로그램과 마찬가지로 ADO 도 &H00000200(16 진수 ) 과 같은 숫자 밖에는 이해하지 못한다 . 하지만 프로그래밍을 할 때 이런 숫자를 알아서 사용하는 것도 어렵고 이렇게 작성된 코드를 분석하는 것도 어려운 일이다 . 이를 위해 이 숫자들과 의미있는 이름들을 매칭시켜 실제 프로그래밍을 할 때에는 숫자 대신 의미있는 이름을 사용하는 것이 도움이 된다 . 그렇다 . 이런 숫자 값과 의미 있는 이름을 매칭시켜 놓은 것이 바로 Adovbs.inc 파일이다 .
좀 더 쉬운 예를 들어 보자 .
마일 Adovbs.inc 파일을 해당 ASP 파일 안에 인클루드 시켰다면 다음과 같이 ADO 관련 코드르 ㄹ작성할 수 있다 :
|
rstTest.Open strSQL, cnnTest, adOpenStatic, adLockReadOnly, adCmdText |
하지만 Adovbs.inc 파일을 인클루드 시키지 않았다면 다음과 같이 프로그래밍을 해야 한다 :
|
rstTest.Open strSQL, cnnTest, 3, 1, &H0001 |
위 예를 보면 알겠지만 Adovbs.inc 파일을 인클루드 시킨 후 코드를 작성하는 것이 훨씬 가독성이 뛰어나다는 것을 알 수 있다 . 첫 번째 예는 사용된 상수만 보더라도 레코드셋을 읽기전용 타입의 락 , 스태틱 커서 , 텍스트 형 쿼리로 열어야함을 알 수 있다 .
만일 위 상수 (adOpenStatic, adLockReadOnly, adCmdText 와 같은 ...) 만 적어 놓고 Adovbs.inc 파일을 인클루드 시키지 않았다면 에러가 발생할 것이다 . 컴퓨터는 이 상수와 매치되는 숫자를 찾을 수 없기 때문이다 .
어디서 구하고 어떻게 사용하는가 ?
아마 틀림없이 시스템 어디엔가 존재할 것이다 . 탐색기나 내 컴퓨터에서 찾기 기능을 이용하여 "adovbs.inc" 파일을 찾아보기 바란다 . 만일 찾을 수 없다면 다음 링크를 통해 다운로드 받기 바란다 .
▶ adovbs.inc
Adovbs.inc 파일 내용은 다음과 같다 . 파일로 필요하다면 아래 내용을 복사한 후 adovbs.inc 이름으로 저장하기 바란다 :
|
<% '-------------------------------------------------------------------- ' Microsoft ADO ' ' Copyright (c) 1996-1998 Microsoft Corporation. ' ' ' ' ADO constants include file for VBScript ' '-------------------------------------------------------------------- '---- CursorTypeEnum Values ---- Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 '---- CursorOptionEnum Values ---- Const adHoldRecords = &H00000100 Const adMovePrevious = &H00000200 Const adAddNew = &H01000400 Const adDelete = &H01000800 Const adUpdate = &H01008000 Const adBookmark = &H00002000 Const adApproxPosition = &H00004000 Const adUpdateBatch = &H00010000 Const adResync = &H00020000 Const adNotify = &H00040000 Const adFind = &H00080000 Const adSeek = &H00400000 Const adIndex = &H00800000 '---- LockTypeEnum Values ---- Const adLockReadOnly = 1 Const adLockPessimistic = 2 Const adLockOptimistic = 3 Const adLockBatchOptimistic = 4 '---- ExecuteOptionEnum Values ---- Const adAsyncExecute = &H00000010 Const adAsyncFetch = &H00000020 Const adAsyncFetchNonBlocking = &H00000040 Const adExecuteNoRecords = &H00000080 Const adExecuteStream = &H00000400 '---- ConnectOptionEnum Values ---- Const adAsyncConnect = &H00000010 '---- ObjectStateEnum Values ---- Const adStateClosed = &H00000000 Const adStateOpen = &H00000001 Const adStateConnecting = &H00000002 Const adStateExecuting = &H00000004 Const adStateFetching = &H00000008 '---- CursorLocationEnum Values ---- Const adUseServer = 2 Const adUseClient = 3 '---- DataTypeEnum Values ---- Const adEmpty = 0 Const adTinyInt = 16 Const adSmallInt = 2 Const adInteger = 3 Const adBigInt = 20 Const adUnsignedTinyInt = 17 Const adUnsignedSmallInt = 18 Const adUnsignedInt = 19 Const adUnsignedBigInt = 21 Const adSingle = 4 Const adDouble = 5 Const adCurrency = 6 Const adDecimal = 14 Const adNumeric = 131 Const adBoolean = 11 Const adError = 10 Const adUserDefined = 132 Const adVariant = 12 Const adIDispatch = 9 Const adIUnknown = 13 Const adGUID = 72 Const adDate = 7 Const adDBDate = 133 Const adDBTime = 134 Const adDBTimeStamp = 135 Const adBSTR = 8 Const adChar = 129 Const adVarChar = 200 Const adLongVarChar = 201 Const adWChar = 130 Const adVarWChar = 202 Const adLongVarWChar = 203 Const adBinary = 128 Const adVarBinary = 204 Const adLongVarBinary = 205 Const adChapter = 136 Const adFileTime = 64 Const adPropVariant = 138 Const adVarNumeric = 139 Const adArray = &H2000 '---- FieldAttributeEnum Values ---- Const adFldMayDefer = &H00000002 Const adFldUpdatable = &H00000004 Const adFldUnknownUpdatable = &H00000008 Const adFldFixed = &H00000010 Const adFldIsNullable = &H00000020 Const adFldMayBeNull = &H00000040 Const adFldLong = &H00000080 Const adFldRowID = &H00000100 Const adFldRowVersion = &H00000200 Const adFldCacheDeferred = &H00001000 Const adFldIsChapter = &H00002000 Const adFldNegativeScale = &H00004000 Const adFldKeyColumn = &H00008000 Const adFldIsRowURL = &H00010000 Const adFldIsDefaultStream = &H00020000 Const adFldIsCollection = &H00040000 '---- EditModeEnum Values ---- Const adEditNone = &H0000 Const adEditInProgress = &H0001 Const adEditAdd = &H0002 Const adEditDelete = &H0004 '---- RecordStatusEnum Values ---- Const adRecOK = &H0000000 Const adRecNew = &H0000001 Const adRecModified = &H0000002 Const adRecDeleted = &H0000004 Const adRecUnmodified = &H0000008 Const adRecInvalid = &H0000010 Const adRecMultipleChanges = &H0000040 Const adRecPendingChanges = &H0000080 Const adRecCanceled = &H0000100 Const adRecCantRelease = &H0000400 Const adRecConcurrencyViolation = &H0000800 Const adRecIntegrityViolation = &H0001000 Const adRecMaxChangesExceeded = &H0002000 Const adRecObjectOpen = &H0004000 Const adRecOutOfMemory = &H0008000 Const adRecPermissionDenied = &H0010000 Const adRecSchemaViolation = &H0020000 Const adRecDBDeleted = &H0040000 '---- GetRowsOptionEnum Values ---- Const adGetRowsRest = -1 '---- PositionEnum Values ---- Const adPosUnknown = -1 Const adPosBOF = -2 Const adPosEOF = -3 '---- BookmarkEnum Values ---- Const adBookmarkCurrent = 0 Const adBookmarkFirst = 1 Const adBookmarkLast = 2 '---- MarshalOptionsEnum Values ---- Const adMarshalAll = 0 Const adMarshalModifiedOnly = 1 '---- AffectEnum Values ---- Const adAffectCurrent = 1 Const adAffectGroup = 2 Const adAffectAllChapters = 4 '---- ResyncEnum Values ---- Const adResyncUnderlyingValues = 1 Const adResyncAllValues = 2 '---- CompareEnum Values ---- Const adCompareLessThan = 0 Const adCompareEqual = 1 Const adCompareGreaterThan = 2 Const adCompareNotEqual = 3 Const adCompareNotComparable = 4 '---- FilterGroupEnum Values ---- Const adFilterNone = 0 Const adFilterPendingRecords = 1 Const adFilterAffectedRecords = 2 Const adFilterFetchedRecords = 3 Const adFilterConflictingRecords = 5 '---- SearchDirectionEnum Values ---- Const adSearchForward = 1 Const adSearchBackward = -1 '---- PersistFormatEnum Values ---- Const adPersistADTG = 0 Const adPersistXML = 1 '---- StringFormatEnum Values ---- Const adClipString = 2 '---- ConnectPromptEnum Values ---- Const adPromptAlways = 1 Const adPromptComplete = 2 Const adPromptCompleteRequired = 3 Const adPromptNever = 4 '---- ConnectModeEnum Values ---- Const adModeUnknown = 0 Const adModeRead = 1 Const adModeWrite = 2 Const adModeReadWrite = 3 Const adModeShareDenyRead = 4 Const adModeShareDenyWrite = 8 Const adModeShareExclusive = &Hc Const adModeShareDenyNone = &H10 Const adModeRecursive = &H400000 '---- RecordCreateOptionsEnum Values ---- Const adCreateCollection = &H00002000 Const adCreateStructDoc = &H80000000 Const adCreateNonCollection = &H00000000 Const adOpenIfExists = &H02000000 Const adCreateOverwrite = &H04000000 Const adFailIfNotExists = -1 '---- RecordOpenOptionsEnum Values ---- Const adOpenRecordUnspecified = -1 Const adOpenOutput = &H00800000 Const adOpenAsync = &H00001000 Const adDelayFetchStream = &H00004000 Const adDelayFetchFields = &H00008000 Const adOpenExecuteCommand = &H00010000 '---- IsolationLevelEnum Values ---- Const adXactUnspecified = &Hffffffff Const adXactChaos = &H00000010 Const adXactReadUncommitted = &H00000100 Const adXactBrowse = &H00000100 Const adXactCursorStability = &H00001000 Const adXactReadCommitted = &H00001000 Const adXactRepeatableRead = &H00010000 Const adXactSerializable = &H00100000 Const adXactIsolated = &H00100000 '---- XactAttributeEnum Values ---- Const adXactCommitRetaining = &H00020000 Const adXactAbortRetaining = &H00040000 '---- PropertyAttributesEnum Values ---- Const adPropNotSupported = &H0000 Const adPropRequired = &H0001 Const adPropOptional = &H0002 Const adPropRead = &H0200 Const adPropWrite = &H0400 '---- ErrorValueEnum Values ---- Const adErrProviderFailed = &Hbb8 Const adErrInvalidArgument = &Hbb9 Const adErrOpeningFile = &Hbba Const adErrReadFile = &Hbbb Const adErrWriteFile = &Hbbc Const adErrNoCurrentRecord = &Hbcd Const adErrIllegalOperation = &Hc93 Const adErrCantChangeProvider = &Hc94 Const adErrInTransaction = &Hcae Const adErrFeatureNotAvailable = &Hcb3 Const adErrItemNotFound = &Hcc1 Const adErrObjectInCollection = &Hd27 Const adErrObjectNotSet = &Hd5c Const adErrDataConversion = &Hd5d Const adErrObjectClosed = &He78 Const adErrObjectOpen = &He79 Const adErrProviderNotFound = &He7a Const adErrBoundToCommand = &He7b Const adErrInvalidParamInfo = &He7c Const adErrInvalidConnection = &He7d Const adErrNotReentrant = &He7e Const adErrStillExecuting = &He7f Const adErrOperationCancelled = &He80 Const adErrStillConnecting = &He81 Const adErrInvalidTransaction = &He82 Const adErrUnsafeOperation = &He84 Const adwrnSecurityDialog = &He85 Const adwrnSecurityDialogHeader = &He86 Const adErrIntegrityViolation = &He87 Const adErrPermissionDenied = &He88 Const adErrDataOverflow = &He89 Const adErrSchemaViolation = &He8a Const adErrSignMismatch = &He8b Const adErrCantConvertvalue = &He8c Const adErrCantCreate = &He8d Const adErrColumnNotOnThisRow = &He8e Const adErrURLIntegrViolSetColumns = &He8f Const adErrURLDoesNotExist = &He8f Const adErrTreePermissionDenied = &He90 Const adErrInvalidURL = &He91 Const adErrResourceLocked = &He92 Const adErrResourceExists = &He93 Const adErrCannotComplete = &He94 Const adErrVolumeNotFound = &He95 Const adErrOutOfSpace = &He96 Const adErrResourceOutOfScope = &He97 Const adErrUnavailable = &He98 Const adErrURLNamedRowDoesNotExist = &He99 Const adErrDelResOutOfScope = &He9a Const adErrPropInvalidColumn = &He9b Const adErrPropInvalidOption = &He9c Const adErrPropInvalidValue = &He9d Const adErrPropConflicting = &He9e Const adErrPropNotAllSettable = &He9f Const adErrPropNotSet = &Hea0 Const adErrPropNotSettable = &Hea1 Const adErrPropNotSupported = &Hea2 Const adErrCatalogNotSet = &Hea3 Const adErrCantChangeConnection = &Hea4 Const adErrFieldsUpdateFailed = &Hea5 Const adErrDenyNotSupported = &Hea6 Const adErrDenyTypeNotSupported = &Hea7 '---- ParameterAttributesEnum Values ---- Const adParamSigned = &H0010 Const adParamNullable = &H0040 Const adParamLong = &H0080 '---- ParameterDirectionEnum Values ---- Const adParamUnknown = &H0000 Const adParamInput = &H0001 Const adParamOutput = &H0002 Const adParamInputOutput = &H0003 Const adParamReturnValue = &H0004 '---- CommandTypeEnum Values ---- Const adCmdUnknown = &H0008 Const adCmdText = &H0001 Const adCmdTable = &H0002 Const adCmdStoredProc = &H0004 Const adCmdFile = &H0100 Const adCmdTableDirect = &H0200 '---- EventStatusEnum Values ---- Const adStatusOK = &H0000001 Const adStatusErrorsOccurred = &H0000002 Const adStatusCantDeny = &H0000003 Const adStatusCancel = &H0000004 Const adStatusUnwantedEvent = &H0000005 '---- EventReasonEnum Values ---- Const adRsnAddNew = 1 Const adRsnDelete = 2 Const adRsnUpdate = 3 Const adRsnUndoUpdate = 4 Const adRsnUndoAddNew = 5 Const adRsnUndoDelete = 6 Const adRsnRequery = 7 Const adRsnResynch = 8 Const adRsnClose = 9 Const adRsnMove = 10 Const adRsnFirstChange = 11 Const adRsnMoveFirst = 12 Const adRsnMoveNext = 13 Const adRsnMovePrevious = 14 Const adRsnMoveLast = 15 '---- SchemaEnum Values ---- Const adSchemaProviderSpecific = -1 Const adSchemaAsserts = 0 Const adSchemaCatalogs = 1 Const adSchemaCharacterSets = 2 Const adSchemaCollations = 3 Const adSchemaColumns = 4 Const adSchemaCheckConstraints = 5 Const adSchemaConstraintColumnUsage = 6 Const adSchemaConstraintTableUsage = 7 Const adSchemaKeyColumnUsage = 8 Const adSchemaReferentialConstraints = 9 Const adSchemaTableConstraints = 10 Const adSchemaColumnsDomainUsage = 11 Const adSchemaIndexes = 12 Const adSchemaColumnPrivileges = 13 Const adSchemaTablePrivileges = 14 Const adSchemaUsagePrivileges = 15 Const adSchemaProcedures = 16 Const adSchemaSchemata = 17 Const adSchemaSQLLanguages = 18 Const adSchemaStatistics = 19 Const adSchemaTables = 20 Const adSchemaTranslations = 21 Const adSchemaProviderTypes = 22 Const adSchemaViews = 23 Const adSchemaViewColumnUsage = 24 Const adSchemaViewTableUsage = 25 Const adSchemaProcedureParameters = 26 Const adSchemaForeignKeys = 27 Const adSchemaPrimaryKeys = 28 Const adSchemaProcedureColumns = 29 Const adSchemaDBInfoKeywords = 30 Const adSchemaDBInfoLiterals = 31 Const adSchemaCubes = 32 Const adSchemaDimensions = 33 Const adSchemaHierarchies = 34 Const adSchemaLevels = 35 Const adSchemaMeasures = 36 Const adSchemaProperties = 37 Const adSchemaMembers = 38 Const adSchemaTrustees = 39 Const adSchemaFunctions = 40 Const adSchemaActions = 41 Const adSchemaCommands = 42 Const adSchemaSets = 43 '---- FieldStatusEnum Values ---- Const adFieldOK = 0 Const adFieldCantConvertValue = 2 Const adFieldIsNull = 3 Const adFieldTruncated = 4 Const adFieldSignMismatch = 5 Const adFieldDataOverflow = 6 Const adFieldCantCreate = 7 Const adFieldUnavailable = 8 Const adFieldPermissionDenied = 9 Const adFieldIntegrityViolation = 10 Const adFieldSchemaViolation = 11 Const adFieldBadStatus = 12 Const adFieldDefault = 13 Const adFieldIgnore = 15 Const adFieldDoesNotExist = 16 Const adFieldInvalidURL = 17 Const adFieldResourceLocked = 18 Const adFieldResourceExists = 19 Const adFieldCannotComplete = 20 Const adFieldVolumeNotFound = 21 Const adFieldOutOfSpace = 22 Const adFieldCannotDeleteSource = 23 Const adFieldReadOnly = 24 Const adFieldResourceOutOfScope = 25 Const adFieldAlreadyExists = 26 Const adFieldPendingInsert = &H10000 Const adFieldPendingDelete = &H20000 Const adFieldPendingChange = &H40000 Const adFieldPendingUnknown = &H80000 Const adFieldPendingUnknownDelete = &H100000 '---- SeekEnum Values ---- Const adSeekFirstEQ = &H1 Const adSeekLastEQ = &H2 Const adSeekAfterEQ = &H4 Const adSeekAfter = &H8 Const adSeekBeforeEQ = &H10 Const adSeekBefore = &H20 '---- ADCPROP_UPDATECRITERIA_ENUM Values ---- Const adCriteriaKey = 0 Const adCriteriaAllCols = 1 Const adCriteriaUpdCols = 2 Const adCriteriaTimeStamp = 3 '---- ADCPROP_ASYNCTHREADPRIORITY_ENUM Values ---- Const adPriorityLowest = 1 Const adPriorityBelowNormal = 2 Const adPriorityNormal = 3 Const adPriorityAboveNormal = 4 Const adPriorityHighest = 5 '---- ADCPROP_AUTORECALC_ENUM Values ---- Const adRecalcUpFront = 0 Const adRecalcAlways = 1 '---- ADCPROP_UPDATERESYNC_ENUM Values ---- '---- ADCPROP_UPDATERESYNC_ENUM Values ---- '---- MoveRecordOptionsEnum Values ---- Const adMoveUnspecified = -1 Const adMoveOverWrite = 1 Const adMoveDontUpdateLinks = 2 Const adMoveAllowEmulation = 4 '---- CopyRecordOptionsEnum Values ---- Const adCopyUnspecified = -1 Const adCopyOverWrite = 1 Const adCopyAllowEmulation = 4 Const adCopyNonRecursive = 2 '---- StreamTypeEnum Values ---- Const adTypeBinary = 1 Const adTypeText = 2 '---- LineSeparatorEnum Values ---- Const adLF = 10 Const adCR = 13 Const adCRLF = -1 '---- StreamOpenOptionsEnum Values ---- Const adOpenStreamUnspecified = -1 Const adOpenStreamAsync = 1 Const adOpenStreamFromRecord = 4 '---- StreamWriteEnum Values ---- Const adWriteChar = 0 Const adWriteLine = 1 '---- SaveOptionsEnum Values ---- Const adSaveCreateNotExist = 1 Const adSaveCreateOverWrite = 2 '---- FieldEnum Values ---- Const adDefaultStream = -1 Const adRecordURL = -2 '---- StreamReadEnum Values ---- Const adReadAll = -1 Const adReadLine = -2 '---- RecordTypeEnum Values ---- Const adSimpleRecord = 0 Const adCollectionRecord = 1 Const adStructDoc = 2 %>
|
▶ adojavas.inc
Adojavas.inc 파일 내용은 다음과 같다 . 파일로 필요하다면 아래 내용을 복사한 후 adojavas.inc 이름으로 저장하기 바란다 :
|
<% //-------------------------------------------------------------------- // Microsoft ADO // // Copyright (c) 1996-1998 Microsoft Corporation. // // // // ADO constants include file for JavaScript // //-------------------------------------------------------------------- //---- CursorTypeEnum Values ---- var adOpenForwardOnly = 0; var adOpenKeyset = 1; var adOpenDynamic = 2; var adOpenStatic = 3; //---- CursorOptionEnum Values ---- var adHoldRecords = 0x00000100; var adMovePrevious = 0x00000200; var adAddNew = 0x01000400; var adDelete = 0x01000800; var adUpdate = 0x01008000; var adBookmark = 0x00002000; var adApproxPosition = 0x00004000; var adUpdateBatch = 0x00010000; var adResync = 0x00020000; var adNotify = 0x00040000; var adFind = 0x00080000; var adSeek = 0x00400000; var adIndex = 0x00800000; //---- LockTypeEnum Values ---- var adLockReadOnly = 1; var adLockPessimistic = 2; var adLockOptimistic = 3; var adLockBatchOptimistic = 4; //---- ExecuteOptionEnum Values ---- var adAsyncExecute = 0x00000010; var adAsyncFetch = 0x00000020; var adAsyncFetchNonBlocking = 0x00000040; var adExecuteNoRecords = 0x00000080; var adExecuteStream = 0x00000400; //---- ConnectOptionEnum Values ---- var adAsyncConnect = 0x00000010; //---- ObjectStateEnum Values ---- var adStateClosed = 0x00000000; var adStateOpen = 0x00000001; var adStateConnecting = 0x00000002; var adStateExecuting = 0x00000004; var adStateFetching = 0x00000008; //---- CursorLocationEnum Values ---- var adUseServer = 2; var adUseClient = 3; //---- DataTypeEnum Values ---- var adEmpty = 0; var adTinyInt = 16; var adSmallInt = 2; var adInteger = 3; var adBigInt = 20; var adUnsignedTinyInt = 17; var adUnsignedSmallInt = 18; var adUnsignedInt = 19; var adUnsignedBigInt = 21; var adSingle = 4; var adDouble = 5; var adCurrency = 6; var adDecimal = 14; var adNumeric = 131; var adBoolean = 11; var adError = 10; var adUserDefined = 132; var adVariant = 12; var adIDispatch = 9; var adIUnknown = 13; var adGUID = 72; var adDate = 7; var adDBDate = 133; var adDBTime = 134; var adDBTimeStamp = 135; var adBSTR = 8; var adChar = 129; var adVarChar = 200; var adLongVarChar = 201; var adWChar = 130; var adVarWChar = 202; var adLongVarWChar = 203; var adBinary = 128; var adVarBinary = 204; var adLongVarBinary = 205; var adChapter = 136; var adFileTime = 64; var adPropVariant = 138; var adVarNumeric = 139; var adArray = 0x2000; //---- FieldAttributeEnum Values ---- var adFldMayDefer = 0x00000002; var adFldUpdatable = 0x00000004; var adFldUnknownUpdatable = 0x00000008; var adFldFixed = 0x00000010; var adFldIsNullable = 0x00000020; var adFldMayBeNull = 0x00000040; var adFldLong = 0x00000080; var adFldRowID = 0x00000100; var adFldRowVersion = 0x00000200; var adFldCacheDeferred = 0x00001000; var adFldIsChapter = 0x00002000; var adFldNegativeScale = 0x00004000; var adFldKeyColumn = 0x00008000; var adFldIsRowURL = 0x00010000; var adFldIsDefaultStream = 0x00020000; var adFldIsCollection = 0x00040000; //---- EditModeEnum Values ---- var adEditNone = 0x0000; var adEditInProgress = 0x0001; var adEditAdd = 0x0002; var adEditDelete = 0x0004; //---- RecordStatusEnum Values ---- var adRecOK = 0x0000000; var adRecNew = 0x0000001; var adRecModified = 0x0000002; var adRecDeleted = 0x0000004; var adRecUnmodified = 0x0000008; var adRecInvalid = 0x0000010; var adRecMultipleChanges = 0x0000040; var adRecPendingChanges = 0x0000080; var adRecCanceled = 0x0000100; var adRecCantRelease = 0x0000400; var adRecConcurrencyViolation = 0x0000800; var adRecIntegrityViolation = 0x0001000; var adRecMaxChangesExceeded = 0x0002000; var adRecObjectOpen = 0x0004000; var adRecOutOfMemory = 0x0008000; var adRecPermissionDenied = 0x0010000; var adRecSchemaViolation = 0x0020000; var adRecDBDeleted = 0x0040000; //---- GetRowsOptionEnum Values ---- var adGetRowsRest = -1; //---- PositionEnum Values ---- var adPosUnknown = -1; var adPosBOF = -2; var adPosEOF = -3; //---- BookmarkEnum Values ---- var adBookmarkCurrent = 0; var adBookmarkFirst = 1; var adBookmarkLast = 2; //---- MarshalOptionsEnum Values ---- var adMarshalAll = 0; var adMarshalModifiedOnly = 1; //---- AffectEnum Values ---- var adAffectCurrent = 1; var adAffectGroup = 2; var adAffectAllChapters = 4; //---- ResyncEnum Values ---- var adResyncUnderlyingValues = 1; var adResyncAllValues = 2; //---- CompareEnum Values ---- var adCompareLessThan = 0; var adCompareEqual = 1; var adCompareGreaterThan = 2; var adCompareNotEqual = 3; var adCompareNotComparable = 4; //---- FilterGroupEnum Values ---- var adFilterNone = 0; var adFilterPendingRecords = 1; var adFilterAffectedRecords = 2; var adFilterFetchedRecords = 3; var adFilterConflictingRecords = 5; //---- SearchDirectionEnum Values ---- var adSearchForward = 1; var adSearchBackward = -1; //---- PersistFormatEnum Values ---- var adPersistADTG = 0; var adPersistXML = 1; //---- StringFormatEnum Values ---- var adClipString = 2; //---- ConnectPromptEnum Values ---- var adPromptAlways = 1; var adPromptComplete = 2; var adPromptCompleteRequired = 3; var adPromptNever = 4; //---- ConnectModeEnum Values ---- var adModeUnknown = 0; var adModeRead = 1; var adModeWrite = 2; var adModeReadWrite = 3; var adModeShareDenyRead = 4; var adModeShareDenyWrite = 8; var adModeShareExclusive = 0xc; var adModeShareDenyNone = 0x10; var adModeRecursive = 0x400000; //---- RecordCreateOptionsEnum Values ---- var adCreateCollection = 0x00002000; var adCreateStructDoc = 0x80000000; var adCreateNonCollection = 0x00000000; var adOpenIfExists = 0x02000000; var adCreateOverwrite = 0x04000000; var adFailIfNotExists = -1; //---- RecordOpenOptionsEnum Values ---- var adOpenRecordUnspecified = -1; var adOpenOutput = 0x00800000; var adOpenAsync = 0x00001000; var adDelayFetchStream = 0x00004000; var adDelayFetchFields = 0x00008000; var adOpenExecuteCommand = 0x00010000; //---- IsolationLevelEnum Values ---- var adXactUnspecified = 0xffffffff; var adXactChaos = 0x00000010; var adXactReadUncommitted = 0x00000100; var adXactBrowse = 0x00000100; var adXactCursorStability = 0x00001000; var adXactReadCommitted = 0x00001000; var adXactRepeatableRead = 0x00010000; var adXactSerializable = 0x00100000; var adXactIsolated = 0x00100000; //---- XactAttributeEnum Values ---- var adXactCommitRetaining = 0x00020000; var adXactAbortRetaining = 0x00040000; //---- PropertyAttributesEnum Values ---- var adPropNotSupported = 0x0000; var adPropRequired = 0x0001; var adPropOptional = 0x0002; var adPropRead = 0x0200; var adPropWrite = 0x0400; //---- ErrorValueEnum Values ---- var adErrProviderFailed = 0xbb8; var adErrInvalidArgument = 0xbb9; var adErrOpeningFile = 0xbba; var adErrReadFile = 0xbbb; var adErrWriteFile = 0xbbc; var adErrNoCurrentRecord = 0xbcd; var adErrIllegalOperation = 0xc93; var adErrCantChangeProvider = 0xc94; var adErrInTransaction = 0xcae; var adErrFeatureNotAvailable = 0xcb3; var adErrItemNotFound = 0xcc1; var adErrObjectInCollection = 0xd27; var adErrObjectNotSet = 0xd5c; var adErrDataConversion = 0xd5d; var adErrObjectClosed = 0xe78; var adErrObjectOpen = 0xe79; var adErrProviderNotFound = 0xe7a; var adErrBoundToCommand = 0xe7b; var adErrInvalidParamInfo = 0xe7c; var adErrInvalidConnection = 0xe7d; var adErrNotReentrant = 0xe7e; var adErrStillExecuting = 0xe7f; var adErrOperationCancelled = 0xe80; var adErrStillConnecting = 0xe81; var adErrInvalidTransaction = 0xe82; var adErrUnsafeOperation = 0xe84; var adwrnSecurityDialog = 0xe85; var adwrnSecurityDialogHeader = 0xe86; var adErrIntegrityViolation = 0xe87; var adErrPermissionDenied = 0xe88; var adErrDataOverflow = 0xe89; var adErrSchemaViolation = 0xe8a; var adErrSignMismatch = 0xe8b; var adErrCantConvertvalue = 0xe8c; var adErrCantCreate = 0xe8d; var adErrColumnNotOnThisRow = 0xe8e; var adErrURLIntegrViolSetColumns = 0xe8f; var adErrURLDoesNotExist = 0xe8f; var adErrTreePermissionDenied = 0xe90; var adErrInvalidURL = 0xe91; var adErrResourceLocked = 0xe92; var adErrResourceExists = 0xe93; var adErrCannotComplete = 0xe94; var adErrVolumeNotFound = 0xe95; var adErrOutOfSpace = 0xe96; var adErrResourceOutOfScope = 0xe97; var adErrUnavailable = 0xe98; var adErrURLNamedRowDoesNotExist = 0xe99; var adErrDelResOutOfScope = 0xe9a; var adErrPropInvalidColumn = 0xe9b; var adErrPropInvalidOption = 0xe9c; var adErrPropInvalidValue = 0xe9d; var adErrPropConflicting = 0xe9e; var adErrPropNotAllSettable = 0xe9f; var adErrPropNotSet = 0xea0; var adErrPropNotSettable = 0xea1; var adErrPropNotSupported = 0xea2; var adErrCatalogNotSet = 0xea3; var adErrCantChangeConnection = 0xea4; var adErrFieldsUpdateFailed = 0xea5; var adErrDenyNotSupported = 0xea6; var adErrDenyTypeNotSupported = 0xea7; //---- ParameterAttributesEnum Values ---- var adParamSigned = 0x0010; var adParamNullable = 0x0040; var adParamLong = 0x0080; //---- ParameterDirectionEnum Values ---- var adParamUnknown = 0x0000; var adParamInput = 0x0001; var adParamOutput = 0x0002; var adParamInputOutput = 0x0003; var adParamReturnValue = 0x0004; //---- CommandTypeEnum Values ---- var adCmdUnknown = 0x0008; var adCmdText = 0x0001; var adCmdTable = 0x0002; var adCmdStoredProc = 0x0004; var adCmdFile = 0x0100; var adCmdTableDirect = 0x0200; //---- EventStatusEnum Values ---- var adStatusOK = 0x0000001; var adStatusErrorsOccurred = 0x0000002; var adStatusCantDeny = 0x0000003; var adStatusCancel = 0x0000004; var adStatusUnwantedEvent = 0x0000005; //---- EventReasonEnum Values ---- var adRsnAddNew = 1; var adRsnDelete = 2; var adRsnUpdate = 3; var adRsnUndoUpdate = 4; var adRsnUndoAddNew = 5; var adRsnUndoDelete = 6; var adRsnRequery = 7; var adRsnResynch = 8; var adRsnClose = 9; var adRsnMove = 10; var adRsnFirstChange = 11; var adRsnMoveFirst = 12; var adRsnMoveNext = 13; var adRsnMovePrevious = 14; var adRsnMoveLast = 15; //---- SchemaEnum Values ---- var adSchemaProviderSpecific = -1; var adSchemaAsserts = 0; var adSchemaCatalogs = 1; var adSchemaCharacterSets = 2; var adSchemaCollations = 3; var adSchemaColumns = 4; var adSchemaCheckConstraints = 5; var adSchemaConstraintColumnUsage = 6; var adSchemaConstraintTableUsage = 7; var adSchemaKeyColumnUsage = 8; var adSchemaReferentialConstraints = 9; var adSchemaTableConstraints = 10; var adSchemaColumnsDomainUsage = 11; var adSchemaIndexes = 12; var adSchemaColumnPrivileges = 13; var adSchemaTablePrivileges = 14; var adSchemaUsagePrivileges = 15; var adSchemaProcedures = 16; var adSchemaSchemata = 17; var adSchemaSQLLanguages = 18; var adSchemaStatistics = 19; var adSchemaTables = 20; var adSchemaTranslations = 21; var adSchemaProviderTypes = 22; var adSchemaViews = 23; var adSchemaViewColumnUsage = 24; var adSchemaViewTableUsage = 25; var adSchemaProcedureParameters = 26; var adSchemaForeignKeys = 27; var adSchemaPrimaryKeys = 28; var adSchemaProcedureColumns = 29; var adSchemaDBInfoKeywords = 30; var adSchemaDBInfoLiterals = 31; var adSchemaCubes = 32; var adSchemaDimensions = 33; var adSchemaHierarchies = 34; var adSchemaLevels = 35; var adSchemaMeasures = 36; var adSchemaProperties = 37; var adSchemaMembers = 38; var adSchemaTrustees = 39; var adSchemaFunctions = 40; var adSchemaActions = 41; var adSchemaCommands = 42; var adSchemaSets = 43; //---- FieldStatusEnum Values ---- var adFieldOK = 0; var adFieldCantConvertValue = 2; var adFieldIsNull = 3; var adFieldTruncated = 4; var adFieldSignMismatch = 5; var adFieldDataOverflow = 6; var adFieldCantCreate = 7; var adFieldUnavailable = 8; var adFieldPermissionDenied = 9; var adFieldIntegrityViolation = 10; var adFieldSchemaViolation = 11; var adFieldBadStatus = 12; var adFieldDefault = 13; var adFieldIgnore = 15; var adFieldDoesNotExist = 16; var adFieldInvalidURL = 17; var adFieldResourceLocked = 18; var adFieldResourceExists = 19; var adFieldCannotComplete = 20; var adFieldVolumeNotFound = 21; var adFieldOutOfSpace = 22; var adFieldCannotDeleteSource = 23; var adFieldReadOnly = 24; var adFieldResourceOutOfScope = 25; var adFieldAlreadyExists = 26; var adFieldPendingInsert = 0x10000; var adFieldPendingDelete = 0x20000; var adFieldPendingChange = 0x40000; var adFieldPendingUnknown = 0x80000; var adFieldPendingUnknownDelete = 0x100000; //---- SeekEnum Values ---- var adSeekFirstEQ = 0x1; var adSeekLastEQ = 0x2; var adSeekAfterEQ = 0x4; var adSeekAfter = 0x8; var adSeekBeforeEQ = 0x10; var adSeekBefore = 0x20; //---- ADCPROP_UPDATECRITERIA_ENUM Values ---- var adCriteriaKey = 0; var adCriteriaAllCols = 1; var adCriteriaUpdCols = 2; var adCriteriaTimeStamp = 3; //---- ADCPROP_ASYNCTHREADPRIORITY_ENUM Values ---- var adPriorityLowest = 1; var adPriorityBelowNormal = 2; var adPriorityNormal = 3; var adPriorityAboveNormal = 4; var adPriorityHighest = 5; //---- ADCPROP_AUTORECALC_ENUM Values ---- var adRecalcUpFront = 0; var adRecalcAlways = 1; //---- ADCPROP_UPDATERESYNC_ENUM Values ---- //---- ADCPROP_UPDATERESYNC_ENUM Values ---- //---- MoveRecordOptionsEnum Values ---- var adMoveUnspecified = -1; var adMoveOverWrite = 1; var adMoveDontUpdateLinks = 2; var adMoveAllowEmulation = 4; //---- CopyRecordOptionsEnum Values ---- var adCopyUnspecified = -1; var adCopyOverWrite = 1; var adCopyAllowEmulation = 4; var adCopyNonRecursive = 2; //---- StreamTypeEnum Values ---- var adTypeBinary = 1; var adTypeText = 2; //---- LineSeparatorEnum Values ---- var adLF = 10; var adCR = 13; var adCRLF = -1; //---- StreamOpenOptionsEnum Values ---- var adOpenStreamUnspecified = -1; var adOpenStreamAsync = 1; var adOpenStreamFromRecord = 4; //---- StreamWriteEnum Values ---- var adWriteChar = 0; var adWriteLine = 1; //---- SaveOptionsEnum Values ---- var adSaveCreateNotExist = 1; var adSaveCreateOverWrite = 2; //---- FieldEnum Values ---- var adDefaultStream = -1; var adRecordURL = -2; //---- StreamReadEnum Values ---- var adReadAll = -1; var adReadLine = -2; //---- RecordTypeEnum Values ---- var adSimpleRecord = 0; var adCollectionRecord = 1; var adStructDoc = 2; %>
|
Adovbs.inc 파일을 사용하는 방법은 아주 간단하다 . 일반 인클루드 파일 삽입하듯 삽입하면 된다 .
|
<!-- #include file="adovbs.inc" --> |
일단 Adovbs.inc 파일을 인클루드 시켰다면 ad 로 시작하는 상수 이름들을 사용할 수 있을 것이다 .
많은 개발자들 중에 adOpenForwardOnly 커서 사용하는 것을 싫어하는 사람들이 있다 . 이는 앞에서 뒤로 한 방향으로만 움직일 수 있는 커서이기 때문이다 . 이런 속성은 레코드셋의 전체 카운트를 셀 때 필요한 RecordCount 속성을 사용할 수 없게 하므로 불편하다고 생각하기 때문이다 .
이런 이유로 일부 개발자들은 모든 레코드셋을 adOpenDynamic 또는 adOpenStatic 으로 여는 사람들이 있다 . 하지만 이것은 좋은 생각이 아니다 . 왜냐하면 Foward-only 커서의 성능이 가장 좋기 때문이다 .
우리는 이번 강좌를 통해 가급적 특별한 경우를 제외하고는 adOpenForwardOnly 커서와 adReadOnly 락타입을 사용하는 것이 좋으며 레코드셋 객체를 생성할 때는 명시적으로 생성하는 것이 좋다는 것을 배웠다 .
어떤 커서와 락타입의 성능이 가장 좋은지에 대해서는 다음 장에 결과를 올려 놓았다 . 참조하기 바란다 .
- 커서와 락타입의 성능 분석 결과
컴퓨터 스펙 :
- Pentium II - 450 MHz
- Windows NT Server 4, SP3
- 256 MB RAM
- 8 GB SCSI HD

로컬에 위치한 SQL 서버 7.0 데이터베이스를 이용하여 테스트는 진행되었다 . 사용된 데이터베이스에는 하나의 테이블이 존재한다 . 이 테이블은 다음과 같은 SQL 문을 이용하여 생성된 10,000 개의 레코드로 구성되어 있다 :
|
DECLARE @LOOP int |
ID 필드에는 클러스트 되지 않은 프라이머리 키 제약이 걸려 있고 , SSN 필드에는 유니크 (UNIQUE) 제약이 걸려 있다 . 이 테이블에서는 int, varchar, char, tinyint, datetime, bit 등의 다양한 데이터 타입을 사용하였다 . 또한 System DSN 을 이용하여 데이터베이스에 접속하는 환경이며 다양한 쿼리 (query) 를 실행하기 위해 비주얼 베이직 6.0 을 사용하였다 . ADO 의 버전은 2.1 이다 .
데이터베이스에 사용된 SQL 문은 다음과 같다 :
|
strSQL = S ELECT * FROM tblStressTest |
또한 비주얼 베이직 애플리케이션에서 다음과 같은 명령을 실행하여 테스트를 하였다 :
|
For iCount = 1 To 5 |
( 물론 커서 타입과 락타입 (locktype) 은 매번 실행될 때마다 변경된다 .) adLockReadOnly, adLockOptimistic, adLockPessimistic 락타입에 대해 각각의 커서 타입 당 10 회를 실행시켜 그 평균 값을 다음과 같이 구하였다 .
[출처] ADO cursor type_4GuysFromRolla|작성자 써니
댓글 없음:
댓글 쓰기