LockType 속성
LockType 속성은 Recordset 개체 내의 레코드를 편집할 동안 해당 레코드에 설정할 Lock 유형을 나타낸다.
LockType 속성에는 아래의 LockTypeEnum 값들 중 하나를 지정할 수 있다.
상수 | 설명 |
adLockReadOnly | 기본값. 읽기 전용-데이터를 변경할 수 없다. |
adLockPessimistic | 독점 잠금, 레코드별-제공자는 레코드가 성공적으로 편집되도록 하기 위해 대개 편집을 시작하면 그 즉시 데이터 원본의 레코드를 잠근다 |
adLockOptimistic | 공유 잠금, 레코드별-제공자는 Update 메서드를 호출할 경우에만 레코드를 잠그는 공유 잠금을 사용한다. |
adLockBatchOptimistic | 공유 일괄 업데이트-즉시 업데이트 모드와 대조되는 일괄 업데이트 모드에 필요하다 |
Recordset을 열기 전에 LockType 속성을 설정하여 Recordset을 열 때 사용할 Lock 형식을 지정한다. LockType 속성은 Recordset이 닫혀 있을 때는 읽기/쓰기가 가능하며 열려 있을 때는 읽기 전용이다.
Provider가 모든 Lock 형식을 지원하지는 않는다. Provider가 요청된 LockType 설정을 지원하지 못할 경우에는 오류가 발생하지는 않고 다른 형식의 LockType을 대신 사용한다.
Client Side 커서일 경우에는 Pessimistic Locking을 사용할 수 없다.
클라이언트 (ADOR) Recordset 개체에서 사용될 경우 LockType 속성은 adLockOptimisticBatch로만 설정될 수 있다.
[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블을 adLockOptimistic로 생성하는 예이다.
01.
<font size=
"2"
>
Private
Sub
cmdLockType_Click()
02.
Dim
adoCn
As
New
Connection
03.
Dim
adoRs
As
New
Recordset
04.
Dim
strConn
As
String
05.
06.
strConn =
"Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
07.
adoCn.Open strConn
08.
09.
adoRs.CursorType = adOpenKeyset
10.
adoRs.LockType = adLockOptimistic
11.
adoRs.Open
"Authors"
, adoCn
12.
13.
adoRs.Close
14.
Set
adoRs =
Nothing
15.
16.
adoCn.Close
17.
Set
adoCn =
Nothing
18.
End
Sub
19.
</font>
MarchalOptions 속성
MarchalOptions 속성은 서버로 다시 마샬링될 레코드를 나타낸다. 이 속성은 다음 상수 중 하나의 Long 값을 설정하거나 반환한다.
상수 | 설명 |
adMarshalAll | 기본값, 모든 행이 서버에 반환됨을 나타낸다. |
adMarshalModifiedOnly | 수정된 행만 서버에 반환됨을 나타낸다. |
클라이언트(ADOR) Recordset을 사용할 때 클라이언트에서 수정된 레코드는 마샬링(Marchaling)이라는 기법을 통해 중간 계층이나 웹 서버로 다시 보내진다. 마샬링은 스레드나 프로세스 경계를 통과하도록 인터페이스 메서드 매개 변수를 패키징하여 보내는 프로세스이다. MarshalOptions 속성을 설정하면 수정된 원격 데이터를 업데이트하기 위해 중간 계층이나 웹 서버로 다시 마샬링할 때 성능을 향상시킬 수 있다.
[예제]
다음 예제는 사용자의 입력을 받아서 MarshalOptions 속성을 지정하여 데이터를 처리하는 예이다.
01.
<font size=
"2"
>
Private
Sub
cmdMarshalOptions_Click()
02.
Dim
adoRs
As
New
Recordset
03.
Dim
strConn
As
String
04.
Dim
strOldFirst
As
String
05.
Dim
strOldLast
As
String
06.
Dim
strMessage
As
String
07.
Dim
strMarshalAll
As
String
08.
Dim
strMarshalModified
As
String
09.
10.
'Employee 테이블에서 이름이 있는 레코드 집합을 엽니다.
11.
strConn =
"Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
12.
13.
adoRs.CursorLocation = adUseClient
14.
adoRs.Open
"SELECT fname, lname FROM Employee ORDER BY lname"
, strConn, adOpenKeyset, adLockOptimistic
15.
16.
'원래 데이터를 저장합니다.
17.
strOldFirst = adoRs!fname
18.
strOldLast = adoRs!lname
19.
20.
'편집 버퍼의 데이터를 변경합니다.
21.
adoRs!fname =
"Linda"
22.
adoRs!lname =
"Kobara"
23.
24.
'버퍼 내용을 보여주고 사용자 입력을 얻습니다.
25.
strMessage =
"Edit in progress:"
& vbCr &
"원본 데이터 = "
& strOldFirst &
" "
& _
26.
strOldLast & vbCr &
"버퍼 내에 있는 데이터 = "
& adoRs!fname &
" "
& _
27.
adoRs!lname & vbCr & vbCr &
"Recordset 내에 있는 원본 데이터를 버퍼 내에 있는 데이터로 교체하시겠습니까?"
28.
29.
strMarshalAll =
"모든 레코드를 서버에 보내시겠습니까?"
30.
strMarshalModified =
"변경된 레코드만 서버에 보내시겠습니까?"
31.
32.
If
MsgBox(strMessage, vbYesNo) = vbYes
Then
33.
If
MsgBox(strMarshalAll, vbYesNo) = vbYes
Then
34.
adoRs.MarshalOptions = adMarshalAll
35.
adoRs.Update
36.
ElseIf
MsgBox(strMarshalModified, vbYesNo) = vbYes
Then
37.
adoRs.MarshalOptions = adMarshalModifiedOnly
38.
adoRs.Update
39.
End
If
40.
End
If
41.
42.
'결과 데이터를 보여줍니다.
43.
MsgBox
"Recordset 내에 있는 데이터 = "
& adoRs!fname &
" "
& adoRs!lname
44.
45.
'이 코드는 데모이므로 원래 데이터를 복원합니다.
46.
If
Not
(strOldFirst = adoRs!fname
And
strOldLast = adoRs!lname)
Then
47.
adoRs!fname = strOldFirst
48.
adoRs!lname = strOldLast
49.
adoRs.Update
50.
End
If
51.
52.
adoRs.Close
53.
Set
adoRs =
Nothing
54.
End
Sub
55.
</font>
MaxRecords 속성
MaxRecords 속성은 질의에서 Recordset 개체에 반환되는 최대 레코드 개수를 나타내며, Long 값을 설정하거나 반환한다. 기본 값은 0이며 무제한이다.
이 속성을 사용하여 Provider가 데이터 원본에서 반환하는 레코드 개수를 제한할 수 있다. 이 속성의 기본 설정값은 0이며, 이것은 Provider가 요청된 모든 레코드를 반환한다는 의미이다.
이 속성은 Recordset 개체가 닫혀 있을 경우에는 읽기와 쓰기가 모두 가능하며, 열려 있을 경우에는 읽기 전용이다.
[예제]
다음 예제는 Pubs 데이터베이스의 Titles 테이블에서 가격이 제일 비싼 10개 레코드를 반환하는 예이다.
01.
Private
Sub
cmdMaxRecords_Click()
02.
Dim
adoRs
As
New
Recordset
03.
Dim
strConn
As
String
04.
05.
'Titles 테이블에서 가장 비싼 제목 10개를 포함하는 레코드 집합을 엽니다.
06.
strConn =
"Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
07.
08.
adoRs.MaxRecords = 10
09.
adoRs.Open
"SELECT Title, Price FROM Titles ORDER BY Price DESC"
, strConn, , , adCmdText
10.
11.
'레코드 집합의 내용을 표시합니다.
12.
Debug.Print
"가장 비싼 상위 10개의 레코드:"
13.
14.
Do
While
Not
adoRs.EOF
15.
Debug.Print
" "
& adoRs!Title &
" - "
& adoRs!Price
16.
adoRs.MoveNext
17.
Loop
18.
19.
adoRs.Close
20.
Set
adoRs =
Nothing
21.
End
Sub
PageCount 속성
PageCount 속성은 Recordset 개체에 들어 있는 데이터의 페이지 수를 나타내며, Long 값을 반환한다.
이 속성을 사용하여 Recordset 개체에 있는 데이터의 페이지 수를 결정한다. 페이지는 PageSize 속성 설정값과 동일한 크기를 가진 레코드 그룹이며, 마지막 페이지가 PageSize 속성 값보다 적은 수의 레코드를 가지고 있더라도 PageCount 값에 추가 페이지로 계산된다.
Recordset 개체가 이 속성을 지원하지 않을 경우에는 -1 값을 반환한다.
[예제]
다음 예제는 Pubs 데이터베이스의 Employee 테이블의 레코드를 5개씩 PageSize 속성과 PageCount 속성을 사용해서 화면에 표시하는 예이다.
01.
Private
Sub
cmdPageCount_Click()
02.
Dim
adoRs
As
New
Recordset
03.
Dim
strConn
As
String
04.
Dim
strMessage
As
String
05.
Dim
intPage
As
Integer
06.
Dim
intPageCount
As
Integer
07.
Dim
intRecord
As
Integer
08.
09.
'클라이언트 커서를 사용하여 employee 테이블에 대한 레코드 집합을 엽니다.
10.
strConn =
"Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
11.
12.
'클라이언트 커서를 사용하여 AbsolutePosition 속성을 사용할 수 있게 합니다.
13.
adoRs.CursorLocation = adUseClient
14.
adoRs.Open
"employee"
, strConn, , , adCmdTable
15.
16.
'한번에 레코드 5개씩 이름과 고용 날짜를 표시합니다.
17.
adoRs.PageSize = 5
18.
intPageCount = adoRs.PageCount
19.
20.
For
intPage = 1
To
intPageCount
21.
adoRs.AbsolutePage = intPage
22.
strMessage =
""
23.
For
intRecord = 1
To
adoRs.PageSize
24.
strMessage = strMessage & adoRs!fname &
" "
& adoRs!lname &
" "
& adoRs!hire_date & vbCr
25.
adoRs.MoveNext
26.
27.
If
adoRs.EOF
Then
Exit
For
28.
Next
intRecord
29.
MsgBox strMessage
30.
Next
intPage
31.
32.
adoRs.Close
33.
Set
adoRs =
Nothing
34.
End
Sub
PageSize 속성
PageSize 속성은 Recordset 개체에서 페이지 하나를 구성하는 레코드 수를 나타내며, Long 값을 설정하거나 반환한다. 기본 값은 10이다.
이 속성을 사용하여 데이터의 논리적 페이지 하나에 들어 있는 레코드 수를 결정할 수 있으며, 페이지 크기를 설정하면 AbsolutePage 속성을 사용하여 특정 페이지의 첫째 레코드로 이동할 수 있다. 이 기능은 사용자가 페이지를 넘기면서 한번에 일정한 개수의 레코드를 볼 수 있게 하는 웹 프로그램 시나리오에서 유용하게 사용할 수 있다.
이 속성은 언제든지 설정할 수 있으며, 그 값은 특정 페이지의 첫째 레코드 위치를 계산하는데 사용된다.
이 속성의 예제는 PageCount 속성의 예제를 참조한다.
Properties 속성
Properties 속성은 Properties 컬렉션을 나타내며, 이 컬렉션은 한 개체의 특정 인스턴스에 대한 모든 Property 개체들을 포함한다.
Property 개체는 특정 Provider 마다 고유한 ADO 개체의 특성과 일치한다.
Property 개체는 다음과 같은 네 가지 기본 속성을 가지고 있다.
상수 | 설명 |
Name | 해당 속성을 식별하는 문자열이다. |
Type | 속성의 데이터 형식을 지정하는 정수값이다. |
Value | 속성 설정에 들어 있는 Variant 값이다. |
Attributes | 공급자 특유의 속성 특성을 나타내는 Long 값이다. |
[예제]
다음 예제는 Pubs 데이터베이스의 Employee 테이블에 연결된 Recordset 개체의 Properties 속성을 보여주는 예이다.
01.
<font size=
"2"
>
Private
Sub
cmdProperties_Click()
02.
Dim
adoRs
As
New
Recordset
03.
Dim
strConn
As
String
04.
Dim
i
As
Integer
05.
06.
strConn =
"Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=; "
07.
08.
adoRs.CursorLocation = adUseClient
09.
adoRs.Open
"employee"
, strConn, , , adCmdTable
10.
11.
For
i = 0
To
adoRs.Properties.Count - 1
12.
Debug.Print adoRs.Properties(i).Name &
" : "
& adoRs.Properties(i).Value
13.
Next
i
14.
15.
adoRs.Close
16.
Set
adoRs =
Nothing
17.
End
Sub
18.
</font>
위의 예제에 대한 결과는 다음과 같으며, 이 결과는 Provider에 따라 다르게 나타날 수 있다.
IAccessor : True |
RecordCount 속성
RecordCount 속성은 Recordset 개체의 현재 레코드 수를 나타내며, Long 값을 반환한다.
이 속성을 사용하면 Recordset 개체에 있는 레코드의 개수를 알 수 있으며, 이 속성을 지원하지 못할 경우에는 -1을 반환한다. 또한 닫힌 Recordset 개체에서 이 속성을 읽으면 오류가 발생한다.
이 속성은 CursorLocation 속성과 CursorType 속성에 따라 지원 여부가 결정되며, 다음과 같은 환경에서 사용여부가 결정된다.
CursorType/CursorLocation | Server Side | Client Side |
adOpenForwardOnly | X | X |
adOpenKeyset | O | X |
adOpenDynamic | X | X |
adOpenStatic | O | O |
[예제]
다음 예제는 Pubs 데이터베이스의 Employees 테이블의 레코드 개수를 반환하는 예이다.
01.
<font size=
"2"
>
Private
Sub
cmdRecordCount_Click()
02.
Dim
adoRs
As
New
Recordset
03.
Dim
strConn
As
String
04.
05.
strConn =
"Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
06.
07.
adoRs.CursorLocation = adUseClient
08.
adoRs.Open
"employee"
, strConn, , , adCmdTable
09.
10.
Debug.Print
"레코드 개수 : "
& adoRs.RecordCount
11.
12.
adoRs.Close
13.
Set
adoRs =
Nothing
14.
End
Sub
15.
</font>