MS Access 2010员工可用性

时间:2016-07-21 10:27:27

标签: vba access

我为700名现有顾问建立了一个数据库。

我在5个字段的表格中记录了他们的可用性,或者更准确地记录了他们的可用性。

主键,ConsultantID,BusyStart,BusyEnd,BusyType。

我的主窗体选择ConsultantID,并有一个EventDate的文本框。

EventDate使用

= IIf([EventDate]之间[TrainerBusy子表格]。[表格]![BusyStart]和[TrainerBusy子表格]。[表格]![忙碌],“是”,“否”)

但它仅适用于子表单中显示的第一条记录。

我已经尝试过使用vba来浏览子表单中的所有记录,我认为我需要For Each来处理记录,每个“是”的变量+1,然后给出如果该变量> 0,则为“是”或“否”。

我在这里完全是一个兔子洞,还是这个正确的想法?

1 个答案:

答案 0 :(得分:0)

EventDate只是一个日期吗?我假设你有一个事件开始和一个事件结束,你想确保没有重叠。如果您的情况不同,您必须调整代码以解决此问题。

不要尝试读取子表单,而是读取提供子表单的数据。

我的表单有一个ConsultantID组合框,一个EventStart文本框,一个EventEnd文本框,最后一个文本框,显示该顾问的事件是否正常。

我使用EventStart和EventEnd文本框的更改事件来调用另一个更新" status"文本框。

Private Sub tbxEventEnd_AfterUpdate()

    If IsDate(Me.tbxEventStart.Value) And IsDate(Me.tbxEventEnd.Value) Then
        PopulateIsOK
    End If

End Sub

Private Sub tbxEventStart_AfterUpdate()

    If IsDate(Me.tbxEventStart.Value) And IsDate(Me.tbxEventEnd.Value) Then
        PopulateIsOK
    End If

End Sub

Private Sub PopulateIsOK()

    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    Dim aSql(1 To 5) As String

    aSql(1) = "SELECT  SUM(SWITCH ( ( BusyStart < #" & Me.tbxEventStart.Value & "# AND Busyend < #" & Me.tbxEventStart.Value & "#)"
    aSql(2) = "OR ( BusyStart >= #" & Me.tbxEventStart.Value & "# AND BusyStart > #" & Me.tbxEventEnd.Value & "#) , 0, True, 1"
    aSql(3) = ")) As StartCheck"
    aSql(4) = "FROM tblBusy WHERE ConsultantID = " & Me.cbxConsultantID.Value

    Set cn = CurrentProject.Connection
    Set rs = cn.Execute(Join(aSql, Space(1)))

    If rs.Fields(0).Value = 0 Then
        Me.tbxIsEventOK.Value = "Yes"
    Else
        Me.tbxIsEventOK.Value = "No"
    End If

End Sub

记录集对结果求和 - 如果没有冲突则为零,如果存在冲突则为1。如果总和为零,则没有任何记录冲突,并且Yes被写入文本框。

例如,您需要进行更多错误检查,以确保选择了ConsultantID。