通过向 Visual FoxPro 导入数据或从 Visual FoxPro 中导出数据,可以在 Visual FoxPro 和其他应用程序之间复制数据。数据可以是文本、电子表格和表文件格式中的一种。可以用现有数据创建新的 Visual FoxPro 表,或将其添加到已有的 Visual FoxPro 表中,还可以把数据复制到不同类型的文件内。
有关与其他应用程序共享数据的方法,请参阅第十章“与其他应用程序共享信息”。
本章要点:
要想复制 Visual FoxPro 之外的数据,有三种方法可供选择:
导入或追加数据,是把数据从另一个应用程序置入 Visual FoxPro 中。导出数据则是把数据从 Visual FoxPro 表发送到另外一个应用程序所使用的文件中。这些方法允许复制和使用数据而不是链接或共享数据。如果选择在应用程序之间创建链接,请参阅第十章“与其他应用程序共享信息”。
向 Visual FoxPro 表中导入或追加数据
导入数据的过程是从源文件中复制数据,然后创建新表,并用源文件的数据填充该表。例如,可以从 dBASE 表中复制数据来创建 Visual FoxPro 表。导入文件后,可以象使用其他任何 Visual FoxPro 表一样使用它。
追加数据是把源数据添加在 Visual FoxPro 表的最后一条记录之后。可以指定要导入的字段,以及选定满足某一表达式条件的所有记录。完成追加之后,可以在 Visual FoxPro 表中查看和编辑这些记录。
导出数据是把数据从 Visual FoxPro 表复制到其他应用程序使用的文件中。例如,可以将 Visual FoxPro 的数据导出到一个 Excel 电子表格文件中。
从 Visual FoxPro 中导出数据
可以选定源文件和目标文件,也可以指定导出字段、设置导出记录的作用范围和选定满足某一条件的记录。
如果要从源文件中导入数据,可以让 Visual FoxPro 定义新表的结构,或者使用导入向导来指定它的结构。Visual FoxPro 用源文件中的字段顺序来定义目标表的结构。如果希望自己定义结构,可以在源应用程序中修改文件或者使用“导入向导”。
如果已经不再访问支持源文件的应用程序,但希望更改字段的顺序或数据类型,可以在导入源文件后创建查询,用该查询将字段按所需的顺序输出到另外一个新表中。有关详细内容,请参阅第四章“检索数据”。
导入文件时,必须选择文件类型并指定源文件和目标表的名称。
下表列出了可导入 Visual FoxPro 的文件类型:
文件类型 | 文件扩展名 | 说明 |
Microsoft® Excel | XLS | Microsoft Excel(2.0、3.0、4.0 和 5.0 版本)电子表格格式。列单元转变为字段,行转变为记录。 |
Lotus 1-2-3 | WKS WK1 WK3 |
1-A、2.x 和 3.x 版本的 Lotus 1-2-3 电子表格格式。列单元转变为字段,行转变为记录。 |
Borland Paradox | db | 3.5 和 4.0 版本 Paradox 表 |
如果想使用早期版 FoxPro 或 dBASE 文件中的表,可以直接打开使用而不必导入。Visual FoxPro 将询问您是否把表转换为 Visual FoxPro 6.0 格式。表经过版本转换后,不能再用以前的版本打开。
有关导入文件的详细内容,请参阅“IMPORT 命令”。
有关影响导入 Microsoft Excel、Lotus 以及 Microsoft Access 数据的内容,请参阅本章前面的“选择导入的文件类型”部分。
导入向导可以帮助您利用源文件创建一个新表。向导提出一系列问题,并根据您回答的内容导入文件,而且允许您控制新表的结构。
若要使用“导入向导”导入文件
可以从表或电子表格中导入数据,并用源文件的结构定义新表。
若要向新表中导入数据
“导入”对话框
Visual FoxPro 用源文件创建新表。
如果不使用导入向导直接从文本文件导入到新表,则需先创建新表,使其字段与文本文件中字段的顺序、数据类型和宽度相匹配,再将该文件追加到新表中。
导入文件后,可将新表添加到选定的数据库中。有关详细内容,请参阅第三章“将表加入数据库”。也可使用“表设计器”修改新表。有关详细内容,请参阅第二章“创建表和索引”。
导入电子表格数据时,Visual FoxPro 使用 Lotus 1-2-3 电子表格的第一行确定新表字段的数据类型。如果第一行有每列的文字标题,则表中的所有字段都将是字符型字段,即使其他行含有数字数据也是如此。
若要确保字段具有正确的数据类型
注意 如果工作表的版本为 2.x 或 3.x(文件扩展名为 .wk1 或 .wk3),并且有的列中字符多于八个或九个时,Visual FoxPro 对 2.x 版的工作表将只取前九个字符,对 3.x 版的工作表将只取前八个字符。如果不希望截取表中的字段,可使用“导入向导”或先创建 Visual FoxPro 表,再从工作表中追加记录。
Lotus 储存的数据中日期无负数,从 1900 年 1 月 1 日开始。如果新表中有不正确的数据类型,可以把 Lotus 日期字段转换成 Visual FoxPro 格式。
如果输入的 Lotus 日期字段不正确,可将其转换,方法是在字段日期值中添加公历日期 1900 年 1 月 1 日(值为 2415019)。
若要转换 Lotus 日期字段
REPLACE ALL NewDateField ;
WITH CTOD(SYS(10,OldDateField+2415019))
– 或者 –
如果按字符值导入日期,要使用下列命令将日期复制到新字段中:
REPLACE ALL NewField ;
WITH CTOD(SYS(10,VAL(OldField)+2415019))
导入工作表数据时,Visual FoxPro 使用 Microsoft Excel 工作表的第一行确定新表字段的数据类型。如果第一行有每列的文字标题,则表中的所有字段都将是字符型字段,即使其他行含有数字数据也是如此。
若要确保字段具有正确的数据类型
注意 如果 Microsoft Excel 工作表中有长度为 255 的字段,当导入 Visual FoxPro 表中时,系统将截取前 254 个字符。
可以把文本、电子表格或者表中的数据添加到一个已有的 Visual FoxPro 表中。默认情况下,Visual FoxPro 使用该文件类型将源字段映象到目标表中。也可以选定要追加的字段和记录。如果希望控制字段的映象,可以使用“导入向导”,但字段选择和逻辑表达式选项不可用。
下表列出了可追加到 Visual FoxPro 中的文件类型:
文件类型 | 文件扩展名 | 说明 |
表 | dbf | 来源于当前数据库以外的 FoxPro® 数据库表或者一个 dBASE 文件。 |
制表符分隔 | txt | 用制表符分隔每个字段的一种文本文件。 |
逗号分隔 | txt | 用逗号分隔每个字段的一种文本文件。 |
空格分隔 | txt | 用空格分隔每个字段的一种文本文件。 |
系统数据格式 | sdf | 具有定长记录且记录以回车和换行符结尾的文本文件。 |
Microsoft Excel | xls | Microsoft Excel(2.0、3.0、4.0、5.0 和 97 版本)电子表格格式。列单元转变为字段,行单元转变为记录。 |
Lotus 1-2-3 | wks wk1 wk3 |
1-A、2.x 和 3.x 版本的 Lotus 电子表格。列单元转变为字段,行转变为记录。 |
Borland Paradox | db | 3.5 和 4.0 版本的 Paradox 表。 |
有关追加文件的详细内容,请参阅“APPEND FROM 命令”。
导入向导提出一系列问题,并且根据回答内容从源文件导入数据。使用向导,可以通过更改列数来选择将源字段映射到目标字段。
若要使用“导入向导”导入文件
可以从其他文件向活动表中添加记录。默认情况下,Visual FoxPro 将所有记录和字段添加到表中。使用“追加来源”选项,可以选定字段或者选定记录。有关选定字段和记录的详细内容,请参阅本章稍后的“选择追加字段”和“选择追加记录”部分。
若要追加数据
“追加来源”对话框
提示 如果表名不正确,应选择“取消”,然后打开正确的目标表。当选定“追加来源”命令时,“到”框中显示的表是活动的。
Visual FoxPro 将记录添加到表中。
若希望仅从源文件中追加某些字段,可以选择这些字段,使之包含于“追加来源”过程中。
若要选择追加字段
“追加来源选项”对话框
“字段选择器”对话框
所选的字段出现在“选定字段”框中。
如果希望仅追加某些记录,则可以使用“FOR”表达式。Visual FoxPro 使用该表达式查找整个文件,以追加那些仅与您所提供的表达式相符的记录。“FOR”表达式中指定的字段必须同时存在于源文件和目标文件中。
若要选择追加记录
注释 不必输入“FOR”命令,因为它是隐含的。例如,键入 customer.country = "Canada"时,系统将仅追加有关加拿大的信息。
如果从文本文件追加字段,Visual FoxPro 假定字段用逗号分隔,并且每个字符字段用引号括起。如果将小数点字符显示为逗号,数字和货币数据可能会被分为多个字段。
如果将 Visual FoxPro 小数点字符改为逗号,则在追加或导出数据时,数值和货币可能被分为多个字段。例如,Visual FoxPro 将把 100,00 转换成两个字段,因为它用逗号作为分隔符。任选下列一种方法,确保正确地转换逗号:
若要从文本文件追加,可将字段分隔符改为制表符,再使用带有关键字 DELIMITED WITH TAB 的 APPEND FROM 命令。
若在追加文本文件之前已经将小数点字符改为句点,则在追加文件后应改回逗号。
若要改变小数点字符
SET POINT TO
SET POINT TO ','
可以把数据从 Visual FoxPro 表导出到文本文件、电子表格或者其他应用程序使用的表中。导出过程需要一个源表以及目标文件的类型和名称。如有必要,还可以对导出哪些字段和记录进行选择。可以在任何支持所选文件类型的应用程序中使用生成的文件。
下表列出了可从 Visual FoxPro 导出的文件类型:
文件类型 | 文件扩展名 | 说明 |
制表符分隔 | txt | 用制表符分隔每个字段的文本文件。 |
逗号分隔 | txt | 用逗号分隔每个字段的文本文件。 |
空格分隔 | txt | 用空格分隔每个字段的文本文件。 |
系统数据格式 | sdf | 具有定长记录且记录以回车和换行符结尾的文本文件。 |
表 | dbf | Visual FoxPro、FoxPro、FoxBASE+®、dBASE 或 Paradox 3.5 或 4.0 表。 |
Microsoft Excel | xls | Microsoft Excel(2.0、3.0、4.0、5.0 和 97 版本)电子表格格式。列单元转变为字段,行转变为记录。 |
Lotus 1-2-3 | wks wk1 |
1-A、2.X 和3.X 版本 Lotus1-2-3 电子表格。列单元转变为字段,行转变为记录。 |
有关导出的详细内容,请参阅“COPY TO 命令”。
可以把所有字段和记录从 Visual FoxPro 表复制到新文件中,也可以仅复制选定的字段和记录。
若要导出数据
“导出”对话框
默认情况下,Visual FoxPro 将源表中所有字段导出到目标文件中。使用“导出选项”对话框,可以选择要导出哪些字段。
若要选择导出字段
“导出”对话框
“导出选项”对话框
在导出数据时,可能需要通过提供选择条件来限制复制到新文件中的记录数目。您可以:
可以使用上述选项的任意组合。WHILE 表达式将覆盖其他条件。
限制记录数目的方法之一是指定一定数量或范围的记录。使用“作用范围”选项,可以导出一条记录或者在文件中连续放置的一组记录。
注释 活动索引和当前记录指针会影响作用范围选项中“后续”和“其余”的结果。例如,按“姓”索引的表的下一条记录可能不同于按“州”索引的表的下一条记录,但不影响“记录号”选项,因为表被索引时记录的序号并不改变。
若要导出有限数目的记录
“导出选项”对话框
“作用范围”对话框
若要导出 | 请选择 |
源文件中的每一条记录 | 全部 |
从当前记录开始的一系列记录 | 后续 |
一个指定记录号的记录 | 记录号 |
从当前记录直到文件尾的记录 | 其余 |
如果希望导出的记录在表内是不连续的,则您可以构造一个逻辑表达式以指定导出记录必须满足的条件。例如,可以选择导出其中某一字段具有特定值的所有记录。
若要输入导出记录的条件
注释 不需要在表达式中加入“FOR”命令。例如,键入 customer.country = "Canada"时,系统将仅导出有关加拿大的数据。
Visual FoxPro 将计算所有的记录,并导出那些匹配表达式中条件的记录。
在导出时,可以指定一个必须满足才能继续计算和选择记录的条件,用“WHILE”表达式可以输入这个条件。
只要 WHILE 表达式为真,Visual FoxPro 就处理源表。当发现一个不满足条件的记录时,Visual FoxPro 将结束计算过程然后导出选定记录。这个选项允许您根据字段以外的信息导出记录。
提示 如果在未索引过的文件中使用 WHILE 表达式,还没能计算所有合适的记录可能就结束了导出过程。在实施导出过程之前,应确保源表对所需的 WHILE 表达式有适当的活动索引。
若要输入结束记录导出的条件
注释 不需要在语句中加入 WHILE 命令。例如,键入 sales > 1000 时,系统将只查看销售额高于 1,000 美元的记录。
当表达式为真时,Visual FoxPro 将导出相应的记录。
导出文本文件时,Visual FoxPro 将假定字段用逗号分隔,并且每个字符字段用引号括起。如果将小数点字符显示为逗号,数字和货币数据可能会被分为不同的字段。
若要导出文本文件,请使用下表所示的带有正确 DELIMITED 项的 COPY TO 命令。
关于这些分隔符 | 请使用 DELIMITED 子句 |
字段间使用逗号分隔,字符字段用引号括起 | DELIMITED |
用不同于引号的其它字符括起字符字段 | DELIMITED WITH delimiter |
字段之间使用制表符分隔 | DELIMITED WITH TAB |
字段之间使用空格分隔 | DELIMITED WITH BLANK1 |
1 以空格分隔的日期和时间,将被分割成带有这些关键字的两个字段。
将 Visual FoxPro 小数点字符改为逗号后,在追加或导出数据时,数值和货币可能会被分为不同的字段。例如,Visual FoxPro 将把 100,00 转换成两个字段,因为它用逗号作为分隔符。任选下列一种方法,可确保正确地转换逗号:
若要导出文本,请使用带有关键词 DELIMITED WITH TAB 的 COPY TO命令。
若在导出文本文件之前已经将小数点字符变为句号,则在导出文件后应该改回。
若要改变小数点字符
SET POINT TO
SET POINT TO ','