bugfix> database > 投稿

だから、私はMs AccessとVBAにかなり慣れていない。私は出席カレンダーテンプレートを作成しようとしています

  • 従業員の出勤に基づいて出勤コードを計算します
  • 従業員番号がかなり大きいため、そのコードを連続したフォームに表示する

必要なすべてのデータに必要なすべてのクエリを取得しましたが、希望する方法で表示できないようです

DAOレコードセットを使用して、データなどを取得しました。私はインターネットの高低を検索しましたが、見つけて答えられないようですので、ここにいます。

問題:

  • 2番目以降のレコードは、独自のレコードではなく最初のレコードのID番号を使用します。 [名前]テキストボックスは既にクエリにバインドされています。

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

回答 1 件
  • @dbmitchの提案を使用して、すべてのテキストボックスをクエリにバインドしました。元のクエリでTransform Pivotを使用して、必要な列名を作成し、それらを適切なテキストボックスに一致させ、バインドしました。別の方法で表示したい場合は、VBAを使用して更新しますが、これまでのところは機能します。

あなたの答え