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로 생성하는 예이다.
Private Sub cmdLockType_Click()
Dim adoCn As New Connection
Dim adoRs As New Recordset
Dim strConn As String
strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
adoCn.Open strConn
adoRs.CursorType = adOpenKeyset
adoRs.LockType = adLockOptimistic
adoRs.Open "Authors", adoCn
adoRs.Close
Set adoRs = Nothing
adoCn.Close
Set adoCn = Nothing
End Sub
MarchalOptions 속성
MarchalOptions 속성은 서버로 다시 마샬링될 레코드를 나타낸다. 이 속성은 다음 상수 중 하나의 Long 값을 설정하거나 반환한다.
상수 | 설명 |
adMarshalAll | 기본값, 모든 행이 서버에 반환됨을 나타낸다. |
adMarshalModifiedOnly | 수정된 행만 서버에 반환됨을 나타낸다. |
클라이언트(ADOR) Recordset을 사용할 때 클라이언트에서 수정된 레코드는 마샬링(Marchaling)이라는 기법을 통해 중간 계층이나 웹 서버로 다시 보내진다. 마샬링은 스레드나 프로세스 경계를 통과하도록 인터페이스 메서드 매개 변수를 패키징하여 보내는 프로세스이다. MarshalOptions 속성을 설정하면 수정된 원격 데이터를 업데이트하기 위해 중간 계층이나 웹 서버로 다시 마샬링할 때 성능을 향상시킬 수 있다.
[예제]
다음 예제는 사용자의 입력을 받아서 MarshalOptions 속성을 지정하여 데이터를 처리하는 예이다.
Private Sub cmdMarshalOptions_Click()
Dim adoRs As New Recordset
Dim strConn As String
Dim strOldFirst As String
Dim strOldLast As String
Dim strMessage As String
Dim strMarshalAll As String
Dim strMarshalModified As String
'Employee 테이블에서 이름이 있는 레코드 집합을 엽니다.
strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
adoRs.CursorLocation = adUseClient
adoRs.Open "SELECT fname, lname FROM Employee ORDER BY lname", strConn, adOpenKeyset, adLockOptimistic
'원래 데이터를 저장합니다.
strOldFirst = adoRs!fname
strOldLast = adoRs!lname
'편집 버퍼의 데이터를 변경합니다.
adoRs!fname = "Linda"
adoRs!lname = "Kobara"
'버퍼 내용을 보여주고 사용자 입력을 얻습니다.
strMessage = "Edit in progress:" & vbCr & "원본 데이터 = " & strOldFirst & " " & _
strOldLast & vbCr & "버퍼 내에 있는 데이터 = " & adoRs!fname & " " & _
adoRs!lname & vbCr & vbCr & "Recordset 내에 있는 원본 데이터를 버퍼 내에 있는 데이터로 교체하시겠습니까?"
strMarshalAll = "모든 레코드를 서버에 보내시겠습니까?"
strMarshalModified = "변경된 레코드만 서버에 보내시겠습니까?"
If MsgBox(strMessage, vbYesNo) = vbYes Then
If MsgBox(strMarshalAll, vbYesNo) = vbYes Then
adoRs.MarshalOptions = adMarshalAll
adoRs.Update
ElseIf MsgBox(strMarshalModified, vbYesNo) = vbYes Then
adoRs.MarshalOptions = adMarshalModifiedOnly
adoRs.Update
End If
End If
'결과 데이터를 보여줍니다.
MsgBox "Recordset 내에 있는 데이터 = " & adoRs!fname & " " & adoRs!lname
'이 코드는 데모이므로 원래 데이터를 복원합니다.
If Not (strOldFirst = adoRs!fname And strOldLast = adoRs!lname) Then
adoRs!fname = strOldFirst
adoRs!lname = strOldLast
adoRs.Update
End If
adoRs.Close
Set adoRs = Nothing
End Sub
MaxRecords 속성
MaxRecords 속성은 질의에서 Recordset 개체에 반환되는 최대 레코드 개수를 나타내며, Long 값을 설정하거나 반환한다. 기본 값은 0이며 무제한이다.
이 속성을 사용하여 Provider가 데이터 원본에서 반환하는 레코드 개수를 제한할 수 있다. 이 속성의 기본 설정값은 0이며, 이것은 Provider가 요청된 모든 레코드를 반환한다는 의미이다.
이 속성은 Recordset 개체가 닫혀 있을 경우에는 읽기와 쓰기가 모두 가능하며, 열려 있을 경우에는 읽기 전용이다.
[예제]
다음 예제는 Pubs 데이터베이스의 Titles 테이블에서 가격이 제일 비싼 10개 레코드를 반환하는 예이다.
Private Sub cmdMaxRecords_Click()
Dim adoRs As New Recordset
Dim strConn As String
'Titles 테이블에서 가장 비싼 제목 10개를 포함하는 레코드 집합을 엽니다.
strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
adoRs.MaxRecords = 10
adoRs.Open "SELECT Title, Price FROM Titles ORDER BY Price DESC", strConn, , , adCmdText
'레코드 집합의 내용을 표시합니다.
Debug.Print "가장 비싼 상위 10개의 레코드:"
Do While Not adoRs.EOF
Debug.Print " " & adoRs!Title & " - " & adoRs!Price
adoRs.MoveNext
Loop
adoRs.Close
Set adoRs = Nothing
End Sub
PageCount 속성
PageCount 속성은 Recordset 개체에 들어 있는 데이터의 페이지 수를 나타내며, Long 값을 반환한다.
이 속성을 사용하여 Recordset 개체에 있는 데이터의 페이지 수를 결정한다. 페이지는 PageSize 속성 설정값과 동일한 크기를 가진 레코드 그룹이며, 마지막 페이지가 PageSize 속성 값보다 적은 수의 레코드를 가지고 있더라도 PageCount 값에 추가 페이지로 계산된다.
Recordset 개체가 이 속성을 지원하지 않을 경우에는 -1 값을 반환한다.
[예제]
다음 예제는 Pubs 데이터베이스의 Employee 테이블의 레코드를 5개씩 PageSize 속성과 PageCount 속성을 사용해서 화면에 표시하는 예이다.
Private Sub cmdPageCount_Click()
Dim adoRs As New Recordset
Dim strConn As String
Dim strMessage As String
Dim intPage As Integer
Dim intPageCount As Integer
Dim intRecord As Integer
'클라이언트 커서를 사용하여 employee 테이블에 대한 레코드 집합을 엽니다.
strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
'클라이언트 커서를 사용하여 AbsolutePosition 속성을 사용할 수 있게 합니다.
adoRs.CursorLocation = adUseClient
adoRs.Open "employee", strConn, , , adCmdTable
'한번에 레코드 5개씩 이름과 고용 날짜를 표시합니다.
adoRs.PageSize = 5
intPageCount = adoRs.PageCount
For intPage = 1 To intPageCount
adoRs.AbsolutePage = intPage
strMessage = ""
For intRecord = 1 To adoRs.PageSize
strMessage = strMessage & adoRs!fname & " " & adoRs!lname & " " & adoRs!hire_date & vbCr
adoRs.MoveNext
If adoRs.EOF Then Exit For
Next intRecord
MsgBox strMessage
Next intPage
adoRs.Close
Set adoRs = Nothing
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 속성을 보여주는 예이다.
Private Sub cmdProperties_Click()
Dim adoRs As New Recordset
Dim strConn As String
Dim i As Integer
strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=; "
adoRs.CursorLocation = adUseClient
adoRs.Open "employee", strConn, , , adCmdTable
For i = 0 To adoRs.Properties.Count - 1
Debug.Print adoRs.Properties(i).Name & " : " & adoRs.Properties(i).Value
Next i
adoRs.Close
Set adoRs = Nothing
End Sub
위의 예제에 대한 결과는 다음과 같으며, 이 결과는 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 테이블의 레코드 개수를 반환하는 예이다.
Private Sub cmdRecordCount_Click()
Dim adoRs As New Recordset
Dim strConn As String
strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"
adoRs.CursorLocation = adUseClient
adoRs.Open "employee", strConn, , , adCmdTable
Debug.Print "레코드 개수 : " & adoRs.RecordCount
adoRs.Close
Set adoRs = Nothing
End Sub