FindRecord 操作[6]
使用 FindRecord 操作,可以查找符合 FindRecord 参数指定条件的数据的第一个实例。该数据可能是在当前的记录中,在之前或之后的记录中,也可以是在第一个记录中。可以在活动的表数据表、查询数据表、窗体数据表或窗体中查找记录。
FindRecord 操作具有下列参数:
操作参数 |
说明 |
查找内容 |
指定要在记录中查找的数据。请输入想要查找的文本、数字或日期,或在“宏”窗口“操作参数”部分的“查找内容”框中,键入以等号 (=) 开始的表达式。可以使用通配符。该参数是必需的参数。 |
匹配 |
指定数据在字段中所在的位置。可以指定搜索字段中任何部分(“字段任何部分”)的数据、搜索整个字段中(“整个字段”)的数据或搜索位于字段开头部分(“字段开头”)的数据。默认值为“整个字段”。 |
区分大小写 |
指定该搜索是否区分大小写。可单击“是”(进行区分大小写的搜索)或“否”(不区分大小写字母的搜索)。默认值为“否”。 |
搜索 |
指定是从当前记录向记录开头进行搜索(“向上”)还是向记录结尾进行搜索(“向下”),或是向下搜索到记录结尾然后再从记录开头搜索到当前记录,以便对所有的记录都进行搜索(“全部”)。默认值为“全部”。 |
格式化搜索 |
指定搜索中是否包含带格式的数据。可单击“是”(Microsoft Access 在搜索时按字段中所显格式看待数据)或“否”(Access 搜索数据库中存储的数据,这些数据并不总是与其显示的格式相同)。默认值为“否”。 可以使用该功能限制搜索某一特定格式的数据。例如,如果单击“是”,并在“查找内容”参数中键入 1,234,则会在字段中查找包括逗号的格式化数值 1,234。如果要键入 1234 以在该字段中搜索数据,则单击“否”。 搜索日期时,单击“是”可以查找格式完全相同的日期,例如 09-March-2001。如果单击“否”,则要按 Windows 控制面板的“区域设置”中设置的格式在“查找内容”参数中输入日期,该格式显示在“区域设置”的“日期”选项卡上的“短日期格式”框中。例如,如果“短日期格式”框设置为 M/d/yy,则可以输入 3/9/01,并且 Access 将在日期字段中查找所有与 2001 年 3 月 9 日相对应的项目,而忽略该字段的格式。 注意 只有在当前字段为绑定控件,而“匹配”参数设置为“整个字段”,并且“只搜索当前字段”参数设置为“是”,以及“区分大小写”参数设置为“否”时,“格式化搜索”参数才会生效。 如果将“区分大小写”设置为“是”,或者将“只搜索当前字段”设置为“否”,则还必须将“格式化搜索”参数设置为“是”。 |
只搜索当前字段 |
指定是在每个记录的当前字段中进行搜索还是在每个记录的所有字段中进行搜索。在当前字段中进行搜索较快。可单击“是”(只在当前字段中搜索)或“否”(在每个记录的所有字段中搜索)。默认值为“是”。 |
查找第一个 |
指定是从第一个记录还是从当前记录开始搜索。 可单击“是”(从第一个记录开始)或“否”(从当前记录开始)。默认值为“是”。 |
说明 当某个宏运行 FindRecord 操作时,Access 将在记录中搜索指定数据(搜索的顺序由“搜索”参数的设置决定)。当 Access 查找到指定的数据时,该数据会在记录中被选定。
FindRecord 操作与单击“编辑”菜单中的“查找”命令具有相同的作用,而且其参数与“在字段中查找”对话框中的选项相同,可以通过单击“编辑”菜单中的“查找”打开该对话框。如果在“宏”窗口中设置 FindRecord 参数,然后运行宏,那么单击“查找”命令时,将会在“在字段中查找”对话框中看到已选择了对应的选项。
在一次数据库会话中,Access 会保留最近的 FindRecord 参数,执行后续的 FindRecord 操作时,无需重复输入同样的条件。如果将某个参数留空,Access 会使用该参数最近的设置,即由上一次 FindRecord 操作或“在字段中查找”对话框中进行的设置。
如果想通过宏来查找记录,请使用 FindRecord 操作,而不要使用 RunCommand 操作并将其参数设置为运行“查找”命令。
注意 虽然 FindRecord 操作可以对应于表、查询和窗体的“编辑”菜单上的“查找”,但是不对应于“代码”窗口的“编辑”菜单上的“查找”。不能使用 FindRecord 操作来搜索模块中的文本。
如果在执行 FindRecord 宏操作时当前选择的文本与搜索文本相同,那么搜索会紧接所选内容之后在同一字段、同一记录中开始。否则搜索会从当前记录的开头开始。这样可以在单个记录中查找符合相同搜索条件的多个实例。
不过,请注意,如果使用命令按钮来执行包含 FindRecord 操作的宏,系统会重复查找符合搜索条件的第一个实例。之所以发生这种情况,是因为单击命令按钮时,会从包含匹配值的字段中删除焦点,然后 FindRecord 操作将从记录的开头进行搜索。若想避免这种问题,可使用不改变焦点的技术执行宏,这些技术包括自定义工具栏按钮或 AutoKeys 宏中定义的组合键,也可以在执行 FindRecord 操作之前,在宏中将焦点设置到包含搜索条件的字段中。
如果使用命令按钮来运行包含 FindNext 操作的宏,也会发生同样的情况。
若要在 Visual Basic 中运行 FindRecord 操作,请使用 DoCmd 对象的 FindRecord 方法。
GoToControl 操作
使用 GoToControl 操作,可以把焦点移到打开的窗体、窗体数据表、表数据表或查询数据表中当前记录的指定字段或控件上。如果要让某一特定的字段或控件获得焦点,可以使用该操作。然后可将获得焦点的字段或控件用于比较或 FindRecord 操作。另外,还可以根据特定的条件,使用该操作在窗体中进行定位。例如,如果用户在“健康保险”窗体中的“婚姻”控件下输入“否”,那么焦点会自动跳过“配偶姓名”控件而移到下一个控件。
注意 此操作不能用于数据访问页。
GoToControl 操作具有下列参数:
操作参数 |
说明 |
控 件 名 称 |
要在其中放置焦点的字段或控件的名称。在“宏”窗口“操作参数”部分的“控件名称”框中输入字段名称或控件名称。这是必需的参数。 注意 在“控件名称”参数中只需输入字段名称或控件名称,而不必输入完全合格的标识符,如 Forms!产品![产品 ID]。 |
说明 不能使用 GoToControl 操作将焦点移到隐藏窗体的控件上。
提示 可以使用 GoToControl 操作将焦点移动子窗体上,子窗体是一种控件。然后可以使用 GoToRecord 操作移到子窗体中的特定记录中。另外,也可以移到子窗体的控件上,方法是使用 GoToControl 操作先移到子窗体中,然后再移动到子窗体上的控件上。
若要在 Visual Basic 中运行 GoToControl 操作,可使用 DoCmd 对象的 GoToControl 方法。也可以使用 SetFocus 方法,将焦点移到窗体或其任何子窗体的控件上或者打开的表、查询、窗体数据表的字段中。
下面的宏使用“供应商”窗体中的一个按钮打开“增加产品”窗体。它显示了 Echo、Close、OpenForm、SetValue 及 GoToControl 操作的使用方法。SetValue 操作将“产品”窗体中的“供应商ID”控件设置为“供应商”窗体中的当前供应商,然后 GoToControl 操作将焦点移到“类别ID”字段,以便输入新产品的数据。该宏应附加到“供应商”窗体的“添加产品”按钮上。
操作 |
参数:设置 |
备注 |
Echo |
打开回响:否 |
在宏执行当中停止屏幕更新。 |
Close |
对象类型:窗体 对象名称:产品列表 保存:否 |
关闭“产品列表”窗体。 |
OpenForm |
窗体名称:产品 视图:窗体 数据模式:添加 窗口模式:普通 |
打开“产品”窗体。 |
SetValue |
项目:[Forms]![产品]![供应商ID] 表达式:供应商ID |
将“供应商ID”控件设为“供应商”窗体中的当前供应商。 |
GoToControl |
控件名称:类别ID |
移到“类别ID”控件。 |
下面的验证宏检查在“供应商”窗体中输入的邮政编码。它显示 StopMacro、MsgBox、CancelEvent 及 GoToControl 操作的使用方法。条件表达式用于检查在该窗体上记录中输入的国家/地区和邮政编码。如果邮政编码不符合其国家/地区的正确格式,宏将显示消息框,并取消对记录的保存。然后您将返回到“邮政编码”控件并可以在那里改正错误。该宏应附加到“供应商”窗体的 BeforeUpdate 属性。
条件 |
操作 |
参数:设置 |
备注 |
IsNull([国家/地区]) |
StopMacro |
|
如果“国家/地区”为 Null,就无法验证邮政编码。 |
[国家/地区] In ("法国","意大利","西班牙") And Len([邮政编码]) <> 5 |
MsgBox |
消息:邮政编码必须为 5 个字符。 发嘟嘟声:是 类型:信息 标题:邮政编码错误 |
如果邮政编码不是 5 个字符,则会显示消息。 |
... |
CancelEvent |
|
取消事件。 |
|
GoToControl |
控件名称:邮政编码 |
|
[国家/地区] In ("澳大利亚","新加坡") And Len([邮政编码]) <> 4 |
MsgBox |
消息:邮政编码必须为 4 个字符。 发嘟嘟声:是 类型:信息 标题:邮政编码错误 |
如果邮政编码不是 4 个字符,则会显示消息。 |
... |
CancelEvent |
|
取消事件。 |
|
GoToControl |
控件名称:邮政编码 |
|
([国家/地区] = "加拿大") And ([邮政编码] Not Like"[A-Z][0-9][A-Z] [0-9][A-Z][0-9]") |
MsgBox |
消息:邮政编码无效。加拿大编码示例:H1J 1C3 发嘟嘟声:是 类型:信息 标题:邮政编码错误 |
如果邮政编码不符合加拿大的有效格式,则会显示消息。(加拿大编码示例:H1J 1C3) |
... |
CancelEvent |
|
取消事件。 |