Access에서 검색 양식의 값을 사용하여 동적 쿼리를 빌드하는 방법

고급: 전문 코딩, 상호 운용성 및 다중 사용자 기술이 필요합니다.

이 문서는 Microsoft Access 데이터베이스(.mdb) 파일이나 Microsoft Access 데이터베이스(.accdb) 파일에 적용됩니다.

요약

이 문서에서는 Microsoft Access의 검색 양식에서 값을 사용하여 쿼리 문자열에 대한 조건을 동적으로 빌드하는 방법을 보여 줍니다.

추가 정보

경우에 따라 검색 양식 역할을 하는 양식을 만들 수 있습니다. 폼에 값을 입력하고 적절한 SQL 문자열을 동적으로 빌드할 수 있어야 합니다. 다음 단계에서는 BuildCriteria 메서드를 사용하는 쿼리 문자열을 동적으로 빌드하는 방법을 보여 줍니다.

Microsoft에서 제공하는 프로그래밍 예제는 예시를 위한 것일 뿐이며 이와 관련하여 명시적이거나 묵시적인 어떠한 보증도 하지 않습니다. 이는 상품성이나 특정 목적에 대한 적합성의 묵시적인 보증을 포함하며 이에 제한되지 않습니다. 이 문서에서는 예제에 사용되고 있는 프로그래밍 언어와 프로시저를 만들고 디버깅하는 데 사용되는 도구를 사용자가 잘 알고 있는 것으로 가정합니다. Microsoft 지원 엔지니어는 특정 프로시저의 기능을 설명하는 데 도움을 줄 수 있지만 특정 요구 사항을 충족하기 위해 추가된 기능 또는 생성 프로시저를 제공하도록 이러한 예제를 수정하지는 않습니다. 주의: 이 예제의 단계를 수행하면 샘플 데이터베이스 Northwind.mdb 수정합니다. Northwind.mdb 파일을 백업하고 데이터베이스 복사본에서 다음 단계를 수행할 수 있습니다.

단계별 예제

  1. 액세스를 시작합니다.
  2. 도움말 메뉴에서 샘플 데이터베이스를 가리킨 다음 Northwind 샘플 데이터베이스를 클릭합니다.
  3. 디자인 보기에서 고객 양식을 엽니다.
  4. 양식에 명령 단추와 텍스트 상자를 추가한 다음, 다음 속성을 설정합니다.
 Command Button
 ------------------------
 Name: cmdSearch
 Caption: Search
 OnClick: Event Procedure

Text Box
 --------------
 Name: txtSQL
 Width: 4.4583"
 Height: 1.25"
  1. 명령 단추의 OnClick 속성을 다음 이벤트 프로시저로 설정합니다.
Private Sub cmdSearch_Click()
    On Error Resume Next

Dim ctl As Control
    Dim sSQL As String
    Dim sWhereClause As String

'Initialize the Where Clause variable.
    sWhereClause = " Where "

'Start the first part of the select statement.
    sSQL = "select * from customers "

'Loop through each control on the form to get its value.
    For Each ctl In Me.Controls
        With ctl
            'The only Control you are using is the text box.
            'However, you can add as many types of controls as you want.
            Select Case .ControlType
                Case acTextBox
                    .SetFocus
                    'This is the function that actually builds
                    'the clause.
                    If sWhereClause = " Where " Then
                        sWhereClause = sWhereClause & BuildCriteria(.Name, dbtext, .Text)
                    Else
                        sWhereClause = sWhereClause & " and " & BuildCriteria(.Name, dbtext, .Text)
                    End If
            End Select
        End With
    Next ctl

'Set the forms recordsource equal to the new
    'select statement.
    Me.txtSQL = sSQL & sWhereClause
    Me.RecordSource = sSQL & sWhereClause
    Me.Requery

End Sub

  1. 양식을 저장한 다음 양식 보기에서 엽니다.

    검색 명령 단추를 클릭하면 txtSQL 텍스트 상자에 Customers 양식의 값에서 만든 쿼리가 반영됩니다. 또한 Customers 양식은 새 SQL 문자열의 결과를 반영할 수 있도록 다시 쿼리되었습니다.

참조

BuildCriteria 메서드에 대한 자세한 내용은 Visual Basic 편집기 도움말 메뉴에서 Microsoft Visual Basic 도움말을 클릭하고 Office 도우미 또는 응답 마법사에서 buildcriteria 메서드를 입력한 다음 검색을 클릭하여 항목을 확인합니다.