2009-06-09 3 views
0

SQL 데이터베이스에 테이블 Table1이 있습니다. 이 테이블은 또 다른 테이블 Table2과 관련이 있으며, 차례로 Table3과 관련됩니다. Table1에서 특정 레코드를 선택하는 쿼리 Query1이 있습니다. 이 데이터베이스 액세스 데이터베이스 프로젝트Access에서 하위 양식이 포함 된 양식 필터링

Table1Data에 연결되어

Table2 데이터 (Table3이어서 데이터) 관련 함유하는 시트와 함께 Table1에 기초한다. 이 양식은 다른 양식 (Switchboard)으로 열립니다. 양식을 열면 문제가 발생합니다. 양식을 필터링해야하지만 매크로를 설정하고 양식을 열고 필터를 Query1으로 설정하면 양식의 데이터가 필터링되지 않습니다. 왜 이런 일이 일어나는가? 그렇지 않은가? Query1Table1에서 모든 열을 선택하므로 일치하지 않는 열이 문제가되어서는 안됩니다.

또한 특정 사용자 만 Query1을 실행할 수 있으며 다른 쿼리 (Query2, Query3 등)와 동일하게 실행할 수 있습니다. 따라서 편집 할 수있는 데이터 만 편집 할 수 있습니다.

답변

0

내 선호하는 솔루션은 양식 열기 이벤트에서 레코드를 설정하는 것입니다. 이것은 나에게 무슨 일이 일어나고 있는지에 대한 대부분의 제어를 제공합니다.

다음은이 작업에 대한 나의 상용구입니다. 또한 폼을 호출 할 때 전달되는 OpenArgs를 찾는 것도 포함됩니다. SQL의 호출 형식에서 아무 것도 지정하지 않으려는 경우 If/Then 문을 주석 처리하거나 제거 할 수 있습니다.

Private Sub Form_Open(Cancel As Integer) 
    ' Comments : 
    ' Parameters: Cancel - 
    ' Modified : 
    ' -------------------------------------------------- 

    On Error GoTo Err_Form_Open 

    Dim strSQL As String 
    Dim strVariable As String 
    Dim strDateVariable As String 
    Dim dteDateVariable As String 
    Dim i As Integer 
    Dim n As Integer 

    'Get variables from Left and right of | in OpenArgs 
    If Not (IsNull(Me.OpenArgs)) Then 

     i = InStr(1, Me.OpenArgs, "|") 
     n = Len(Me.OpenArgs) 

     strVariable = Left(Me.OpenArgs, n - (n - i + 1)) 

     strDateVariable = Right(Me.OpenArgs, (n - i)) 

     dteDateVariable = CDate(strDateVariable) 

    Else 

     GoTo Exit_Form_Open 

    End If 

    strSQL = "SELECT ... " _ 
      & "FROM  ... " _ 
      & "WHERE (((Field1)='" & strVariable & "') " _ 
      & " AND ((Field2)=#" & dteDateVariable & "#));" 

    Me.RecordSource = strSQL 

    Me.Requery 

Exit_Form_Open: 

    Exit Sub 

Err_Form_Open: 

    Select Case Err.Number 
     Case Else 
      Call ErrorLog(Err.Number, Err.Description, "Form_Open", "frmName", Erl) 
      GoTo Exit_Form_Open 
    End Select 

End Sub 
+0

이 매크로가 실행되고 변수 세트가 기본이되는 매크로 OpenForm 조치가 있습니까? – SamWM

+0

가능한 한 빨리 매크로에서 벗어나십시오. 그들은 다 기능성이 부족하고 오류 수정이 없습니다. 매크로는 초보자 용입니다. 몇 주 동안 Access를 사용한 후에는 필요한 두 가지 기능 (AutoExec 및 AutoKeys)을 제외하고는 Access를 생성하지 않아야합니다. –

+0

질문에 설명하는 양식 Table1Data를 열면 OpenForm 동작이 실행됩니다. 코드는 Recordsource를 SQL 문자열로 설정 한 다음 .Requery가 새 RecordSource를 기반으로 양식을 그리게합니다. 또한 데이비드 펜톤 (David Fenton)은 Macros를 사용해서는 안된다는 점에 동의합니다. 단, AutoExec 및 AutoKeys에서는 사용하지 않습니다. –

관련 문제