Web/ASP & ASP.NET2009. 4. 10. 23:42

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

RecordChangeComplete 이벤트

RecordChangeComplete 이벤트는 레코드가 하나 이상 변경된 후에 발생하며, 구문은 다음과 같다.


   RecordChangeComplete adReason, cRecords, pError, adStatus, pRecordset


매개변수는 다음과 같다.


매개변수 설명
adReason EventReasonEnum 값이다. 이 이벤트를 발생시킨 원인을 나타낸다. adReason의 값은 adRsnAddNew, adRsnDelete, adRsnUpdate, adRsnUndoUpdate, adRsnUndoAddNew, adRsnUndoDelete, adRsnFirstChange가 될 수 있다.
cRecords 영향을 받은 레코드의 수를 나타내며, 데이터 형식은 Long이다.
pError Error 개체이다. adStatus의 값이 adStatusErrorsOccurred일 때 발생한 오류를 설명한다. 그렇지 않을 경우에는 설정되지 않는다.
adStatus EventStatusEnum 상태값이다. 이 매개변수는 이벤트를 발생시킨 작업이 성공하면 adStatusOK로 설정되고 작업이 실패하면 adStatusErrorsOccurred로 설정된다.RecordChangeComplete가 어떤 값을 반환하기 전에 이 매개변수를 adStatusUnwantedEvent로 설정하여 계속되는 통지(Notification)를 막을 수 있다.
pRecordset 이 이벤트가 발생한 Recordset 개체를 나타낸다.


Update, Delete, CancelUpdate, AddNew, UpdateBatch 및 CancelBatch와 같은 Recordset 개체의 작업으로 인해 행에서 처음으로 변경된 필드에 대해 RecordChangeComplete 이벤트가 발생할 수 있다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블을 Recordset 개체로 생성하고, Update 메서드를 사용해서 RecordChangeComplete 이벤트를 발생시키는 예이다.

Private Sub adoRs_RecordChangeComplete( _
  ByVal adReason As ADODB.EventReasonEnum, _
  ByVal cRecords As Long, ByVal pError As ADODB.Error, _
  adStatus As ADODB.EventStatusEnum, _
  ByVal pRecordset As ADODB.Recordset)

  MsgBox "RecordChangeComplete"
End Sub

Private Sub cmdRecordChangeComplete_Click()
  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 "Authors", strConn, , , adCmdTable

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

  adoRs.Close
  Set adoRs = Nothing
End Sub


RecordsetChangeComplete 이벤트

RecordsetChangeComplete 이벤트는 Recordset 개체가 변경된 후에 발생하며, 구문은 다음과 같다.


   RecordsetChangeComplete adReason, pError, adStatus, pRecordset


매개변수는 다음과 같다.


매개변수 설명
adReason EventReasonEnum 값이다. 이 이벤트를 발생시킨 원인을 나타낸다. adReason의 값은 adRsnReQuery, adRsnReSync, adRsnClose, adRsnOpen이 될 수 있다.
pError Error 개체이다. adStatus의 값이 adStatusErrorsOccurred일 때 발생한 오류를 설명한다. 그렇지 않을 경우에는 설정되지 않는다.
adStatus EventStatusEnum 상태값이다. 이 매개변수는 이벤트를 발생시킨 작업이 성공하면 adStatusOK로 설정되고 작업이 실패하면 adStatusErrorsOccurred로 설정된다.RecordsetChangeComplete가 어떤 값을 반환하기 전에 이 매개변수를 adStatusUnwantedEvent로 설정하여 계속되는 통지(Notification)를 막을 수 있다.
pRecordset 이 이벤트가 발생한 Recordset 개체를 나타낸다.


Requery 및 Open 같은 Recordset 개체의 작업으로 인해 RecordsetChangeComplete 이벤트가 발생할 수 있다.

Provider가 Bookmark를 지원하지 않는 경우 Provider에서 새 행이 검색될 때마다 RecordsetChange 이벤트 통지(Notification)이 발생한다. 이 이벤트가 발생하는 빈도는 RecordsetCacheSize 속성에 따라 결정된다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블을 Recordset 개체로 생성하고, Update 메서드를 사용해서 RecordsetChangeComplete 이벤트를 발생시키는 예이다.

Private Sub adoRs_RecordsetChangeComplete( _
  ByVal adReason As ADODB.EventReasonEnum, _
  ByVal pError As ADODB.Error, _
  adStatus As ADODB.EventStatusEnum, _
  ByVal pRecordset As ADODB.Recordset)

  MsgBox "RecordsetChangeComplete"
End Sub

Private Sub cmdRecordsetChangeComplete_Click()
  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 "Authors", strConn, , , adCmdTable

  adoRs!au_fname = "Chris"
  adoRs.Update

  adoRs.Close
  Set adoRs = Nothing
End Sub


WillChangeField 이벤트

WillChangeField 이벤트는 보류 중인 작업이 Recordset 개체에 있는 하나 이상의 Field 개체 값을 변경하기 전에 발생하며, 구문은 다음과 같다.


   WillChangeField cFields, Fields, adStatus, pRecordset


매개변수는 다음과 같다.


매개변수 설명
cFields Fields 컬렉션에 있는 Field 개체의 개수를 나타내며, 데이터 형식은 Long이다.
Fields 보류 중인 변경 내용을 가진 Field 개체를 포함하는 Variant 배열이다.
adStatus EventStatusEnum 상태값이다. 이 매개변수는 이벤트를 발생시킨 작업이 성공하면 adStatusOK로 설정되고, 이 메서드가 보류 중인 작업의 취소를 요청할 수 없으면 adStatusCantDeny로 설정된다.WillChangeField가 어떤 값을 반환하기 전에 이 매개변수를 adStatusCancel로 설정하여 보류 중인 작업의 취소를 요청할 수 있다.
pRecordset 이 이벤트가 발생한 Recordset 개체를 나타낸다.


Recordset 개체의 Value 및 필드와 값 배열 매개변수를 가진 Update 작업으로 인해 WillChangeField 이벤트가 발생할 수 있다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블을 Recordset 개체로 생성하고, AddNew 메서드를 사용해서 새로운 레코드를 추가할 때 필드의 값이 변경되기 전에 WillChangeField 이벤트가 발생하는 예이다.

Private Sub adoRs_WillChangeField( _
  ByVal cFields As Long, ByVal Fields As Variant, _
  adStatus As ADODB.EventStatusEnum, _
  ByVal pRecordset As ADODB.Recordset)

  MsgBox "WillChangeField"
End Sub

Private Sub cmdWillChangeField_Click()
  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 "Authors", strConn, , , adCmdTable

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

  adoRs.Close
  Set adoRs = Nothing
End Sub


WillChangeRecord 이벤트

WillChangeRecord 이벤트는 Recordset 개체에서 하나 이상의 레코드가 변경되기 전에 발생하며, 구문은 다음과 같다.


   WillChangeRecord adReason, cRecords, adStatus, pRecordset


매개변수는 다음과 같다.


매개변수 설명
adReason EventReasonEnum 값이다. 이 이벤트를 발생시킨 원인을 나타낸다. adReason의 값은 adRsnAddNew, adRsnDelete, adRsnUpdate, adRsnUndoUpdate, adRsnUndoAddNew, adRsnUndoDelete, adRsnFirstChange가 될 수 있다.
cRecords 영향을 받은 레코드의 수를 나타내며, 데이터 형식은 Long이다.
adStatus EventStatusEnum 상태값이다. 이 매개변수는 이벤트를 발생시킨 작업이 성공하면 adStatusOK로 설정되고, 이 메서드가 보류 중인 작업의 취소를 요청할 수 없으면 adStatusCantDeny로 설정된다.WillChangeRecord가 어떤 값을 반환하기 전에 이 매개변수를 adStatusCancel로 설정하여 이 이벤트를 발생시킨 작업의 취소를 요청할 수 있다.
pRecordset 이 이벤트가 발생한 Recordset 개체를 나타낸다.


Update, Delete, CancelUpdate, AddNew, UpdateBatch 및 CancelBatch와 같은 Recordset 개체의 작업으로 인해 행에서 처음으로 변경된 필드에 대해 WillChangeRecord 이벤트가 발생할 수 있다. Recordset 개체의 CursorType은 이벤트를 발생시킨 원인을 한다.

WillChangeRecord 이벤트 중에는 Recordset 개체의 Filter 속성이 adFilterAffectedRecords로 설정된다. 이벤트를 처리하는 동안 이 속성을 변경해서는 안된다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블을 Recordset 개체로 생성하고, Update 메서드를 사용해서 WillChangeRecord 이벤트를 발생시키는 예이다.

Private Sub adoRs_WillChangeRecord( _
  ByVal adReason As ADODB.EventReasonEnum, _
  ByVal cRecords As Long, _
  adStatus As ADODB.EventStatusEnum, _
  ByVal pRecordset As ADODB.Recordset)

  MsgBox "WillChangeRecord"
End Sub

Private Sub cmdWillChangeRecord_Click()
  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 "Authors", strConn, , , adCmdTable

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

  adoRs.Close
  Set adoRs = Nothing
End Sub


WillChangeRecordset 이벤트

WillChangeRecordset 이벤트는 보류 중인 작업이 Recordset 개체를 변경하기 전에 발생하며, 구문은 다음과 같다.


   WillChangeRecordset adReason, adStatus, pRecordset


매개변수는 다음과 같다.


매개변수 설명
adReason EventReasonEnum 값이다. 이 이벤트를 발생시킨 원인을 나타낸다. adReason의 값은 adRsnReQuery, adRsnReSync, adRsnClose, adRsnOpen이 될 수 있다.
adStatus EventStatusEnum 상태값이다. 이 매개변수는 이벤트를 발생시킨 작업이 성공하면 adStatusOK로 설정되고, 이 메서드가 보류 중인 작업의 취소를 요청할 수 없으면 adStatusCantDeny로 설정된다.WillChangeRecordset이 어떤 값을 반환하기 전에 이 매개변수를 adStatusCancel로 설정하여 보류 중인 작업의 취소를 요청할 수 있다.
pRecordset 이 이벤트가 발생한 Recordset 개체를 나타낸다.


Requery 및 Open 같은 Recordset 개체의 작업으로 인해 WillChangeRecordset 이벤트가 발생할 수 있다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블을 Recordset 개체로 생성하고, Update 메서드를 사용해서 WillChangeRecordset 이벤트를 발생시키는 예이다.

Private Sub adoRs_WillChangeRecordset( _
  ByVal adReason As ADODB.EventReasonEnum, _
  adStatus As ADODB.EventStatusEnum, _
  ByVal pRecordset As ADODB.Recordset)

  MsgBox "WillChangeRecordset"
End Sub

Private Sub cmdWillChangeRecordset_Click()
  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 "Authors", strConn, , , adCmdTable

  adoRs!au_fname = "Chris"
  adoRs.Update

  adoRs.Close
  Set adoRs = Nothing
End Sub


WillMove 이벤트

WillMove 이벤트는 보류 중인 작업이 Recordset 개체에서 현재 위치를 변경하기 전에 발생하면, 구문은 다음과 같다.


   WillMove adReason, adStatus, pRecordset


매개변수는 다음과 같다.


매개변수 설명
adReason EventReasonEnum 값이다. 이 이벤트를 발생시킨 원인을 나타낸다. adReason의 값은 adRsnMoveFirst, adRsnMoveLast, adRsnMoveNext, adRsnMovePrevious, adRsnMove, adRsnRequery가 될 수 있다.
adStatus EventStatusEnum 상태값이다. 이 매개변수는 이벤트를 발생시킨 작업이 성공하면 adStatusOK로 설정되고, 이 메서드가 보류 중인 작업의 취소를 요청할 수 없으면 adStatusCantDeny로 설정된다.WillMove가 어떤 값을 반환하기 전에 이 매개변수를 adStatusCancel로 설정하여 보류 중인 작업의 취소를 요청할 수 있다
pRecordset 이 이벤트가 발생한 Recordset 개체를 나타낸다.


이 이벤트는 Open, Move, MoveFirst, MoveLast, MoveNext, MovePrevious, Bookmark, AddNew 및 Resync와 같은 Recordset 개체의 작업으로 인해 발생할 수 있으며, Filter, Index, AbsolutePage 및 AbsolutePosition 속성으로 인해 발생할 수도 있다.

또한, 하위 Recordset 개체에 연결된 Recordset 이벤트가 있고 상위 Recordset 개체가 이동한 경우에도 이 이벤트는 발생할 수 있다.

[예제]
다음 예제는 Pubs 데이터베이스의 Employee 테이블을 Recordset 개체로 생성하고, Move 메서드를 사용해서 WillMove 이벤트를 발생시키는 예이다.

Private Sub adoRs_WillMove( _
  ByVal adReason As ADODB.EventReasonEnum, _
  adStatus As ADODB.EventStatusEnum, _
  ByVal pRecordset As ADODB.Recordset)

  MsgBox "WillMove"
End Sub

Private Sub cmdWillMove_Click()
  Dim strConn As String

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

  Set adoRs = New ADODB.Recordset
  adoRs.Open "SELECT fName, lName, hire_date FROM Employee ORDER BY lName", strConn, , , adCmdText

  adoRs.Move 10

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