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

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

제 3절 Field 개체

Field 개체는 Recordset 개체에 포함된 하나의 컬럼 또는 필드를 나타낸다. Recordset 개체를 생성하면, Field 개체들로 구성된 Fields 컬렉션이 생성된다. 현재 레코드에 대한 데이터를 설정하거나 반환하려면 Field 개체의 Value 속성을 사용한다.


Field 개체의 속성


속성 설명 데이터 형식
ActualSize 필드 값의 실제 길이를 나타낸다. (읽기 전용) Long
Attributes Field 개체의 여러 특성을 나타낸다. Long
DataFormat 데이터가 표시될 형식을 나타낸다. stdDataFormat
DefinedSize Field 개체의 정의된 길이를 나타낸다. Long
Name Field 개체의 이름을 나타낸다. String
NumericScale Field 개체의 숫자 값에 대한 Scale을 나타낸다. Byte
OriginalValue 레코드를 변경하기 전에 있던 Field 개체의 값을 나타낸다. Variant
Precision Field 개체의 숫자 값에 대한 정밀도(Precision)를 나타낸다. Byte
Type Field 개체의 작업 형식 또는 데이터 형식을 나타낸다. DataTypeEnum
UnderlyingValue 데이터베이스에 존재하는 Field 개체의 현재 값을 나타낸다. Variant
Value Field 개체에 지정된 값을 나타낸다. Variant



ActualSize 속성

ActualSize 속성은 필드 값의 실제 길이를 나타내며, Long 값을 반환한다. 일부 Provider는 BLOB(Binary Large Object) 데이터에 대한 필요 공간을 확보하기 위해서 이 속성을 사용할 수 있다. 그럴 경우에 기본값은 0 이다.

모든 필드에 대해 이 속성은 읽기 전용이며, ADO에서 Field 개체 값의 길이를 지정할 수 없는 경우 이 속성은 adUnKnown을 반환한다.

다음 예제에서 알 수 있듯이 ActualSize 속성과 DefinedSize 속성은 서로 다르다. 필드를 adVarChar 형식으로 최대 길이가 50으로 선언했을 경우, Field 개체의 DefinedSize 속성 값은 50을 반환하지만, Field 개체의 ActualSize 속성 값은 현재 레코드의 필드에 저장된 데이터의 길이를 반환한다.

[예제]
다음 예제는 Pubs 데이터베이스의 Stores 테이블에 대한 Recordset 개체를 생성하고 Field 개체의 DefinedSize 속성 값과 ActualSize 속성 값을 비교하는 예이다.

Private Sub cmdActualSize_Click()
  Dim adoRs As ADODB.Recordset
  Dim strConn As String

  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"

  Set adoRs = New ADODB.Recordset
  adoRs.Open "Stores", strConn, , , adCmdTable

  Do Until adoRs.EOF
    Debug.Print "Store name: " & adoRs!stor_name & vbCr & _
      "Defined size: " & adoRs!stor_name.DefinedSize & _
      " - " & "Actual size: " & adoRs!stor_name.ActualSize & vbCr

    adoRs.MoveNext
  Loop

  adoRs.Close
  Set adoRs = Nothing
End Sub


Attributes 속성

Attributes 속성은 Field 개체의 여러 특성을 나타내며, Long 값을 반환한다.

속성 값은 FieldAttributeEnum 값 중에서 하나 이상의 값들의 합이 될 수 있다.

FieldAttrinuteEnum 값은 다음과 같다.


메서드 설명
adFldMayDefer 필드의 데이터가 데이터의 나머지 부분과 함께 검색된 것이 아니라, 참조될 때에 검색됨을 나타낸다. 이 옵션은 Recordset 개체가 참조하지 않은 BLOB 데이터를 포함하고 있을 경우에 유용하다.
adFldUpdatable 필드가 변경이 가능함을 나타낸다.
adFldUnknownUpdatable 필드가 변경 가능한지를 Provider가 알지 못함을 나타낸다.
adFldFixed 필드가 고정 길이 데이터를 포함하고 있음을 나타낸다.
adFldIsNullable 필드에 데이터를 쓰기 할 때, Null 값을 사용할 수 있음을 나타낸다.
adFldMayBeNull 필드로부터 데이터를 읽을 때, 필드가 Null 값을 포함할 수 있음을 나타낸다.
adFldLong 필드가 BLOB 데이터를 포함하고 있으며, AppendChunk와 GetChunk 메서드를 사용할 수 있음을 나타낸다.
adFldRowID 필드가 변경할 수 없는 RowID를 포함하고 있음을 나타낸다. RowID는 레코드 번호 또는 유일한 식별자와 같이 행을 식별하는 것을 제외한 어떤 의미도 가지지 않는다.
adFldRowVersion 필드가 변경을 추적하기 위해 사용되는 시간 또는 날짜 기록을 포함하고 있음을 나타낸다.
adFldCacheDeferred Provider가 필드 값을 처음 읽을 때 캐쉬에 기록하고, 계속되는 읽기 작업은 캐시로 수행로부터 수행됨을 나타낸다.


이 속성을 사용해서 Field 개체의 특성을 설정하거나 반환할 수 있으며, 다수의 특성을 설정할 때, 적절한 상수들을 조합하여 사용할 수 있다.

필드가 Null을 포함할 수 있는지를 확인하려면 다음과 같이 코드를 작성하면 된다.

If (adoRs.Fields(0).Attribute And adFldMayBeNull) = asFldMayBeNull) Then
  MsgBox "Field may contain a null."
End If


DataFormat 속성

DataFormat 속성은 데이터가 표시될 형식을 나타내며, 구문은 다음과 같다.


Field.DataFormat = formatobject


위의 구문에서 사용된 formatobject는 stdDataFormat 개체이다.

이 속성은 DataFormat 개체를 지원하는 비주얼 베이직 6.0 이상과 비주얼 J++ 6.0 이상의 버전에서만 사용이 가능하다.


DefinedSize 속성

DefinedSize 속성은 Field 개체의 정의된 길이를 나타내며, 정의된 Field 개체의 길이를 바이트 수로 나타내는 Long 값을 반환한다.

이 속성은 사용해서 Field 개체의 데이터 용량을 결정한다. Field 개체의 DefinedSize 속성과 ActualSize 속성은 서로 다르며, 예제는 ActualSize 속성의 예제를 참조한다.

이 속성은 읽기와 쓰기가 모두 가능하지만, Recordset 개체가 열려진 후에는 읽기 전용이다.


Name 속성

Name 속성은 Field 개체의 이름을 나타내며, String 값을 반환한다.

Field 개체의 Name 속성은 읽기 전용이다, 그러나 Command 개체나 Parameter 개체의 Name 속성은 읽기와 쓰기가 모두 가능하다.


NumericScale 속성

NumericScale 속성은 Field 개체의 숫자 값에 대한 Scale을 나타내며, Byte 값을 반환한다.

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

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

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

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

[예제]
다음 예제는 Pubs 데이터베이스의 Discounts 테이블을 Recordset 개체로 생성하고, Field 개체의 Precision 속성 값과 NumericScale 속성 값을 보여주는 예이다.

Private Sub cmdNemericScale_Click()
  Dim adoRs As ADODB.Recordset
  Dim adoField As ADODB.Field
  Dim strConn As String

  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"

  Set adoRs = New ADODB.Recordset
  adoRs.Open "Discounts", strConn, , , adCmdTable

  For Each adoField In adoRs.Fields
    If adoField.Type = adNumeric Then
      MsgBox "Field: " & adoField.Name & vbCr & _
        "Numeric Precision : " & adoField.Precision & vbCr & _
        "Scale : " & adoField.NumericScale
    End If
  Next adoField

  Set adoField = Nothing

  adoRs.Close
  Set adoRs = Nothing
End Sub
Posted by Huikyun