Web/ASP & ASP.NET2009. 4. 10. 13:13

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

Sort 속성

Sort 속성은 Recordset 개체를 정렬할 하나 이상의 필드 이름을 지정하고, 각 필드를 오름차순 또는 내림차순으로 정렬할지 여부를 지정한다.

이 속성은 정렬할 각 필드 이름을 쉼표로 구분해 놓은 String을 설정하거나 반환하며, 이 때 각 이름은 Recordset 개체의 Fields에 해당한다. 또한 옵션으로 필드 이름 뒷 부분을 공백으로 설정하거나, 필드 정렬 순서를 지정하는 ASC(Ascending) 또는 DESC(Descending) 키워드를 지정할 수 있다.

이 속성의 설정에 의해서 데이터가 실제로 재정렬되는 것이 아니라 단지 정렬된 순서로 접근되는 것이다. CusorLocation을 adUseClient로 설정한 경우, 인덱스가 아직 없으면 Sort 속성에 지정된 각 필드에 대해 임시 인덱스가 작성된다.

이 속성을 빈 문자열로 설정하면 행들이 원래 순서대로 재설정되고 임시 인덱스는 삭제된다. 하지만, 기존에 있던 인덱스들은 삭제되지 않는다.

이 속성은 CursorLocation이 클라이언트일 경우에만 지원된다.

[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블의 레코드를 조회하고 정렬하는 예이다.

1. 새로운 프로젝트를 시작하고, 프로젝트 메뉴의 참조에서 ADO를 참조한다.

2. 새로운 폼을 하나 추가해서 다음과 같이 디자인한다.



[그림] Sort 화면


개체 속성
Form Name frmSort
  Caption Sort
MSHFlexGrid Name Grid
CommandButton Name cmdOpen
  Caption Open
CommandButton Name cmdSort
  Caption Sort
CommandButton Name cmdRelease
  Caption Release


3. frmSort 폼의 코드 모듈에 다음과 같이 코딩한다.

Dim adoCn As New Connection
Dim adoRs As New Recordset

Private Sub cmdOpen_Click()
  adoCn.Open "Provider=sqloledb;Data Source=(local);Initial Catalog=pubs;User Id=sa;Password=;"

  adoRs.CursorLocation = adUseClient
  adoRs.Open "Select * from Authors", adoCn, adOpenStatic, adLockOptimistic

  Set Grid.DataSource = adoRs
End Sub

Private Sub cmdRelease_Click()
  adoRs.Sort = ""
End Sub

Private Sub cmdSort_Click()
  adoRs.Sort = "city ASC"
End Sub

4. 프로그램을 실행하면 다음과 같은 화면을 볼 수 있다.



[그림] 레코드가 정렬된 화면



Source 속성

Source 속성은 Recordset 개체에 있는 데이터에 대한 원본(Command 개체, SQL 문, 데이블 이름 또는 저장 프로시저)을 나타낸다. 이 속성은 String 값이나 Command 개체 참조를 설정하며 String 값만 반환한다.

이 속성을 사용하여 Command 개체 변수, SQL 문, 저장 프로시저 또는 테이블 이름 중 하나로 Recordset 개체에 대한 데이터 원본을 지정한다. Recordset 개체가 닫혀 있을 경우에 Source 속성은 읽기와 쓰기가 모두 가능하며, 열려 있을 경우에는 읽기 전용이다.

Source 속성을 Command 개체로 설정하면 Recordset 개체의 ActiveConnection 속성은 지정된 Command 개체의 ActiveConnection 속성 값을 상속 받는다. 그러나 Source 속성을 읽으면 Command 개체를 반환하지 않고 대신에 Source 속성에 설정된 Command 개체의 CommandText 속성을 반환한다.

Source 속성이 SQL 문, 저장 프로시저 또는 테이블 이름일 경우에는 Open 메서드를 호출할 때 적절한 Options 인수를 전달하여 성능을 최적화할 수 있다.

[예제]

다음 예제는 Pubs 데이터베이스의 Titles 테이블을 Command 개체와 SQL문을 사용해서 열고, Recordset 개체의 Source를 보여주는 예이다.

Private Sub cmdSource_Click()
  Dim adoCn As New Connection
  Dim adoCmd As New Command
  Dim adoRs1 As New Recordset
  Dim adoRs2 As New Recordset

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

  Set adoCmd.ActiveConnection = adoCn

  adoCmd.CommandText = "Select title, type, pubdate FROM titles ORDER BY title"
  Set adoRs1 = adoCmd.Execute()

  adoRs2.Open "publishers", adoCn, , , adCmdTable

  Debug.Print "adoRs1.Source : " & adoRs1.Source
  Debug.Print "adoRs2.Source : " & adoRs2.Source

  adoRs1.Close
  Set adoRs1 = Nothing

  adoRs2.Close
  Set adoRs2 = Nothing

  Set adoCmd = Nothing

  adoCn.Close
  Set adoCn = Nothing
End Sub

직접 실행창에 나타나는 결과는 다음과 같다.


adoRs1.Source : Select title, type, pubdate FROM titles ORDER BY title
adoRs2.Source : select * from publishers


위의 결과에서 알 수 있듯이, Command 개체일 경우에는 CommandText에 해당하는 String이 반환된다.


State 속성

State 속성은 사용할 수 있는 모든 개체에 대해 이들 개체의 상태가 열려 있는지 또는 닫혀 있는지 여부를 나타낸다. 이 속성은 비동기 메서드를 실행하는 Recordset 개체에 대해 개체의 현재 상태가 연결 중인지, 실행 중인지 또는 가져오는 중인지 여부를 나타낸다.

이 속성은 아래 상수들 중 하나가 될 수 있는 Long 값을 반환한다.


상수 설명
adStateClosed 기본값, 개체가 닫혀 있음을 나타낸다.
adStateOpen 개체가 열려 있음을 나타낸다.
adStateConnecting Recordset 개체가 연결 중임을 나타낸다.
adStateExecuting Recordset 개체가 명령을 실행하는 중임을 나타낸다.
adStateFetching Recordset 개체의 행을 가져오는 중임을 나타낸다.


이 속성을 사용하면 주어진 개체의 현재 상태를 언제든지 결정할 수 있으며, 이 속성은 읽기 전용이다. 이 속성은 여러 가지 값이 조합된 값을 가질 수 있다. 예를 들어, 한 문장을 실행하고 있을 경우에는 adStateOpen과 adStateExecuting이 조합된 값을 갖는다.

[예제]
다음 예제는 Recordset의 State를 보여주는 예이다.

Private Sub cmdState_Click()
  Dim adoCn As New Connection
  Dim adoRs As New Recordset

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

  adoRs.Open "publishers", adoCn, , , adCmdTable

  Debug.Print "adoRs.State : " & adoRs.State

  adoRs.Close
  Set adoRs = Nothing

  adoCn.Close
  Set adoCn = Nothing
End Sub


Status 속성

Statue 속성은 일괄 업데이트 또는 기타 대량 작업과 관련된 현재 레코드의 상태를 나타낸다. 이 속성은 다음과 같은 RecordStatusEnum 값들 중에서 하나 이상을 합한 값을 반환한다.


상수 설명
adRecOK 레코드가 성공적으로 업데이트 되었음을 나타낸다.
adRecNew 레코드가 새 레코드임을 나타낸다.
adRecModified 레코드가 수정되었음을 나타낸다.
adRecDeleted 레코드가 삭제되었음을 나타낸다.
adRecUnmodified 레코드가 수정되지 않았음을 나타낸다.
adRecInvalid Bookmark가 유효하지 않기 때문에 레코드가 저장되지 않았음을 나타낸다.
adRecMultipleChanges 레코드가 다수의 레코드에 영향을 주기 때문에 저장되지 않았음을 나타낸다.
adRecPendingChanges 레코드가 보류(Pending) 중인 삽입 내용을 참조하기 때문에 저장되지 않았음을 나타낸다.
adRecCanceled 작업이 취소되었기 때문에 레코드가 저장되지 않았음을 나타낸다.
adRecCantRelease 기존의 레코드 Lock 때문에 새 레코드가 저장되지 않았음을 나타낸다.
adRecConcurrencyViolation Optimistic Concurrency가 사용되고 있기 때문에 레코드가 저장되지 않았음을 나타낸다.
adRecIntegrityViolation 사용자가 무결성 제약 조건들을 위반하였기 때문에 레코드가 저장되지 않았음을 나타낸다.
adRecMaxChangesExceeded 보류(Pending) 중인 변경 내용이 너무 많아서 레코드가 저장되지 않았음을 나타낸다.
adRecObjectOpen 열린 저장 개체와의 충돌 때문에 레코드가 저장되지 않았음을 나타낸다.
adRecOutOfMemory 시스템의 메모리가 부족해서 레코드가 저장되지 않았음을 나타낸다.
adRecPermissionDenied 사용자 권한이 충분하지 않아서 레코드가 저장되지 않았음을 나타낸다.
adRecSchemaViolation 레코드가 기본 데이터베이스의 구조를 위반했기 때문에 저장되지 않았음을 나타낸다.
adRecDBDeleted 레코드가 데이터 원본에서 이미 삭제되었음을 나타낸다.


이 속성을 사용하면 일관 업데이트 동안 수정된 레코드에 대해 어떤 변경 내용들이 보류 중인지 알 수 있으며, Recordset 개체에서 Resync, UpdateBatch 또는 CancelBatch 메서드를 호출하거나 Filter 속성을 Bookmark 배열로 설정하는 등의 대규모 작업을 하는 동안 실패한 레코드의 상태를 볼 수 있다. 이 속성을 사용하면 주어진 레코드가 실패한 형태를 알 수 있으며, 그에 대한 해결 방법도 결정할 수 있다.

[예제]
다음 예제는 일괄 업데이트에 대한 예이다.

Private Sub cmdStatus_Click()
  Dim adoRs As New Recordset
  Dim strConn As String

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

  '일괄 업데이트를 수행할 레코드 집합을 생성한다.
  adoRs.CursorType = adOpenKeyset
  adoRs.LockType = adLockBatchOptimistic
  adoRs.Open "titles", strConn, , , adCmdTable

  'psychology 제목의 형식을 변경합니다
  Do Until adoRs.EOF
    If Trim(adoRs!Type) = "psychology" Then
      adoRs!Type = "self_help"
    End If

    adoRs.MoveNext
  Loop

  'Title ID와 상태를 표시한다.
  adoRs.MoveFirst

  Do Until adoRs.EOF
    If adoRs.Status = adRecModified Then
      Debug.Print adoRs!title_id & " - Modified"
    Else
      Debug.Print adoRs!title_id
    End If

    adoRs.MoveNext
  Loop

  '이 코드는 데모이기 때문에 업데이트를 취소한다.
  adoRs.CancelBatch

  adoRs.Close
  Set adoRs = Nothing
End Sub


StayInSync 속성

StayInSync 속성은 계층적 Recordset 개체에서 상위 행 위치가 변경할 때 기본 하위 레코드에 대한 참조가 변경되는지 여부를 나타낸다.

이 속성은 Boolean 값을 설정하거나 반환하며, 기본값은 True 이다. 이 속성이 True로 설정되면 상위 Recordset 개체가 행 위치를 변경할 때 해당 장이 업데이트 된다. False 일 경우에는 상위 Recordset 개체가 행 위치를 변경하더라도 해당 장은 계속해서 이전 장의 데이터를 참조한다.

이 속성은 Microsoft Data Shaping Service for OLE DB가 지원하는 것과 같은 계층적 레코드 집합에 적용되며, 하위 Recordset 개체를 검색하기 전에 상위 Recordset 개체에 설정되어야 한다. 이 속성은 계층적 레코드 집합 탐색을 간소화한다.
Posted by Huikyun