Access 2003完整教程:查询疑难解答 (MDB)

全部查询

得到异常消息。

得到 SQL 语法消息。

得到“不能绑定名称 <name>”的消息。

如果在“查询参数”对话框中没有明确声明用于交叉表查询或交叉表查询及图表所基于的查询的参数,则可能会遇到此信息。若要解决此问题,请执行下列操作:

  1. 请在包含参数的查询中,在“查询参数”对话框中指定参数及其数据类型。

    操作方法:

    1. 单击“查询”菜单上的“参数”命令。

    2. 在第一个“参数”单元格中,键入在查询设计网格中要输入的第一个提示。

    3. 在“数据类型”单元格的右侧,按照下列指导规则,单击适当的数据类型:

      如果参数字段数据类型是在“数据类型”单元格中单击该数据类型
      货币、日期/时间、备注、OLE 对象、文本和是/否?货币、日期/时间、备注、OLE 对象、文本和是/否
      数字字节、单精度、双精度、整型、长整型与同步复制 ID。这些类型与五个“数字”数据类型的“字段大小”属性设置相对应。
      未知值。可以接受任何数据类型的通用数据类型。
      二进制二进制。与指向可识别该数据类型的链接表的参数查询一起使用(Microsoft Access 不识别这种数据类型)。
    4. 对每一个要指定数据类型的参数,重复第 2 步和第 3 步。

  2. 在同一查询中,设置“标题”属性。

    操作方法:

    可以更改交叉表查询中的顺序或限制列标题。例如,在包含各个月份的列标题中,可以使月份按时间排序,而不是按字母顺序。也可以限制为从一月到六月的列。

    1. 在“设计”视图中打开交叉表查询。
    2. 在设计网格和字段列表之外,单击查询“设计”视图的背景。
    3. 在工具栏上,单击“属性”按钮图像以显示查询的属性表。
    4. 在“列标题”属性框中,按希望的显示顺序输入要显示的列标题。在列标题之间,请键入逗号或适合自己国家/地区(有关国家/地区的列表分隔符的内容,请查看 Windows“控制面板”中的“区域设置”)的分隔符。

      输入的列标题必须与查询数据表的列标题完全相符。例如,如果数据表中的列标题是“USA”,则必须输入“USA”作为列标题,而不是“US”(按 Enter 或者将指针移动到其他位置之后,Microsoft Access 会将每个列标题用引号括起来)。

    5. 要查看查询结果,可单击工具栏上的“视图”按钮图像

    注释

    • 如果需要经常运行交叉表查询,或者将它用作窗体、报表或数据访问页的基础查询,用上述过程指定固定的列标题可以加快查询的运行速度。
    • 如果在不同的查询中频繁地使用相同的列标题,考虑创建带有一个文本字段的表以存储列标题。需要时请打开该表并将标题复制到“列标题”框中。

得到键冲突的消息。

以下情形将会出现键值冲突的问题:

如果运行了以上查询,将不会修改造成键值冲突的记录。

如果要以违反参照完整性的方法修改记录,可以中断相互影响的表的关系或关闭参照完整性,然后一次一个地修改受影响的表。但是,两个表中的结果数据可能会冲突。

得到违反有效性规则的消息。

如果试图更新或追加违反字段或记录有效性规则的记录,将出现有效性规则冲突的消息。

限制或验证数据

字段的有效性规则用于检查用户离开字段时字段中的输入值。记录有效性规则可以控制记录保存的时间。与字段有效性规则不同,记录有效性规则可以引用其他字段。

您还能够确定在指定有效性规则或更改“必填字段”或“允许零长度字符串”属性之前已经存在的数据是否不符合当前设置。

  1. 在“设计”视图中打开表。
  2. 请执行下列操作之一:

    定义有效性规则以控制字段的允许输入值

    1. 在窗口上部,单击将定义有效性规则的字段。
    2. 在窗口下部,单击“有效性规则”属性框,然后键入有效性规则,或单击“生成”按钮按钮图像,用表达式生成器创建有效性规则。

      例如,可以为“数量”字段定义有效性表达式“>9”,来防止用户输入小于 10 的订单。

    3. 在“有效性文本”属性框,键入不符合规则时要显示的消息。

      例如,对于有效性表达式“>9”,可以输入“您必须订购 10 个或 10 个以上”。

    4. 如果在包含数据的字段中设置有效性规则,在保存表时,Microsoft Access 将询问是否将新规则应用于现有数据。如果单击“是”,则当现有数据不符合有效性规则时,Access 将发出警告。

    定义有效性规则以控制保存记录的时间

    1. 单击工具栏上的“属性”按钮图像,以显示表的属性表。
    2. “有效性规则”属性框中键入有效性规则,或者单击“生成”按钮按钮图像以便用表达式生成器创建有效性规则。

      例如,可以定义有效性表达式“[到货日期]<=[订购日期]+30”,以确保“到货日期”字段中输入的日期与“订购日期”字段中的日期相距不超过 30 天。

    3. 在“有效性文本”属性框,键入不符合规则时,希望 Microsoft Access 显示的消息。

      例如,对于有效性表达式“[到货日期]<=[订购日期] +30”,可以输入“到货日期必须在订货日期以后 30 天以内”。

    4. 如果在包含数据的字段中设置有效性规则,在保存表时,Microsoft Access 将询问是否将新规则应用于现有数据。如果单击“是”,则当现有数据不符合有效性规则时,Microsoft Access 将发出警告。

    测试在指定有效性规则之前已经存在的数据

    • 用鼠标右键单击表的标题栏,然后单击“测试有效性规则”。

      如果现有数据不符合有效性规则,或不符合“必填字段”或“允许零长度字符串”的设置,Microsoft Access 将向您发出警告。

得到“查询包含模糊的外部联接”的消息。

看到下列消息时:

“无法执行 SQL 语句,因为包含模棱两可的外部联接。”

表明用户试图执行包含多个联接的 SQL 语句。在 Microsoft Access 中有三种联接:内部联接(也称为等效联接)、左外部联接以及右外部联接。在多个联接中,查询的结果因联接的类型与在查询中执行联接的顺序而不同。

使用三个表的多个联接的示例

例如,如果有三个表,Consultants、Active Consultants 和 Projects,而且通过下列方法联接这些表创建 SQL 查询:

Consultants LEFT OUTER JOIN Active Consultants INNER JOIN Projects

Microsoft Access 可以用两种方式来处理该查询:

Access 首先在 Consultants 和 Active Consultants 表中创建左外部联接,然后在这两个表的结果与 Projects 表间创建内部联接。

Access 在 Consultants 表与 Active Consultants 和 Projects 表的内部联接结果间创建左外部联接

因为 Microsoft Access 可以在这两种不同的联接方式中产生不同的结果,所以必须指定联接的方式,方法是:更改一个联接或将查询分为两个查询。

非模棱两可的多联接

下列联接的组合仅可能生成一个结果,将不生成“模棱两可的外部联接”消息:

模棱两可的多个联接

下列联接组合可能产生多个结果并生成一个“模棱两可的外部联接”消息:

得到类型不匹配的消息。

得到“预计参数太少”的消息。

如果导出至IDC文件类型的参数查询尚未在“查询参数”对话框中指定数据类型,就有可能出现此消息。

  1. 在“数据库”窗口中,单击“对象”下的“查询”按钮图像
  2. 单击要修改的参数查询的名称,然后单击“数据库”窗口工具栏上的“设计”。
  3. 为参数指定数据类型。

    操作方法:

    1. 单击“查询”菜单上的“参数”命令。

    2. 在第一个“参数”单元格中,键入在查询设计网格中要输入的第一个提示。

    3. 在“数据类型”单元格的右侧,按照下列指导规则,单击适当的数据类型:

      如果参数字段数据类型是在“数据类型”单元格中单击该数据类型
      货币、日期/时间、备注、OLE 对象、文本和是/否?货币、日期/时间、备注、OLE 对象、文本和是/否
      数字字节、单精度、双精度、整型、长整型与同步复制 ID。这些类型与五个“数字”数据类型的“字段大小”属性设置相对应。
      未知值。可以接受任何数据类型的通用数据类型。
      二进制二进制。与指向可识别该数据类型的链接表的参数查询一起使用(Microsoft Access 不识别这种数据类型)。
    4. 对每一个要指定数据类型的参数,重复第 2 步和第 3 步。

  4. 保存并运行查询。

得到有关追加查询中 s_Generation 的消息。

如果追加查询设计网格中的“字段”行包含了星号 (*),则在副本数据库中执行该追加查询时将得到上述错误信息。因为星号会选取一个基表中的全部字段。如果要避免这个问题,请从设计网格中删除星号,然后从表的字段列表中将每个字段添加到设计网格中,方法是:双击字段列表的标题栏。

得到“操作必须使用可更新查询”的消息。

在当前查询的“更新到”行中包括了交叉表查询或选择查询中的字段,在交叉表查询或选择查询中,对该字段进行聚合(总计)计算(使用“总计”行或“字段”行的域函数)时,会发生该错误。如果要使用另一个字段的聚合来更新字段,请在更新查询本身中计算聚合,而不是其他查询。

  1. 在当前查询的查询“设计”视图中,删除从交叉表或选择查询中添加的字段(在其中对字段进行聚合计算)。
  2. 在要更新字段的“更新到”单元格中输入一个域函数,此函数将进行与选择或交叉表查询中相同的对字段的聚合计算。

    例如,如果在“产品”表中有一个称作“销售额”的计算字段,可以在“订单明细”表的“数量”和“单价”字段中进行更新,方法是:将其添加到更新查询的设计网格中,然后在“更新到”单元格中输入下列字段函数。

    DSum("[Quantity] * [UnitPrice]", "Order Details", "[ProductID]=" & [ProductID])
    
  3. 若要运行查询,请在工具栏上单击“运行”按钮图像
  4. 若要查看结果,请单击“数据库”窗口中“对象”下的“表”按钮图像,再单击“数据库”窗口工具栏上的“打开”,以打开表。

查询中的通配字符表现异常。

两种ANSI SQL 查询模式,ANSI-89 和 ANSI-92,是互不兼容的,使用不同的通配符。例如,如果:

当创建Microsoft Access 数据库时,需要决定使用哪种查询模式,因为如果稍后在不同于 Access 数据库当前模式的 ANSI SQL 查询模式下创建一个的查询,您的查询就可能会生成运行时错误或产生意外结果。

关于使用通配符搜索部分或完全匹配的值

在指定要查找的内容时,如果出现以下情况,可以使用通配符作为其他字符的占位符:

通配符必须与带“文本”数据类型的字段一起使用。但在未使用 Microsoft Windows“控制面板”更改这些数据类型的区域设置的情况下,可以将通配符与其他数据类型(如日期)一起使用。

如果在Microsoft Access 数据库中使用的是 Microsoft Jet 数据库引擎 SQL,则可以在查询和表达式中使用下列通配符查找字段值、记录或文件名之类的内容。也可以在 Access 数据库或Microsoft Access 项目中的“查找和替换”对话框中使用这些字符。

字符说明示例
*与任何个数的字符匹配。在字符串中,它可以当作第一个或最后一个字符使用。wh*可以找到 what、white 和 why
与任何单个字母的字符匹配。B?ll可以找到 ball、bell 和 bill
[ ]与方括号内任何单个字符匹配。B[ae]ll可以找到 ball 和 bell 但找不到 bill
!匹配任何不在方括号之内的字符。b[!ae]ll可以找到 bill 和 bull 但找不到 ball 或 bell
-与某个范围内的任一个字符匹配。必须按升序指定范围(A 到 Z,而不是 Z 到 A)。b[a-c]d可以找到 bad、bbd 和 bcd
#与任何单个数字字符匹配。1#3可以找到 103、113、123

若要在 Microsoft Access 项目中或在使用了与 Microsoft SQL Server 兼容的语法的 Microsoft Access 数据库中查找字段值、记录或文件名之类的内容,请使用下列 ANSI-92 通配符。

注释如果在 Access 项目或 Access 数据库中使用“查找和替换”对话框,而 Access 项目或 Access 数据库使用了与 Microsoft SQL Server 兼容的语法,就必须使用 Microsoft Jet SQL 通配符。

字符说明示例
%与任何个数的字符匹配,在字符串中,它可以当作第一个或最后一个字符使用。wh%可以找到 what、white 和 why
_与任何单个字母的字符匹配。B_ll可以找到 ball、bell 和 bill
[ ]与方括号内任何单个字符匹配。B[ae]ll可以找到 ball 和 bell 但找不到 bill
^匹配任何不在方括号之内的字符。b[^ae]ll可以找到 bill 和 bull 但找不到 ball 或 bell
-与某个范围内的任一个字符匹配。必须按升序指定范围(A 到 Z,而不是 Z 到 A)。b[a-c]d可以找到 bad、bbd 和 bcd

注释

在数据访问页和窗体中,相同的基础查询表现不同。

以窗体为基础的查询在Microsoft Access 数据库的当前ANSI SQL 查询模式设置下运行。另一方面,以数据访问页为基础的查询总是在 ANSI-92 SQL 查询模式下运行,因为页是使用ADO和 Microsoft Jet OLE DB 提供程序与 Access 数据库连接,而这二者只能使用 ANSI-92 SQL。因此,如果 Access 数据库的 SQL 查询模式设为 ANSI-89,基于窗体的查询作为 ANSI-89 查询运行,但基于页的查询总是在 ANSI-92 下运行,无论 Access 数据库设置如何都如此。若要解决这一问题,就要对窗体使用另一种查询,如果可能,要为窗体重写查询,以生成与页的基础查询同样的结果。

未得到想要的记录。

记录太多。

记录不足。

记录是错误的。

在其他 ANSI SQL 查询模式下运行查询。

您的查询是在其他ANSI SQL 查询模式中而非Microsoft Access 数据库的当前模式中创建的。

为什么应避免将在不同 ANSI SQL 查询模式中创建的查询混合在一起

两种ANSI SQL 查询模式(即 ANSI-89 和 ANSI-92)并不兼容。在创建Microsoft Access 数据库时,需要确定将要使用何种查询模式,因为混合在不同查询模式下创建的查询可能会发生运行时错误或意想不到的结果。数据类型、保留字和通配符的范围在每种查询模式下都是不同的。

有关用通配符进行查询的示例

如果一个查询在条件表达式中使用了通配符,则在每种查询模式下会产生不同的结果。例如,如果:

有关具有重复字段和别名的查询的示例

如果一个查询使用了与基础列同名的别名,并且使用不明确的名称创建计算字段,则在不同的查询模式下进行查询时会产生不同的结果。例如,如果运行以下查询:

SELECT Orders.OrderID AS Freight, Orders.Freight, [Freight]*1.1 AS [New Freight] FROM Orders;

在 ANSI-92 SQL 下,Access 用 Freight 字段计算 New Freight 值,于是每个 Freight 值增加 10%。在 ANSI-89 SQL 下,Access 用 Freight 别名计算 New Freight 值,于是每个 OrderID 值增加 10%。

如何避免因在同一数据库中混合了在不同 ANST SQL 查询模式下创建的查询而导致的问题?

通常,为防止由于混合在不同 ANSI SQL 查询模式下创建的查询所导致的问题,应该避免下列操作:

未得到想要的列。

列太多。

列不足。

列是错误的。

在其他 ANSI SQL 查询模式下运行查询。

您的查询是在其他ANSI SQL 查询模式中而非Microsoft Access 数据库的当前模式中创建的。

为什么应避免将在不同 ANSI SQL 查询模式中创建的查询混合在一起

两种ANSI SQL 查询模式(即 ANSI-89 和 ANSI-92)并不兼容。在创建Microsoft Access 数据库时,需要确定将要使用何种查询模式,因为混合在不同查询模式下创建的查询可能会发生运行时错误或意想不到的结果。数据类型、保留字和通配符的范围在每种查询模式下都是不同的。

有关用通配符进行查询的示例

如果一个查询在条件表达式中使用了通配符,则在每种查询模式下会产生不同的结果。例如,如果:

有关具有重复字段和别名的查询的示例

如果一个查询使用了与基础列同名的别名,并且使用不明确的名称创建计算字段,则在不同的查询模式下进行查询时会产生不同的结果。例如,如果运行以下查询:

SELECT Orders.OrderID AS Freight, Orders.Freight, [Freight]*1.1 AS [New Freight] FROM Orders;

在 ANSI-92 SQL 下,Access 用 Freight 字段计算 New Freight 值,于是每个 Freight 值增加 10%。在 ANSI-89 SQL 下,Access 用 Freight 别名计算 New Freight 值,于是每个 OrderID 值增加 10%。

如何避免因在同一数据库中混合了在不同 ANST SQL 查询模式下创建的查询而导致的问题?

通常,为防止由于混合在不同 ANSI SQL 查询模式下创建的查询所导致的问题,应该避免下列操作:

没有得到预期的计算结果。

总计(聚合)计算的结果是错误的。

总计(聚合)函数计算结果位于错误的列中。

在查询设计网格之中,删除在该字段(列)的“总计”单元格中指定的聚合,然后在其他字段中选择一个。

设计网格中的算术计算返回Null(空)值。

如果在表达式中使用算术运算符(诸如,+-*/),例如,UnitsInStock] + [UnitsOnOrder],并且在表达式中的一个字段包含一个Null值,那么整个表达式的结果将为Null值。若要避免这一点,可以通过使用Nz函数将Null值转换为零或其他数字。

在其他 ANSI SQL 查询模式下运行查询。

您的查询是在其他ANSI SQL 查询模式中而非Microsoft Access 数据库的当前模式中创建的。

为什么应避免将在不同 ANSI SQL 查询模式中创建的查询混合在一起

两种ANSI SQL 查询模式(即 ANSI-89 和 ANSI-92)并不兼容。在创建Microsoft Access 数据库时,需要确定将要使用何种查询模式,因为混合在不同查询模式下创建的查询可能会发生运行时错误或意想不到的结果。数据类型、保留字和通配符的范围在每种查询模式下都是不同的。

有关用通配符进行查询的示例

如果一个查询在条件表达式中使用了通配符,则在每种查询模式下会产生不同的结果。例如,如果:

有关具有重复字段和别名的查询的示例

如果一个查询使用了与基础列同名的别名,并且使用不明确的名称创建计算字段,则在不同的查询模式下进行查询时会产生不同的结果。例如,如果运行以下查询:

SELECT Orders.OrderID AS Freight, Orders.Freight, [Freight]*1.1 AS [New Freight] FROM Orders;

在 ANSI-92 SQL 下,Access 用 Freight 字段计算 New Freight 值,于是每个 Freight 值增加 10%。在 ANSI-89 SQL 下,Access 用 Freight 别名计算 New Freight 值,于是每个 OrderID 值增加 10%。

如何避免因在同一数据库中混合了在不同 ANST SQL 查询模式下创建的查询而导致的问题?

通常,为防止由于混合在不同 ANSI SQL 查询模式下创建的查询所导致的问题,应该避免下列操作:

特定类型的查询

选择查询?

“自动查阅”查询没有填入数据。

要正确执行“自动查阅”查询,必须符合某些特定条件:

Microsoft Access 自动联接了不需要联接的表或查询。

即使没有在表之间建立关系,如果添加到查询中的两个表都含有一个相同数据类型或兼容数据类型的字段,并且这两个联接字段中有一个是主键,Microsoft Access 将自动为其创建联接。可以启用或禁用这些自动联接。

  1. 在“工具”菜单上,单击“选项”。
  2. 单击“表/查询”选项卡。
  3. 选中或清除“启用自动联接功能”复选框。

注释该设置只应用于新建的查询。

无法通过查询更新数据。

在某些情况下,可以在查询“数据表”视图中编辑数据以更改基表中的数据。而在另一些情况下则不行。下面的信息表明了各种查询的结果是否能更新;如果不能,是否有其他的方法可以替代。

数据可更新

下列情况下可以更新查询或查询字段:

数据在一定条件下可更新

如果查询基于含有一对多关系的表,则不能编辑下列查询字段的数据。

查询字段解决方案
位于“一”方的联接字段启动两表之间的级联更新。
新记录,如果位于“多”方的联接字段不出现在数据表中从“多”方将联接字段添加到查询中,以允许添加新记录。
在“一”方更新数据后,来自“多”方的联接字段先保存记录;然后可以对“多”方的联接字段进行更改。
在存在外部联接的一对多关系的“一”方表中的空白字段在位于“多”方的表的字段中输入值,但必要条件是位于“一”方的联接字段中包含该记录的值。
新记录,如果ODBC表的整个唯一键没有输出选取 ODBC 表的所有主键字段,以允许向其中插入数据。

数据可以删除但不能更新

查询或查询字段解决方案
不具有“更新数据”权限的查询(或基表)若要修改数据,必须指定相应的权限。
不具有“删除数据”权限的查询(或基表)若要删除数据,必须指定相应的权限。?

数据不能更新

查询或查询字段解决方案
基于具有多对一对多关系的三个或更多表的查询。当窗体的“记录集类型”属性设置为“动态集(不一致的更新)”时,虽然不能直接更新查询中的数据,但可以更新基于该查询的窗体或数据访问页中的数据。
交叉表查询?无
SQL传递查询?无
对字段求和、平均值、计数值或其他类型总和值的查询,或者从包含总和或合计函数的交叉表查询、选择查询或子查询的“更新到”行中引用字段的更新查询通过在更新查询的“更新到”行中使用域聚合函数,可以引用包含总计或聚合函数的交叉表查询、选择查询或子查询中的字段。
联合查询?无
“唯一值”属性设置为“是”的查询?无
包含无唯一索引的ODBC链接表或无主键的 Paradox 表的查询?无
包含多个表或查询,并且这些表或查询在“设计”视图中没有使用联接线相联接的查询若要更新表,必须正确地联接它们。
计算字段?无
字段为只读;数据库是以只读方式打开或位于只读驱动器上?无
记录中的字段已经删除或被其他用户锁定锁定的记录在解锁后即可更新。

不希望有提示时,却出现了参数的提示。

如果在试图运行查询、报表或数据访问页时,出现了并不希望的类型参数提示,可能是以下原因之一:

在其他 ANSI SQL 查询模式下运行查询。

您的查询是在其他ANSI SQL 查询模式中而非Microsoft Access 数据库的当前模式中创建的。

为什么应避免将在不同 ANSI SQL 查询模式中创建的查询混合在一起

两种ANSI SQL 查询模式(即 ANSI-89 和 ANSI-92)并不兼容。在创建Microsoft Access 数据库时,需要确定将要使用何种查询模式,因为混合在不同查询模式下创建的查询可能会发生运行时错误或意想不到的结果。数据类型、保留字和通配符的范围在每种查询模式下都是不同的。

有关用通配符进行查询的示例

如果一个查询在条件表达式中使用了通配符,则在每种查询模式下会产生不同的结果。例如,如果:

有关具有重复字段和别名的查询的示例

如果一个查询使用了与基础列同名的别名,并且使用不明确的名称创建计算字段,则在不同的查询模式下进行查询时会产生不同的结果。例如,如果运行以下查询:

SELECT Orders.OrderID AS Freight, Orders.Freight, [Freight]*1.1 AS [New Freight] FROM Orders;

在 ANSI-92 SQL 下,Access 用 Freight 字段计算 New Freight 值,于是每个 Freight 值增加 10%。在 ANSI-89 SQL 下,Access 用 Freight 别名计算 New Freight 值,于是每个 OrderID 值增加 10%。

如何避免因在同一数据库中混合了在不同 ANST SQL 查询模式下创建的查询而导致的问题?

通常,为防止由于混合在不同 ANSI SQL 查询模式下创建的查询所导致的问题,应该避免下列操作:

参数查询

不希望有提示时,却出现了参数的提示。

如果在试图运行查询、报表或数据访问页时,出现了并不希望的类型参数提示,可能是以下原因之一:

需要能够用参数查询返回所有记录的选项。

  1. 在设计网格中,包含“条件”单元格提示的字段下,将 [prompt]Is Null键入到“或”单元格中,其中 prompt 与“条件”单元格中该字段的提示相同。例如:

    单元格键入
    条件Like [Enter Category ID:]
    [Enter Category ID:] Is Null
  2. 运行查询。

  3. 在 Microsoft Access 提示时,将“输入参数值”对话框留空。

在其他 ANSI SQL 查询模式下运行查询。

您的查询是在其他ANSI SQL 查询模式中而非Microsoft Access 数据库的当前模式中创建的。

为什么应避免将在不同 ANSI SQL 查询模式中创建的查询混合在一起

两种ANSI SQL 查询模式(即 ANSI-89 和 ANSI-92)并不兼容。在创建Microsoft Access 数据库时,需要确定将要使用何种查询模式,因为混合在不同查询模式下创建的查询可能会发生运行时错误或意想不到的结果。数据类型、保留字和通配符的范围在每种查询模式下都是不同的。

有关用通配符进行查询的示例

如果一个查询在条件表达式中使用了通配符,则在每种查询模式下会产生不同的结果。例如,如果:

有关具有重复字段和别名的查询的示例

如果一个查询使用了与基础列同名的别名,并且使用不明确的名称创建计算字段,则在不同的查询模式下进行查询时会产生不同的结果。例如,如果运行以下查询:

SELECT Orders.OrderID AS Freight, Orders.Freight, [Freight]*1.1 AS [New Freight] FROM Orders;

在 ANSI-92 SQL 下,Access 用 Freight 字段计算 New Freight 值,于是每个 Freight 值增加 10%。在 ANSI-89 SQL 下,Access 用 Freight 别名计算 New Freight 值,于是每个 OrderID 值增加 10%。

如何避免因在同一数据库中混合了在不同 ANST SQL 查询模式下创建的查询而导致的问题?

通常,为防止由于混合在不同 ANSI SQL 查询模式下创建的查询所导致的问题,应该避免下列操作:

交叉表查询

列标题顺序不对,或需要排除一些列标题。

可以设置查询的“列标题”属性,来指定要显示哪些列标题、以什么顺序显示它们。

无法更新交叉表查询中的数据。

交叉表查询中的数据是不可更新的。

在查询的结果中,一个或多个列标题被标记为“<>”。

只要“交叉表”单元格的“列标题”中的字段值为Null,Microsoft Access 就返回“<>”作为列名称。如果要避免这样,可以:

错误的字段值显示为行标题或列标题。

确认字段值要用作列标题的字段,的确位于查询设计网格中,且“交叉表”单元格是“列标题”,而且字段值要用作行标题的字段的确位于查询设计网格中,且“交叉表”单元格是“行标题”。如果要改变“交叉表”单元格中的值,请单击单元格,然后从列表中单击一个值。如果只要将特定值显示为列标题,请设置查询的“标题”属性。

排序或限制交叉表查询中显示的列标题

可以更改交叉表查询中的顺序或限制列标题。例如,在包含各个月份的列标题中,可以使月份按时间排序,而不是按字母顺序。也可以限制为从一月到六月的列。

  1. 在“设计”视图中打开交叉表查询。
  2. 在设计网格和字段列表之外,单击查询“设计”视图的背景。
  3. 在工具栏上,单击“属性”按钮图像以显示查询的属性表。
  4. 在“列标题”属性框中,按希望的显示顺序输入要显示的列标题。在列标题之间,请键入逗号或适合自己国家/地区(有关国家/地区的列表分隔符的内容,请查看 Windows“控制面板”中的“区域设置”)的分隔符。

    输入的列标题必须与查询数据表的列标题完全相符。例如,如果数据表中的列标题是“USA”,则必须输入“USA”作为列标题,而不是“US”(按 Enter 或者将指针移动到其他位置之后,Microsoft Access 会将每个列标题用引号括起来)。

  5. 要查看查询结果,可单击工具栏上的“视图”按钮图像

注释

在其他 ANSI SQL 查询模式下运行查询。

您的查询是在其他ANSI SQL 查询模式中而非Microsoft Access 数据库的当前模式中创建的。

为什么应避免将在不同 ANSI SQL 查询模式中创建的查询混合在一起

两种ANSI SQL 查询模式(即 ANSI-89 和 ANSI-92)并不兼容。在创建Microsoft Access 数据库时,需要确定将要使用何种查询模式,因为混合在不同查询模式下创建的查询可能会发生运行时错误或意想不到的结果。数据类型、保留字和通配符的范围在每种查询模式下都是不同的。

有关用通配符进行查询的示例

如果一个查询在条件表达式中使用了通配符,则在每种查询模式下会产生不同的结果。例如,如果:

有关具有重复字段和别名的查询的示例

如果一个查询使用了与基础列同名的别名,并且使用不明确的名称创建计算字段,则在不同的查询模式下进行查询时会产生不同的结果。例如,如果运行以下查询:

SELECT Orders.OrderID AS Freight, Orders.Freight, [Freight]*1.1 AS [New Freight] FROM Orders;

在 ANSI-92 SQL 下,Access 用 Freight 字段计算 New Freight 值,于是每个 Freight 值增加 10%。在 ANSI-89 SQL 下,Access 用 Freight 别名计算 New Freight 值,于是每个 OrderID 值增加 10%。

如何避免因在同一数据库中混合了在不同 ANST SQL 查询模式下创建的查询而导致的问题?

通常,为防止由于混合在不同 ANSI SQL 查询模式下创建的查询所导致的问题,应该避免下列操作:

操作查询(追加、更新、删除)

追加查询追加数据的目标字段或源字段不对。

请确认为想要追加的数据选择了正确的字段,在查询设计网格中输入了正确的条件,并且正确地选择了想要追加数据的字段。如果有可用的备份副本,则通过该副本将追加查询恢复为原状态,然后执行下列一项或多项操作:

选定要为其追加数据的字段

在查询设计网格中为追加查询添加下列字段:

选定要为其追加数据的字段

注释如果要在“字段”单元格中添加星号 (*),请在“追加到”单元格中选定星号。两个表中的所有字段名都必须完全相同。不能在包含星号的字段中指定选定记录的条件,但是可以在单独的列中指定条件。

更新查询不能执行所需的更新。

在使用“查找重复项向导”之后,不知道删除重复记录的最好方法。

直接在查询“数据表”视图中删除重复的记录或原始记录。

删除记录

在数据表或窗体中删除记录

  1. 打开数据表,或在“窗体”视图中打开窗体。
  2. 单击要删除的记录。
  3. 单击工具栏上的“删除记录”按钮图像

注释删除数据时可能需要同时删除其他表中的相关数据。例如,如果删除了某个供应商,则可能还要删除该供应商所提供的产品。在某些情况下,通过实施参照完整性并启用级联删除,可以确保删除合适的数据。

在数据访问页中删除记录

要点删除记录后,无法从数据库中撤消删除操作。

注释如果看不到“删除”按钮,可能是由于下列原因之一:

如果希望 Microsoft Access 自动删除全部重复记录并保存原始记录,则不要使用“查找重复项查询向导”,或将“查找重复项”查询转换为删除查询。

从表中删除重复记录

从表中删除重复记录需要两个步骤。第一步,创建包含重复项的表结构的副本,然后生成所有包含重复项的字段的主键;第二步,创建并执行由原始表到新表的追加查询。因为主键字段不能包含重复记录,所以此过程将生成一个不含重复记录的表。

  1. 复制表并生成包含重复项的字段的主键

    操作方法:

    1. 在“数据库”窗口中,单击“对象”下的“表”按钮图像
    2. 单击要删除重复记录的表名称。
    3. 单击工具栏上的“复制”按钮图像
    4. 单击工具栏上的“粘贴”按钮图像
    5. 在“粘贴表方式”对话框中,键入复制表的名字,再单击“只粘贴结构”选项,然后单击“确定”按钮。
    6. 在“设计”视图中打开新表,然后在复制的表中选择包含重复项的字段。
    7. 单击工具栏上的“主键”按钮按钮图像,以便根据选定的字段创建主键。
    8. 保存并关闭表。
  2. 在新表中追加唯一值记录。

    操作方法:

    1. 根据包含重复项的原始表新建一个查询。
    2. 在查询“设计”视图中,单击工具栏上的“查询类型”按钮图像,再单击“追加查询”。
    3. 在“追加”对话框中,在“表名称”列表中单击新表的名称,然后单击“确定”。
    4. 将星号 (*) 拖到查询设计网格,使新表包含原始表的所有字段。
    5. 单击工具栏上的“运行”按钮图像
    6. 收到追加行的信息时,请单击“是”按钮。
    7. 收到 Microsoft Access 不能在追加查询中添加全部记录的信息时,请单击“是”按钮。这次仅将有唯一值的记录传送到新表中,并丢弃了重复项。
    8. 打开表查看结果。
    9. 确定新表有正确的唯一记录后,就可以删除原始表,然后使用原始表名来为新表重新命名。

删除查询从错误的表中删除了记录。

请确保删除查询包括:

在查询设计网格中,在“删除”行中将显示FromWhereFrom显示在要删除其记录的表的“删除”单元格中,而Where显示在指定条件的字段的“删除”单元格中。

在其他 ANSI SQL 查询模式下运行查询。

您的查询是在其他ANSI SQL 查询模式中而非Microsoft Access 数据库的当前模式中创建的。

为什么应避免将在不同 ANSI SQL 查询模式中创建的查询混合在一起

两种ANSI SQL 查询模式(即 ANSI-89 和 ANSI-92)并不兼容。在创建Microsoft Access 数据库时,需要确定将要使用何种查询模式,因为混合在不同查询模式下创建的查询可能会发生运行时错误或意想不到的结果。数据类型、保留字和通配符的范围在每种查询模式下都是不同的。

有关用通配符进行查询的示例

如果一个查询在条件表达式中使用了通配符,则在每种查询模式下会产生不同的结果。例如,如果:

有关具有重复字段和别名的查询的示例

如果一个查询使用了与基础列同名的别名,并且使用不明确的名称创建计算字段,则在不同的查询模式下进行查询时会产生不同的结果。例如,如果运行以下查询:

SELECT Orders.OrderID AS Freight, Orders.Freight, [Freight]*1.1 AS [New Freight] FROM Orders;

在 ANSI-92 SQL 下,Access 用 Freight 字段计算 New Freight 值,于是每个 Freight 值增加 10%。在 ANSI-89 SQL 下,Access 用 Freight 别名计算 New Freight 值,于是每个 OrderID 值增加 10%。

如何避免因在同一数据库中混合了在不同 ANST SQL 查询模式下创建的查询而导致的问题?

通常,为防止由于混合在不同 ANSI SQL 查询模式下创建的查询所导致的问题,应该避免下列操作:

上页:Access 2003完整教程:数据透视表视图或数据透视图视图疑难解答 下页:Access 2003完整教程:有关查询的疑难解答

Access 2003完整教程:查询疑难解答 (MDB)

Access 2003完整教程:有关查询的疑难解答Access 2003完整教程:有关排序的疑难解答
Access 2003完整教程:拼写疑难解答Access 2003完整教程:在多个 Access 版本中使用 Access 2000 文件的疑难解答
Access 2003完整教程:网页选项疑难解答Access 2003完整教程:打开或关闭错误检查
Access 2003完整教程:未关联标签和控件Access 2003完整教程:带有键盘快捷键的未关联标签
Access 2003完整教程:Abs 函数Access 2003完整教程:Asc 函数
Access 2003完整教程:Atn 函数Access 2003完整教程:Choose 函数
Access 2003完整教程:Chr 函数Access 2003完整教程:Command 函数
Access 2003完整教程:Cos 函数Access 2003完整教程:CreateObject 函数
Access 2003完整教程:CurDir 函数Access 2003完整教程:CVErr 函数
Access 2003完整教程:Date 函数Access 2003完整教程:DateAdd 函数
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号