首页 > 解决方案 > 允许从一个表中删除数据以添加到另一个表

问题描述

我已经多次发布过这张表格和表格,我知道我不应该这样做。我的代码有问题。我需要当 ToGo 达到 0 时,WorkOrders 表上的行移动到 Done WorkOrders 表,然后从 WorkOrders 表中删除。我之前的代码是

Private Sub ItemCode_Dirty(Cancel As Integer)
Dim DB As DAO.Database
Dim rs As DAO.Recordset

Set DB = CurrentDb

Set rs = DB.OpenRecordset("Select ToGo from WorkOrders where ItemCode =" & Me.ItemCode)

With rs
    .Edit
    !ToGo = !ToGo - 1
    .Update
    .Edit
    
End With

End Sub

这只是让我的代码每次扫描减少 1。所以,我添加了其余的代码来切换到另一个表,然后删除,但现在我的 ToGo 根本不会减少。这是我现在使用 if 语句的更新代码。

Private Sub ItemCode_Dirty(Cancel As Integer)
Dim DB As DAO.Database
Dim rs As DAO.Recordset
Dim i As Integer
Dim rsOld As DAO.Recordset
Dim rsNew As DAO.Recordset

Set DB = CurrentDb

Set rs = DB.OpenRecordset("Select ToGo from WorkOrders where ItemCode =" & Me.ItemCode)
Set rsNew = CurrentDb.OpenRecordset("SELECT * FROM WorkOrders")
Set rsOld = CurrentDb.OpenRecordset("Select * from WorkOrders where ItemCode =" & Me.ItemCode)

If ToGo > 0 Then
    With rs
        .Edit
        !ToGo = !ToGo - 1
        .Update
        .Edit
    
    End With
Else
    rsNew.AddNew
    For i = 0 To rsOld.Fields.Count - 1
    rsNew.Fields(i).Value = rsOld.Fields(i).Value
    Next
    rsNew.Update
    DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * FROM WorkOrders WHERE ItemCode= & Me.ItemCode
    DoCmd.SetWarnings True

    rsNew.Close
    rsOld.Close
    Set rsNew = Nothing
    Set rsOld = Nothing
End If

End Sub

有人可以让我知道这是否可能。

标签: vbaif-statementms-access-2016inventory

解决方案


不是在表之间“移动”记录,而是通过在字段中编辑来更改记录状态。您似乎已经有一个指示工作订单“完成”的字段 - ToGo 字段。考虑:

With rs
    If Not .EOF Then
        If !ToGo = 0 Then
           .MoveNext
        End If
        .Edit
        !ToGo = !ToGo - 1
        .Update
    End If
End With

推荐阅读