< 출처 : 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 |
위의 결과에서 알 수 있듯이, 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 개체에 설정되어야 한다. 이 속성은 계층적 레코드 집합 탐색을 간소화한다.