SQL 在 Access 2003 中:INSERT INTO 和多个 SELECT 查询

SQL in Access 2003: INSERT INTO and multiple SELECT queries

我正在使用 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;

returns 个错误是由于

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

如果我单独执行这个查询,它就像一个魅力,但当涉及到将查询插入 INSERT INTO...SELECT 语句时,它 returns(翻译自意大利语) :

Runtime error '3000': Reserved error (-3025): there are no messages for this error.

目的是根据在活动表单中找到的值在 table 中插入一些新值,而不起作用的代码部分应该搜索 table 一个值链接到 [InserisciContratto]![Cliente] 实际值。

我做错了什么?也许是因为我无法在之前的 SELECT 查询中执行 SELECT 子查询?

如有任何帮助,我们将不胜感激。

您可以使用 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 在使用子查询而不是从真实 table 查询时表现得很挑剔。您可以通过使用子查询作为主查询轻松解决这个问题。请注意,这确实需要子查询始终 return 结果,否则不会插入任何行:

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]