使用条件 MS Access 制作序列序列的问题

Problem With Making Sequenced Serial with condition MS Access

大家好,很高兴来到这里。我在 MS Access 中制作带有条件的序列序列时遇到了问题。假设我有许多机器工作 2 个班次。每个班次我都会收到每台机器的停机报告,而同一班次的同一台机器可能有不止一个问题。我的目标是计算这些问题并为其制作一个序列化的序列。例如,我使用 countifs 公式在 Excel 中完成并且工作良好 - 参见图片。 4条件(PoNumber-Shift-MachineNumber-Zdate)

我在 Access 中尝试了我所知道的一切,但卡住了。我试过 Count(IIf()) 但没有得到想要的结果,而实现它的方法是记录集函数,我没有能力这样做。任何帮助感谢大家。

编辑#1:伙计们,我之前尝试过以下方法

SELECT TblDownTime.PONumber, TblDownTime.Zdate, TblDownTime.Shift, TblDownTime.MachineNumber AS MachineNum, Count(TblDownTime.Shift) AS CountOfShift
FROM TblDownTime
GROUP BY TblDownTime.PONumber, TblDownTime.Zdate, TblDownTime.Shift, TblDownTime.MachineNumber
HAVING (((TblDownTime.PONumber)=[Forms]![FrmDownTime]![PONum]) AND ((TblDownTime.Zdate)=[Forms]![FrmDownTime]![Zzdate]) AND ((TblDownTime.Shift)=[Forms]![FrmDownTime]![Shift]) AND ((TblDownTime.MachineNumber)=[Forms]![FrmDownTime]![MachineNumber]));

这是一个查询,它应用了我的条件和 return 每个停机原因的最后一个序列作为表格中的变量 (Sr)。然后在 Me.Serial = Sr+1 形式的 MachineNumber 字段中进行更新。这种方法可以很好地处理一条记录,但是当我尝试粘贴 20 条记录时,它会计算错误,有时会给我重复的记录。所以这不是最好的方法。我需要一种可以同时粘贴多条记录的方法。再次感谢。

编辑 #2 我使用生成的序列号格式化为这样的“Num”&Serial 类似于 Num1,Num2 以用于以下查询

SELECT TblDownTime.PONumber, TblDownTime.Zdate, TblDownTime.Shift, TblDownTime.MachineNumber, 
IIf([SerialFormat]="Num1" And [MachineNumber]=[MachineNumber],[ReasonCode],"") AS Code1, 
IIf([SerialFormat]="Num1" And [MachineNumber]=[MachineNumber],[Reason],"") AS Reason1, 
IIf([SerialFormat]="Num1" And [MachineNumber]=[MachineNumber],[DepartmentResponsible],"") AS Dept1, 
IIf([SerialFormat]="Num1" And [MachineNumber]=[MachineNumber],[StoppedFrom],"") AS From1, 
IIf([SerialFormat]="Num1" And [MachineNumber]=[MachineNumber],[StoppedTo],"") AS To1, 
IIf([SerialFormat]="Num1" And [MachineNumber]=[MachineNumber],[TotalDownTime/Min],"") AS TotalDownTime1
FROM TblDownTime
WHERE (((IIf([SerialFormat]="Num1" And [MachineNumber]=[MachineNumber],[ReasonCode],""))<>""));

我明天会在评论中尝试另一种方式,如果有人帮助我使用直接在 table 上运行的记录集函数,我将不胜感激,我将在我的表单中的 OnClose 事件上使用它。 . 非常感谢

这是一个需要考虑的过程。从最能满足您需求的活动中拨打电话。

Sub MakeNum()
Dim rs As DAO.Recordset, intS As Integer, strG As String
Set rs = CurrentDb.OpenRecordset("SELECT PONumber & MachineNumber & ZDate & Shift AS Grp, ReasonSerial " & _
                 "FROM tblDowntime WHERE ReasonSerial Is Null ORDER BY PONumber, MachineNumber, ZDate, Shift, ID")
strG = rs!grp
While Not rs.EOF
    If strG = rs!grp Then
        intS = intS + 1
        rs.Edit
        rs!ReasonSerial = intS
        rs.Update
        rs.MoveNext
    Else
        intS = 0
        strG = rs!grp
    End If
Wend
End Sub

它只编辑 ReasonSerial 为 Null 的新记录。如果您需要重新计算所有记录的顺序,请在过程开始时包含更新:
CurrentDb.Execute "UPDATE tblDowntime SET ReasonSerial=Null"