复制没有主键约束错误的记录

时间:2009-06-30 13:05:41

标签: sql ms-access-2007 constraints

我找到了复制我想要的记录的方法,但现在我有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

3 个答案:

答案 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