< 출처 : 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 속성 값을 비교하는 예이다.
01.
<font size=
"2"
>
Private
Sub
cmdActualSize_Click()
02.
Dim
adoRs
As
ADODB.Recordset
03.
Dim
strConn
As
String
04.
05.
strConn =
"Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"
06.
07.
Set
adoRs =
New
ADODB.Recordset
08.
adoRs.Open
"Stores"
, strConn, , , adCmdTable
09.
10.
Do
Until
adoRs.EOF
11.
Debug.Print
"Store name: "
& adoRs!stor_name & vbCr & _
12.
"Defined size: "
& adoRs!stor_name.DefinedSize & _
13.
" - "
&
"Actual size: "
& adoRs!stor_name.ActualSize & vbCr
14.
15.
adoRs.MoveNext
16.
Loop
17.
18.
adoRs.Close
19.
Set
adoRs =
Nothing
20.
End
Sub
21.
</font>
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을 포함할 수 있는지를 확인하려면 다음과 같이 코드를 작성하면 된다.
1.
<font size=
"2"
>
If
(adoRs.Fields(0).Attribute
And
adFldMayBeNull) = asFldMayBeNull)
Then
2.
MsgBox
"Field may contain a null."
3.
End
If
4.
</font>
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 속성 값을 보여주는 예이다.
01.
<font size=
"2"
>
Private
Sub
cmdNemericScale_Click()
02.
Dim
adoRs
As
ADODB.Recordset
03.
Dim
adoField
As
ADODB.Field
04.
Dim
strConn
As
String
05.
06.
strConn =
"Provider=sqloledb;Data Source=(local);Initial Catalog=Pubs;User ID=sa;Password=;"
07.
08.
Set
adoRs =
New
ADODB.Recordset
09.
adoRs.Open
"Discounts"
, strConn, , , adCmdTable
10.
11.
For
Each
adoField
In
adoRs.Fields
12.
If
adoField.Type = adNumeric
Then
13.
MsgBox
"Field: "
& adoField.Name & vbCr & _
14.
"Numeric Precision : "
& adoField.Precision & vbCr & _
15.
"Scale : "
& adoField.NumericScale
16.
End
If
17.
Next
adoField
18.
19.
Set
adoField =
Nothing
20.
21.
adoRs.Close
22.
Set
adoRs =
Nothing
23.
End
Sub
24.
</font>