ms-access - 查询输入必须至少包含一个表或查询

标签 ms-access

我在 access 中有一个查询,该查询应该在插入之前检查该项目是否已存在于数据库中:

INSERT INTO FinalizedPrintedStickers
Values('0000846043-481-9-0',
'48IG - 1F Straight Panel                                                        ',
'481                               ',
'0',
'0',
'',
'210',
'Printed')
 WHERE NOT EXISTS(SELECT [SN] FROM FinalizedPrintedStickers Where SN = '0000846043-481-9-0')

现在,我以前遇到过此错误,但通常是在没有表的情况下发生的,例如,如果您“从测试表中选择*”并键入“选择*”并省略from子句,您会得到相同的错误。但我有一张 table ?也许我的 where notexists 语法是错误的?

enter image description here

编辑:

好的,我已经按照建议添加了一个表“Dual”,并从这个问题粘贴了代码副本:Table-less UNION query in MS Access (Jet/ACE)

尝试添加如图所示的约束给了我这个错误: enter image description here

按“确定”后,它会突出显示“检查”一词

我从来没有真正处理过约束(至少在 Access 方面......)我的语法可能是错误的

编辑2:

使用 ctrl G 命令添加约束

enter image description here

当我按下回车键时...

enter image description here

使用 ADO 添加约束:

enter image description here

当我按下运行键时...

enter image description here

最佳答案

在这种情况下,Dual 表会很有帮助。 Dual 表是一个单行表,当您并不真正需要源表但 SQL 解析器坚持要求时,可以在查询的 FROM 子句中使用它有一个。

某些数据库系统(例如 Oracle)提供 Dual 虚拟表作为“标准设备”,但在 Access 中我们需要创建自己的虚拟表。有关该过程的精彩描述,请查看 HansUp 的答案 here .

因此,一旦您的[双]表就位,即,

id
--
 1

...然后您可以使用此查询执行 INSERT(或不执行...):

INSERT INTO FinalizedPrintedStickers
    (
        SN,
        Field2
    )
    SELECT 
        "0000846043-481-9-0" AS SN,
        "48IG - 1F Straight Panel" AS Field2
    FROM Dual
    WHERE DCount("SN","FinalizedPrintedStickers","SN=""0000846043-481-9-0""")=0

关于ms-access - 查询输入必须至少包含一个表或查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734142/

相关文章:

java - 从 .accdb 文件获取数据

vba - 如何调查和解决(明显的)Access 数据库损坏?

ms-access - MS Access 2007 弹出式表单拒绝在设计模式下显示/无法 Access (但出现在表单列表中)

ms-access - MS Access 中表单/报告事件的顺序是什么?

sql-server - 配置 Access 报表以使用 SQL Server 存储过程作为其记录源

mysql - 对聚合查询执行外汇计算的子查询

html - RegExp 将一个 html 标签替换为另一个,但有一些异常(exception)

java - 在 Talend 中 Access 编码 cp1250 的数据库

excel - 同一台电脑上的 32 位和 64 位 Office - MS Access 数据库驱动程序出现问题

database - VS 2017 - M Access 2016 中出现“无法检索表或 View 的架构信息”错误