我找到了复制我想要的记录的方法,但现在我有violation of the Primary Key constraint
。这是我想要做的:
我们生产的产品从我们的机器加工成2000磅袋子并且它给出一个数字,例如26273
我们将这些袋子存放和出售,但我们也可以用50磅和25磅的小袋子出售。
当我们将袋子从2000磅转换为25磅时,产品需要80袋。
只能将40个袋子放在托盘上,使产品编号26273占用两个托盘。
我们遇到的问题是,当我们存储托盘时,我们扫描产品的条形码,然后扫描仓库位置的条形码,每个位置一个托盘,每个托盘只有一个位置。如果我们有两个托盘的数量相同,那么我们就无法将它们存放在仓库中。
为解决这个问题,我的老板说第一个托盘是编号26273B1,第二个托盘是26273B2,这样托盘仍然包含原始编号,但是为了存放它们是不同的。
当产品收到一个号码时,它也会经过多次测试,并且该数据是记录的一部分,因此两个记录仍然需要包含这些测试结果。
当我尝试复制记录并将B2放到数字上时,我得到主键约束ODBC失败。我知道为什么我会收到错误,而且我不知道如何禁止约束以允许重复记录,但是当我们转换为25磅包时,我仍然需要能够创建这条新记录。
所以我的问题是:有没有办法复制一条记录,在复制时轻微更改主键,并且仍然可以在没有Primary Key Constraint error
的情况下保存它?
注意:数据库位于SQL
,界面前端位于 Access 2007 。
答案 0 :(得分:1)
为什么不用PK“26273-00-0000”存放原始的2000袋。 “00-0000”后缀表示原始Bag。
对于每个细分为一个较小的包,“一次性”或增加末尾后缀的序列。您可以使用“00”表示托盘,“0000”表示行李序列编号。
因此,“26273-B1-0001” - 通过“26273-B1-0040”表示进入Pallett的产品ID - 一个 - 前40个袋子。
答案 1 :(得分:0)
我不确定您是如何想要复制记录,即以表格或编程方式复制记录。
请注意,您可以拥有一个基于多于一列的主键,因此如果两列一起是唯一的,那么您将不会违反约束。
答案 2 :(得分:0)
简单地构建所谓的追加查询。您可以提取所有旧的先前值,并将任何列的值替换为您选择的值。
所以,代码+ sql看起来像:
Dim strSql As String
Dim oldPK As String
Dim newPK As String
oldPK = "26273B1"
newPK = "26273B2"
strSql = "insert into tblPallets (PalletNumber, Description, StockNumber)" & _
"select '" & newPK & "', Description, StockNumber" & _
"from tblPallets where PallentNumber = '" & oldPK & "'"
CurrentDb.Execute strSql, dbFailOnError