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

< 출처 : 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

위의 예제의 결과는 다음과 같다.

   Paolo Accorti 1992-08-27
   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
Posted by Huikyun