2013-02-21 7 views
1

Доступ к базе данных Form1 - это непрерывная форма с полем EmployeeID, которую вы можете дважды щелкнуть, чтобы перейти к другой форме, содержащей информацию о Работнике. Для того, чтобы сохранить правильный работника я использую этот код ...Информация о повторной подписи Access Continuos

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

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

Это не только воспитывает правильную информацию о сотруднике, но заполнит номер в скрытое текстовое поле, чтобы сохранить информацию.

В форме сотрудника есть TabControl с 4 вкладками, одна из вкладок содержит непрерывную подформу, которую я пытаюсь заполнять информацией о сотрудниках, но вместо заполняемой информации (скажем, Employee 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/ACCDB или в.с.ц.? – Fionnuala

+0

Это mdb/accdb – designspeaks

+0

Тогда почему бы не связать таблицы и избежать этих проблем? Вы можете установить источник записей в полный набор записей и фильтровать его с помощью полей link/link master. – 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