Show/Hide Toolbars

XSharp

Note该命令在头文件中定义,将由 X# 预处理器预处理为函数调用。如果禁用标准头文件 (-nostddefs),该命令将不可用。如果告诉编译器使用不同的标准头文件(-stddef ),则此命令也可能不可用。

用途

将记录导出到新的数据库或文本文件。

语法

COPY TO <xcTargetFile> [DATABASE <DbName> [NAME <LongName>]
  [FIELDS FieldList | FIELDS LIKE <Skeleton> | FIELDS EXCEPT <Skeleton>]
  [<Scope>] [FOR <lCondition>] [WHILE <lCondition> ]
  [ [WITH] CDX ] | [ [WITH] PRODUCTION ] [NOOPTIMIZE]
  [ [TYPE] [ FOXPLUS | FOX2X | DIF | MOD | SDF | SYLK | WK1 | WKS | WR1
  | WRK | CSV | XLS | XL5 | DELIMITED [ WITH <Delim> | WITH BLANK
  | WITH TAB | WITH CHARACTER <cDelim> ] ] ] [AS <nCodePage>]

参数

TO <xcTargetFile>目标文件的名称,包括可选的驱动器、目录和扩展名。 有关文件搜索和创建规则,请参阅 SetDefault() 和 SetPath()。 数据库文件的默认扩展名由 RDD 决定。 文本文件的默认扩展名是 .TXT。
 
如果 <xcTargetFile> 不存在,将创建该文件。 如果存在,该命令将尝试以独占模式打开文件,如果成功,文件将被覆盖,不会发出警告或出错。 如果由于其他进程正在使用该文件等原因而拒绝访问,NetErr() 将被设置为 TRUE。

 

DATABASE <DbName>指定添加新表的数据库。 暂不支持。

 

NAME <LongName>指定新表的长名称。长名称最多可包含 128 个字符,可用于替代数据库中的短文件名。 暂不支持。

 

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 子句结合使用。

 

WHILE <lCondition>范围内每条可见记录都必须满足的条件,从当前记录开始。 一旦 while 条件失败,进程就会终止。 如果没有指定 <Scope>,while 条件会将默认范围改为文件中的其他可见记录。

 

<Scope>当前数据库文件中要处理的部分。 默认为所有可见记录。范围可以是以下一个或多个子句:
[NEXT <NEXT>]        可选择指定从源文件第一条记录开始处理的记录数。这将从源文件的第一条记录开始。
[RECORD <rec>]        可选的记录 ID 如果指定,处理将从源文件中的该数据记录开始。
[<rest:REST>]                选项 REST 可指定是否从当前记录到最后一条记录按顺序搜索。如果指定了条件,则选项 ALL 为默认值。
[ALL]                选项 ALL 指定导入源文件中的所有记录。这是默认设置。
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 <Delim> 子句可以与 WITH CHARACTER 子句结合使用。

 

TYPE如果创建的文件不是 XBase 表,则指定文件类型。虽然必须指定文件类型,但不需要包含 TYPE 关键字。
在 FoxPro 允许的各种类型中,目前 X# 仅支持以下类型:
 
SDF        SDF 文件是一种 ASCII 文本文件,其中的记录长度固定,以回车和换行结束。字段不分隔。
       SDF 文件的扩展名假定为 .txt。

 
CSV        逗号分隔文件。CSV 文件的第一行是字段名;导入文件时,字段名将被忽略。

       CSV 文件的扩展名假定为 .csv。

 
FOXPLUS        Visual FoxPro 备注文件的结构与 FoxBASE 备注文件不同。

               如果您的源表包含备注字段,请加入 FOXPLUS 子句以创建一个可在 FoxBASE+ 中使用的表。
               Visual FoxPro 备注字段不能包含二进制数据,因为 FoxBASE+ 不支持备注字段中的二进制数据。
 
FOX2X                创建一个可在 FoxPro 早期版本(2.0、2.5 和 2.6 版)中打开的新表。
 
OTHER        暂不支持。

 

AS <nCodePage>指定目标文件要使用的代码页。暂不支持。
       

注释

已删除记录:如果 SetDeleted() 为 FALSE,源文件中已删除的记录将被复制到 <xcTargetFile> 中,并保留其已删除状态。

 

可见性:但是,如果 SetDeleted() 设置为 "true",删除的记录将不可见,因此不会被处理。 同样,过滤记录(使用 DbSetFilter() 或条件控制命令)也不会被处理。

示例

本例演示了复制到另一个数据库文件:

USE sales NEW
COPY TO temp

本例演示了 SDF 文件的布局,该文件有四个字段,每种数据类型一个字段:

USE testdata NEW
COPY NEXT 1 TO temp SDF
TYPE temp.txt
// Result:  Character   12.0019890801T

下一个示例演示了 DELIMITED 文件的布局:

COPY NEXT 1 TO temp DELIMITED
TYPE temp.txt
// Result:  "Character",12.00,19890801,T

最后,本例演示了使用不同分隔符的 DELIMITED 文件的布局:

COPY NEXT 1 TO temp DELIMITED WITH '
TYPE temp.txt
// Result:  'Character',12.00,19890801,T

程序集

XSharp.RT.DLL

参见

APPEND FROM, COPY FILE, COPY STRUCTURE, DbCopy(), DbCopyDelim(), DbCopySDF(), RDDSetDefault(), SetDefault(), SetPath(), SetDeleted()