Note | 该命令在头文件中定义,将由 X# 预处理器预处理为函数调用。如果禁用标准头文件 (-nostddefs),该命令将不可用。如果告诉编译器使用不同的标准头文件(-stddef ),则此命令也可能不可用。 |
从数据库或文本文件导入记录。
APPEND FROM <xcSourceFile>
[FIELDS <idFieldList> | FIELDS LIKE <Skeleton> | FIELDS EXCEPT <Skeleton>]
[<Scope>] [WHILE <lCondition>] [FOR <lCondition>]
[[TYPE] [DELIMITED [WITH <Delim> | WITH BLANK | WITH TAB
| WITH CHARACTER <cDelim>] | DIF | FW2 | MOD | PDOX | RPD |
SDF | SYLK | WK1 | WK3 | WKS | WR1 | WRK | CSV | XLS | XL5
[SHEET <cSheetName>] | XL8 [SHEET <cSheetName>]]] [AS <nCodePage>]
FROM <xcSourceFile> | 添加记录的源文件名称,包括可选的驱动器、目录和扩展名。 有关文件搜索和创建规则,请参阅 SetDefault() 和 SetPath()。 数据库文件的默认扩展名由 RDD 决定。 文本文件的默认扩展名是 .TXT。 |
该命令尝试以共享模式打开 <xcSourceFile>。 如果文件不存在,则会出现运行时错误。 如果文件成功打开,则继续执行操作。 如果由于其他进程独占该文件等原因而拒绝访问,NetErr() 将被设置为 “true”。 |
FIELDS <idFieldList> | 要处理的字段列表。默认为所有字段,备注字段除外,除非命令支持 MEMO 子句。 |
只有两个文件中名称和类型相同的字段才会被附加。 如果相同名称的字段在数据类型上不匹配,则会出现运行时错误。 |
FIELDS LIKE <Skeleton> | 可以使用通配符指定字段名称,例如 FIELDS LIKE *name |
FIELDS EXCEPT <Skeleton> | 可以排除主键等字段: FIELDS EXCEPT Id <Skeleton> 支持使用通配符(* 和 ?)。 例如,要替换所有以字母 A 和 P 开头的字段,请使用 FIELDS LIKE A*,P* |
请注意,您可以将 FIELDS LIKE 和 FIELDS EXCEPT 结合使用,但不能将字段列表与 LIKE 和 EXCEPT 子句结合使用。
<Scope> | 当前数据库文件中要处理的部分。 默认为所有可见记录。范围可以是以下一个或多个子句: [NEXT <NEXT>] 可选择指定从源文件第一条记录开始处理的记录数。这将从源文件的第一条记录开始。 [RECORD <rec>] 可选的记录 ID 如果指定,处理将从源文件中的该数据记录开始。 [<rest:REST>] 选项 REST 可指定是否从当前记录到最后一条记录按顺序搜索。如果指定了条件,则选项 ALL 为默认值。 [ALL] 选项 ALL 指定导入源文件中的所有记录。这是默认设置。 |
WHILE <lCondition> | 范围内每条可见记录都必须满足的条件,从当前记录开始。 一旦 while 条件失败,进程就会终止。 如果没有指定 <Scope>,while 条件会将默认范围改为文件中的其他可见记录。 |
FOR <lCondition> | 处理范围内每条可见记录必须满足的条件。 如果某条记录不符合指定条件,则会被忽略,并处理下一条可见记录。 如果没有指定 <Scope> 或 WHILE 子句,则 for 条件会将默认范围改为所有可见记录。 |
DELIMITED WITH <Delim> | 表示字符字段由引号以外的字符分隔。 |
DELIMITED WITH BLANK | 指定包含用空格而不是逗号分隔的字段的文件。 |
DELIMITED WITH TAB | 指定包含用制表符而不是逗号分隔的字段的文件。 |
WITH CHARACTER <cDelim> | 指定包含全部由 Delimiter 指定的字符括起来的字段的文件。如果 Delimiter 是分号(Visual FoxPro 中用于表示命令行续行的字符),请用引号括起分号。您还可以为 Delimiter 指定 BLANK 和 TAB 关键字。 |
WITH Delimiter子句可以与 WITH CHARACTER子句结合使用。 |
TYPE | 在 FoxPro 允许使用的各种类型中,目前 X# 仅支持以下类型: |
SDF SDF 文件是一种 ASCII 文本文件,其中的记录长度固定,以回车和换行结束。字段不分隔。 SDF 文件的扩展名假定为 .txt。 |
CSV 逗号分隔文件。CSV 文件的第一行是字段名;导入文件时会忽略字段名。
CSV 文件的扩展名假定为 .csv。
OTHER 暂时还不支持
AS <nCodePage> | 指定源文件使用的代码页。 暂时还不支持 |
已删除记录: 如果 SetDeleted() 为 FALSE,<xcSourceFile> 中已删除的记录将附加到当前数据库文件并保留其已删除状态。 但如果 SetDeleted() 为 TRUE,删除的记录将不可见,因此不会被处理。
字段宽度不匹配: 如果当前数据库文件中的字段为字符类型,且字段长度大于输入的 <xcSourceFile> 数据,则 APPEND FROM 会用空白填充源数据。 如果当前字段是字符数据类型,且其字段长度小于输入的源数据,则会截断源数据以适应其长度。 如果当前字段是数值类型,而输入源数据的位数多于当前字段的长度,则会出现运行时错误。
本例使用字段列表和条件演示了 APPEND FROM 命令:
USE sales NEW
APPEND FROM branchfile FIELDS Branch, Salesman, Amount FOR Branch = 100
下一个示例演示了如何指定 <Scope> 从另一个数据库文件导入特定记录:
APPEND RECORD 5 FROM temp
XSharp.RT.DLL
COPY TO, DbApp(), DbAppDelim(), DbAppSDF(), RDDSetDefault(), SetDefault(), SetPath(), SetDeleted()