INSERT INTO с подзапросом и параметрами, не работающими в MS-Access - PullRequest
3 голосов
/ 08 февраля 2012

У меня есть 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 = ?)

В чем разница и почему при использовании параметров происходит вставка, по-видимому, происходит сбой?

Edit:

SampleID - это текстовый тип данных.

1 Ответ

2 голосов
/ 08 февраля 2012

Похоже, что цель этой INSERT - добавить одну строку в FinalValidityCodes со значениями для 5 полей. Однако 4 из этих значений будут предоставлены непосредственно параметрами запроса, а ID / tblReceivedSamplersID будет получен из другого параметра.

Так что я бы попробовал выражение DLookup (), чтобы получить идентификатор (используя параметр для SampleID), и вставить это значение вместе с другими 4 значениями параметра. Вот непроверенное предположение.

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