Так что я новичок в Ms Access и VBA. Я пытаюсь создать шаблон календаря посещаемости, где
Я получил все необходимые запросы для всех требуемых данных, но я просто не могу отобразить их так, как я хочу
Я использовал набор записей DAO для извлечения данных и прочего. Я искал в Интернете повсюду, но не могу найти и ответить, поэтому вот и я.
Проблема:
https://i.stack.imgur.com/TLeFJ.png
PS. Я использовал шаблон это как основу для кодирования 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 Мне нужно только одно текстовое поле, и оно уже есть .. Я. [EmployeeID] - это текстовое поле, связанное с идентификатором сотрудника, но, как вы можете видеть, все последующие записи по-прежнему используют данные первого текстового поля ... Возможно, я что-то упустил в петля..
@dbmitch Спасибо за понимание .. Я воспользовался вашим предложением, и моя форма работает отлично ^ _ ^. Мне придется использовать VBA для динамического обновления источника записи, хотя ..

Использовал предложение @dbmitch для привязки всех текстовых полей к запросу. Я использовал Transform Pivot в исходном запросе, чтобы создать необходимые имена столбцов, сопоставить их и привязать к соответствующим текстовым полям. Я буду использовать VBA для их обновления, если хочу посмотреть на это по-другому, но пока это работает.
Рад, что смог помочь. Если мой комментарий был полезен, всегда приятно отметить это «голосом за». Часть традиции Stack Overflow
ваши текстовые поля должны быть привязаны к полю в вашем запросе - все они