【问题标题】:Create new lines in a database based on a condition根据条件在数据库中创建新行
【发布时间】:2021-06-18 20:37:59
【问题描述】:

我有一个问题,我似乎找不到答案(我是新手,显然我不知道如何正确创建附加查询......)

我有一个表格“篮子”,我每周在表格上创建新行。 每次我创建一个新的“购物篮”时,我都希望我的“跟随购物篮”表增加一个新行,按照(我的表“客户”表的)适当条件为每个客户附加。

所以我需要一个查询(我认为),为每个条件与“篮子”匹配的“客户”从“关注篮子”中的“篮子”复制数据。 你明白我的意思吗?

示例: 我为第 S1 周创建篮子“P 型” 它为每个订阅篮子“Type P”的客户在“关注篮子”中创建第 S1 周篮子。 在“跟随篮子”中,我可以说他们是否已经交付并支付了篮子。

感谢您的帮助...

这是我询问的数据库结构

盘子:篮子
suivi_paiement_panier : 关注购物篮
参与者:客户

I also have a "semainier" field (weeks) because we create specific baskets each week and all the follow up is made like that (S1, S2, ... = Week1, week2...)

【问题讨论】:

  • 如果这纯粹是一个 ms-access 问题,请删除 mysql 标签。
  • 听起来您想要“批量创建”记录。您是否使用自动编号 PK 进行篮子记录?因此,“批量创建”的技巧是首先提交新的购物篮记录并获取新创建的 PK 以用于追加查询在“跟随购物篮”表中创建记录。编辑问题以显示表格结构。
  • 是的,这正是我想要做的!但这有点棘手,因为我在中间有另一个数据库,“semainier”那个......而且到目前为止我尝试的附加查询都没有工作......
  • 是的,需要先创建其他记录,这样才能获得“semainier”键,用于与客户的联结表。调整我回答中建议的 SQL。
  • 我刚刚注意到一个问题。 type_de_panier 是一个多值字段。要使建议的查询起作用,需要 Particuliers 中的单值文本字段。不能使用 Paniers 中的 Type_Panier 字段。要过滤的字段必须在 Particuliers 表中。

标签: ms-access ms-access-2010


【解决方案1】:

您希望根据新数据和现有数据“批量创建”一组新记录。 INSERT SELECT SQL 语句通常用于完成此操作。

多值字段 Type_de_panier 复杂但易于管理。

另一个复杂因素是引用表单控件来提取标准参数,因为数据输入中可能涉及表单/子表单排列,并且参数来自不同的表单。如果您将 Samainier 作为主(父)表单,将 Panier 作为子表单,并且代码位于 Panier 表单后面,请考虑:

DoCmd.RunCommand acCmdSaveRecord
CurrentDb.Execute "INSERT INTO Suivi_paiement_paniers(IDDate, IDT1) " & _
    "SELECT " & Me.Parent!Semainier_IDDate & " AS SID, IDT1 FROM Particuliers " & _
    "WHERE Fréquence='" & Me.Parent!Paire_Impaire & "' AND Actif=True " & _
    "AND IDT1 IN " & _
        "(SELECT IDT1 FROM Particuliers WHERE Type_de_panier.Value='" & Me!Type_Panier & "')"

如果您的表单排列不同,请进行调整。

现在必须弄清楚要将代码放入哪个事件。如果您想依靠用户来启动此操作,请使用按钮 Click。

【讨论】:

  • 我的条件实际上也比其他表中的条件多...我该怎么做?我的客户中的“semainier”(配对/受损)中的频率也是如此,我还想仅为“活跃”客户创建批次。所以我有3个参数。频率,篮子,活跃。 “semainier”中的频率,“paniers”中的购物篮和仅活跃客户。
  • 我真的很抱歉,我不理解任何陈述,所以我不确定我是否按照我应该做的。我看不到要在“ID”和“AS BID”中输入什么... Private Sub Command20_Click() DoCmd.RunCommand acCmdSaveRecord CurrentDb.Execute "INSERT INTO Suivi_paiement_paniers(IDDate, IDT1) SELECT " & Me!ID & " AS BID, " _ "IDT1 FROM Particuliers WHERE Type_Panier='" & Me!Type_Panier & "'" End Sub
  • Me!ID 将是表单中的 IDDate 值。假设代码在 Semainier 形式后面。可以为活跃客户添加更多 WHERE 条件,同样,不知道字段名称:AND Active=True
  • DoCmd.RunCommand acCmdSaveRecord CurrentDb.Execute "INSERT INTO Suivi_paiement_paniers(IDDate, IDT1) SELECT " & Me!IDDate & " AS BID," _ "IDT1 FROM Particuliers WHERE Type_Panier='" & Me!Type_Panier & "' AND Fréquence='" & Me!Paire_Impaire & "' AND Actif=True" 什么是“AS BID”?它说“预期的语句结束”所以我想我没有足够的“”和“AS BID”的结尾(这是什么意思?)下划线_在代码中不起作用。我是个新手,我很抱歉..
  • 下划线是续行符。 SQL 代码分两行输入。我错过了下划线前面的 & 字符。已更正。 'BID' 只是一个别名字段名,随便用吧。
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多