LIST 命令是 VFP 中用于显示数据记录和数据库信息的“瑞士军刀”,它的基本功能是在当前工作区中,按指定条件筛选并显示数据表中的记录。

基本语法
LIST 命令的语法非常灵活,可以根据不同的需求进行组合。
LIST [FIELDS <字段名列表>] [FOR <条件表达式>] [WHILE <条件表达式>]
[OFF] [TO PRINTER [PROMPT] | TO FILE <文件名>]
[<范围>] [NOCONSOLE]
核心参数详解
让我们逐一分解每个参数的作用。
<范围>
指定要显示哪些记录,VFP 提供了四种范围选项:
- ALL (默认值): 显示表中的所有记录。
- NEXT : 从当前记录开始,显示接下来的
nNumRecords条记录。 - RECORD : 仅显示记录号为
nRecordNumber的那条记录。 - REST: 从当前记录开始,显示到表末尾的所有剩余记录。
示例:

* 显示第 5 条记录 LIST RECORD 5 * 从当前记录开始,显示接下来的 3 条记录 LIST NEXT 3 * 显示从当前记录到表末尾的所有记录 LIST REST
FIELDS <字段名列表>
指定要显示哪些字段,如果不使用此子句,默认会显示所有字段。
- 使用逗号 分隔多个字段名。
- 可以使用通配符 来代表所有字段(这与默认行为相同)。
- 可以使用
->或 来访问关联表(Set Relation)中的字段。
示例:
* 只显示姓名和年龄字段 LIST FIELDS 姓名, 年龄 * 显示除了备注字段之外的所有字段(这是一种间接方法,更常用的是直接指定字段) LIST FIELDS 姓名, 年龄, 地址, 电话 * 显示主表和关联表中的字段 * 假设当前表为学生表,与成绩表建立了关联 LIST FIELDS 学生表.姓名, 成绩表.科目, 成绩表.分数
FOR <条件表达式> 和 WHILE <条件表达式>
这两个子句用于筛选记录,只显示满足条件的记录。
- FOR <条件表达式>: 遍历指定范围内的所有记录,将符合条件的记录全部显示出来,这是最常用的筛选方式。
- WHILE <条件表达式>`: 从当前记录开始,一旦遇到不符合条件的记录,就立即停止显示,不再检查后续记录。
关键区别: FOR 会扫描整个范围,而 WHILE 扫描到第一个不满足条件的记录就停止。
示例:
* 显示所有年龄大于 30 的记录 LIST FOR 年龄 > 30 * 显示所有女性记录 (假设性别字段为 '女') LIST FOR 性别 = '女' * 从当前记录开始,连续显示所有年龄小于 25 的记录,一旦遇到年龄>=25的记录就停止 LIST WHILE 年龄 < 25
OFF
在显示结果时,不显示记录号,默认情况下,VFP 会在每条记录前显示其记录号(如 1 姓名...),使用 OFF 可以让输出更简洁。
示例:
* 显示所有男生的姓名和年龄,不显示记录号 LIST FIELDS 姓名, 年龄 FOR 性别 = '男' OFF
TO PRINTER [PROMPT] 和 TO FILE <文件名>
将 LIST 的输出结果发送到指定的地方。
- TO PRINTER: 将结果直接输出到打印机。
- TO PRINTER PROMPT: 在发送到打印机前,会弹出打印对话框,让用户可以选择打印机、设置打印份数等。
- TO FILE <文件名>`: 将结果输出到一个文本文件中,如果文件已存在,默认会覆盖。
示例:
* 将所有信息打印出来 LIST TO PRINTER * 将所有女性员工信息保存到 a.txt 文件中 LIST FIELDS * FOR 性别 = '女' TO FILE a.txt
NOCONSOLE
在执行 LIST 命令时,结果不会在 VFP 的主窗口或当前输出窗口中显示,但会发送到 TO PRINTER 或 TO FILE 指定的目标,这对于后台处理很有用。
示例:
* 静默地将结果保存到文件,不在屏幕上显示 LIST FOR 年龄 > 40 TO FILE old_staff.txt NOCONSOLE
使用示例
假设我们有一个名为 employees.dbf 的表,包含字段:emp_id (员工号), name (姓名), gender (性别), department (部门), salary (薪水), hire_date (入职日期)。
USE employees && 打开 employees 表
* 示例 1: 显示所有记录(默认行为)
LIST
* 示例 2: 显示所有女性员工的信息,不显示记录号
LIST FIELDS name, department, salary FOR gender = '女' OFF
* 示例 3: 显示销售部所有员工的姓名和薪水
LIST FIELDS name, salary FOR department = '销售部'
* 示例 4: 显示薪水最高的前 5 条记录(这里需要技巧,LIST本身不支持TOP)
* 一个变通方法是先按薪水降序排序,然后显示前5条
INDEX ON salary TAG salary DESC
LIST NEXT 5
* 示例 5: 显示 2025 年之后入职的员工信息
LIST FOR hire_date > {^2025-01-01}
* 示例 6: 将所有技术部员工的名单打印出来
LIST FIELDS name FOR department = '技术部' TO PRINTER PROMPT
* 示例 7: 将所有信息导出到一个文本文件
LIST TO FILE employees_backup.txt
CLOSE DATABASES && 关闭表
LIST 与 DISPLAY 的关键区别
在 VFP 中,LIST 和 DISPLAY 命令非常相似,但有一个至关重要的区别:
| 特性 | LIST |
DISPLAY |
|---|---|---|
| 默认范围 | ALL (所有记录) | 当前记录 |
| 暂停显示 | 不暂停,一次性显示所有符合条件的记录。 | 会暂停,当一屏显示不下时,会显示 "Press any key to continue...",按任意键后继续显示下一屏。 |
| 记录指针 | 执行后,记录指针指向表末尾。 | 执行后,记录指针指向最后一条被显示的记录。 |
- 当你想快速查看所有符合条件的记录,并且不希望被中断时,使用
LIST。 - 当你只想查看当前记录,或者希望结果分页显示以便于阅读时,使用
DISPLAY。
DISPLAY 默认只显示当前记录:
GO 3 && 跳转到第3条记录 DISPLAY && 只显示第3条记录的信息
而 LIST 默认会显示所有记录:
LIST && 显示所有记录
希望这份详细的解释能帮助你全面掌握 VFP 的 LIST 命令!
