■ 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
【포인트】
- 검색에 사용하는 필드는 테이블에 설정되고 있는 인덱스이다.테이블에는 복수의 인덱스를 설정하는 것이 가능하다.어느 인덱스를 사용하고 검색을 실행할지 는 Recordset 오브젝트의 Index속성으로 지정한다.Seek 방법은 Recordset 오브젝트의 Open 방법의 options인수에 adCmdTableDirect을 지정하고 열렸던 Recordset 오브젝트만으로 실행 가능하다.
- Seek 방법을 실행한 결과 조건을 채워주는 레코드가 발견되지 않았던 때는 Recordset 오브젝트의 BOF속성 또는 EOF속성이 True이 되고,최신 레코드는 미정의 된다.이 때 최신 레코드를 참조한다면 에러가 된다.Find 방법을 실행한 후에는 반드시 BOF속성 또는 EOF속성의 값을 조사하고 레코드가 발견됐을지 어떨지를 확인한다.어느 쪽의 속성을 이용할지는 검색의 방법에 의해 다르다.
- 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 |
RECENT COMMENT