별의 공부 블로그 🧑🏻‍💻
728x90
728x170

조회 (액세스)

개념

  • 조회 : 데이터베이스에 저장되어 있는 데이터의 전체 또는 특정 부분에 조건을 적용하여 추출하는 것
  • 특정 레코드를 추출하기 위해 단순히 레코드에 포함된 레이블 또는 키를 비교하기도 하며, 원하는 정보를 얻기 위해 데이터를 요약하거나 처리하기도 함.

 

조회식에서 컨트롤 연결하기

  • 조회식에서 컨트롤을 연결할 때는 컨트롤이 가지고 있는 값문자인지 숫자인지에 따라 따옴표를 사용하는 방법이 다름.
    • 따옴표 사이에 공백이 있어서는 안 됨.
    • 유형 
      • 문자 컨트롤을 연결할 때
        • '" & 컨트롤명 & "'"
        • 예) "제품명 = '" & txt제품명 & "'"
      • 숫자 컨트롤을 연결할 때
        • " & 컨트롤명
        • 예) "판매번호 = " & txt판매번호
      • 날짜 컨트롤을 연결할 때
        • #" & 컨트롤명 & "#"
        • 예) "생산날짜 = #" & txt생산날짜 & "#"
          • 'txt제품명' 컨트롤이 날짜 값을 가지고 있을 경우
  • LIKE를 사용한 조회식에서 컨트롤 연결하기
    • 조회식에서 LIKE 연산자의 사용
      • 컨트롤에 저장된 값이 문자일 때만 가능함.
    • 방법
      • '*" & 컨트롤명 & "*'"
      • 예) Me.RecordSource = "SELECT * FROM 제품별판매현황 WHERE 담당자이메일 LIKE '*" & txt이메일 & "*'"

 

예제

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 연결 복사본에 대한 참조를 반환함.
    • <제품별판매현황> 쿼리에서 '판매번호'가 'txt판매번호' 컨트롤에 입력된 값과 동일한 레코드를 rs 레코드 셋에 할당함.
    • rs 레코드 셋에 할당된 '판매번호'를 <제품정보> 폼의 'txt판매번호' 컨트롤에 표시함.
    • rs 레코드 셋에 할당된 '제품명', '판매량', '불량품', '단가', '제품명', '거래처명', '거래처등급'을 'txt제품명', 'txt판매량', 'txt불량품', 'txt단가', 'txt제품명', 'txt거래처명', 'txt거래처등급' 컨트롤에 각각 표시함.
    • rs 레코드 셋을 닫음.

 

※ 참고 : Ado 개체가 포함된 코드를 실행하면 컴파일 오류 메시지가 나타날 경우

① Microsoft Visual Basic for Applications 창에서 [도구] 메뉴 -> [참조] 클릭

 

② '사용 가능한 참조' 항목에서 Microsoft ActiveX Data Objects 2.0 ~ 6.1 Libray 중 하나를 선택한 후 [확인] 버튼 클릭

 

참고

  •  지금까지 <조회>에서 출제된 문제 유형 5가지
    • Filter
    • RecordSource
    • ApplyFilter
    • RecordsetClone
    • ADO 개체
  • 조건 지정 방법도 단순히 폼에 배치된 특정 컨트롤의 값과 관련 필드의 값을 단순 비교하는 문제만 반복 출제되고 있음.

 

728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖