1

Access Database Form1は、EmployeeIDフィールドを持つ連続フォームであり、ダブルクリックすると、従業員に関する情報を含む別のフォームに移動できます。正しい従業員を維持するために、私はこのコードを使用します...

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

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

これにより、正しい従業員情報が表示されるだけでなく、情報を保持するために非表示のテキストボックスに番号が入力されます。

従業員フォームには、4つのタブを持つTabControlがあり、タブの1つには、従業員情報を入力しようとしているが、情報を入力する代わりに、連続サブフォームが含まれています(たとえば、従業員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

誰かがこの状況に光を当てることができますか?ありがとう!

4

1 に答える 1

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
于 2013-02-21T14:05:36.547 に答える