0

我找到了复制我想要的记录的方法,但现在我有一个violation of the Primary Key constraint. 这是我正在尝试做的事情:

我们生产的产品是我们加工成 2000 磅袋子的产品,它给出了一个数字,例如 26273。

我们用这些袋子储存和出售它,但我们也可以用更小的 50 磅和 25 磅袋子出售它。

当我们将袋子从 2000 磅转换为 25 磅时,产品会占用 80 袋。

一个托盘上只能放 40 个袋子,使得产品编号 26273 占用两个托盘。

我们遇到的问题是,当我们存储托盘时,我们扫描产品的条形码,然后扫描仓库位置的条形码,每个位置一个托盘,每个托盘只有一个位置。如果我们有两个相同编号的托盘,我们将无法将它们存放在仓库中。

为了解决这个问题,我的老板将第一个托盘编号为 26273B1,第二个托盘编号为 26273B2,以便托盘仍然包含原始编号,但为了存储它们略有不同。

当产品收到一个编号时,它还会经过多次测试,并且该数据是记录的一部分,因此这两个记录仍然需要包含这些测试结果。

当我尝试复制记录并将 B2 放在数字上时,我得到Primary Key Constraint ODBC Failure。我知道为什么会出现错误,并且我不知道如何禁用约束以允许重复记录,但是当我们转换为 25lbs 袋时,我仍然需要能够创建这个新记录。

所以我的问题是:有什么方法可以复制记录,在复制时稍微更改主键,并且仍然能够在不Primary Key Constraint error发生的情况下保存它?

注意:数据库SQL与接口前端在Access 2007中。

4

3 回答 3

1

为什么不将原始的 2000 包与 PK “26273-00-0000”一起存放。那个“00-0000”后缀表示原来的包。

对于每个细分到一个较小的包,“一个向上”或递增末尾后缀的序列。您可以将“00”用于托盘,将“0000”用于袋序号。

因此,“26273-B1-0001” - 到“26273-B1-0040”表示进入 Pallett 的产品 ID - 一个 - 前 40 个袋子。

于 2009-06-30T14:21:06.890 回答
0

我不确定您希望如何以表格或以编程方式复制记录。

请注意,您可以拥有基于多于 1 列的主键,因此如果 2 列一起是唯一的,那么您将不会违反约束。

于 2009-06-30T13:28:58.977 回答
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
于 2009-06-30T13:29:52.423 回答