2013-02-21 35 views
1

访问数据库表单1是一个连续表单,它具有一个EmployeeID字段,您可以双击以将您带到另一个包含关于员工信息的表单。为了保持正确的员工我使用此代码...访问连续子表单重复信息

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

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

这不仅带来了正确的员工信息,但填充的数量到一个隐藏的文本框保留信息。

在员工表单上有一个带有4个选项卡的TabControl,其中一个选项卡包含一个Continous子表单,我试图填充员工信息,而不是填充信息(假设员工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或ADP? – Fionnuala 2013-02-21 13:29:18

+0

这是一个mdb/accdb – designspeaks 2013-02-21 13:42:29

+0

那么为什么不链接表并避免这些问题呢?您可以将recordource设置为完整的记录集并使用链接子/链接主字段进行筛选。 – Fionnuala 2013-02-21 13:45:16

回答

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