我有一个表格(BERTHAGE),用于跟踪船只在港口的位置。
当一艘船从一个位置移动到另一个位置时,我通过一个表格来处理这个移动,这个表格被绑定到一个组合框中。
我使用一个组合框(绑定到一个查询中)给我当前在港口的船只列表。
从那里我选择要移动的船只。
一旦船只被选中,我就使用另一个组合框来选择新的位置。
在那里,我点击 "保存 "按钮,记录就会被保存在相应的表中,而船只现在也被绑定到新的位置。
我遇到的问题是,先前的位置记录仍然存在于同一个表中(BERTHAGE)。
因此,现在我在同一个星期内有两条船的记录,这在开票时就成了一个问题。
我想做的是消除其中一个条目,当然它必须是该船的旧条目former location。
因为每个条目都被分配了一个自动编号(主键),最新的条目,船只从一个位置到另一个位置的移动,将总是有较高的自动编号。
我一直在想办法根据船名在表(BERTHAGE)中找到重复的条目,然后删除有重复船名的旧条目。
似乎唯一的办法就是进行一系列的查询(查找重复,追加),而这样做的结果是每次都要把整个表写得过多。 我试图避免这种情况,并坚持只删除该周发生的任何重复的船只从一个地方移动到另一个地方的目标。
虽然我的脚本编写能力一般,但我不禁认为实现这个目标的最好方法是通过类似于保存按钮中的IF语句。 我希望Access能有类似Excel的.RemoveDuplicates的功能,但到目前为止我还没有找到。
希望大家能给我一些提示。
Private Sub Form_Load()
DoCmd.RunCommand acCmdRecordsGoToLast
End Sub
Private Sub cmd_Clear_Click()
Me.Boat_New_Loc = ""
Me.CrNum.value = ""
Me.CrDockValue.value = ""
Me.CrFloatValue.value = ""
Me.CrOriValue.value = ""
Me.SelectNewLoc.value = ""
Me.cmd_berthed.value = ""
Me.NewFloatValue.value = ""
Me.NewDockValue.value = ""
Me.NewOrieValue.value = ""
End Sub
Private Sub Boat_New_Loc_Change()
Me.CrNum.value = Me.Boat_New_Loc.Column(4)
Me.CrDockValue.value = Me.Boat_New_Loc.Column(5)
Me.CrFloatValue.value = Me.Boat_New_Loc.Column(6)
Me.CrOriValue.value = Me.Boat_New_Loc.Column(7)
End Sub
Private Sub SelectNewLoc_Change()
Me.NewFloatValue.value = Me.SelectNewLoc.Column(1)
Me.NewDockValue.value = Me.SelectNewLoc.Column(2)
Me.NewOrieValue.value = Me.SelectNewLoc.Column(3)
End Sub
Private Sub Save_Code_But_Click()
DoCmd.RunSQL "UPDATE BERTHAGE SET BERTHAGE.LOCATION=False WHERE LOCATION=" & Me!CrNum _
& " AND LOCATION <>" _
& Me!SelectNewLoc & _
" AND BERTHAGE.LOCATION=True;"
DoCmd.Save acForm, "Change_Boat_Location3"
cmd_Clear_Click
End Sub
与其删除记录,我建议在表中设置一个标志,以表明它不是活动的。这意味着,如果需要的话,你可以重新创建历史数据。
在我的例子中,我将假设表中的 Berthage
有一个叫做 ID
字段VesselID,是一个自动编号,一个来自于 Vessel
表,提供了有关船只的信息,也有了。BerthageActive
,这是一个YesNo字段。
如果您能够在保存新信息之前进行更新,那么您可以在 Berthage
表,那么您可以使用。
CurrentDb.Execute "UPDATE Berthage SET BerthageActive=False WHERE VesselID=" & Me!VesselID & " AND BerthageActive=True;"
如果新数据已经存在于 Berthage
表,那么你就可以使用。
CurrentDb.Execute "UPDATE Berthage SET BerthageActive=False WHERE VesselID=" & Me!VesselID & " AND ID<>" & Me!ID & " AND BerthageActive=True;"
谢谢