【问题标题】:INSERT INTO with subquery & parameters not working in MS-Access带有子查询和参数的 INSERT INTO 在 MS-Access 中不起作用
【发布时间】:2012-02-08 17:58:29
【问题描述】:

我有一个 INSERT INTO 可以很好地使用参数作为常量:

INSERT INTO FinalValidityCodes
                      (tblReceivedSamplersID, Substudy, Location, FinalValidityCode, DateTimeProcessed)
SELECT     ID, true, 'I', 0, now()
FROM         tblReceivedSamplers
WHERE     (SampleID = ?)

这将影响 1 行(如预期的那样)

但是,如果我将查询更改为使用参数,它将允许它运行,但不会影响任何行。

INSERT INTO FinalValidityCodes
                      (tblReceivedSamplersID, Substudy, Location, FinalValidityCode, DateTimeProcessed)
SELECT     ID, ?, ?, ?, ?
FROM         tblReceivedSamplers
WHERE     (SampleID = ?)

有什么区别,为什么当我使用参数时,插入似乎会失败?

编辑:

SampleID 是文本数据类型。

【问题讨论】:

  • 也许我误解了语法。我将通过这个例子:decoding.wordpress.com/2008/10/11/…。在他的查询中,INSERT INTO Orders (customer_id, order_date) SELECT id, GETDATE() FROM Customers WHERE username = 'john.smith' GETDATE() 似乎不需要成为 select 语句中的列,而是插入到 orders.order_date 中。
  • 我认为其中一个链接确实有效,但思考它为什么有效是非常重要的。我更喜欢你的方式。值的来源以及它们在查询中的作用更加清晰。

标签: ms-access ms-access-2007


【解决方案1】:

看起来插入的目的是向 FinalValidityCodes 添加一行,其中包含 5 个字段的值。但是,其中 4 个值将由查询参数直接提供,并且 ID/tblReceivedSamplersID 将从另一个参数派生。

所以我会尝试使用 DLookup() 表达式来获取 ID(使用 SampleID 的参数),并将该值与其他 4 个参数值一起插入。这是一个未经检验的猜测。

INSERT INTO FinalValidityCodes (
    tblReceivedSamplersID,
    Substudy,
    Location,
    FinalValidityCode,
    DateTimeProcessed
    )
VALUES (
    DLookup("ID", "tblReceivedSamplers", "SampleID ='" & param1 & "'"),
    param2,
    param3,
    param4,
    param5
    );

【讨论】:

  • 我喜欢这种方法。最终的工作语法与您编写的略有不同,但我对其进行了编辑。
  • 我批准了编辑。谢谢你这样做。我假设 ID 的数字数据类型...哎呀。抱歉,缺少逗号。
  • 是的,没问题。这绝对是正确的方向。谢谢!
猜你喜欢
  • 2016-10-10
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-29
相关资源
最近更新 更多