Я разработал базу данных доступа для регистрации заданий на протяжении всего производственного процесса.У каждой записи есть порядок, машина, время начала, время окончания и другие характеристики работы.Когда заказ регистрируется, он сохраняется в базе данных вместе с именем машины, временем запуска и состоянием задания (запущен или находится в режиме ожидания).Когда заказ выполнен, запись ищется с использованием набора записей, и «время окончания» сохраняется.Если машина не используется, например, между сменами, машина должна иметь статус «бездействия».
Цель OpenRecMassUpdate - добавить «время окончания» ко всем неполным записям (те, у которых есть заказ)., время начала, но без времени окончания).Этот код используется в конце смены, поэтому все записи можно закрыть одним щелчком мыши.
После выполнения этой подпрограммы машины, которые были назначены заказу, теперь не имеют статуса.В результате мне потребовалась еще одна подпрограмма для добавления «незанятых» состояний на все эти машины.Это цель MassIdleUpdate.Он создает незанятую запись для каждой машины, которая ранее использовалась, и статус закрывается с помощью OpenRecMassUpdate.
Проблема, с которой я сталкиваюсь, заключается в том, что MassIdleUpdate создает несколько записей в случайное время.Когда я запустил анализ в базе данных, я нашел несколько записей, которые были созданы 3, 4 или более раз.
Option Compare Database
Dim dbsn As DAO.Database
Dim rstn As DAO.Recordset
Dim SQLqueryn As String
Dim recordcount As Integer
Dim tempstat As String
Dim stat1 As Integer
Public Sub OpenRecMassUpdate()
On Error GoTo ErrorHandler
recordcount = 1
tempstat = "Idle"
stat1 = 0
Set dbsn = CurrentDb
SQLqueryn = "SELECT * FROM kettleLog WHERE KettleStatus <> """ & tempstat & _
""" And KettleLogic = " & stat1
Set rstn = dbsn.OpenRecordset(SQLqueryn)
With rstn
If Not .BOF And Not .EOF Then
.MoveLast
.MoveFirst
While (Not .EOF)
.Edit
.Fields("KettleFinish") = Now()
.Fields("KettleLogic") = -1
.Fields("EndOfShift") = 1
.Update
.MoveNext
recordcount = recordcount + 1
Wend
MsgBox recordcount - 1 & " records were updated as a result of the end of the shift"
recordcount = 1
Else
End If
.Close
End With
dbsn.Close
ExitSub:
Set dbsn = Nothing
Set rstn = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
Resume ExitSub
End Sub
Public Sub MassIdleUpdate()
Dim tempKettle As String
On Error GoTo ErrorHandler
Set dbsn = CurrentDb
SQLqueryn = "SELECT * FROM kettleLog WHERE EndOfShift = 1"
Set rstn = dbsn.OpenRecordset(SQLqueryn)
With rstn
If Not .BOF And Not .EOF Then
.MoveLast
.MoveFirst
For i = 1 To FindRecordCount(SQLqueryn)
tempKettle = .Fields("Kettle")
.Edit
.Fields("EndOfShift") = 3
.Update
.AddNew
.Fields("Kettle") = tempKettle
.Fields("KettleStatus") = "Idle"
.Fields("WorkOrder") = 0
.Fields("KettleStart") = Now()
.Fields("KettleLogic") = 0
.Fields("EndOfShift") = 2
.Update
.MoveNext
Next
End If
.Close
End With
tempKetlle = ""
dbsn.Close
i = 1
ExitSub:
Set dbsn = Nothing
Set rstn = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
Resume ExitSub
End Sub