study/ADO 2012. 5. 2. 14:00

액세스 VBA 강좌_ADO_지원 체크

   

■ Contents

   

1. Supports 방법

   

1.Supports 방법

Supports 법은 Recordset 오브젝트가 지원하는 기능의 종류를 조사하기 위해 사용한다.CursorOptions 로 지정된 정수에 대응하는 기능이 Recordset 오브젝트로 지원되고 있는 경우 Supports 방법은 True을 돌려 준다.대응하는 기능이 지원되지 않는 경우에는 False을 돌려 준다.

【서식】boolean =recordset.Supports( CursorOptions)

recordset: Recordset 오브젝트를 표현하는 오브젝트 변수
CursorOptions:지원여부를 조사하는 기능

◆다음의 일람표는 Supports 방법이 테스트 하는 기능입니다.

정수

설명

adAddNew

신규 레코드를 추가하는 AddNew 방법

adApproxPosition

AbsolutePosition 속성과 AbsolutePage 속성

adBookmark

특정의 레코드에의 액세스를 확보하는 Bookmark 속성

adDelete

레코드를 삭제하는 Delete 방법

adFind

Recordset 안의 행의 위치를 확인하는 Find 방법

adIndex

인덱스에 이름을 붙이는 Index 속성

adMovePrevious

MoveFirst,MovePrevious 방법및 Move 방법

adResync

기초가 되는 데이터베이스의 커서에 있는 가시 데이터를 갱신하는 Resync 방법

adSeek

Recordset 안의 행에 할당하는 Seek 방법

adUpdate

기존의 데이터를 변경하는 Update 방법

【사용 예】

IF RS.Supports(adUpdate) Then
MsgBox "편집 가능합니다"
End If

   

  

   

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>에서 삽입

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

액세스 VBA 강좌_ADO_검색

   

■ Contents

   

   

1.Find 방법

Recordset 오브젝트의 Find방법을 이용하면 지정한 조건에 일치하는 레코드를 검색하고 그 레코드를 최신 레코드라 한다.레코드가 발견되지 않았던 때는 Recordset 오브젝트의 BOF속성 또는 EOF속성이 True이 되고 최신 레코드는 미정의 된다.

【서식】recordset.Find Criteria, SkipRows, SearchDirection, Start

recordset : 열려 있는 Recordset 오브젝트
Criteria : 열의 이름, 비교 연산 자, 값을 지정하는 성명을 포함할 문자 열형의 값을 지정
SkipRows : 개시 위치에서 읽기 날리는 레코드 수(생략 가능)
SearchDirection : 검색 방향(생략 가능)
Start : 검색의 개시 위치(생략 가능)

정수

설명

adSearchBackward

-1

후방 검색을 하고 Recordset 의 앞으로 종료한다.일치하는 레코드가 발견되지 않는 경우,레코드 포인터는 BOF로 이동한다.

adSearchForward

1

전방 검색을 하고 Recordset 의 말미에 종료한다.일치하는 레코드가 발견되지 않는 경우,레코드 포인터는 EOF 로 이동한다.

◆SearchDirection

   

【포인트】

Criteria인수는 검색에 사용하는 필드,비교 연산 자 검색하는 값으로 구성되는 문장이다. 비교 연산자에 "like" 을(를) 사용하는 경우 문자 열치에 퍼센트 (%) 를 포함하면 1 나루터 또는 복수의 문자 또는 부분 문자열을 검색하는 것이 가능하다.단지 퍼센트는 검색 문자열의 말미에 사용하거나 또는 검색 문자열의 앞과 말미의 양방에서 사용하는 것이 가능하다.

   

SkipRows인수는 검색 실행 때로는 읽기 날리는 레코드 수이다.이 인수를 생략하거나  또는 0을 지정하면 ,Find 방법은 최신 레코드에서 검색을 한다.만약,최신 레코드가 검색 조건을 채워주고 있는 경우에는 언제나 이 레코드가 검색되고 다른 레코드를 검색하는 것은 불가능하다.SkipRows인수를 1으로 하면,최신 레코드를 읽고 날리고,다음의 레코드를 검색하는 것이 가능하다.

   

SearchDirection인수는 검색의 방향을 지정한다.Recordset 오브젝트의 CursorType속성이 adOpenForwardOnly의 경우는 최신 레코드에서 앞 레코드 방향에의 검색은 실행할 수 없다.

   

Start인수는 검색 개시 위치를 지정한다.생략한 경우는 최신 레코드에서 검색을 개시한다.

■ 검색 조건의 서식

   

검색에 사용하는 필드의 데이터 형태에 의해 검색하는 값의 서식이 다르다.

   

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

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

   

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

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

   

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

   

(예)RS.Find "점수> 80"

RS.Find "점수> " & Str

   

날짜 시각 형필드의 경우,검색하는 값을 샾기호(#)으로 묶어야 한다.검색하는 값

       을 변수로 지정하는 장소

   

합도 샾기호가 필요합니다.

   

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

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

2.앞 레코드를 검색한다.

Find 방법의 SkipRows인수를 0,SearchDirection인수를 adSearchForward으로 하면 최신 레코드에서 레코드셋의 최종 방향에 향하여 개시하고 처음에 찾았던 레코드를 최신 레코드로 한다.해당되는 레코드가 발견되지 않았던 경우에는, Recordset 오브젝트의 EOF속성이 True이 되고 최신 레코드는 미정의 된다. 이 때 최신 레코드를 참조한다면 에러가 발생한다.Find 방법을 실행한 뒤에는 반드시 EOF속성의 값을 조사하고 레코드가 발견됐을지 어떨지를 확인한다.

   

【사용 예】

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.Find criteria, 0, adSearchForward

'확인
If RS.EOF Then
MsgBox ("발견되지 않습니다")
Else
MsgBox (RS!학적 번호 & " " & RS!성명)
End If

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

3.연속으로 검색한다.

동일 조건으로 레코드를 계속하고 검색하는 경우, 첫번째의 레코드를 검색하는 경우에는 SkipRows인수를 0으로 하여 실행하고,2번째 이후의 레코드를 검색하는 경우는 SkipRows인수를 1로 한다.

【사용 예】

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

'1회째의 검색
criteria = "성명 Like '홍길동%'"
RS.Find criteria, 0, adSearchForward

If RS.EOF Then
MsgBox ("발견되지 않습니다")

'2회째 이후의 검색
Else
Do Until RS.EOF
MsgBox (RS!학적 번호 & " " & RS!성명)
RS.Find criteria, 1, adSearchForward
Loop
MsgBox ("검색 종료")
End If

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

4.Seek 방법

Seek방법은 테이블에 설정되어 있는 인덱스를 이용하고 검색을 하기 때문에 Find 방법보다도 고속으로 레코드를 검색할 수 있다.

【서식】recordset.Seek KeyValues,SeekOption

recordset:열려 있는 Recordset 오브젝트
KeyValues:검색하는 값
SeekOption:검색 방법

정수

설명

adSeekFirstEQ

1

KeyValues 와 일치하는 최초의 키를 검색한다.

adSeekLastEQ

2

KeyValues 와 일치하는 최후의 키를 검색한다.

adSeekAfterEQ

4

KeyValues 와 일치하는 키, 또는 그 직후의 키의 어느 쪽이나 검색한다.

adSeekAfter

8

KeyValues라고 일치하는 키의 직후의 키를 검색한다.

adSeekBeforeEQ

16

KeyValues 라고(와) 일치하는 키, 또는 그 직전의 키의 어느 쪽이나를 검색한다.

adSeekBefore

32

KeyValues 와 일치하는 키의 직전의 키를 검색한다.

◆SeekOption

【포인트】

  1. 검색에 사용하는 필드는 테이블에 설정되고 있는 인덱스이다.테이블에는 복수의 인덱스를 설정하는 것이 가능하다.어느 인덱스를 사용하고 검색을 실행할지 는 Recordset 오브젝트의 Index속성으로 지정한다Seek 방법은 Recordset 오브젝트의 Open 방법의 options인수에 adCmdTableDirect을 지정하고 열렸던 Recordset 오브젝트만으로 실행 가능하다.
  2. Seek 방법을 실행한 결과 조건을 채워주는 레코드가 발견되지 않았던 때는 Recordset 오브젝트의 BOF속성 또는 EOF속성이 True이 되고,최신 레코드는 미정의 된다.이 때 최신 레코드를 참조한다면 에러가 된다.Find 방법을 실행한 후에는 반드시 BOF속성 또는 EOF속성의 값을 조사하고 레코드가 발견됐을지 어떨지를 확인한다.어느 쪽의 속성을 이용할지는 검색의 방법에 의해 다르다.
  3. Seek 방법의 KeyValues인수는 검색하는 값의 데이터 형태에 의해 서식이 다르다.텍스트 형태의 경우는 그 문자열을 Double Quatation(")이고 ,날짜 시각형의 경우는 샾기호(#)으로 묶어야 한다.수치형의 경우에는 검색하는 값을 그대로 기술한다.

   

【서식】recordset.Index = indexname

recordset:열려 있는 Recordset 오브젝트
indexname:테이블에 설정되고 있는 인덱스 이름

예를 들면,[학적 번호]필드에[번호]이라고 말하는 인덱스가 설정되고 있는 때 이 인덱스를 사용하고 레코드를 검색하는 데는,다음과 같이 기술한다.

RS.Index = "번호"
RS.Seek "775501A", adSeekFirstEQ

【사용 예】

Public Sub Seek 검색()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim DAT As Long

'접속
Set CN = CurrentProject.Connection

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

'검색
DAT = 2101
RS.Index = "번호"
RS.Seek DAT, adSeekFirstEQ

'확인
If RS.EOF Then
MsgBox ("발견되지 않습니다")
Else
MsgBox (RS!학적 번호 & " " & RS!성명)
End If

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

   

  

   

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