조회 (액세스)
개념
- 조회 : 데이터베이스에 저장되어 있는 데이터의 전체 또는 특정 부분에 조건을 적용하여 추출하는 것
- 특정 레코드를 추출하기 위해 단순히 레코드에 포함된 레이블 또는 키를 비교하기도 하며, 원하는 정보를 얻기 위해 데이터를 요약하거나 처리하기도 함.
조회식에서 컨트롤 연결하기
- 조회식에서 컨트롤을 연결할 때는 컨트롤이 가지고 있는 값이 문자인지 숫자인지에 따라 따옴표를 사용하는 방법이 다름.
- 따옴표 사이에 공백이 있어서는 안 됨.
- 유형
- 문자 컨트롤을 연결할 때
- '" & 컨트롤명 & "'"
- 예) "제품명 = '" & txt제품명 & "'"
- 숫자 컨트롤을 연결할 때
- " & 컨트롤명
- 예) "판매번호 = " & txt판매번호
- 날짜 컨트롤을 연결할 때
- #" & 컨트롤명 & "#"
- 예) "생산날짜 = #" & txt생산날짜 & "#"
- 'txt제품명' 컨트롤이 날짜 값을 가지고 있을 경우
- 문자 컨트롤을 연결할 때
- LIKE를 사용한 조회식에서 컨트롤 연결하기
- 조회식에서 LIKE 연산자의 사용
- 컨트롤에 저장된 값이 문자일 때만 가능함.
- 방법
- '*" & 컨트롤명 & "*'"
- 예) Me.RecordSource = "SELECT * FROM 제품별판매현황 WHERE 담당자이메일 LIKE '*" & txt이메일 & "*'"
- 조회식에서 LIKE 연산자의 사용
예제
Filter / FilterOn 속성
■ Filter
- 폼, 보고서, 테이블, 쿼리에서 조건에 맞는 레코드만 추출하는 속성
- WHERE 절에서 'WHERE' 를 제외한 이후 부분만을 입력하여 정의함.
■ FilterOn
- Filter에 정의된 조건을 폼이나 보고서에 적용할지를 지정함.
- True (-1, 예) : 개체의 Filter 속성이 적용됨.
- False (0, 아니오) : 개체에 적용된 Filter 속성을 해제함. (기본값)
Q. <판매현황관리> 폼의 '제품명찾기'(cmd제품명찾기) 단추와 '전체보기1'(cmd전체보기1) 단추를 클릭하면 다음과 같은 기능이 수행되도록 구현하시오.
▶ 'txt제품명' 컨트롤에 '제품명'을 입력하고 '제품명찾기' 단추를 클릭하면 '제품명'이 'txt제품명'의 값과 같은 제품의 정보를 찾아 표시되도록 하시오.
▶ '전체보기1' 단추를 클릭하면 폼에 모든 제품의 정보가 표시되도록 하시오.
▶ Filter, FilterOn 속성을 이용하여 이벤트 프로시저를 작성하시오.
A.
제품명찾기(cmd제품명찾기)
Private Sub cmd제품명찾기_Click()
Me.Filter = "제품명 = '" & txt제품명 & "'"
Me.FilterOn = True
End Sub
- 예)
- '제품명'이 'txt제품명' 컨트롤에 입력한 값과 동일한 레코드를 현재 폼의 Filter 속성으로 정의함.
- 현재 폼 개체의 Filter 속성에 정의된 Filter를 적용함.
전체보기1(cmd전체보기1)
Private Sub cmd전체보기1_Click()
Me.FilterOn = False
End Sub
- 예)
- 현재 폼 개체에 적용된 Filter 속성을 해제함.
RecordSource 속성
■ RecordSource
- 테이블, 쿼리, SQL문 등의 데이터를 폼이나 보고서의 데이터 원본으로 지정할 때 사용하는 속성
- RecordSource를 사용하면 조건에 맞는 데이터들로 폼의 레코드 원본을 지정할 수 있음.
- RecordSource 속성을 이용하여 데이터를 조회할 때는 대부분 폼의 레코드 원본에 있는 내용을 복사한 후 수정하여 사용함.
Q. <판매현황관리> 폼의 'txt이메일' 컨트롤에 '담당자이메일'의 일부를 입력하고 '이메일찾기'(cmd이메일찾기) 단추를 클릭하면 다음과 같은 기능이 수행되도록 구현하시오.
▶ '담당자이메일' 주소가 'txt이메일'에 입력된 글자를 포함하는 제품의 정보를 찾아 표시하도록 하시오.
▶ 현재 폼의 RecordSource 속성을 이용하여 이벤트 프로시저를 작성하시오.
A.
이메일찾기(cmd이메일찾기)
Private Sub cmd이메일찾기_Click()
Me.RecordSource = "SELECT * FROM 제품별판매현황 WHERE 담당자이메일 LIKE '*" & txt이메일 & "*'"
End Sub
- 예)
- '담당자이메일'이 'txt이메일'에 입력된 문자를 포함하는 제품을 <제품별판매현황> 쿼리에서 찾아 현재 폼의 레코드 원본으로 지정함.
- '담당자이메일'이 'txt이메일'과 같은 내용이 아니라 'txt이메일'에 포함하는 제품을 찾는 것이므로 'LIKE'를 사용함.
- 폼의 레코드 원본이 <제품별판매현황> 이므로 테이블/쿼리명을 <제품별판매현황>으로 지정하였음.
※ 참고 : '전체보기2' 기능 구현하기
전체보기2(cmd전체보기2)
Private Sub cmd전체보기2_Click()
Me.RecordSource = "SELECT * FROM 제품별판매현황"
End Sub
ApplyFilter 함수
■ ApplyFilter
- 테이블이나 쿼리로부터 조건에 맞는 레코드를 검색하는 매크로 함수
- 필터 이름 : 조건을 정의해 놓은 쿼리의 이름을 입력함.
- WHERE 조건문 : 조건을 지정하는 WHERE 절에서 'WHERE'를 제외한 나머지 부분을 입력함.
- ApplyFilter에 적용할 조건은 '필터 이름'이나 'WHERE 조건문' 중 하나에 입력하면 됨.
Q. <판매현황관리> 폼의 'txt거래처코드' 컨트롤에 거래처코드를 입력하고 '거래처찾기'(cmd거래처찾기) 단추를 클릭하면 다음과 같은 기능을 수행하는 <거래처찾기> 매크로를 생성한 후 지정하시오.
▶ '거래처코드'가 'txt거래처코드'와 같은 제품의 정보를 찾아 표시하도록 하시오.
▶ ApplyFilter 함수를 사용하시오.
A.
거래처찾기(cmd거래처찾기)
![]() |
![]() |
![]() |
![]() |
![]() |
RecordsetClone, Bookmark, FindFirst 속성
■ RecordsetClone, Bookmark, FindFirst
- 테이블 내에서 유일한 필드 값을 가지는 특정 레코드 1개를 찾는 경우에 일반적으로 이용함.
Q. <판매현황관리> 폼의 'txt판매번호' 컨트롤에 '판매번호'를 입력하고 '판매번호찾기'(cmd판매번호찾기) 단추를 클릭하면 다음과 같은 기능이 수행되도록 구현하시오.
▶ '판매번호'가 'txt판매번호'의 값과 같은 제품의 정보를 찾아 표시하도록 하시오.
▶ 현재 폼의 RecordsetClone 속성과 BookMark 속성, FindFirst 메서드 등을 이용할 것
A.
판매번호찾기(cmd판매번호찾기)
Private Sub cmd판매번호찾기_Click()
Me.RecordsetClone.FindFirst "판매번호 = " & txt판매번호
Me.Bookmark = Me.RecordsetClone.Bookmark
End Sub
- Me.RecordsetClone.FindFirst "조건"
- 현재 폼의 작업 대상이 되는 레코드 셋을 복사한 후, 복사된 개체를 대상으로 조건에 맞는 첫 번째 레코드로 이동함.
- RecordsetClone.Bookmark
- 복사된 개체를 열었을 때 현재의 레코드를 유일하게 식별할 수 있는 표식으로, 보통 책갈피라고 함.
- 레코드 셋이나 복사된 레코드 셋을 열었을 때 여러 개의 레코드가 있지만, 현재 레코드 포인터는 항상 1개만을 가리키고 있으며 그것을 확인할 수 있는 것이 Bookmark 임.
- Me.Bookmark
- 현재 폼의 작업 대상인 레코드 셋의 레코드 중에서 현재 레코드 포인터가 가리키고 있는 레코드의 책갈피
- 예)
- 현재 폼(Me)의 레코드 원본을 복사한 후, 복사된 개체(RecordsetClone)에서 해당 조건('판매번호' 필드의 값이 'txt판매번호'에 입력된 값과 동일한 레코드)과 일치하는 값을 찾음. (FindFirst)
- 현재 폼(Me)의 책갈피 속성(Bookmark)에 복사한 개체(RecordsetClone)에서 찾은 레코드의 책갈피 속성(Bookmark)을 지정하므로, 버튼 클릭 시 현재 폼의 레코드 포인터가 찾은 레코드로 이동함.
Ado 개체
Q. <판매현황관리> 폼의 'txt판매번호' 컨트롤에 '판매번호'를 입력하고 '제품정보찾기'(cmd제품정보찾기) 단추를 클릭하면 다음과 같은 기능이 수행되도록 구현하시오.
▶ <제품정보> 폼을 실행한 후 <제품정보> 폼의 '판매번호'가 'txt판매번호'의 값과 같은 제품의 정보를 찾아 표시되도록 하시오.
▶ Ado 개체를 이용하시오.
A.
제품정보찾기(cmd제품정보찾기)
Private Sub cmd제품정보찾기_Click()
Dim rs As ADODB.Recorset
Set rs = New ADODB.Recordset
DoCmd.OpenForm "제품정보"
rs.ActiveConnection = CurrentProject.Connection
rs.Open "SELECT * FROM 제품별판매현황 WHERE 판매번호 =" & txt판매번호
Forms!제품정보.txt판매번호 = rs!판매번호
Forms!제품정보.txt제품명 = rs!제품명
Forms!제품정보.txt판매량 = rs!판매량
Forms!제품정보.txt불량품 = rs!불량품
Forms!제품정보.txt단가 = rs!단가
Forms!제품정보.txt제품평 = rs!제품평
Forms!제품정보.txt거래처명 = rs!거래처명
Forms!제품정보.txt거래처등급 = rs!거래처등급
rs.Close
End Sub
- 예)
- rs를 ADO 레코드 셋의 변수로 선언함.
- 레코드 셋 : 기본 테이블이나 명령 실행 결과로 얻어진 데이터를 임시로 저장해 두는 레코드 집합
- rs에 임시로 저장할 레코드 셋을 할당함.
- <제품정보> 폼을 엶.
- rs 레코드 셋에 현재 데이터베이스를 연결함.
- ActiveConnection
- 지정한 개체에 현재 속해 있는 Connection 개체를 나타내는 것
- 여기서는 rs 레코드 셋을 의미함.
- CurrentProject.Connection
- 현재 데이터베이스의 ADO 연결 복사본에 대한 참조를 반환함.
- ActiveConnection
- <제품별판매현황> 쿼리에서 '판매번호'가 'txt판매번호' 컨트롤에 입력된 값과 동일한 레코드를 rs 레코드 셋에 할당함.
- rs 레코드 셋에 할당된 '판매번호'를 <제품정보> 폼의 'txt판매번호' 컨트롤에 표시함.
- rs 레코드 셋에 할당된 '제품명', '판매량', '불량품', '단가', '제품명', '거래처명', '거래처등급'을 'txt제품명', 'txt판매량', 'txt불량품', 'txt단가', 'txt제품명', 'txt거래처명', 'txt거래처등급' 컨트롤에 각각 표시함.
- rs 레코드 셋을 닫음.
- rs를 ADO 레코드 셋의 변수로 선언함.
※ 참고 : Ado 개체가 포함된 코드를 실행하면 컴파일 오류 메시지가 나타날 경우
① Microsoft Visual Basic for Applications 창에서 [도구] 메뉴 -> [참조] 클릭
② '사용 가능한 참조' 항목에서 Microsoft ActiveX Data Objects 2.0 ~ 6.1 Libray 중 하나를 선택한 후 [확인] 버튼 클릭
참고
- 지금까지 <조회>에서 출제된 문제 유형 5가지
- Filter
- RecordSource
- ApplyFilter
- RecordsetClone
- ADO 개체
- 조건 지정 방법도 단순히 폼에 배치된 특정 컨트롤의 값과 관련 필드의 값을 단순 비교하는 문제만 반복 출제되고 있음.
'Certificate > CSSD' 카테고리의 다른 글
[컴퓨터활용능력 1급 실기] 프로시저 작성 문제 정리 (액셀/스프레드시트) (0) | 2021.12.02 |
---|---|
[컴퓨터활용능력 1급 실기] 계산 작업 문제 정리 (액셀/스프레드시트) (2) | 2021.11.30 |
[컴퓨터활용능력 1급 실기] 처리 기능 (액세스) (0) | 2021.11.27 |
[컴퓨터활용능력 1급 실기] 쿼리(Query) (액세스) (0) | 2021.11.25 |
[컴퓨터활용능력 1급 실기] 보고서 (액세스) (0) | 2021.11.23 |
[컴퓨터활용능력 1급 실기] 폼과 컨트롤 (액세스) (0) | 2021.11.23 |
[컴퓨터활용능력 1급 실기] 연결하기/가져오기 (액세스) (0) | 2021.11.23 |
[컴퓨터활용능력 1급 실기] 관계 설정 (액세스) (0) | 2021.11.17 |