- 注册时间
- 2008-9-13
- 最后登录
- 1970-1-1
- 在线时间
- 0 小时
- 阅读权限
- 200
- 积分
- 0
- 帖子
- 24482
- 精华
- 4
- UID
- 9
|
本文介绍如何使用更新查询和删除查询从 Microsoft Office Access 2007 数据库中删除数据。您可以使用更新查询来删除数据库记录中的单个字段,如果需要删除数据库中的整条记录(包括唯一标识记录的键值),则可以使用删除查询。在操作的过程中,请记住,Access 还提供了多种手动删除部分或整条记录的方法。
; }8 \ W( h0 w# i6 E有关手动删除记录的详细信息,请参阅从数据库中删除一条或多条记录一文。( g6 w6 Z" ]* D- ?' n z$ K4 {/ \
本文内容
, Q5 F* n0 L, m" x( w了解如何使用查询删除数据可以使用两类查询来删除 Access 数据库中的数据。具体使用哪种查询取决于要执行的删除的类型。
9 W' V' T6 z; u* t- 如果需要删除一个或多个表中的记录的个别字段,您可以使用更新查询将现有值更改为空值(即不包含数据)或零长度字符串(中间不包含空格的一对双引号)。 您需要使用更新查询来删除个别字段中的数据,因为在默认情况下,删除查询仅删除整行。使用更新查询“删除”数据的过程包含以下主要步骤:创建一个选择查询并确保该查询仅返回您要删除的数据。然后将此查询转换为更新查询,并使用 NULL 值或零长度字符串作为更新值,再运行查询以更新现有数据。
- 如果需要删除整条记录(行),您可以使用删除查询。 默认情况下,删除查询将删除每个字段中的所有数据,包括唯一标识记录的键值。运行该查询时,它始终会从表中删除整个行。此过程包括以下主要步骤:创建一个选择查询并确保该查询返回您要删除的记录,然后将此查询转换为删除查询,并运行该查询以删除数据。, n9 S/ I0 h& R3 Z1 X
进行操作时,请记住:如果要删除的记录位于一对多关系的“一”端,必须先更改关系的属性,然后才能运行查询,本文后面的准备删除相关数据一节介绍了如何执行此任务。您还必须进行其他一些更改才能执行删除操作,因为默认情况下,Access 禁止删除一对多关系的“一”端中的数据。) G) R7 g/ @, L1 c9 N1 C9 p
如果需要了解有关一对多关系的详细信息,请参阅文章数据库设计基础和创建、编辑或删除关系。8 J/ x3 `7 z5 ~4 Q* d2 v
此外,还请记住:更新或删除部分或整条记录后,将不能撤消更改,因此,运行删除查询之前,应始终先备份数据。有关详细信息,请参阅本文后面的备份数据库。
* N& J; K5 `& @! v以下各节中的步骤介绍了如何创建更新查询以删除单个字段中的数据;以及如何创建删除查询以删除整条记录。
l7 b9 A0 G6 W! C7 v 注释 通常,只有当需要快速更改或删除大量数据时,才使用更新查询和删除查询。如果只需要删除少量记录(便于手动删除的任何数量),您可以在数据表视图中打开表,选择要删除的字段或行,然后按 Delete。
U* C/ e7 [) x T- K有关删除数据的其他方法的详细信息,请参阅从数据库中删除一条或多条记录一文。 Z/ g* G9 `3 f3 [
返回页首
5 ?$ Q, Y) ~0 {计划删除使用查询删除记录的过程包括以下一般步骤:
$ P: s0 J* w1 {! @- 计划删除。确保您具有删除数据所需的权限,确保所有其他用户已关闭使用受影响的表的所有对象,然后备份数据库。
- 确保数据库位于可信任的位置,或者已对数据库进行数字签名。如果这两个条件都不满足,则您可以选择只信任当前会话的数据库。请记住,默认情况下,Access 将阻止所有动作查询(包括删除查询、更新查询和生成表查询),除非您先信任数据库。有关信任数据库的信息,请参阅本文后面的防止禁用模式阻止查询一节。
- 如果要删除多个表中的数据,而这些表之间相互关联,则需要针对每种关系启用“参照完整性”和“级联删除相关记录”选项。这使您的查询可以删除位于关系的“一”端和“多”端的表中的数据。
- 创建一个选择查询,然后根据需要添加条件,直到查询返回正确的记录集。
- 如果要删除表中的单个字段,请将选择查询转换为更新查询,输入 NULL 或零长度字符串 ("") 作为更新条件,然后运行查询。
- 如果要删除整条记录,请将选择查询转换为删除查询,然后运行查询。
常规准备在从数据库中删除部分或整条记录之前,请执行以下任务:
) J& { }7 |- }; b1 N6 f6 S- 确保数据库不是只读数据库。为此,请在 Microsoft Windows 资源管理器中,右键单击数据库文件(.accdb 或 .mdb 文件),然后在快捷菜单上单击“属性”。在“属性”对话框中,确保清除了“只读”复选框。
- 验证您是否具有从数据库中删除记录所需的权限。如果不能确定,请与系统管理员或数据库设计人员联系。
- 与数据库的其他用户联系,确保删除操作不会对他们产生不良影响。
- 请求数据库的所有用户关闭使用您要删除的数据的所有表、窗体、查询和报表。这有助于避免锁定冲突。 提示 如果有大量用户连接到该数据库,您可能需要关闭该数据库,然后以独占模式重新打开。为此,请执行下列操作:
( P/ y9 y3 ^9 p2 O' d8 d, O( j- l0 E% i" h4 f- h
- 单击“Microsoft Office 按钮”,然后单击“打开”。
- 通过浏览找到并选择数据库,单击“打开”按钮旁边的箭头,然后单击“以独占方式打开”。
; B9 x5 h0 }/ ?( @3 Y( {
- 编辑或删除记录之前应备份数据库。某些删除操作可以撤消,但制作备份副本能够保证您始终可以撤消您的更改。 备份数据库
- 单击“Microsoft Office 按钮”,指向“管理”,然后在“管理此数据库”下单击“备份数据库”。
- 在“另存为”对话框中,指定备份副本的名称和位置,然后单击“保存”。 Access 将关闭原始文件,创建备份,然后重新打开原始文件。1 G" b$ S3 z- j1 X" L7 j
若要还原到备份,请关闭并重命名原始文件,以便备份副本可以使用原始版本的名称。将原始版本的名称指定给备份副本,然后在 Access 中打开已重命名的备份副本。" L2 T7 T; \# O
准备删除相关数据如果您需要删除相关表中的数据,请记住以下规则:如果数据位于一对多关系的“多”端,则您可以直接删除数据而不必更改关系。但如果数据位于一对多关系的“一”端,则必须先更改关系,否则 Access 将禁止删除。
, }5 Q( G1 O# U% w* y7 K4 b, n请按照如下常规步骤删除相关数据:
6 M. C% O: ~5 g/ v3 d2 w3 ~- 确定哪些记录位于关系的“一”端,哪些记录位于关系的“多”端。
- 如果需要删除位于关系的“一”端的记录以及位于“多”端的相关记录,则需要启用一组称为“参照完整性”的规则,并启用级联删除。本节中的步骤对“参照完整性”进行了说明,并介绍了如何执行这两项任务。
- 如果只需要删除关系的“一”端中的记录,请首先删除该关系,然后再删除数据。 - 或 -4 n w1 D" F6 s) V, P _8 u
如果只需要删除关系的“多”端中的数据,则可以创建并运行您的删除查询而不必更改关系。
6 G$ o( F( u9 `& z6 i 以下各节中的步骤介绍了如何准备要删除的相关数据。, g ^5 a5 v, y; ?
确定哪些记录位于关系的“一”端,哪些记录位于“多”端- 在“数据库工具”选项卡上的“显示/隐藏”组中,单击“关系”。 将显示“关系”选项卡,并显示数据库中的所有表以及各个表之间的关系。该选项卡以线条连接表的字段,借此描述各种关系。/ E B$ T8 W; M7 N
下图描述了一组典型关系。这些关系的大部分(或全部)都包含“一”端和“多”端。此关系图使用数字一(“1”)表示“一”端,使用无穷大 (∞) 符号表示“多”端。7 T y$ _. S- B4 q# V
- O1 D; C8 k* u2 x" L$ T- k通常,从关系的“一”端删除记录时,也会从关系的“多”端删除所有相关记录。但是,从关系的“多”端删除记录时,通常不会从“一”端删除记录。1 t5 n8 J$ B" q4 w: u
而且,在默认情况下,Access 会实施一组称为参照完整性的规则。这些规则确保数据库中的外键包含正确的值。外键是一个列,其值与另一个表的主键列中的值相匹配。 了解参照完整性规则6 Z' R$ ^" X& K% p
- 规则 1:您无法在相关表的外键字段中输入值,除非该值已存在于主表的主键中。但是,您可以在外键字段中输入 Null 值。
- 规则 2:如果某个记录在相关表中存在匹配的记录,则无法从主表中删除整条记录。 请记住,您可以通过在主表和副表之间的关系中启用一个属性来绕过此规则。有关如何执行该操作的详细信息,请参阅下一个步骤编辑关系。
- 规则 3:如果某个记录具有相关记录,则不能在主表中更改它的主键值。 但您也可以通过在主表和副表之间的关系中启用一个属性来绕过此规则。" M, |5 q9 w9 |" }
除非您规定了其他规则,否则,每当您在数据库中添加、编辑或删除数据时,Access 都会实施这些规则。当某项操作违反某个规则时,Access 将显示一条消息(如下图中所示),并取消该操作。3 A, B' \2 K& ~2 l
# |1 j; |' Y1 y
: Y: c2 `' V7 I c% P
执行操作时,请记住,尽管在大多数情况下 Access 会默认启用参照完整性,但数据库必须首先满足以下条件:
; g# v9 O1 P" v- 来自于主表的匹配字段必须为主键或具有唯一索引。
- 主表和相关表中的相关字段必须具有相同的数据类型。 注释 对于此规则,Access 提供了两种例外情况。如果数字字段的“FieldSize”属性设置为“长整型”,则自动编号字段可以与数字字段相关。另外,“FieldSize”属性设置为“同步复制 ID”的自动编号字段可以与“FieldSize”属性设置为“同步复制 ID”的数字字段相关。
- 这两个表必须属于同一个 Access 数据库。 注释 如果两个表相互链接,则它们必须都为 Access 格式。而且,您必须打开包含链接表的数据库,并启用参照完整性。您不能对其他格式的数据库中的链接表(例如 Microsoft Office Excel 2007 工作簿)实施参照完整性规则。有关实施参照完整性的信息,请参阅下一节中的步骤。9 H! {0 e1 W$ F" f' R5 u
- 记下关系每一端的表字段的名称。
- 打开每一个表,并查看每个字段中的数据,以验证字段中是否包含要删除的数据。
- 将“关系”窗格保持在打开状态,然后继续执行下一节中的步骤。
编辑关系仅当您需要删除关系的“一”端和“多”端中的数据时,才执行以下步骤。
1 M1 f' m: k5 I- b+ B- 如果“关系”窗格还没有打开,请将其打开。 在“数据库工具”选项卡上的“显示/隐藏”组中,单击“关系”。
- 右键单击与删除操作所涉及的表相连的关系(连线),然后单击快捷菜单上的“编辑关系”。 将显示“编辑关系”对话框。
- 确保“实施参照完整性”复选框处于选中状态。
- 选择“级联删除相关记录”复选框。 注释 再次禁用此属性之前,如果删除关系的“一”端中的记录,将会删除关系的“多”端中的所有相关记录。
- 单击“确定”,关闭“关系”窗格,然后继续执行下一组步骤。
删除关系- 如果“关系”窗格还没有打开,请将其打开。 在“数据库工具”选项卡上的“显示/隐藏”组中,单击“关系”。
- 记下关系中所涉及的字段,以便在删除数据后还原关系。
- 右键单击与删除操作所涉及的表相连的关系(连线),然后单击快捷菜单上的“删除”。 - 或 -* f/ a9 R1 U C# W5 i
选择关系,并按 Delete。
$ F, M& {% d7 z1 z 注释 要还原关系,请按照上面的步骤打开“关系”窗格,然后将“一”端表中的主键字段拖放到“多”端表中的外键字段。将显示“编辑关系”对话框。如果原来的关系实施了参照完整性,则请选择“实施参照完整性”,然后单击“创建”。否则,只需单击“创建”。$ y' r2 t) @8 \
返回页首% D" u4 L3 O. m3 ^
防止禁用模式阻止查询默认情况下,如果您打开了未选择信任的数据库,或者打开了不在受信任位置的数据库,Access 将禁止运行所有动作查询。
% [- n. |% H/ n; b& O. j# C, U3 R2 S如果您尝试运行某个动作查询,但好像没有什么反应,请查看 Access 状态栏中是否显示下列消息:
- F7 o/ e9 x9 q* _8 E) o; h“此操作或事件已被禁用模式阻止。”
& `; b# `7 V9 u8 N( U如果看到该消息,请执行下列操作:
: d# E9 N( D+ q, D# @启用阻止的内容- 在“消息栏”上,单击“选项”。 将显示“Microsoft Office 安全选项”对话框。
- 单击“启用此内容”,然后单击“确定”。
- 再次运行查询。
如果没有看到消息栏- 单击“数据库工具”选项卡,然后在“显示/隐藏”组中,单击“消息栏”。
有关禁用模式和 Access 安全的详细信息,请参阅保护 Access 2007 数据库一文。. B$ s9 ]$ s+ W$ P: e/ U
删除部分记录(一个或多个字段)本节中的步骤介绍如何使用更新查询来删除位于一对多关系的“多”端的表中的部分记录(个别字段)。您也可以按照这些步骤来从表中删除与其他数据无关的数据。请记住,运行更新查询删除数据会将现有值更改为 NULL 或零长度字符串(中间不包含空格的一对双引号),具体取决于您指定的条件。有关使用更新查询的详细信息,请参阅创建更新查询一文。
, Q4 p" u C' O4 Y3 a创建选择查询- 在“创建”选项卡上的“其他”组中,单击“查询设计”。 查询设计器打开,显示“设计”选项卡,并显示“显示表”对话框。
- 选择包含要删除的数据的表,单击“添加”,然后单击“关闭”。 该表在查询设计网格的上半部显示为一个窗口。窗口中列出了表中的所有字段。下图显示设计器中一个典型的表。
: ?% w7 Y1 o; J* C+ t, N" t - 在设计器的“字段”行添加要设置为 NULL 的字段。您可以双击每个字段,也可以拖放每个字段。
- (可选)在设计器的“条件”行输入一个或多个字段的条件。 您可以使用条件仅返回那些要删除的记录。否则,更新查询会将查询中每个字段的每条记录都设置为 NULL。有关使用条件的详细信息,请参阅本文后面的选择查询条件示例。
- 在“设计”选项卡上的“结果”组中,单击“运行”。 验证查询是否返回要设置为 NULL 或零长度字符串的记录。根据需要,重复步骤 3 至 5 并更改您的字段或条件,直至查询仅返回您要更改的数据。
- 将查询保持打开状态,然后继续执行下面的步骤。
将选择查询转换为更新查询- 单击“设计视图”,从数据表切换到查询设计器。
- 在“设计”选项卡上的“查询类型”组中,单击“更新”。 Access 会将选择查询更改为更新查询,在设计网格的下半部分隐藏“显示”行,并添加“更新到”行。; M' ~) l; w* A; @
在每个字段的“更新到”行中,输入 NULL 或零长度字符串(中间不包含空格的一对双引号:"")。 - 单击“运行”。 Access 将提示您确认更改。; A2 t0 k1 U/ v- a( ~; ?- K6 }
务必确保您需要更改这些值,然后单击“是”更改数据。 返回页首
: L3 W" h' c2 W删除整条记录本节中的步骤介绍了如何使用删除查询从表中删除整条记录。
0 w$ Z. i2 i: ~% G9 g0 v9 [创建选择查询- 在“创建”选项卡上的“其他”组中,单击“查询设计”。 查询设计器打开,显示“设计”选项卡,并显示“显示表”对话框。
- 选择处于关系的“一”端的表,单击“添加”,然后单击“关闭”。 该表在查询设计网格的上半部显示为一个窗口。窗口中列出了表中的所有字段。下图显示设计器中一个典型的表。7 V5 u) M; [" A# F/ ~, ^* C/ @
- 双击星号 (*) 将表中的所有字段添加到设计网格中。 添加所有表字段可以让删除查询从表中删除所有记录(行)。
- 添加允许您输入条件的表字段(可选)。 例如,假设某个客户停业了,您需要删除该客户的所有未结算的订单。若要仅找出这些记录,可以向设计网格中添加“客户 ID”和“订购日期”字段。
- 如果您执行了上一个步骤,请在设计器网格的“条件”行中输入您的条件。 您可以使用条件仅返回那些要删除的记录。否则,删除查询将删除表中的所有记录。让我们来继续完成上一步的示例,输入停业的客户的 ID 号,以及该客户的订单失效日期。# n* {3 F- N1 w0 h7 u' q: |; I
有关使用条件的详细信息,请参阅本文后面的选择查询条件示例。 - 如果您执行了上一个步骤,请清除每个条件字段的“显示”复选框。
- 在“设计”选项卡上的“结果”组中,单击“运行”。 验证查询是否返回要删除的记录。
- 将查询保持打开状态,然后继续执行下面的步骤。
将选择查询转换为删除查询并删除数据- 单击“设计视图”,从数据表切换到查询设计器。
- 在“设计”选项卡上的“查询类型”组中,单击“删除”。 Access 将选择查询更改为删除查询,在设计网格的下半部隐藏“显示”行,并添加“删除”行。
( T& Z3 ~ J& V x请确保“*”(所有字段)列中的“删除”行显示“From”。“Where”一词应显示在所有条件列中。 - 确认您要删除该数据,然后单击“运行”。 Access 将提示您确认删除。9 B1 l# g: o# R/ Z6 h9 M& U
单击“是”删除数据。 返回页首
: N! b' |& Q. ]7 R- o 返回页首8 M: W8 `% V! \2 }( ]2 n j
选择查询条件示例下表列出了可以在选择查询中使用的一些示例条件,这些条件可确保您仅删除正确的数据。您可以将这些示例条件用于您自己的数据。部分示例使用了通配符。& L2 P( k7 Y5 M4 @
有关使用通配符的详细信息,请参阅 Access 通配符参考一文。2 }! L( x) y6 Z/ B# O0 L* D
* e+ }/ x m0 E$ Z+ n! m' }
条件 | 效果 | > 234 | 返回所有大于 234 的数字。若要查找所有小于 234 的数字,请使用 < 234。 | >= "Cajhen" | 返回从 Cajhen 直至字母表末尾的所有记录 | Between #2/2/2007# And #12/1/2007# | 返回 2007 年 2 月 2 日到 2007 年 12 月 1 日之间的日期 (ANSI-89)。如果数据库使用的是 ANSI-92 通配符,则使用单引号 (') 替代井号 (#)。例如:Between '2/2/2007' And '12/1/2007' | 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/2007# | 查找 2007 年 2 月 2 日的所有记录。如果数据库使用的是 ANSI-92 通配符字符集,则使用单引号替代井号来括住日期 ('2/2/2007')。 | < Date() - 30 | 使用 Date 函数返回超过 30 天的所有日期。 | Date() | 使用 Date 函数返回包含当前日期的所有记录。 | Between Date() And DateAdd("M", 3, Date()) | 使用 Date 函数和 DateAdd 函数返回介于当前日期与从当前日期起三个月之内的所有记录。 | Is Null | 返回包含 Null(空或未定义)值的所有记录。 | Is Not Null | 返回包含任何值(不为 Null)的所有记录。 | "" | 返回包含零长度字符串的所有记录。当您需要向必填字段添加值,但还不知道实际值是什么时,则可以使用零长度字符串。例如,某个字段可能需要传真号码,但某些客户可能没有传真机。在这种情况下,可以输入一对中间不带空格的双引号 ("") 来替代数字。 |
|
|