创建和运行删除查询

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

如果要快速删除大量数据或定期删除 Access 桌面数据库中的一组数据,删除或更新查询可能非常有用,因为通过查询可以指定条件来快速查找和删除数据。 使用查询也可以节省时间,因为您可以重用保存的查询。

注意

删除任何数据或运行删除查询之前,请确保你具备 Access 桌面数据库的备份。

如果你只想删除几个记录,则不需要查询。 只需在数据表视图中打开表,选择要删除的字段 (列) 或记录 (行) ,然后按 Delete。

重要

本文中的信息仅适用于桌面数据库。 不能在 Access Web 应用中使用删除或更新查询。

本文内容

选择查询类型

可以使用更新查询或删除查询从数据库中删除数据。 根据下表中的详细信息选择查询:

查询类型 何时使用 结果
使用删除查询 同时从表或两个相关表中删除) 的整个记录 (行。
注意: 如果记录驻留在一对多关系的“一”端,则可能需要在运行删除查询之前更改关系。 请参阅有关从 相关表中删除数据的部分。
删除查询 删除每个字段中的所有数据,包括使记录唯一的键值
使用更新查询 从表中删除单个字段值。 通过将现有值更新为 null 值 (,即不) 数据,或 (一对双引号的零长度字符串(两者之间没有空格) ),从而简化了删除值。

返回页首

使用查询删除任何数据之前要验证的事项

  • 确保文件不是只读文件:

    1. 右键单击“ 开始”, 然后单击 “打开 Windows 资源管理器”。
    2. 右键单击数据库文件,然后单击 “属性”。
    3. 查看是否选择了只 读 属性。
  • 验证您是否具有从数据库中删除记录所需的权限。 如果不确定,请与系统管理员或数据库设计人员联系。

  • 确保已在数据库中启用内容。 默认情况下,Access 会阻止所有操作查询, (删除、更新和) 表查询,除非首先信任数据库。 有关信任数据库的信息,请参阅“ 停止禁用模式阻止查询”部分。

  • 要求数据库的其他用户关闭使用您要删除的数据的所有表、窗体、查询和报表。 这有助于避免锁定冲突。

  • 在编辑或删除记录之前, 最好创建数据库的备份副本 ,以防要撤销更改。

提示

如果大量用户连接到数据库,则可能需要关闭数据库,然后以 独占 模式重新打开它。

以独占模式打开数据库

  1. 单击 “文件 ”选项卡 >打开。
  2. 浏览并指向以选择数据库,单击 “打开 ”按钮旁边的箭头,然后单击“ 独占打开”。
    在独占模式下打开文件

备份数据库

  1. 单击 “文件 ”选项卡,指向 “另存为”。
  2. 单击 “将数据库另存为”,单击“ 备份数据库”。 Access 将关闭原始文件,创建备份,然后重新打开原始文件。
  3. 单击 另存为并 指定备份副本的名称和位置,然后单击 保存。

注意

如果使用的是只读或在以前版本的 Access 中创建的数据库,则可能会收到一条消息,指出无法创建数据库备份。

要从备份还原,请关闭原始文件并为其重命名,以便备份副本可以使用原始版本的名称。 将原始版本的名称分配给备份副本,然后在 Access 中打开已重命名的备份副本。

使用删除查询

要创建删除查询,请单击 “创建 ”选项卡,在 “查询 ”组中,单击“ 查询设计”。 双击要从中删除记录的每个表,然后单击 “关闭”。

该表在查询设计网格的上半部分显示为窗口。 在字段列表中,双击星号 (*) 将表中的所有字段添加到设计网格。

在删除查询中使用特定条件

重要

使用条件仅返回要删除的记录。 否则,删除查询将删除表中的所有记录。

双击要指定为删除条件的字段,在查询设计器的“条件”行中输入一个条件,然后清除每个条件字段的“显示检查框。

可能想要使用此选项的示例: 假设您要删除客户的所有挂单。 若要仅查找这些记录,请将“客户 ID”和“订单日期”字段添加到查询设计网格,然后输入客户的 ID 号以及该客户的订单无效的日期。

  1. 在 “设计 ”选项卡上,单击 “查看>数据表视图”。
  2. 验证查询是否返回了要删除的记录,然后按 CTRL+S 保存查询。
  3. 若要运行查询,请双击导航窗格中的查询。

返回页首

使用更新查询

注意

不能在 Access Web 应用中使用更新查询选项。

本节介绍如何使用更新查询从表中删除单个字段。 请记住,运行更新查询以删除数据会将现有值更改为 NULL 或零长度字符串, (一对双引号,) 之间没有空格,具体取决于指定的条件。

  1. 单击 “创建 ”选项卡,然后在 “查询 ”组中,单击“ 查询设计”。

  2. 选择包含要删除数据的表 (如果表是相关的,请选择关系) “一侧的表,单击 ”添加“,然后单击 ”关闭“。
    该表在查询设计网格的上半部分显示为窗口。 该窗口列出了选定表中的所有字段。

  3. 双击星号 (*) 将表中的所有字段添加到设计网格。 添加所有表字段使删除查询能够从表中删除整个记录 () 行。
    或者,可以在设计器的“条件”行中为一个或多个字段输入条件,然后清除每个条件字段的“显示”检查框。 有关使用条件的详细信息,请参阅 选择查询的示例条件 表。

    注意

    使用条件可以仅返回要更改的记录。 否则,更新查询将设置为 NULL 您查询中每个字段中的每条记录。

  4. 在“设计”选项卡上的“结果”组中,单击“视图”,然后单击“数据表视图”。

  5. 验证查询是否返回要设置为 NULL 的记录,或 (一对双引号之间没有空格的零长度字符串返回, (“”) 。

  6. 根据需要,重复步骤 3 至 5,更改字段或条件,直到查询仅返回要删除的数据,然后按 CTRL+S 保存查询。

  7. 若要运行查询,请双击导航窗格中的查询。

返回页首

其他信息

如果要从多个相关表中删除数据,则必须为每个关系启用“ 引用完整性 ”和“ 级联删除相关记录 ”选项。 这允许查询从关系的“一”和“多”边的表中删除数据。 准备删除相关数据需要验证以下内容:

  • 确定哪些记录位于关系的“一”侧,哪些记录位于“多”侧。
  • 如果您需要删除关系“一”侧的记录和“多”侧的相关记录,请启用一组称为引用完整性的规则,并启用级联删除。 本节中的步骤介绍了引用完整性以及如何执行这两项任务。
  • 如果只需要删除关系“一”端的记录,请先删除该关系,然后再删除数据。

如果只需要删除关系的“多”侧数据,则可以创建并运行删除查询,而无需更改关系。

若要找出哪些记录位于关系的“一”端和“多端”,请在“ 数据库工具 ”选项卡的“ 关系 ”组中单击“ 关系”。 “ 关系” 选项卡显示数据库中的表和关系。 每个关系都描述为连接字段之间表的直线。

下图显示了典型关系。 数据库中的大多数(如果不是全部)关系都有“一”面和“多”面。 关系图表示带有数字 1 (1) 的“一”边和带有无穷大 (∞) 符号的“多”边。

两个表之间的关系

删除关系“一”侧的记录时,也会删除关系“多”侧的所有相关记录。 但是,当您删除关系“多”侧的记录时,您通常不会删除“一”侧的记录。

此外,Access 还会自动实施一组称为参照完整性的规则。 这些规则确保数据库中的外键包含正确的值。 外键是一列,其值与另一个表的主键列中的值相匹配。

编辑关系

仅当需要删除关系的“一”面和“多面”数据时,才执行以下步骤。

  1. 在“数据库工具”选项卡上的“关系”组中,单击“关系”。

  2. 右键单击 (删除操作中涉及的表的线) 的关系,然后单击快捷菜单上的 “编辑关系” 。

  3. 在“编辑关系”对话框中,确保选中“实施参照完整性”检查框。

  4. 选中级联删除相关记录检查框。

    注意

    在再次禁用此属性之前,删除关系“一”侧的记录将删除关系“多”侧的所有相关记录。

  5. 单击“ 确定”,关闭“ 关系 ”窗格,然后继续执行下一组步骤。

删除关系

  1. 如果尚未打开,请打开“ 关系” 窗格。
  2. 在“数据库工具”选项卡上的“关系”组中,单击“关系”。
    记下关系中涉及的字段,以便在删除数据后还原关系。
  3. 右键单击删除操作中涉及) 表的线 (关系,然后单击快捷菜单上的 “删除 ”。

注意

若要还原关系,请按照前面的步骤打开“ 关系” 窗格,然后将主键字段从 “one” 表拖放到 “many” 表的外键字段上。 将显示“ 编辑关系 ”对话框。 如果旧关系强制实施参照完整性,请选择 “实施参照完整性”,然后单击 “创建”。 否则,只需单击 “创建”。

返回页首

选择查询的示例条件

下表列出了一些示例条件,当你希望确保只删除要删除的数据时,你可以在选择查询中使用这些条件。 其中一些示例使用通配符。

Criteria 作用
> 234 返回所有大于 234 的数字。 若要查找所有小于 234 的数字,请使用 < 234。
>=“卡亨” 返回从 Cajhen 直至字母表末尾的所有记录。
介于 #2/2/2010# 和 #12/1/2010 之间# 返回日期为 2010 年 2 月 2 日至 2010 年 12 月 1 日 (ANSI-89) 。 如果数据库使用 ANSI-92 通配符,请使用单引号 (') 而不是井号 (#) 。 示例:“2/2/2010”和“12/1/2010”之间。
Not "德国" 查找字段的具体内容并不完全等于“德国”的所有记录。此条件将返回包含除了“德国”以外的其他字符的记录,例如“德国(欧元)”或“欧洲(德国)”。
Not "T*" 查找除以 T 开头的记录之外的所有记录。如果数据库使用 ANSI-92 通配符字符集,请使用百分号 (%) ,而不是星号 (*) 。
Not "*t" 查找所有不以 t 结尾的记录。 如果数据库使用的是 ANSI-92 通配符字符集,则使用百分号 (%) 替代星号 (*)。
In(加拿大,英国) 在列表中,查找包含“加拿大”或“英国”的所有记录。
Like "[A-D]*" 在“文本”字段中,查找以字母 A 到 D 开头的所有记录。如果数据库使用 ANSI-92 通配符字符集,请使用百分号 (%) 而不是星号 (*) 。
Like "*ar*" 查找包含字母序列“ar”的所有记录。 如果数据库使用的是 ANSI-92 通配符字符集,则使用百分号 (%) 替代星号 (*)。
Like "Maison Dewe?" 查找满足以下条件的所有记录:以“Maison”开头并包含另一个含有 5 个字母的字符串,且该字符串的前 4 字母是“Dewe”而最后的字母未知。 如果数据库使用 ANSI-92 通配符字符集,请使用下划线 (_) ,而不是问号 (?) 。
#2/2/2010# 查找 2010 年 2 月 2 日的所有记录。 如果数据库使用 ANSI-92 通配符字符集,则请使用单引号而不是井号 ('2/2/2010') 将日期括起来。
< 日期 () - 30 使用 Date 函数返回超过 30 天的所有日期。
Date() 使用 Date 函数返回包含当前日期的所有记录。
Between Date() And DateAdd("M", 3, Date()) 使用 Date 和 DateAdd 函数返回今天和 3 个月前的今天之间的所有记录。
Is Null 返回包含 Null(空或未定义)值的所有记录。
Is Not Null 返回包含非 null) 的任何值 (的所有记录。
"" 返回包含零长度字符串的所有记录。 当需要将值添加到必填字段,但还不知道实际值是什么时,请使用零长度字符串。 例如,某个字段可能需要传真号码,但某些客户可能没有传真机。 在这种情况下,请输入一对双引号,而不是输入数字,而 (“”) ,它们之间没有空格。

返回页首

故障排除提示

为什么会看到这种错误消息,应该如何解决?

如果使用多个表生成删除查询,并且查询的 “唯一记录” 属性设置为“ 否”,则 Access 将显示错误消息;运行查询时 无法从指定的表中删除 。

若要解决此问题,请将查询的“唯一记录”属性设置为“是”。

  1. 在设计视图中打开删除查询。
  2. 如果查询属性表未打开,请按 F4 将其打开。
  3. 单击查询设计器以显示查询属性(而不是字段属性)。
  4. 在查询属性表中,找到“唯一的记录”属性,然后将其设置为“是”。

防止禁用模式阻止查询

默认情况下,如果打开的桌面数据库尚未选择信任或不驻留在受信任的位置,Access 将阻止所有操作查询的运行。

如果尝试运行某动作查询,但貌似无响应,请查看 Access 状态栏中是否显示下列消息:

“此操作或事件已被禁用模式阻止。”

看到该消息时,请执行以下步骤以启用阻止的内容:

  • 在 安全警告 消息栏上,单击 “启用内容”,然后再次运行查询。

返回页首