< 출처 : korea.internet.com, 지은이 : 최현진 >
Delete 메서드
Delete 메서드는 현재 레코드 또는 레코드 그룹을 삭제하며, 구문은 다음과 같다.
Recordset.Delete AffectedRecords |
매개변수 AffectedRecords는 Delete 메서드를 사용해서 삭제할 레코드의 개수를 결정하는 AffectEnum 값이다. 이 매개변수의 값은 다음 상수들 중 하나가 될 수 있다.
상수 | 설명 |
adAffectCurrent | 기본값, 현재 레코드만 삭제한다. |
adAffectGroup | 현재 Filter 속성 설정값을 충족시키는 레코드를 삭제한다. 이 옵션을 사용하려면 Filter 속성을 미리 정의된 유효한 상수 중 하나로 설정해야 한다. |
adAffectAll | 모든 레코드를 삭제한다. |
adAffectAllChapters | 모든 장의 레코드를 삭제한다. |
즉시 업데이트 모드일 경우에 데이터베이스에서 즉시 삭제되며, 다른 모드일 경우에 레코드는 캐시에서 삭제 표시되고 UpdateBatch 메서드를 호출할 때 실제로 삭제된다. Filter 속성을 사용해서 삭제된 레코드를 볼 수 있다.
삭제한 레코드에서 필드 값을 검색하면 오류가 발생하며, 현재 레코드를 삭제해도 다른 레코드로 이동하기 전에는 삭제된 레코드가 계속 남아 있는다. 삭제한 레코드에서 다른 레코드로 이동하면 삭제한 레코드는 더 이상 접근할 수 없다.
트랜잭션 내부에서 이 메서드를 사용할 경우에 삭제한 레코드를 RollbackTrans 메서드를 사용해서 복구할 수 있으며, 일괄 업데이트 모드에서 보류 중인 삭제 작업은 CancelBatch 메서드를 사용해서 취소할 수 있다.
다른 사용자가 이미 삭제한 레코드의 경우처럼 기본 데이터와의 충돌로 인해 레코드를 삭제할 수 없을 때, Provider는 Errors 컬렉션에 경고를 반환하지만 프로그램의 실행을 중단하지는 않는다. 요청된 모든 레코드에 충돌이 발생했을 때만 런타임 오류가 발생한다.
[예제]
다음 예제는 Pubs 데이터베이스의 Authors 테이블의 Recordset 개체에서 현재 레코드를 삭제하는 예이다.
Private Sub cmdDelete_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 "Select * from Authors Order by au_id DESC", adoCn
adoRs.Delete
adoRs.Close
Set adoRs = Nothing
adoCn.Close
Set adoCn = Nothing
End Sub
Find 메서드
Find 메서드는 정의된 기준에 맞는 레코드를 Recordset 개체에서 검색한다. 검색 기준을 만족하는 레코드를 찾으면 그 위치로 이동하며, 레코드를 찾지 못하면 Recordset 개체의 마지막 레코드로 이동한다.
구문은 다음과 같다.
Recordset.Find Criteria, SkipRows, SearchDirection, Start |
매개변수는 다음과 같다.
매개변수 | 설명 |
Criteria | 열 이름, 비교 연산자, 검색에 사용할 값을 지정하는 문을 포함하는 문자열이며, 데이터 형식은 String 이다. |
SkipRows | 선택 사항, 검색을 시작할 위치를 현재 행으로부터의 거리로 지정한다.기본값은 0이며 데이터 형식은 Long이다. |
SearchDirection | 선택 사항, 검색 방향을 지정한다. |
Start | 선택 사항, 검색을 시작할 위치로 사용되는 Variant Bokkmark이다. |
Criteria에 사용되는 비교 연산자에는 ">"(보다 크다), "<"(보다 작다), "="(등호), ">="(크거나 같다), "<="(작거나 같다), "<>"(같지 않다), "like"(패턴 일치) 등이 있다.
Criteria의 값은 문자열, 부동 소수점, 날짜 등이 될 수 있다. 문자열은 작은 따옴표로 구분(예: "state='LA'")하며 날짜 값은 "#"(숫자 기호) 표시로 구분(예: "start_date > #7/22/97#") 한다.
비교 연산자가 "like"일 경우, 문자열 값에는 "*"(하나 이상의 문자) 또는 "_"(문자 하나)를 사용할 수 있다.
[예제]
다음 예제는 Pubs 데이터데이스의 Authors 테이블에 대한 Recordset 개체에서 au_id가 "172-32-1176"인 레코드를 검색하는 예이다.
Private Sub cmdFind_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 "Select * from Authors Order by au_id DESC", adoCn
Debug.Print adoRs!au_id
adoRs.Find "au_id = '172-32-1176'"
Debug.Print adoRs!au_id
adoRs.Close
Set adoRs = Nothing
adoCn.Close
Set adoCn = Nothing
End Sub
GetRows 메서드
GetRows 메서드는 Recordset 개체의 전체 레코드들을 배열로 가져오며, 구문은 다음과 같다.
array = Recordset.GetRows(Rows, Start, Fields) |
이 메서드는 2차원 배열을 반환하며, 매개변수는 다음과 같다.
매개변수 | 설명 |
Rows | 선택 사항, 검색할 레코드 개수를 나타내는 식이며 데이터 형식은 Long이다. 기본 값은 adGetRowsRest (-1)이다. |
Start | 선택 사항, GetRows 메서드가 실행을 시작할 레코드에 대한 Bookmark로 평가되는 값이며 데이터 형식은 String 또는 Variant이다. |
Fields | 선택 사항, 단일 필드 이름, 순서 위치, 필드 이름의 배열 또는 순서 위치 번호 배열을 나타내는 매개변수이며 데이터 형식은 Variant 이다. ADO는 이들 필드에 들어 있는 데이터만 반환한다. |
매개변수 Start는 다음과 같은 BookmarkEnum 값 중 하나를 사용할 수도 있다.
상수 | 설명 |
adBookmarkCurrent | 현재 레코드에서 시작한다. |
adBookmarkFirst | 첫째 레코드에서 시작한다. |
adBookmarkLast | 마지막 레코드에서 시작한다. |
GetRows 메서드를 사용하여 Recordset 개체에서 레코드를 2차원 배열로 복사할 수 있으며, 첫째 첨자는 필드를 나타내며, 두번째 첨자는 레코드 번호를 나타낸다. Array 변수는 GetRows 메서드가 데이터를 반환할 때 배열의 차원이 정확한 크기로 자동 설정된다.
Rows 인수에 대한 값을 지정하지 않으면 Recordset 개체의 모든 레코드를 자동으로 검색한다. 사용할 수 있는 레코드보다 많은 레코드를 요청하면 이 메서드는 사용할 수 있는 레코드의 개수만 반환한다.
Recordset 개체가 Bookmark를 지원하면 GetRows 메서드가 데이터 검색을 시작할 레코드의 Bookmark 속성값을 전달하여 해당 레코드를 지정할 수 있다.
GetRows 호출이 반환할 필드를 제한하려면 단일 필드 이름/번호나 필드 이름/번호의 배열을 Fields 인수에 전달할 수 있다. GetRows를 호출한 뒤에는 읽지 않은 다음 레코다그 현재 레코드가 된다. 다음 레코드가 없으면 EOF 속성이 True로 설정된다.
[예제]
다음 예제는 Pubs 데이터베이스의 Employee 테이블에 대한 Recordset 개체를 생성하고 GetRows 메서드를 사용해서 5개의 레코드를 검색하는 예이다.
Private Sub cmdGetRows_Click()
Dim adoRs As ADODB.Recordset
Dim strConn As String
Dim rValue As Variant
Dim i As Integer
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
rValue = adoRs.GetRows(5)
For i = 0 To UBound(rValue, 2)
Debug.Print rValue(0, i)
Next i
adoRs.Close
Set adoRs = Nothing
End Sub
GetRows 메서드를 사용할 때 한가지 주의해야할 사항은 Recordset 개체에 들어있는 값들이 2차원 배열로 반환될 때 행과 열의 위치가 바뀐다는 점이다. 그래서 위의 예제에서 볼 수 있듯이 배열에 들어 있는 데이터를 읽을 때 행과 열을 바꿔서 읽어야 한다.
GetString 메서드
GetString 메서드는 Recordset 개체를 문자열로 반환하며, 구문은 다음과 같다.
Set Variant = Recordset.GetString(StringFormat, NumRows, ColumnDelimiter, RowDelimiter, NullExpr) |
반환값은 Recordset 개체를 문자열 값으로 반환한 Variant(BSTR) 형식의 값을 반환한다.
매개변수는 다음과 같다.
매개변수 | 설명 |
StringFormat | Recordset 개체가 adClipString 형식으로 변환되도록 지정한다. adClipString 형식으로 지정하면 행은 RowDelimiter를 사용하여 구분하고, 열은 ColumnDelimiter를 사용하여 구분하고, Null 값은 NullExpr을 사용하여 구분한다. 이들 세가지 매개변수는 adClipString을 사용할 경우에만 유효하다. |
NumRows | 선택사항, Recordset 개체에 들어 있는 변환할 행의 개수를 지정한다. NumRows를 지정하지 않거나 Recordset 개체의 전체 행 개수보다 큰 수를 지정하면 Recordset 개체의 모든 행이 변환된다. |
ColumnDelimiter | 선택사항, 열 사이에 사용할 열 구분 기호이다. 지정하지 않으면 TAB 문자가 사용된다. |
RowDelimiter | 선택사항, 행 사이에 사용할 행 구분 기호이다. 지정하지 않으면 Carriage Return 문자가 사용된다. |
NullExpr | 선택사항, Null 값 대신에 사용할 식이다. 지정하지 않으면 빈 문자열이 사용된다. |
이 메서드는 스키마 데이터 대신 행 데이터가 문자열로 저장된다. 그래서 이 문자열을 사용해서 Recordset 개체를 다시 열 수 없다. 이 메서드는 RDO(Remote Data Object)의 GetClipString 메서드와 동일하다.
[예제]
다음 예제는 Pubs 데이터베이스의 Employee 테이블에 대한 Recordset 개체를 생성하고 GetString 메서드를 사용해서 Recordset 개체의 데이터를 문자열로 변환하는 예이다.
Private Sub cmdGetString_Click()
Dim adoRs As ADODB.Recordset
Dim strConn As String
Dim rValue As Variant
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
rValue = adoRs.GetString
Debug.Print rValue
adoRs.Close
Set adoRs = Nothing
End Sub
위의 예제의 결과는 다음과 같다.
Pedro Afonso 1990-12-24
Victoria Ashworth 1990-09-13
Helen Bennett 1989-09-21
Lesley Brown 1991-02-13
Francisco Chang 1990-11-03
Philip Cramer 1989-11-11
Aria Cruz 1991-10-26
Ann Devon 1991-07-16
Anabela Domingues 1993-01-27
Peter Franken 1992-05-17
Paul Henriot 1993-08-19
Carlos Hernadez 1989-04-21
Palle Ibsen 1993-05-09
Karla Jablonski 1994-03-11
Karin Josephs 1992-10-17
Matti Karttunen 1994-05-01
Pirkko Koskitalo 1993-11-29
Janine Labrune 1991-05-26
Maria Larsson 1992-03-27