Microsoft Office Online
登录我的 Office Online (这是什么?) | 登录

 
 
Microsoft Office Access
搜索
搜索
 
检查更新:(c) Microsoft
Office 下载
 
 
 
警告: 您在使用不受支持的 Web 浏览器查看此页。使用 Microsoft Internet Explorer 6.0 或更高版本、Firefox 1.5 或 Netscape Navigator 8.0 或更高版本查看此网站效果最好。 了解有关支持的浏览器的详细信息。

打印版打印版 书签和共享共享
从 Access 数据库中删除一条或多条记录
 
适用于
Microsoft Office Access 2003

删除不需要的数据是一种很好的维护管理策略,数据库的所有用户都应当采取这种策略。去除过时的或错误的数据可使数据库更易于使用和维护。

数据变得多余的原因有以下几种:

  • 实际情况发生变化。例如:某种产品停产或某一特定地区的业务被取消。
  • 用户操作错误。例如:重复输入某个客户的数据或创建了多个发票数据输入窗体。
  • 数据过期。例如:在每一季度的开始,将上一季度的数据移到存档数据库中。

数据库的设计及上述这些因素决定了哪些数据需要从数据库中删除。删除过程有简有繁,可能是简单地删除一个字段的内容,也可能要删除多个表。

重要说明  如果您打算执行更多操作,而不仅仅是清空一个字段,请先熟悉数据库的设计。添加或编辑一条记录通常不会影响相关记录,但删除一条记录则需要编辑或删除相关记录。例如,如果决定从罗斯文商贸示例数据库的“类别”表中删除一个“类别”记录,则应当从多个相关表删除记录,例如从“产品”表(该类别下的所有产品)或者“订单明细”表(与该类别下的产品对应的订单部分)等。

如果数据库不是您设计或创建的,请先花些时间了解它的设计。您应当熟悉数据库中表的结构、表与表之间的关系以及依赖于这些表的各种对象;这样,在删除一条记录或一个对象时,您就会对它所带来的数据库范围的影响做到心中有数。

本主题描述从数据库中永久删除一条或多条记录的各种方法。如果打算临时从视图中删除记录,可应用一个筛选器,将那些不感兴趣的记录隐藏起来。有关筛选器的详细信息,请参阅主题筛选器:限制视图或报表中的记录数量

删除记录所带来的影响

在删除一条记录时,需要记住的最重要一点是,这可能导致相关表中的几条记录被删除。您或许想知道为什么删除一条记录通常会影响相关记录。答案很简单,但并非显而易见 — 数据库将相关信息存储在多个表中,因此,当从一个表中删除一条重要信息时,就可能需要修改或删除存储在其他表中的相关信息。

下面的例子可帮助您理解为什么应当删除相关记录。假定存在这样一种情形:您需要在 Northwind.mdb 示例数据库中添加一条记录。公司获得了一个名叫“全球进口商”的新客户,您需要在“客户”表中为该客户添加一条新记录。

“客户”表

要查看相关表是否会受该新记录的影响,须确定与“客户”表相关的表。右键单击“数据库”窗口的背景,单击“关系”以显示“关系”窗口。

与“客户”表相关的表

“客户”表与“订单”表相关,但是除非该客户下订单,否则无需在“订单”表中添加任何记录。因此,在一个表中添加一条记录并不一定要在相关表中添加数据。

假定后来有个客户停业了。现在您需要删除该客户的记录。此外,还要取消其待处理订单。假定您不需要用来跟踪该客户已结束的订单的数据。有时,您也许不想删除过去的订单;但为了简单起见,这里假定您需要删除旧订单。删除该客户意味着从“订单”表中删除一些相关记录。下图显示了必须随该客户记录一起删除的“订单”记录。

必须删除的订单记录

只删除相关订单记录并不表示任务已经完成。接下来,还需要评估删除订单记录对与“订单”表相关的表的影响。返回到“关系”窗口(右键单击“数据库”窗口的背景,单击“关系”以显示该窗口),确定与“订单”表相关的表。

与“订单”表相关的表

“客户”、“运货商”、“订单明细”和“雇员”表全都与“订单”表相关。仅仅删除一个订单决不会涉及删除相应客户记录、运货商记录或雇员记录。另一方面,如果一个订单不再存在,则应删除该订单的详细信息。因此,从“订单”表删除一条订单记录时,还要确保删除“订单明细”表中相应的订单详细记录。

下图中,每个子数据表都显示对应每个需要删除的订单记录的订单详细记录。

必须与订单和客户记录一起删除的订单详细记录

总之,删除单条客户记录就必须删除“订单”和“订单明细”表中的多条记录。同时,删除“订单”表的记录不需要删除“运货商”和“雇员”表中的任何记录。

下面演示在删除一条客户记录时,如何对“订单”和“订单明细”表中的记录启用自动删除功能。

在“关系”窗口中,单击“客户”表与“订单”表之间的连线的中段以打开“编辑关系”窗口。

“编辑关系”对话框

这两个表通过它们共有的“客户ID”字段相关联。“实施参照完整性”“级联更新相关字段”复选框已选中,但“级联删除相关记录”复选框未选中。

第一个复选框实施参照完整性。参照完整性是一组规则,用来确保数据库与实际情况保持同步,具体说明如下:

  • 规则 1:不能在相关表的外键字段中输入主表的主键中不存在的值。但是,可以在外键中输入一个空值,用来指定记录之间是不相关的。例如,不能将订单指定给不存在的客户,但是可以不将订单指定给任何销售人员 — 通过在“雇员”字段中输入空值。
  • 规则 2:如果相关表中存在主表记录的匹配记录,则不能从主表中删除该条记录。例如,如果“订单”表中存在指定给某个雇员的订单,则不能从“雇员”表中删除该雇员记录。
  • 规则 3:如果主表中的主键值具有相关记录,则不能更改该主键值。例如,如果“订单”表中有某个客户下的订单,则不能更改“客户”表中该客户的 ID。

每次在数据库中添加、编辑或删除数据时,都会实施这些规则。如果操作违反规则,Access 就会显示一条消息并取消操作。例如,尝试从“客户”表中删除“全球进口商”客户记录时,就会出现这种情况。“客户”表与“订单”表之间的关系实施参照完整性,如果您尝试从“客户”表中删除一条记录,就会出现以下消息:

不能删除“客户”记录的消息

满足以下条件时,可以在关系中实施参照完整性:

  • 主表(“客户”表)中的匹配字段(这里是“客户ID”)为主键或具有唯一索引。
  • 相关字段(客户ID)具有相同数据类型。

     注释   此规则有两个例外。一个“自动编号”字段可以与一个“字段大小”属性设置为“长整型”的“数字”字段相关,并且一个“字段大小”属性设置为“同步复制 ID”的“自动编号”字段可以与一个“字段大小”属性设置为“同步复制 ID”的“数字”字段相关。

  • 两个表属于同一个 Access 数据库。

     注释   如果它们是链接表,则必须为 Access 格式。必须打开存储它们的数据库来设置参照完整性。数据库中其他格式的链接表不能实施参照完整性。

在两个表的关系中启用参照完整性时,还可以选择自动更新或自动删除这些表中的记录。如果这两个选项都启用,则必须注意,这将允许执行参照完整性规则通常会阻止的删除和更新操作。例如,当“级联删除相关记录”设置未被选中时,只要“订单”表中存在引用客户 ID 的记录,Access 就不允许删除该客户记录。选中“级联删除相关记录”复选框将更改这一行为。选中该复选框后再删除客户记录时,Access 将自动删除相关记录,而不是显示错误消息。

如果在定义表之间的关系时选中“级联更新相关字段”复选框,则每次更改主表中一条记录的主键时,Access 都会自动将所有相关记录的主键更新为新值。

如果在定义表之间的关系时选中了“级联删除相关记录”复选框,则每次删除主表中的记录时,Access 都会自动删除相关表中的相关记录。例如,如果从“客户”表中删除一条客户记录,则该客户的所有订单都会自动从“订单”表中删除。如果“订单”表和“订单明细”表之间的关系选中了该复选框,而您删除了该客户记录,这将自动删除“订单”和“订单明细”表中的记录。

有些情况下,必须实施参照完整性规则,但不得删除相关记录。例如,删除“雇员”表上的一条记录不需要删除由该雇员处理的订单,因此,在“雇员”表和“订单”表之间的关系中,选中了“实施参照完整性”复选框,但未选中“级联删除相关记录”复选框。但是在尝试删除该雇员记录时,Access 会显示一条错误消息并取消该操作。这种情况下,需要打开“订单”表,找到引用该雇员 ID 的记录,然后编辑“雇员ID”字段,以便用另一个雇员的 ID 替代此 ID。这一点很重要,它可有效避免将订单指定给已离开公司的雇员。

编辑“客户”数据表的“雇员”列以消除对雇员的所有引用

替换了对要删除其记录的雇员的 ID 的所有引用后,即可从“雇员”表中删除该记录。

返回页首 返回页首

删除任何记录之前

在从数据库中删除任何记录之前,请执行下列操作:

  • 确保数据库不是只读的。要查看数据库的状态,请在 Microsoft Windows 资源管理器中,右键单击数据库文件 (.mdb),然后选择“属性”。在“属性”对话框中,查看“只读”复选框。如果该复选框为选中状态,则将其清除。
  • 确认是否有权删除数据库中的记录。
  • 请数据库的所有其他用户关闭您要处理的对象。这有助于避免锁定冲突。

     提示   要获得对数据库的独占访问权,请打开数据库。在“工具”菜单上,单击“选项”。在“高级”选项卡上的“默认打开模式”下,单击“独占”。但是请记住,除非确实有必要,否则不要以这种方式打开数据库。

  • 在开始编辑或删除记录之前,请将数据库备份。虽然有些删除操作可以还原,但这样可以做到有备无患;如果需要,还可以随时返回到原始副本。

    要备份数据库,请在“文件”菜单上,单击“备份数据库”。在“备份数据库另存为”对话框中,指定备份副本的名称和位置,然后单击“保存”。Access 将关闭原始文件,创建一个备份,然后重新打开原始文件。要还原到某个备份,请关闭并重命名原始文件,以便备份副本可以使用原始版本的名称。将原始版本的名称指定给备份副本,然后在 Access 中打开它。

  • 查看删除记录所带来的影响。确定要从中删除记录的表所涉及的关系,然后检查每一个关系的“实施参照完整性”“级联删除相关记录”设置。
    • 若要实施参照完整性规则 ,且关系满足实施参照完整性规则的条件 ,请选中“实施参照完整性”复选框。通过选中该复选方框,您可以选择自动删除相关记录。
    • 如果要自动删除相关记录,请选中“级联删除相关记录”复选框。

       注释   如果为某个相关表选中了该复选框,则应查看该相关表所属的所有关系的设置。

    • 如果不想删除相关记录,则编辑相关记录,使其不引用待删除记录的 ID。
  • 如果要从中删除记录的表是一个链接表,则确保它支持删除记录,因为并非所有链接表都允许删除记录。例如,可以从链接到某个 Access 数据库的表中删除记录,但是如果尝试从链接到 Microsoft Office Excel 2003 工作表的表中删除记录,就会出现消息“此 ISAM 不支持删除链接表中的数据”。这时,最好打开源文件(这里为 Excel 工作表),并删除不需要的数据。

返回页首 返回页首

分步信息

可以根据具体情况采取多种不同方式删除记录。例如,可以通过在窗体中选择一条记录来删除该记录,也可以创建一个查询,通过一次操作来删除满足特定条件的上百条记录。

您想做什么?

在数据表、窗体或页面视图中浏览时,选择并删除一条或多条记录

删除表中的所有记录(但不删除表本身)

删除表及其记录

通过创建删除查询来删除满足一组条件的记录

删除重复记录(原始记录和重复记录可能在一个表中,也可能在不同表中)

删除在另一个表中无匹配记录的记录

将记录移到存档表或数据库中

返回页首 返回页首

在数据表、窗体或页面视图中浏览时,选择并删除一条或多条记录

  1. 打开包含要在数据表视图中删除的记录的表。例如,打开“客户”表,并删除客户“全球进口商”的记录。

     注释   可以使用查询、窗体或数据访问页来删除基础表中的一些记录。但是必须确保对象支持在数据表、窗体或页面视图中进行删除。

    显示查看查询、窗体或页面以确保其支持删除

    该查询在数据表视图中不得处于只读状态。有些查询(如联合查询)在数据表视图中处于只读状态。不能使用这样的查询删除记录。

    要查看一个窗体,请在设计视图中打开该窗体。确保该窗体的“允许删除”属性设置为“是”。另外,该窗体的“记录选择器”属性必须设置为“是”,或者该窗体必须提供一个自定义按钮以便选择或删除记录。

    要查看一个页面,请在设计视图中打开该页面。确保包含该记录的组级的“允许删除”属性设置为“True”。另外,相应组级的记录导航部分必须包括“删除”按钮,或者提供一个自定义按钮以便删除记录。


  2. 要在数据表视图或窗体视图中删除一条记录,请通过单击左边距旁的灰方块(记录选择器)选择该记录。然后按 Delete。

    要在数据表视图或连续窗体中删除相邻记录,请单击要删除的第一条记录,然后按住 Shift,同时单击最后一条记录的灰方块(记录选择器)。这将选择一块记录。然后按 Delete。

    要在页面视图中删除一条记录,单击作为该记录一部分的一个字段,然后在相应记录导航部分中单击“删除”按钮。

  3. 根据表的关系及其定义方式,将出现下列警告之一:
    • 如果涉及“客户”表的所有关系(客户-订单)、其相关表的关系(订单-订单明细)以及截至关系链中最后一个表的关系的定义方式允许删除所有相关记录(每个关系都选中“级联删除相关记录”复选框),将出现以下消息:

      提示确认消息

      单击“是”确认。如果不确定是否要删除相关记录,则单击“否”并参阅删除记录所带来的影响一节。

    • 如果关系链中相关表之一不允许删除相关记录,则出现以下消息:

      因相关表不允许级联删除而导致删除操作失败的消息

      如果“订单-订单明细”关系不允许级联删除,则出现此消息。要解决此问题,请在“编辑关系”对话框中查看关系设置。此外,请参阅删除记录所带来的影响一节。

    • 如果其中一个关系只实施参照完整性但不允许级联删除,则出现以下消息:

      不能删除“客户”记录的消息

      如果“客户-订单”关系不允许级联删除,则只要存在引用客户“全球进口商”的 ID 的订单记录,就不能删除客户记录。要解决此问题,请参阅必须实施参照完整性规则,但不得删除相关记录一节。

    • 如果该表与任何其他表都不相关,或者其关系不实施参照完整性,则出现以下消息:

      没有相关记录时的提示确认消息

      单击“是”确认。

<返回目录>

删除表中的所有记录(但不删除表本身)

要清空一个表(如“客户”表),请在数据表视图中打开该表。右键单击第一个列标题左边的灰方格(也叫“全选”按钮),然后单击“删除记录”

在一次操作中删除表中的所有记录

根据表的关系及其定义方式,将出现下列警告之一:

  • 如果涉及“客户”表的所有关系(如“客户-订单”)、其相关表的关系(订单-订单明细)以及截至关系链中最后一个表的关系的方式定义允许删除所有相关记录(每个关系都选中“级联删除相关记录”复选框),则出现以下消息:

    提示确认消息

    单击“是”确认。如果不确定是否要删除相关记录,则单击“否”并参阅删除记录所带来的影响一节。

  • 如果关系链中相关表之一不允许删除相关记录,则出现以下消息:

    因相关表不允许级联删除而导致删除操作失败的消息

    如果“订单表-订单明细表”之间的关系不允许级联删除,则出现此消息。要解决此问题,请在“编辑关系”对话框中查看关系设置。此外,请参阅删除记录所带来的影响一节。

  • 如果其中一个关系只实施参照完整性但不允许级联删除,则出现以下消息:

    不能删除“客户”记录的消息

    如果“客户表-订单表”之间的关系不允许级联删除,则只要存在引用客户“全球进口商”的 ID 的订单记录,就不能删除客户记录。要解决此问题,请参阅必须实施参照完整性规则,但不得删除相关记录一节。

  • 如果该表与任何其他表都不相关,或者其关系不实施参照完整性,则出现以下消息:

    没有相关记录时的提示确认消息

    单击“是”确认。

<返回目录>

删除表及其记录

删除一个表不会从数据库中删除相关表或相关记录。但是,如果在删除该表时,该表与其他表相关,则删除操作会删除该表与任何其他表之间的关系。例如,如果删除“客户”表,而该表与“订单”表相关,则“客户”表和“订单”表之间的关系将随“客户”表一道删除,但“订单”表保留不变。

  1. 要从数据库中删除该表及其所有内容,请在“数据库”窗口中选择该表并按 Delete。
  2. 出现确认提示时,单击“是”
  3. 如果该表与其他表相关,则出现以下消息:

    提示删除表的关系的消息

  4. 要确认,请单击“是”

该表及其内容以及其所有关系将从数据库中删除。

<返回目录>

删除满足一组条件的记录

可使用一种叫作“删除查询”的特殊查询来删除基于一个或多个条件的记录。如果条件不随时间变化,如条件“90 天前下的所有订单”,则可以在创建删除查询时,在查询字段的“条件”行中指定条件。如果条件时常变化,并且您想在运行查询时指定条件,则可以让删除查询提示您输入。

条件可以基于相同表中的字段,也可以基于另一个表中的字段。例如,可以删除基于下订单日期或基于相应客户所在城市的订单记录。第一种情况中,“订购日期”字段与订单记录在同一个表中;第二种情况中,“城市”字段在另外的表(“客户”表)中。

重要说明  删除查询不会影响表之间的关系的“实施参照完整性”“级联删除相关记录”设置。也就是说,如果在“订单-订单明细”关系中实施了参照完整性但未启用级联删除选项,则试图删除订单记录的删除查询将失败。类似地,如果为该关系启用了级联删除选项,则查询将自动从“订单明细”表中删除订单记录和相关记录。有关详细信息,请参阅删除记录所带来的影响一节。

下面我们来创建一个删除查询,用来删除与 90 天前所下订单对应的记录。您可以修改该查询,以便在查询运行时接受用户输入。在本节接近结束时,还可以修改该查询,以便删除基于相关表中的值的记录

确保正确建立了关系。右键单击“数据库”窗口的背景,然后单击“关系”。在“关系”窗口中,识别与“订单”表相关的表以及每个关系的设置。“订单”表与“订单明细”表相关 — 该关系实施参照完整性规则并允许级联删除。“订单”表还与“运货商”、“雇员”和“客户”表相关,但这些表不会受删除的订单记录的影响。

与“订单”表相关的表

  1. “数据库”窗口 (“数据库”窗口:在打开 Access 数据库或 Access 项目时出现的窗口。它显示用于新建数据库对象和打开现有对象的快捷方式。)中的“对象”下,单击“查询”按钮图像,然后单击“数据库”窗口工具栏上的“新建”
  2. “新建查询”对话框中,单击“设计视图”,然后单击“确定”
  3. “显示表”对话框中,双击“订单”,然后单击“关闭”
  4. 在工具栏上,单击“查询类型”按钮图像旁的箭头,然后单击“删除查询”。这将使选择查询变成删除查询。
  5. 将星号 (*) 从该表拖到查询设计网格中。

    将星号 (*) 拖到“字段”行

    在第一列中,“From”出现在“删除”行,而“订单”出现在“表”行。这表明那些行将从“订单”表上删除。

  6. 接下来,需要在“条件”行中指定条件。不能在星号 (*) 列指定条件。需要将条件列添加到网格中,然后指定条件。这里,我们要删除当前日期与订购日期相差 90 天以上的记录,因此要将“订购日期”列添加到网格中。

    设计网格中的“订购日期”列

    在第二列中,“Where”出现在“删除”行。

  7. 在第二列的“条件”行中键入 <DateAdd("d",-90, Date())DateAdd 函数在给定日期上增加或减去一个时段。本例中,该函数返回当前日期前 90 天的日期。“<” 运算符将该日期与每个订单的下单日期做比较,然后选择订购日期早于该计算值的记录。

    有关 DateAdd 函数(英文)的详细信息,请访问 MSDN 网站。

  8. 在工具栏上,单击“视图”按钮图像来预览要删除的记录。如果当前日期是 1996 年 10 月 14 日,则 1996 年 7 月 17 日之前所下订单的记录将被删除。

    将被删除的订单记录

  9. 将查询另存为“删除订单”,关闭查询,然后返回到“数据库”窗口。
  10. 在“数据库”窗口中找到该查询并双击它。如果尚未关闭确认消息,则会询问您是否继续该删除操作。单击“是”两次,以确认要通过使用该查询删除记录。

    显示我不希望每次运行该查询时总看到这些消息框

    “工具”菜单上,单击“选项”。单击“编辑/查找”选项卡。在“确认”下,清除“操作查询”复选框。
  11. 如果您执行了上述所有步骤,并且有权删除数据库的记录,而数据库不处于锁定或只读状态,则此删除查询将成功删除旧记录。在数据表视图中打开“订单”表,验证记录是否被删除。另外,打开“订单明细”表,确认相关详细记录是否被删除。

下面,我们来修改“删除订单”查询,使之可以提示您输入一个自定义日期范围作为删除记录的条件。首先,从写表达式开始,假定日期不变。在这里,表达式的形式是“>日期值 And <日期值”。现在,用方括号中的消息代替表达式中的日期,如[输入起始日期] and [输入结束日期]。现在的表达式为:

>[输入起始日期] And <[输入结束日期]

当运行该查询时,Access 尝试计算该条件。如果条件中包括消息,Access 则在单独的消息框中显示该消息,如下所示。

提示输入参数以计算查询条件的消息框

在第一个消息框输入一个值并单击“确定”时,Access 显示第二条消息。这些值将代替消息来计算条件。

注意,可以显示多条消息。消息可涉及一个字段,也可涉及多个字段。例如,要显示某个特定客户在任何两个特定日期间所下的订单,可以提示用户三次 — 分别提示起始日期、结束日期和客户 ID。

本例中,将显示两条消息:一条起始日期消息和一条结束日期消息,用来让用户指定日期范围以便删除记录。 

  1. 在“数据库”窗口中,找到该查询,单击它一次来选择该查询。不要双击它,双击将使查询运行。
  2. 在“数据库”窗口工具栏上,单击“设计”以在设计视图中打开查询。
  3. 在网格中,删除“订购日期”列的“条件”行的内容,然后在“条件”行中键入 >[输入起始日期] And <[输入结束日期]
  4. 在工具栏上,单击“视图”按钮图像
  5. 出现要求输入起始日期的消息。如下图所示,键入一个日期,如 1/1/97

    “输入参数值”对话框

  6. 单击“确定”。出现要求输入结束日期的另一条消息。键入 12/1/97,然后单击“确定”
  7. 您将看到订购日期在 1997 年 1 月 1 日 到 12 月 1 日间的订单记录。如果在运行查询时指定这些值,在该视图中看到的记录将被删除。

    运行查询时将删除的记录

  8. 保存并关闭查询,然后返回到“数据库”窗口。
  9. 在“数据库”窗口中找到该查询并双击它。单击“是”一次,然后指定起始和结束日期。再次单击“是”,以确认要通过使用该查询删除记录。

    显示我不希望每次运行该查询时总看到这些确认消息

    “工具”菜单上,单击“选项”。单击“编辑/查找”选项卡。在“确认”下,清除“操作查询”复选框。
  10. 如果您执行了上述所有步骤,并且有权删除数据库的记录,而数据库不处于锁定或只读状态,则此删除查询将删除订购日期在指定范围内的记录。在数据表视图中打开“订单”表,验证记录是否被删除。另外,打开“订单明细”表,确认相关详细记录是否被删除。

下面讲述如何删除基于相关表中的值的记录。我们将创建一个删除查询,用来删除由某个特定城市的客户所下订单的记录。城市信息位于“客户”表(与“订单”表相关的表)的“城市”字段中。

  1. “数据库”窗口 (“数据库”窗口:在打开 Access 数据库或 Access 项目时出现的窗口。它显示用于新建数据库对象和打开现有对象的快捷方式。)中的“对象”下,单击“查询”按钮图像,然后单击“数据库”窗口工具栏上的“新建”
  2. “新建查询”对话框中,单击“设计视图”,然后单击“确定”
  3. “显示表”对话框中,双击“客户”“订单”表,然后单击“关闭”

    这些表具有一对多的关系,因此您看到一条线段联接了两个表。

    显示我没有在查询中看到联接对象的线段

    如果查询基于两个不相关的表,或一个表和一个查询,则看不到联接两个对象的线段。如果删除查询基于不相关的对象,则在运行查询时,可能看到“无法从指定表删除”消息。

    为避免出现此消息,需要在两个对象间建立一个关系。具体方法是:将通用字段从第一个表或查询拖到第二个表或查询的相应字段中。然后,右键单击查询窗口上半部分的背景,单击“属性”显示查询属性工作表。最后,将“唯一的记录” 属性设置为“是”


  4. 在工具栏上,单击“查询类型”按钮图像旁的箭头,然后单击“删除查询”。这将使选择查询变成删除查询。
  5. 将星号 (*) 从“订单”表拖到查询设计网格中。

    将星号 (*) 从“订单”表拖到第一列的“字段”行

    在第一列中,“From”出现在“删除”行,而“订单”出现在“表”行。这表明那些行将从“订单”表上删除。

  6. 接下来,需要在“条件”行中指定条件。不能在星号 (*) 列指定条件。需要将条件字段添加到网格中,然后指定条件。例如,要删除位于伦敦的客户所下订单的记录。将“城市”字段从“客户”表拖到查询设计网格的第二列中。

    在第二列中,“Where”出现在“删除”行。

  7. “城市”列的“条件”行中,键入 = "伦敦"

     提示   为了允许用户在运行查询时键入城市,请在“条件”行中键入=[输入客户城市]

  8. 在工具栏上,单击“视图”按钮图像来预览要删除的记录。

    来自伦敦客户的订单

  9. 您将看到位于伦敦的客户所下的所有订单的记录。保存并关闭查询。
  10. 在“数据库”窗口中找到该查询并双击它。如果尚未关闭确认消息,则会询问您是否继续该删除操作。单击“是”两次,以确认要通过使用该查询删除记录。

    显示我不希望每次运行该查询时总看到这些消息框

    “工具”菜单上,单击“选项”。单击“编辑/查找”选项卡。在“确认”下,清除“操作查询”复选框。
  11. 如果您执行了上述所有步骤,并且有权删除数据库的记录,而数据库不处于锁定或只读状态,则此删除查询将删除来自伦敦的订单。在数据表视图中打开“订单”表,验证记录是否被删除。另外,打开“订单明细”表,确认相关详细记录是否被删除。
<返回目录>

删除重复记录。原始和重复记录可能在单个表或不同的表中。

很多情形都涉及到查找和删除重复数据。有关这些情形及查找、隐藏和删除重复数据的分步过程,请参阅文章查找、消除或隐藏 Access 中的重复记录

删除在另一个表中无匹配记录的记录

我们假设在创建“客户”表和“订单”表时,没有对两个表之间的关系实施参照完整性规则。后来,在删除客户记录时,没有删除相应的订单记录。结果,现在有几个订单记录还在引用无效客户 ID,或者被设置为空。查找不匹配项查询将帮助您找到所有“客户ID”字段设为“客户”表中不存在的值(包括空值)的记录。

下面使用“查找不匹配项查询向导”创建一个查询。该向导创建一个特殊查询,可用来比较两个表并只返回第一个表在第二个表中无匹配项的记录。然后,可以在数据表视图中打开该查询并删除在该视图中显示的所有记录。

  1. 在“数据库”窗口中的“对象”下,单击“查询”,然后单击数据库”窗口工具栏上的“新建”
  2. “新建查询”对话框中,单击“查找不匹配项查询向导”,然后单击“确定”

    显示我收到消息“该向导未安装或已禁用”

    这可能是因为 Access 正运行于沙盒模式,但您的计算机上尚未安装 Microsoft Jet 4.0 SP8 或更高版本。启用沙盒模式后,必须安装有 Jet 4.0 SP8 或更高版本,Access 才能完全发挥作用。

    有关安装 Jet 升级的详细信息,请参阅 Office Online 文章关于 Microsoft Jet 4.0 SP8 或更高版本。

    有关沙盒模式的详细信息,请参阅 Office Online 文章关于 Microsoft Jet Expression Service 沙盒模式。


  3. 选择“订单”表,因为该表包含您感兴趣的记录。然后单击“下一步”
  4. 单击“客户”表,因为这是您要对比的表。然后单击“下一步”
  5. 您将看到在两个列表中“客户ID”字段均选中。这表明,这些表将基于客户 ID 联接。单击“下一步”
  6. 选择视图中需要的字段。这里,应添加“订单ID”、“客户ID”和“订购日期”字段。单击“下一步”
  7. 接受建议的查询名称,单击“完成”以在数据表视图中查看记录。您会看到其“客户ID”字段为空或无效的记录,如下所示。

    “客户”列中的值为空或无效的记录

  8. 删除全部或部分显示的记录。有关分步信息,请参阅在数据表视图中删除记录一节。
<返回目录>

将记录移到存档表或数据库中

您也许经常要删除记录,以保持数据库最新且文件大小易于管理。例如,在每一季度的开始,您可能要将销售数据库中上一季度的数据移到存档数据库中。

将记录移到存档表或数据库的步骤具体如下:

  1. 确定要存档的记录。您可能想存档整个表,或者仅存档满足一组条件的几条记录。
  2. 将这些记录复制到存档表。可使用追加查询来完成。
  3. 从原始表删除这些记录。可使用删除查询来完成。
  4. 或者,创建一个宏来自动执行步骤 1 至 3。

有关如何创建查询和宏的详细信息,请参阅文章定期存档 Access 数据库记录

<返回目录>

消息摘要

下表总结了在删除一条或多条记录时可能遇到的各种消息。

消息 含义 操作
记录未被删除。数据是只读的。  (在状态栏中) 数据库为只读的。 更改文件设置,使数据库不为只读的。
不能用该窗体来删除记录。  (在状态栏中) 窗体不允许删除记录。 将窗体的“允许删除”属性设置为“是”
无法从指定表删除。   删除查询基于不相关的表和查询。该查询无法集合两个对象中的记录。 在查询“设计”窗口中关联两个对象。将通用字段从第一个表或查询拖到第二个表或查询的相应字段。

有时,可能需要将查询的“唯一的记录”属性设置为“是”。右键单击查询窗口的上半部的背景,单击“属性”来显示查询属性工作表。然后将“唯一的记录”属性设置为“是”

不能删除或更改记录,因为表表名 中包括相关记录。   该表和错误消息中提到的表之间的关系实施参照完整性,但不允许级联删除。 通过选中“编辑关系”对话框中的“级联删除相关记录”复选框来启用级联删除,或者确保相关表不会引用要删除的值。
不能执行级联操作。因为表表名中存在相关记录,会违反参照完整性规则。   关系链中的相关表之一实施参照完整性,但不允许级联删除。 “编辑关系”对话框中检查受影响关系的设置。如果“级联删除相关记录”复选框未选中,则选中它。

或者,编辑消息中提到的表的内容,使之不会引用将要删除的值。

指定级联删除的关系将导致该表和相关表中的 n
条记录都被删除。
  

确实要删除这些记录吗?  

所有直接和间接与该表关联的表都允许级联删除。该操作将删除当前表以及一个或多个相关表中的记录。 要删除这些记录,请单击“是”

单击“否”取消该操作。

您正准备删除 n
条记录。
  

如果单击“是”,将无法撤消删除操作。确实要删除这些记录吗?  

从此表中删除记录不会影响其他表。 要删除这些记录,请单击“是”

单击“否”取消该操作。

只有删除了与其他表的关系之后才能删除表表名  

是否立即用 Microsoft Access 来删除关系?  

尝试删除的表与其他表相关。 单击“是”来删除该表及其内容以及其所有关系。

返回页首 返回页首

相关任务

写一条 DELETE 语句以用于代码  有关详细信息,请参阅主题 DELETE 语句

 提示   获得正确的 SQL 语句以便在代码中使用的最简单的办法是:在设计视图中建立该查询,然后切换到 SQL 视图,查看查询生成的 SQL 语句。然后,将该语句复制并粘贴到代码中。

压缩 Access 数据库  删除大量记录后,可能需要压缩数据库来减小文件大小和提高性能。有关分步信息,请参阅压缩和修复 Access 文件

重新设置自动编号字段  删除记录后,您可能发现自动编号字段中的值有间隔。删除记录或压缩数据库不会自动重新设置自动编号字段中的值。要了解重新设置自动编号字段的具体步骤,请参阅 Microsoft 知识库文章如何在 Access 中重置“自动编号”字段值

返回页首 返回页首

广告