SQL в Access 2003: INSERT INTO и несколько запросов SELECT - PullRequest
0 голосов
/ 13 сентября 2018

Я использую Access 2003 (вынужден сделать это из-за ретро-совместимости), чтобы модифицировать 10-летний проект, не сделанный мной.Я сталкиваюсь с ошибками при выполнении этого запроса:

INSERT INTO ClientiContratto ( ID, CLIENTE, DATA, PERIODO, IMPORTO, FATTURATO )
SELECT [Forms]![InserisciContratto]![Cliente] AS Espr1, (SELECT Nome from TAnagrafica WHERE TAnagrafica.IDAnagr = [Forms]![InserisciContratto]![Cliente]) AS Espr2, [Forms]![InserisciContratto]![Data] AS Espr3, [Forms]![InserisciContratto]![Periodo] AS Espr4, [Forms]![InserisciContratto]![Importo] AS Espr5, False AS Espr6;

, который возвращает ошибки из-за

 (SELECT Nome from TAnagrafica WHERE TAnagrafica.IDAnagr = [Forms]![InserisciContratto]![Cliente]) AS Espr2

Если я выполняю этот запрос автономно, он работает как чудо, но когда дело доходит до вставкизапрос в оператор INSERT INTO ... SELECT возвращает (переведено с итальянского):

Ошибка времени выполнения '3000': зарезервированная ошибка (-3025): для этой ошибки нет сообщений.

Цель состоит в том, чтобы вставить в таблицу некоторые новые значения, основанные на значениях, найденных в активной форме, и часть кода, которая не работает, должна искать в таблице значение, связанное с [InserisciContratto]! [Клиент] фактическое значение.

Что я делаю не так?Может быть, это потому, что я не могу выполнить подзапрос SELECT в предыдущем запросе SELECT?

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете обойти проблему, используя DLookUp вместо подзапроса:

DLookUp("Nome", "TAnagrafica", "TAnagrafica.IDAnagr = [Forms]![InserisciContratto]![Cliente]")

Обратите внимание, что вы можете использовать DLookUp в элементе управления формы или в запросе. Оба действительны. В запросе это выглядело бы так:

INSERT INTO ClientiContratto ( ID, CLIENTE, DATA, PERIODO, IMPORTO, FATTURATO )
SELECT [Forms]![InserisciContratto]![Cliente] AS Espr1, DLookUp("Nome", "TAnagrafica", "TAnagrafica.IDAnagr = [Forms]![InserisciContratto]![Cliente]") AS Espr2, [Forms]![InserisciContratto]![Data] AS Espr3, [Forms]![InserisciContratto]![Periodo] AS Espr4, [Forms]![InserisciContratto]![Importo] AS Espr5, False AS Espr6;

Альтернативный, общий источник ошибок такого рода заключается в том, что Access ведет себя странно при использовании подзапросов, а не при запросах из реальной таблицы. Вы можете легко обойти это, используя подзапрос в качестве основного запроса. Обратите внимание, что для этого требуется, чтобы подзапрос всегда возвращал результат, иначе строка не будет вставлена:

INSERT INTO ClientiContratto ( ID, CLIENTE, DATA, PERIODO, IMPORTO, FATTURATO )
SELECT [Forms]![InserisciContratto]![Cliente] AS Espr1, Nome AS Espr2, [Forms]![InserisciContratto]![Data] AS Espr3, [Forms]![InserisciContratto]![Periodo] AS Espr4, [Forms]![InserisciContratto]![Importo] AS Espr5, False AS Espr6
FROM TAnagrafica
WHERE TAnagrafica.IDAnagr = [Forms]![InserisciContratto]![Cliente]
...