2013-02-21 4 views
1

Access 데이터베이스 Form1은 EmployeeID 필드가있는 연속 양식으로 두 번 클릭하면 Employee에 대한 정보가 들어있는 다른 폼으로 이동할 수 있습니다. 이 코드를 사용하여 올바른 직원 ...액세스 연속 하위 폼 반복 정보

Private Sub EmployeeID_DblClick(cancel as integer) 
    Dim myID as variant 
    myID = me.EmployeeID 

    DoCmd.OpenForm "frm_EmployeeInfo",,,,,,myID 
End Sub 

이 올바른 직원 정보를 제공하지만, 정보를 유지하기 위해 숨겨진 텍스트 상자에 숫자를 채워뿐만 아니라 유지하기 위해.

직원 양식에는 4 개의 탭이있는 TabControl이 있습니다. 탭 중 하나에는 직원 정보를 채우려는 연속 하위 양식이 있지만 대신 정보가 채워지는 정보가 있습니다 (직원 X에는 8 개의 다른 줄이 있습니다 표시 할 속성)은 동일한 속성을 반복합니다. 하위 형식에 대한 코드는 다음과 같습니다.

Option Compare Database 

Private Sub Form_open(cancel As Integer) 
    Dim strConnection, strSQL As String 
    Dim conn As ADODB.Connection 
    Dim tbl As ADODB.Recordset 
    Dim SourceCode As String 
    Dim myID As Variant 

    Set conn = New ADODB.Connection 
    strConnection = "ODBC;Driver={SQLserver};DSN=AccessDatabase;Server=Labor;DATABASE=Source;Trusted_Connection=Yes;" 
    conn.Open strConnection 

    myID = CInt(Me.OpenArgs) 
    SourceCode= Nz(DLookup("[SourceCode]", "Locaton", "[LOC_ID] = Forms!frmUtility![Site].value"), "") 

    If SourceCode<> "" Then 
    strSQL = "SELECT EmployeeID,BenefitID,DeductionAmount,BenefitAmount,CoverageAmount,EffectiveDate," 
    strSQL = strSQL & "EligibleDate,ExpirationDate FROM " 
    strSQL = strSQL & SourceCode & "_EmployeesBenefitsNew WHERE EmployeeID= " & myID 
    Else 
    strSQL = "SELECT EmployeeID,BenefitID,DeductionAmount,BenefitAmount,CoverageAmount,EffectiveDate," 
    strSQL = strSQL & "EligibleDate,ExpirationDate FROM " 
    strSQL = strSQL & "EmployeesBenefitsNew WHERE EmployeeID= " & myID 
    End If 

    Set tbl = New ADODB.Recordset 

    With tbl 
    Set .ActiveConnection = conn 
    .Source = strSQL 
    .LockType = adLockOptimistic 
    .CursorType = adOpenKeyset 
    .CursorLocation = adUseClient 
    .Open 
    End With 

    With tbl 
    On Error Resume Next 
     .MoveFirst 
     Do Until tbl.EOF 
     Me.txtBenefitID.Value = tbl!BenefitID 
     Me.txtDeductionAmt.Value = tbl!DeductionAmount 
     Me.txtBenefitAmt.Value = tbl!BenefitAmount 
     Me.txtCoverageAmt.Value = tbl!CoverageAmount 
     Me.txtEffDt.Value = tbl!EffectiveDate 
     Me.txtTermDt.Value = tbl!ExpirationDate 
     Set Me.Recordset = tbl 
     .MoveNext 

     Loop 
    .Close 
    End With 



    conn.Close 
    Set conn = Nothing 
    Set tbl = Nothing 

End Sub 

이 상황에 대해 누구도 밝힐 수 있습니까? 감사!

+0

이는 MDB /에만 적용 또는 ADP인가? – Fionnuala

+0

mdb/accdb – designspeaks

+0

그럼 테이블을 연결하고 이러한 문제를 피하십시오. 레코드 소스를 전체 레코드 세트로 설정하고 링크 하위/링크 마스터 필드로 필터링 할 수 있습니다. – Fionnuala

답변

0

레코드 세트 나 레코드 소스를 데이터로 설정하거나 연속 된 양식으로 다른 라인에 쓸 수 없으며 레코드 세트가있는 경우 라인이 다른 것으로 만 표시됩니다.

그래서에서

''******************** 
    Set Me.Recordset = tbl 
    ''******************** 

코드 :

Private Sub Form_open(cancel As Integer) 
    Dim strConnection, strSQL As String 
    Dim conn As ADODB.Connection 
    Dim tbl As ADODB.Recordset 
    Dim SourceCode As String 
    Dim myID As Variant 

    Set conn = New ADODB.Connection 
    strConnection = "ODBC;Driver={SQLserver};DSN=AccessDatabase;Server=Labor;DATABASE=Source;Trusted_Connection=Yes;" 
    conn.Open strConnection 

    myID = CInt(Me.OpenArgs) 
    SourceCode= Nz(DLookup("[SourceCode]", "Locaton", "[LOC_ID] = Forms!frmUtility![Site].value"), "") 

    If SourceCode<> "" Then 
    strSQL = "SELECT EmployeeID,BenefitID,DeductionAmount,BenefitAmount,CoverageAmount,EffectiveDate," 
    strSQL = strSQL & "EligibleDate,ExpirationDate FROM " 
    strSQL = strSQL & SourceCode & "_EmployeesBenefitsNew WHERE EmployeeID= " & myID 
    Else 
    strSQL = "SELECT EmployeeID,BenefitID,DeductionAmount,BenefitAmount,CoverageAmount,EffectiveDate," 
    strSQL = strSQL & "EligibleDate,ExpirationDate FROM " 
    strSQL = strSQL & "EmployeesBenefitsNew WHERE EmployeeID= " & myID 
    End If 

    Set tbl = New ADODB.Recordset 

    With tbl 
    Set .ActiveConnection = conn 
    .Source = strSQL 
    .LockType = adLockOptimistic 
    .CursorType = adOpenKeyset 
    .CursorLocation = adUseClient 
    .Open 
    End With 


    ''******************** 
    Set Me.Recordset = tbl 
    ''******************** 


    conn.Close 
    Set conn = Nothing 
    Set tbl = Nothing 

End Sub