【发布时间】: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..