【问题标题】:MS Access Continuous Form Not UpdatingMS Access 连续表格未更新
【发布时间】:2018-05-26 03:34:24
【问题描述】:

所以我对 Ms Access 和 VBA 还是很陌生。我正在尝试创建一个考勤日历模板,其中

  • 我根据员工的出勤情况计算出勤代码
  • 将该代码显示为连续表格,因为员工人数相当大

我已经获得了所有所需数据的所有必要查询,但我似乎无法以我想要的方式显示它

我使用 DAO 记录集来提取数据等等。我在网上到处搜索,但似乎无法找到和回答,所以我在这里。

问题:

  • 第二个和后续记录使用第一个记录的 ID 号而不是它们自己的。名称文本框已绑定到查询。

https://i.stack.imgur.com/TLeFJ.png

PS。我使用this 模板作为 VBA 编码的基础。

Public Sub Main()

'On Error GoTo ErrorHandler

Call InitVariables
Call InitArray
Call LoadArray
Call PrintArray


'ExitSub:
'    Exit Sub
'ErrorHandler:
'    msgbox "There has been an error. Please reload the form"
'    Resume ExitSub
End Sub

Private Sub InitVariables()
'On Error GoTo ErrorHandler

intMonth = Me.cboMonth
intYear = Me.cboYear
lngFirstDayOfMonth = CLng(DateSerial(intYear, intMonth, 1))
intFirstWeekday = getFirstWeekday(lngFirstDayOfMonth)
intDaysInMonth = getDaysInMonth(intMonth, intYear)

'ExitSub:
'    Exit Sub
'ErrorHandler:
'    msgbox "There has been an error. Please reload the form"
'    Resume ExitSub
End Sub


Private Sub InitArray()
Dim i As Integer

ReDim myArray(0 To 30, 0 To 2)

For i = 0 To 30


    myArray(i, 0) = lngFirstDayOfMonth - intFirstWeekday + 2 + i
    If Month(myArray(i, 0)) = intMonth Then
        myArray(i, 1) = True
        myArray(i, 2) = Day(myArray(i, 0))
    Else
        myArray(i, 1) = False

    End If
Next i

End Sub

Private Sub LoadArray()

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim rs1 As DAO.Recordset

Dim rsFiltered As DAO.Recordset
Dim strSQL, strSQLTraxID As String
Dim i As Integer



    'If Not rs.BOF And Not rs.EOF Then

        For i = LBound(myArray) To UBound(myArray)

            If myArray(i, 1) Then

   strSQL = "SELECT EiSyS.Date, [CAM Database].[Trax ID],  [CAM Database].[Full Name], EiSyS.AttendanceCode " _
  & "FROM EiSyS INNER JOIN [CAM Database] ON EiSyS.EmployeeID = [CAM Database].[Trax ID] where EiSyS.Date = CDate('" & Format(myArray(i, 0), "mm/dd/yyyy") & "') and " _
  & "EiSyS.EmployeeID = " & Me.[EmployeeID]

                Set db = CurrentDb
                Set rs = db.OpenRecordset(strSQL)
                Set rsFiltered = rs.OpenRecordset

                Do While (Not rsFiltered.EOF)

                    myArray(i, 2) = rs!AttendanceCode

                    Debug.Print Format(myArray(i, 0), "mm/dd/yyyy") & " - " & rs!AttendanceCode & " - " & Me.[EmployeeID]

                    rsFiltered.MoveNext
                Loop

            End If
        Next i

    'End If

    rsFiltered.Close

    rs.Close

Set rsFiltered = Nothing
Set rs = Nothing
Set rs1 = Nothing

Set db = Nothing


End Sub

Private Sub PrintArray()
'On Error GoTo ErrorHandler

Dim strCtlName As String
Dim i As Integer

For i = LBound(myArray) To UBound(myArray)
    strCtlName = "text" & CStr(i + 1)
    Controls(strCtlName).Tag = i
    Controls(strCtlName) = ""
    Controls(strCtlName) = myArray(i, 2)


Next i


'ExitSub:
'    Exit Sub
'ErrorHandler:
'    msgbox "There has been an error. Please reload the form"
'    Resume ExitSub

End Sub

【问题讨论】:

  • 您的文本框必须绑定到查询中的一个字段——所有这些字段
  • @dbmitch 我只需要绑定一个文本框,它已经是.. Me.[EmployeeID] 是与employeeID 绑定的文本框,但您可以看到所有后续条目仍使用第一个文本框的数据。 . 也许我在循环中遗漏了一些东西..
  • @dbmitch 感谢您的洞察力.. 我使用了您的建议,我的表格效果很好^_^。我将不得不使用 VBA 来动态更新记录源 tho..

标签: database ms-access vba


【解决方案1】:

使用@dbmitch 的建议将所有文本框绑定到查询。我在原始查询上使用了 Transform Pivot 来制作必要的列名,将它们匹配并绑定到适当的文本框。如果我想以不同的方式查看它们,我将使用 VBA 更新它们,但到目前为止它可以工作。

【讨论】:

  • 很高兴我能帮上忙。如果我的评论很有用,那么用“upvote”来表明这一点总是很好的。 Stack Overflow 传统的一部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多