study/ADO 2012. 5. 2. 13:59

액세스 VBA 강좌_ADO_레코드 추출

   

■ Contents

   

   

1.Filter속성

Recordset 오브젝트의Filter속성을 설정하면 지정한 조건을 채워주는 레코드만을 추출하는 것이 가능하다.해당되는 레코드가 발견되지 않았던 경우에는 Recordset 오브젝트의 RecordCount속성(레코드셋에 포함되는 레코드 수를 표현하는 속성)의 값이 0이 된다.

【서식】recordset.Filter = criteria

recordset:열려 있는 Recordset 오브젝트
criteria:추출 조건을 표현하는 문자 열식

추출 조건을 표현하는 문자 열식은 추출에 사용하는 필드와 비교 연산자 추출하는 값으로 구성되는 문자열 식이다.추출에 사용하는 필드의 데이터 형태에 의해 추출하는 값의 서식이 다르다.

추출 조건의 서식

   

●텍스트 형태의 필드의 경우 추출하는 값을 Single Quation(')으로 묶어야 한다.

추출하는 값을 변수로 지정하는 경우에도 Single Quation이 필요하다.

   

(예)RS.Filter = "클래스 = 'TA'"

RS.Filter = "클래스 = ' " & Str& "'"

   

●수치형의 필드의 경우는 추출하는 값을 그대로 기술한다.

   

(예)RS.Filter = "점수> 80"

RS.Filter = "점수> " & Str

   

●날짜 시각형 필드의 경우 추출하는 값을 샾기호(#)으로 묶어야 한다.추출하는 값을    변수로 지정하는 경우도 샾기호가 필요하다.

   

(예)RS.Filter = "입학일 = #2004/04/01#"

RS.Filter = "입학일 =  # " & Str& "#"

   

●LIKE 를 사용한 문장은 ListName Like '*mit*' 이다 . 패턴의 시작과 끝에 와일드 카드를    지정할 수 있다.또는 ListName Like 'Smit*' 이다. 패턴의 끝에만 사용 할 수도 있다.

2.레코드를 추출한다.

【사용 예】

Public Sub 추출()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim criteria As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'필터
criteria = "성명 Like '홍길동%'"
RS.Filter = criteria

If RS.RecordCount = 0 Then
MsgBox ("해당되는 레코드는 발견되지 않습니다")
Else
Do Until RS.EOF
Debug.Print RS!학적 번호, RS!성명
RS.MoveNext
Loop
End If

'종료
RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

3.복수의 조건으로 레코드를 추출한다.

복수의 조건으로 레코드를 추출할 때에는 And 연산자 또는 Or 연산자를 이용한다.And 연산자는 지정한 모든 조건을 채워주는 레코드를 추출할 때에 사용. Or 연산자 는 지정한 모든 조건의 어느 것이나 1개를 채워주는 레코드를 추출할 때에 사용한다.

【사용 예】

Public Sub FilterExecute2()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim criteria As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'필터
criteria = "(입학 일 >= #2004/04/01#) And (입학 일<= #2004/04/31#)"
RS.Filter = criteria

If RS.RecordCount = 0 Then
MsgBox ("메세지")
Else
Do Until RS.EOF
Debug.Print RS!학생명부, RS!점수, RS!성명
RS.MoveNext
Loop
End If

RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

4.필터를 해제한다

Recordset 오브젝트의 Filter속성을 설정하면 지정한 추출 조건을 채워주는 레코드만이 추출되고 추출되지 않았던 레코드에 액세스하는 것은 불가능하다.필터를 해제하고 모든 레코드에 액세스할 수 있게 할 때는 Filter속성에 adFilterNone 또는 길이 0의 문자 열("")을 대입한다.

   

【사용 예】

Public Sub FilterCancel()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim criteria As String

'접속
Set CN = CurrentProject.Connection

'레코드셋을 취득
Set RS = New ADODB.Recordset
RS.Open "학생 명부", CN, adOpenKeyset, adLockOptimistic

'필터
criteria = "(입학 일 >= #2004/04/01#) And (입학 일<= #2004/04/31#)"
RS.Filter = criteria

If RS.RecordCount = 0 Then
MsgBox ("메세지")
Else
Do Until RS.EOF
Debug.Print RS!학생명부, RS!점수, RS!성명
RS.MoveNext
Loop
End If

Debug.Print

RS.Filter = adFilterNone
Do Until RS.EOF
Debug.Print RS!학생명부, RS!점수, RS!성명
RS.MoveNext
Loop

RS.Close: Set RS = Nothing
CN.Close: Set CN = Nothing
End Sub

   

  

   

<http://www.msaccess.co.kr/onlinele/list/basic/recordeset/ado/ado_11.htm>에서 삽입