Web/ASP & ASP.NET2009. 4. 10. 14:52

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

 

메서드

설명

AddNew Recordset 개체에 새로운 레코드를 추가한다.
Cancel 비동기적으로 실행한 Recordset 개체의 Open 메서드의 실행을 취소한다.
CancelBatch 보류 중인 일괄 업데이트 작업을 취소한다.
CancelUpdate 현재 레코드의 변경 내용 또는 새로 추가되는 레코드의 입력 내용에 대한 작업을 취소한다.
Clone 기존의 Recordset 개체로부터 복제(Clone) 개체를 생성한다. 옵션으로 이 복제 개체를 읽기 전용으로 지정할 수도 있다.
Close 열려 있는 Recordset 개체를 닫는다.
CompareBookmarks 두 개의 Bookmark를 비교해서 상대 값들과의 관계를 반환한다.
Delete 현재 레코드 또는 레코드 그룹을 삭제한다.
Find 정의된 기준에 맞는 레코드를 Recordset 개체에서 검색한다.
GetRows Recordset 개체의 전체 레코드들을 배열로 가져온다.
GetString Recordset 개체를 문자열로 반환한다.
Move Recordset 개체의 현재 레코드 위치를 이동시킨다.
MoveFirst,MoveLast,
MoveNext,
MovePrevious
Recordset 개체에서 첫째 레코드, 마지막 레코드, 다음 레코드, 이전 레코드로 이동한 뒤에 해당 레코드를 현재 레코드로 지정한다.
NextRecordset 다중 Recordset 개체에서 다음 Recordset 개체를 반환하는 메서드이다.
Open 커서를 연다. 즉 Recordset 개체를 연다.
Requery Recordset 개체를 생성한 질의를 다시 실행하여 Recodrset 개체에 있는 데이터를 갱신한다.
Resync 기본 데이터베이스로부터 현재 Recordset 개체의 데이터를 갱신한다.
Save 파일로 Recordset 개체를 저장한다.
Seek Recordset 개체의 인덱스를 검색하여 지정한 값과 일치하는 행을 찾고 현재 행의 위치를 해당 행으로 변경한다.
Supports Recordset 개체가 특정 기능을 지원하는 지의 여부를 결정한다.
Update Recordset 개체의 현재 레코드에 대한 변경 내용을 저장한다.
UpdateBatch 보류 중인 모든 일괄 업데이트 내용을 디스크에 기록한다.



AddNew 메서드

AddNew 메서드는 Recordset 개체에 새로운 레코드를 추가하는 메서드이며, 구문은 다음과 같다.


   Recordset.AddNew FieldList, Values


매개변수에 대한 설명은 다음과 같다.


매개변수 설명
FieldList 선택 사항이며, 새 레코드의 필드에 대한 유일한 이름 또는 이름의 배열 또는 순서상의 위치를 지정하는 매개변수이다.
Values 선택 사항이며, 새 레코드의 필드에 대한 유일한 값 또는 값들의 배열을 지정하는 매개 변수이다. Fields 가 배열인 경우에 Values는 동일한 개수의 구성원을 갖고 있는 배열이어야 하며, 그렇지 않으면 오류가 발생한다. 필드 이름의 순서는 각 배열에서 필드 값의 순서와 일치해야 한다.


AddNew 메서드를 호출하면 새 레코드가 현재 레코드로 되고 Update 메서드를 호출한 뒤에도 현재 레코드로 남아 있는다. Recordset 개체가 Bookmark를 지원하지 않으면 다른 레코드로 이동한 뒤에 새 레코드에 접근할 수 없다. 사용 중인 커서 형식에 따라 Requery 메서들 호출하여 새 레코드에 접근 가능하도록 만들어야 한다.

현재 레코드를 편집하거나 새 레코드를 추가하는 동안 AddNew 메서드를 호출하면 ADO는 Update 메서드를 호출하여 모든 변경 내용을 저장하고 새 레코드를 만든다.

즉시 업데이트 모드(Update 메서드를 호출하면 Provider는 변경 내용을 기본 데이터 원본에 기록하는 모드 즉, BatchUpdate 모드로 Recordset 개체를 생성하지 않은 경우를 말한다.)에서 인수 없이 AddNew 메서드를 호출하면 EditMode 속성이 adEditAdd로 설정되며, Provider는 필드값 변경 내용을 지역적으로 캐시 메모리에 저장한다. Update 메서드를 호출하면 새 레코드를 데이터베이스에 저장하고 EditMode 속성을 adEditNone로 재설정 한다. Fields 인수와 Values 인수를 전달하면 Update 메서드를 호출할 필요가 없으며 ADO는 즉시 새 레코드를 데이터베이스에 저장하고 EditMode 속성값(adEditNone)은 변경되지 않는다.

일괄 업데이트 모드(BatchUpdate 모드로 Recordset 개체를 생성한 경우를 말하며, Provider는 다수의 변경 내용을 캐시에 기록했다가 UpdateBatch 메서드를 호출할 때 캐시에 저장된 변경 내용을 기본 데이터 원본에 반영한다.)에서 인수를 사용하지 않고 AddNew 메서드를 호출하면 EditMode 속성은 adEditMode로 설정된다. Provider는 필드값 변경 내용을 지역적으로 캐시에 저장한다. Update 메서드를 호출하면 새 레코드가 현재 레코드 집합에 추가되고 EditMode 속성은 adEditNone으로 재설정 된다. 그러나 Provider는 UpdateBatch 메서드를 호출하기 전까지는 기본 데이터베이스에 이 변경 내용을 반영하지 않는다. Fields 인수와 Values 인수를 전달하면 ADO는 캐시에 기록하기 위해서 새 레코드를 Provider에게 보내고 Provider는 현재 Recordset 개체에 새 레코드를 추가한다.

[예제1]
다음 예제는 Pubs 데이터베이스의 Authors 테이블에 대한 Recordset 개체에 새로운 레코드를 추가하는 예이다.

Private Sub cmdAddNew_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
  adoRs.CursorType = adOpenKeyset
  adoRs.LockType = adLockOptimistic
  adoRs.Open "Authors", adoCn, , , adCmdTable

  adoRs.AddNew
  adoRs!au_id = "999-99-9999"
  adoRs!au_fname = "Chris"
  adoRs!au_lname = "Choi"
  adoRs!contract = 1
  adoRs.Update

  adoRs.Close
  Set adoRs = Nothing

  adoCn.Close
  Set adoCn = Nothing
End Sub

[예제2]
다음 예제는 Pubs 데이터베이스의 Authors 테이블에 대한 Recordset 개체에 배열 인수를 사용해서 새로운 레코드를 추가하는 예이다.
Private Sub cmdAddNew2_Click()
  Dim adoCn As ADODB.Connection
  Dim adoRs As ADODB.Recordset
  Dim strConn As String
  Dim varFields As Variant
  Dim varValues As Variant

  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
  adoRs.CursorType = adOpenKeyset
  adoRs.LockType = adLockOptimistic
  adoRs.Open "Authors", adoCn, , , adCmdTable

  varFields = Array("au_id", "au_fname", "au_lname", "contract")
  varValues = Array("999-99-9998", "Chris", "Choi", 1)

  adoRs.AddNew varFields, varValues

  adoRs.Close
  Set adoRs = Nothing

  adoCn.Close
  Set adoCn = Nothing
End Sub


Cancel 메서드

Cancel 메서드는 비동기적으로 실행한 Recordset 개체의 Open 메서드의 실행을 취소하며, 구문은 다음과 같다.


   Recordset.Cancel


이 메서드는 Recordset 개체의 Open 메서드가 adAsyncExecute 또는 adAsyncFetch와 함께 사용된 경우에 호출 실행을 중단하기 위해서 사용되며, adAsyncExecute와 함께 사용되지 않은 경우에 Cancel 메서드를 호출하면 런타임 오류가 발생한다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블을 비동기적으로 Open하고 Cancel하는 예이다. 비동기적으로 코드를 작성하고 실행할 경우에 데이터의 양이 많지 않기 때문에 비동기적인 실행과 동기적인 실행이 결과가 비슷하게 보여질 수 있다. 이 차이를 명확하게 보려면 SQL Query Analyzer에서 다음 그림과 같이 SQL 문장을 작성하고 실행한다.



[그림] Query Analyzer 화면


위와 같은 SQL 문장을 실행하면 Pubs 데이터베이스에 Lock이 걸리게 되기 때문에 동기적인 실행은 대기 상태로 기다리게 된다. 반면에 비동기적인 실행은 정상적으로 실행이 되고, Cancel 메서드를 테스트해 볼 수 있다.

Dim adoCn As ADODB.Connection
Dim adoRs As ADODB.Recordset

Private Sub cmdOpenAsync_Click()
  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
  adoRs.CursorType = adOpenKeyset
  adoRs.LockType = adLockOptimistic
  adoRs.Open "Authors", adoCn , , , adAsyncExecute
End Sub

Private Sub cmdCancel_Click()
  adoRs.Cancel
End Sub


CancelBatch 메서드

CancelBatch 메서드는 보류 중인 일괄 업데이트 작업을 취소하며, 구문은 다음과 같다.


   Recordset.CancelBatch AffectedRecords


매개변수는 다음과 같다.


매개변수 설명
AffectedRecords 선택 사항이며, CancelBatch 메서드의 영향을 받는 레코드의 개수를 결정하는 AffectEnum 값이다. 이 값은 다음 상수 중 하나의 값이다.


상수 설명
adAffectCurrent 현재 레코드에 대해서만 보류 중인 업데이트 작업을 취소한다.
adAffectGroup 현재 Filter 속성 설정값을 만족하는 레코드에 대해 보류 중인 업데이트 작업을 취소한다. 이 옵션을 사용하려면 Filter 속성을 미리 정의된 유효한 상수 중 하나로 설정해야 한다.
adAffectAll 기본값, 현재 Filter 속성 설정값에 따라 숨겨진 레코드를 포함해서 Recordset 개체의 모든 레코드에 대해 보류 중인 업데이트 작업을 취소한다.


BatchUpdate 모드로 생성한 Recordset 개체의 모든 보류 중인 업데이트 작업을 취소하려면 Cancel 메서드를 사용한다. Recordset 개체가 BatchUpdate 모드로 생성되지 않았을 경우에 이 메서드를 호출하면 오류가 발생한다.

현재 레코드를 편집하거나 새 레코드를 추가하는 중에 CancelBatch 메서드를 호출하면 ADO는 먼저 CancelUpdate 메서드를 호출하여 캐시에 저장된 모든 변경 내용들을 취소하고, 그 뒤에 Recordset 개체에서 보류 중인 모든 변경 내용들을 취소한다.

특히 새 레코드를 추가하는 중이었을 경우에는 CancelBatch 메서드를 호출한 뒤에 현재 레코드를 결정하지 못할 수도 있으며, 이런 이유로 인해 CancelBatch 메서드를 호출한 후에는 현재 레코드의 위치를 Recordset 개체에서 알려진 위치로 설정하는 것이 좋다. 예를 들어, MoveFirst 메서드를 호출하는 것이다.

다른 사용자가 레코드 하나를 삭제한 경우와 같이 기본 데이터와의 충돌로 인해 보류 중인 업데이트 작업을 취소하지 못할 경우, Provider는 Errors 컬렉션에 경고를 반환하지만, 프로그램의 실행은 멈추지 않는다. 런타임 오류는 요청된 레코드에 충돌이 있을 경우에만 발생하며, 충돌하는 레코드를 찾으려면 Filter 속성(adFilterAffectedRecords)과 Status 속성을 사용한다.

[예제]
다음 예제는 Pubs 데이터베이스의 Titles 테이블의 Recordset 개체를 BatchUpdate 모드로 생성하고 일부 레코드를 변경한 다음에 CancelBatch 메서드를 사용해서 변경 작업을 취소하는 예이다.

Private Sub cmdCancelBatch_Click()
  Dim adoRs As ADODB.Recordset
  Dim strConn As String
  Dim strTitle As String
  Dim strMessage As String

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

  Set adoRs = New ADODB.Recordset
  adoRs.CursorType = adOpenKeyset
  adoRs.LockType = adLockBatchOptimistic
  adoRs.Open "titles", strConn, , , adCmdTable

  adoRs.MoveFirst

  Do Until adoRs.EOF
    If Trim(adoRs!Type) = "psychology" Then
      adoRs!Type = "self_help"
    End If

    adoRs.MoveNext
  Loop

  adoRs.CancelBatch

  adoRs.MoveFirst
  Do Until adoRs.EOF
    Debug.Print adoRs!Type

    adoRs.MoveNext
  Loop

  adoRs.Close
  Set adoRs = Nothing
End Sub


CancelUpdate 메서드

CancelUpdtae 메서드는 현재 레코드의 변경 내용 또는 새로 추가되는 레코드의 입력 내용에 대한 작업을 취소하며, 구문은 다음과 같다.


   Recordset.CancelUpdate


현재 레코드에 취해진 변경 내용을 취소하거나 새로 추가된 레코드를 취소하려면 CancelUpdate 메서드를 사용한다. 변경 내용들이 RollbackTrans 메서드를 사용하여 롤백할 수 있는 트랜잭션의 일부이거나 CancelBatch 메서드를 사용해서 취소할 수 있는 일괄 업데이트 모드인 경우에는 이 메서드를 사용해서 작업 내용을 취소할 수 있다.

새 레코드를 추가하는 중에 CancelBatch 메서드를 호출하면 AddNew를 호출하기 전에 현재 상태였던 레코드가 다시 현재 레코드로 지정된다.

현재 레코드를 변경하지 않았거나 새 레코드를 추가하지 않은 상태에서 CancelBatch 메서드를 호출하면 오류가 발생한다.

[예제1]
다음 예제는 Pubs 데이터베이스의 Employee 테이블의 Recordset 개체의 레코드를 수정한 후에 CancelUpdate 메서드를 사용해서 수정 작업을 취소하는 예이다.

Private Sub cmdCancelUpdate_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.CursorType = adOpenKeyset
  adoRs.LockType = adLockOptimistic
  adoRs.Open "SELECT fname, lname FROM Employee ORDER BY lname", strConn, , , adCmdText

  adoRs!fname = "Chris"
  adoRs!lname = "Choi"

  adoRs.CancelUpdate

  Debug.Print adoRs!fname & " - " & adoRs!lname
  adoRs.Close
  Set adoRs = Nothing
End Sub

[예제2]
N다음 예제는 Pubs 데이터베이스의 Employee 테이블의 Recordset 개체에 새로운 레코드를 추가하는 중에 CancelUpdate 메서드를 사용해서 작업을 취소하는 예이다.
Private Sub cmdCancelUpdate2_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.CursorType = adOpenKeyset
  adoRs.LockType = adLockOptimistic
  adoRs.Open "SELECT fname, lname FROM Employee ORDER BY lname", strConn, , , adCmdText

  adoRs.AddNew

  adoRs!fname = "Chris"
  adoRs!lname = "Choi"

  adoRs.CancelUpdate

  Debug.Print adoRs!fname & " - " & adoRs!lname
  adoRs.Close
  Set adoRs = Nothing
End Sub


Clone 메서드

Clone 메서드는 기존의 Recordset 개체로부터 복제(Clone) 개체를 생성한다. 옵션으로 이 복제 개체를 읽기 전용으로 지정할 수도 있으며, 구문은 다음과 같다.


   Set Recordset2 = Recordset.Clone(LockType)


반환값은 Recordset 개체 참조이다.

Recordset2는 복제(Clone) 개체를 나타내며, Recordset 개체는 원본 개체이다. LockType 옵션은 복제 Recordset 개체를 읽기 전용으로 지정하는 LockTypeEnum 값이며, 지정할 수 있는 상수는 다음과 같다.


상수 설명
adLockUnspecified 기본값, 원본과 동일한 잠금 형식으로 복제(Clone) 개체를 작성한다.
adLockReadOnly 복제 개체를 읽기 전용으로 작성한다.


여러 개의 복제된 Recordset 개체를 생성하려면 Clone 메서드를 사용한다. Clone 메서드를 사용하면 원본 정의와 동일한 형태로 새 Recordset 개체를 생성하는 것보다 더 효과적으로 작업을 처리할 수 있다. 새로 작성된 복제 Recordset 개체의 현재 레코드는 첫째 레코드로 설정된다.

원본 Recordset 개체를 닫아도 복제 Recordset 개체를 닫히지 않으며, 복제 Recordset 개체 중 한 개를 닫아도 원본 Recordset 개체나 다른 복제 Recordset 개체들은 닫히지 않는다.

Bookmark를 지원하는 Recordset 개체만 복제 Recordset 개체를 만들 수 있으며, Bookmark 값은 동일하게 생성된다. 즉, 원본 Recordset 개체의 Bookmark 참조는 복제 Recordset 개체에서도 동일한 레코드를 참조한다.

[예제]
다음 예제는 Pubs 데이터베이스의 Stores 테이블에 대한 Recordset 개체를 복제해서 원본과 복사본의 값을 비교하는 예이다.

Private Sub cmdClone_Click()
  Dim adoRs(1 To 2) As ADODB.Recordset
  Dim strConn As String
  Dim strSql As String

  strSql = "SELECT stor_name FROM Stores ORDER BY stor_name"
  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"

  Set adoRs(1) = New ADODB.Recordset
  adoRs(1).CursorType = adOpenStatic
  adoRs(1).LockType = adLockBatchOptimistic
  adoRs(1).Open strSql, strConn, , , adCmdText

  Set adoRs(2) = adoRs(1).Clone

  While Not adoRs(1).EOF
    Debug.Print adoRs(1)(0) & " - " & adoRs(2)(0)

    adoRs(1).MoveNext
    adoRs(2).MoveNext
  Wend

  adoRs(1).Close
  Set adoRs(1) = Nothing

  adoRs(2).Close
  Set adoRs(2) = Nothing
End Sub


Close 메서드

Close 메서드는 열려 있는 Recordset 개체를 닫으며, 구문은 다음과 같다.


   Recordset.Close


이 메서드는 Recordset 개체를 닫아서 Recordset 개체와 연관된 모든 시스템 자원을 해제한다. Recordset 개체를 Close 메서드를 사용해서 닫아도 메모리에서 지워지지는 않기 때문에 개체 속성 설정을 변경하거나 나중에 다시 열 수 있다. 메모리에서 개체를 완전히 제거하려면 개체 변수를 Nothing으로 설정한다.

Recordset 개체가 닫혀 있을 경우에 이 메서드를 사용하면 오류가 발생한다.

즉시 업데이트 모드에서 편집하고 있을 때 Close 메서드를 호출하면 오류가 발생한다. 이럴 경우에는 Update 메서드나 CancelUpdate 메서드를 먼저 호출한다. 일괄 업데이트하는 동안 Recordset 개체를 닫으면 마지막으로 UpdateBatch를 호출한 이후에 취해진 모든 변경 내용이 사라진다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블에 대한 Recordset 개체를 열고 닫는 예이다.

Private Sub cmdClose_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
  adoRs.CursorType = adOpenKeyset
  adoRs.LockType = adLockOptimistic
  adoRs.Open "Authors", adoCn, , , adCmdTable

  Debug.Print adoRs!au_id & " - " & adoRs!au_fname

  adoRs.Close
  Set adoRs = Nothing

  adoCn.Close
  Set adoCn = Nothing
End Sub


CompareBookmarks 메서드

CompareBookmarks 메서드는 두 개의 Bookmark를 비교해서 상대 값들과의 관계를 반환하며, 구문은 다음과 같다.


   Result = Recordset.CompareBookmarks(Bookmark1, Bookmark2) As CompareEnum


이 메서드는 두 Bookmark가 나타내는 각 레코드의 상대적인 행 위치 값을 반환하며, 다음 값이 반환될 수 있다.


상수 설명
adCompareLessThan 0 첫째 Bookmark가 둘째 Bookmark 앞에 있다.
adCompareEqual 1 두 Bookmark는 서로 동일하다.
adCompareGreaterThan 2 첫째 Bookmark가 둘째 Bookmark 뒤에 있다.
adCompareNotEqual 3 두 Bookmark는 서로 다르며 순서를 지정할 수 없다.
adCompareNotComparable 4 두 Bookmark는 서로 비교할 수 없다.


매개변수 Bookmark1은 첫째 행의 Bookmark이며, Bookmark2는 둘째 행의 Bookmark이다.

두 Bookmark는 동일한 Recordset 개체에 적용되거나 또는 하나의 Recordset 개체와 이 개체의 복제 Recordset 개체에 적용되어야 한다. 동일한 원본 또는 명령을 통해서 생성한 두개의 Recordset 개체일 경우에도 서로 Bookmark를 비교할 수 없다.

Bookmark는 Recordset 개체에서 행을 유일하게 식별하며, 현재 행의 Bookmark를 보려면 Recordset 개체의 Bookmark 속성을 사용한다.

[예제]
다음 예제는 한 Recordset 개체의 복제(Clone) Recordset 개체를 생성한 다음 Bookmark를 비교하는 예이다.

Private Sub cmdCompareBookmarks_Click()
  Dim adoRs(1 To 2) As ADODB.Recordset
  Dim strConn As String
  Dim strSql As String
  Dim bk1 As Variant
  Dim bk2 As Variant
  Dim Result As Integer

  strSql = "SELECT stor_name FROM Stores ORDER BY stor_name"
  strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"

  Set adoRs(1) = New ADODB.Recordset
  adoRs(1).CursorType = adOpenStatic
  adoRs(1).LockType = adLockBatchOptimistic
  adoRs(1).Open strSql, strConn, , , adCmdText

  Set adoRs(2) = adoRs(1).Clone

  bk1 = adoRs(1).Bookmark
  bk2 = adoRs(2).Bookmark

  Result = adoRs(1).CompareBookmarks(bk1, bk2)

  MsgBox "Result : " & Result

  adoRs(1).Close
  Set adoRs(1) = Nothing

  adoRs(2).Close
  Set adoRs(2) = Nothing
End Sub
Posted by Huikyun