使用数据库中的数量生成多条记录[重复]

Posted

技术标签:

【中文标题】使用数据库中的数量生成多条记录[重复]【英文标题】:Generate multiple records using quantity in database [duplicate] 【发布时间】:2018-12-12 23:37:34 【问题描述】:

我有两张桌子

OrderTable: orderID<auto>, productName, qty

ItemTable: itemID<auto>, orderID, productName, location<default "shop">

OrderTable 一对多与ItemTable的关系

我希望能够通过创建订单来生成商品记录。

例如,我在 OrderTable 上键入以下内容

orderID 1, productName paint, qty 3

这将在 ItemTable 上创建三个记录

itemID 1, orderID 1, productName paint, location shop
itemID 2, orderID 1, productName paint, location shop
itemID 3, orderID 1, productName paint, location shop

我尝试过使用内连接repeat record asked on *** 但该解决方案不会产生不同的 itemID,因此无法跟踪库存中的单个项目。

我没有看到任何其他可能的设计。要跟踪每个单独的项目,我必须使用项目级别记录。通过输入订单和数量来自动生成项目感觉很自然。

我正在为这个项目使用 Microsoft Access

【问题讨论】:

“生成记录”是指要INSERT 新记录还是SELECT 现有记录?目前还不清楚您实际上想要实现什么。 如果你的数据库前面有一个接口,你可以使用那个接口从1循环到数量。每个循环将运行 1 个 INSERT,这将增加 itemID。所以数量 == 3,它将运行 3 条 INSERT 语句,每条语句中的信息完全相同。 正如@Nic3500 所说,使用代码在循环结构中运行INSERT sql 操作。 ItemID 是自动编号类型吗?每个订单可以有多种类型的产品吗? @Dai 我想插入新记录。很抱歉造成混乱。 【参考方案1】:

使用代码在循环结构中运行 INSERT sql 操作。这样做的危险是,如果用户不小心多次单击按钮,则可能会创建重复条目 - 如果代码在按钮单击事件中。所以这个代码示例非常简单,不涉及防止重复。棘手的部分实际上是弄清楚将代码放入哪个事件。

确实应该保存产品 ID 而不是描述性名称,并且位置可能相同。

如果ItemID是自动编号类型,它会自动生成。

For x = 1 to Me.tbxQty
    CurrentDb.Execute "INSERT INTO ItemTable(OrderID, ProductID, Location) " & _
                      "VALUES(" & Me!OrderID & "," & Me!ProductID & ",'shop')"
Next

如果您要使用行项目明细表,则产品和数量不应在 OrderTable 中。应该有 OrderDate 和 CustomerID。

【讨论】:

我已经研究了使用 vba 编写循环插入的选项。但是,这种替代设计仅包含一个创建多个项目的表单,并且不将它们保存到基础表中。正如您所说,我完全避免了这种方法,以避免重复创建 我同意仅用于 OrderTable 的 OrderDate 和 CustomerID 是更好的数据库设计。 位置和产品名称用作其对应表的主键。这种设计的唯一原因是因为我发现更容易理解上下文相关的名称而不是 ID(MS 访问中的行号) 我想你已经回答了我的问题。不过,我会等几天,以防出现 sql 解决方案。同时,我将改进我的数据库设计。

以上是关于使用数据库中的数量生成多条记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mySQL replace() 替换多条记录中的字符串?

如果 mysql 数据库中的表中不存在,则更新或插入多条记录

火花数据框将每个ID的多条记录减少到最常见的值[重复]

提取多条记录时从 plsql 脚本生成空 jpg 文件的原因可能是啥

30-4 向表中插入多条记录

很菜的数据库问题,主键的值允许重复吗?外键啥作用?