Web/ASP & ASP.NET2009. 4. 10. 13:30

< 출처 : korea.internet.com, 지은이 : 최현진 >

OriginalValue 속성

OriginalValue 속성은 레코드를 변경하기 전에 있던 Field 개체의 값을 나타내며, Variant 값을 반환한다.

배치 업데이트 모드가 아닌 경우, 이 속성은 변경하기 이전에 존재했던 필드 값을 가지고 있다. 즉, 마지막으로 Update 메서드를 호출할 때 존재했던 값을 가지고 있다. 이 값은 CancelUpdate 메서드가 Value 속성을 이전으로 변경할 때 사용하는 값과 동일하다.

배치 업데이트 모드인 경우, 이 속성은 마지막으로 UpdateBatch 메서드를 호출할 때 존재했던 값을 가지고 있다. 이 값은 CancelBatch 메서드가 Value 속성을 변경할 때 사용하는 값과 동일하다. 이 속성은 UnderlyingValue 속성과 함께 배치 업데이트 모드에서 발생하는 충돌 문제를 해결할 때 사용된다.

[예제]
다음 예제는 Pubs 데이터베이스의 Titles 테이블을 Recordset 개체로 생성하고, Type 필드의 값을 "OriginalV"로 변경한다. 그러면 Type 필드의 OriginalValue 속성은 "OriginalV"가 된다. 그런 다음 adoCn의 Execute 메서드를 사용해서 Type 필드의 값을 "UnderlyingV"로 변경한다. 그러면 Type 필드의 UnderlyingValue 속성은 "UnderlyingV"가 된다. 그리고 난 다음 Type 필드의 값을 "NewV"로 변경하고, 각 속성의 값을 보여주는 예이다.

Private Sub cmdOriginalValue_Click()
  Dim adoCn As ADODB.Connection
  Dim adoRs As ADODB.Recordset
  Dim strConn As String

  Set adoCn = New ADODB.Connection
  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"
  adoCn.Open strConn

  Set adoRs = New ADODB.Recordset
  Set adoRs.ActiveConnection = adoCn

  adoRs.CursorType = adOpenKeyset
  adoRs.LockType = adLockOptimistic
  adoRs.Open "Titles"

  adoRs.Fields(2) = "OriginalV"
  adoRs.Update

  adoCn.Execute "UPDATE titles SET type = 'UnderlyingV' WHERE type = 'OriginalV'"

  adoRs.MoveFirst
  adoRs.Fields(2).Value = "NewV"

  Debug.Print "Value : " & adoRs.Fields(2).Value & vbCrLf & _
    "OriginalValue : " & adoRs.Fields(2).OriginalValue & vbCrLf & _
    "UnderlyingValue : " & adoRs.Fields(2).UnderlyingValue

  adoRs.CancelUpdate

  adoRs.Close
  Set adoRs = Nothing

  adoCn.Close
  Set adoCn = Nothing
End Sub


Precision 속성

Precision 속성은 Field 개체의 숫자 값에 대한 정밀도(Precision)를 나타내며, Byte 값을 반환한다.

SQL 서버의 Numeric 데이터 형식에서 Precision은 전체 숫자의 자릿수를 나타내며, Scale은 소수점 이하의 자릿수를 나타낸다.

예를 들어, Precision이 4이고 Scale이 2라면, 전체 숫자의 자릿수는 4이며, 그 중에서 소수점 이하는 2자리임을 나타내는 것이다. 즉, 소수점 이상의 수에 대한 자릿수는 1이다.

이 속성을 사용하여 숫자로 된 Field 개체의 값을 나타낼 때 숫자 값 전체의 자릿수를 결정할 수 있다.

Field 개체의 이 속성은 읽기 전용이며, Parameter 개체의 Precision 속성은 읽기와 쓰기가 모두 가능하다.

이 속성에 대한 예제는 Field 개체의 NumericScale 속성의 예제를 참조한다.


Type 속성

Type 속성은 Field 개체의 작업 형식 또는 데이터 형식을 나타내며, DataTypeEnum 값 중 하나를 반환한다.

DataTypeEnum 값은 다음과 같다.


상수 설명
adBigInt 20 8 바이트의 부호 있는 정수(DBTYPE_I8)를 나타낸다.
adBinary 128 이진 값(DBTYPE_BYTES)을 나타낸다.
adBoolean 11 Boolean 값(DBTYPE_BOOL)을 나타낸다.
adBSTR 8 Null 종결 문자열(유니코드)(DBTYPE_BSTR)을 나타낸다.
adChapter 136 Child RowSet에서 Row를 식별하기 위해서 사용되는 4 바이트 Chapter 값(DBTYPE_HCHAPTER)을 나타낸다.
adChar 129 String 값(DBTYPE_STR)을 나타낸다.
adCurrency 6 Currency 값(DBTYPE_CY)을 나타낸다. Currency는 소수점 이하의 자릿수가 4개인 고정 자릿수이다. 이 값은 10,000으로 환산된 8바이트의 부호 있는 정수로 저장된다.
adDate 7 Date 값(DBTYPE_DATE)을 나타낸다. 날짜는 Double 형식으로 저장되며, 정수 부분은 1899년 12월 30일 이후의 날짜수이며 소수 부분은 하루 중 시간을 나타낸다.
adDBDate 133 날짜 값(yyyymmdd)(DBTYPE_DBDATE)을 나타낸다.
adDBFileTime 137 파일-시간 값(DBTYPE_DBFILETIME)을 나타낸다.
adDBTime 134 시간 값(hhmmss)(DBTYPE_DBTIME)을 나타낸다.
adDBTimeStamp 135 날짜-시간 스탬프(yyyymmddhhmmss에 10억분의 1초 단위가 추가된)(DBTYPE_DBTIMESTAMP)를 나타낸다.
adDecimal 14 고정 정밀도와 크기로 나타낸 정확한 숫자 값(DBTYPE_DECIMAL)을 나타낸다.
adDouble 5 배정도의 부동 소수점 값(DBTYPE_R8)을 나타낸다.
adEmpty 0 지정된 값 없음(DBTYPE_EMPTY)을 나타낸다.
adError 10 32 비트 오류 코드(DBTYPE_ERROR)를 나타낸다.
adFileTime 64 1601년 1월 1일 이후의 1000만분의 1초 간격의 숫자를 표현하는 64 비트 값(DBTYPE_FILETIME)을 나타낸다.
adGUID 72 전역 고유 식별자(GUID)(DBTYPE_GUID)를 나타낸다.
adIDispatch 9 OLE 개체에서 IDispatch 인터페이스에 대한 포인터(DBTYPE_IDISPATCH)를 나타낸다.
참고 이 데이터 형식은 ADO에 의해서 현재는 지원되지 않는다. 이 데이터 형식의 사용은 예기치 않은 결과를 초래할 수 있다.
adInteger 3 4바이트의 부호 있는 정수(DBTYPE_I4)를 나타낸다.
adIUnknown 13 OLE 개체에서 IUnknown 인터페이스에 대한 포인터(DBTYPE_IUNKNOWN)를 나타낸다.
참고 이 데이터 형식은 ADO에 의해서 현재는 지원되지 않는다. 이 데이터 형식의 사용은 예기치 않은 결과를 초래할 수 있다.
adLongVarBinary 205 Long 이진 값(Parameter 개체만 해당)을 나타낸다.
adLongVarChar 201 Long String 값(Parameter 개체만 해당)을 나타낸다.
adLongVarWChar 203 Long Null 종결 문자열 값(Parameter 개체만 해당)을 나타낸다.
adNumeric 131 고정 정밀도와 크기로 나타낸 정확한 숫자 값(DBTYPE_NUMERIC)을 나타낸다.
adPropVariant 138 자동화 PROPVARIANT(DBTYPE_PROP_VARIANT)를 나타낸다.
adSingle 4 단정도의 부동 소수점 값(DBTYPE_R4)을 나타낸다.
adSmallInt 2 2 바이트의 부호 있는 정수(DBTYPE_I2)를 나타낸다.
adTinyInt 16 1 바이트의 부호 있는 정수(DBTYPE_I1)를 나타낸다.
adUnsignedBigInt 21 8 바이트의 부호 없는 정수(DBTYPE_UI8)를 나타낸다.
adUnsignedInt 19 4 바이트의 부호 없는 정수(DBTYPE_UI4)를 나타낸다.
adUnsignedSmallInt 18 2 바이트의 부호 없는 정수(DBTYPE_UI2)를 나타낸다.
adUnsignedTinyInt 17 1 바이트의 부호 없는 정수(DBTYPE_UI1)를 나타낸다.
adUserDefined 132 사용자 정의 변수(DBTYPE_UDT)를 나타낸다.
adVarBinary 204 이진 값(Parameter 개체만 해당)을 나타낸다.
adVarChar 200 String 값(Parameter 개체만 해당)을 나타낸다.
adVariant 12 자동화 Variant(DBTYPE_VARIANT)를 나타낸다.
adVarNumeric 139 숫자 값(Parameter 개체만 해당)을 나타낸다.
adVarWChar 202 Null 종결 유니코드 문자열(Parameter 개체만 해당)을 나타낸다.
adWChar 130 Null 종결 유니코드 문자열(DBTYPE_WSTR)을 나타낸다.


Field 개체의 이 속성은 읽기 전용이며, Parameter 개체의 Type 속성은 읽기와 쓰기가 모두 가능하다.

이 속성에 대한 예제는 Field 개체의 NumericScale 속성의 예제를 참조한다.


UnderlyingValue 속성

UnderlyingValue 속성은 데이터베이스에 존재하는 Field 개체의 현재 값을 나타내며, Variant 값을 반환한다.

이 속성은 Resync 메서드를 사용하는 것과 비슷하지만, Resync 메서드는 모든 필드의 값을 데이터베이스로부터 다시 갱신하지만, 이 속성을 사용하면 현재 데이터베이스에 저장되어 있는 특정 필드에 대한 값만을 알 수 있다.

이 속성은 OriginalValue 속성과 함께 배치 업데이트 모드에서 발생하는 충돌 문제를 해결하기 위해서 사용된다.

이 속성에 대한 예제는 Field 개체의 OriginalValue 속성의 예제를 참조한다.


Value 속성

Value 속성은 Field 개체에 지정된 값을 나타내며, Variant 값을 반환한다.

이 속성의 기본 값은 Field 개체의 Type 속성에 따라 달라진다.

이 속성은 Field 개체의 현재 값을 나타내며, 현재 데이터베이스에 저장되어져 있는 값을 나타내지는 않는다.

이 속성은 Field 개체의 디폴트 속성이며, 코드에서 생략할 수 있다. 다음 두줄의 코드는 동일한 것이다.

adoRs("FirstName").Value = "Chris"
adoRs("FirstName") = "Chris"

Field 개체의 세 가지 Value 속성들 사이의 차이점은 다음과 같다.


속성 설명
Value Recordset 개체에 포함된 Field 개체의 현재 값을 나타내며, Field 개체의 값을 변경하면, 이 속성에 반영된다.
OriginalValue Recordset 개체를 생성한 후에 변경 작업을 수행하기 이전의 Field 개체의 값을 나타낸다.
UnderlyingValue 데이터베이스에 저장되어 있는 Field 개체의 값을 나타낸다. 이 값은 다른 사용자에 의해서 변경된 데이터베이스의 내용도 반영한다.


Posted by Huikyun