第九章:导入和导出数据

通过向 Visual FoxPro 导入数据或从 Visual FoxPro 中导出数据,可以在 Visual FoxPro 和其他应用程序之间复制数据。数据可以是文本、电子表格和表文件格式中的一种。可以用现有数据创建新的 Visual FoxPro 表,或将其添加到已有的 Visual FoxPro 表中,还可以把数据复制到不同类型的文件内。

有关与其他应用程序共享数据的方法,请参阅第十章“与其他应用程序共享信息”

本章要点:

理解导入和导出

要想复制 Visual FoxPro 之外的数据,有三种方法可供选择:

  1. 导入

  2. 追加

  3. 导出

导入或追加数据,是把数据从另一个应用程序置入 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 数据的内容,请参阅本章前面的“选择导入的文件类型”部分。

使用“导入向导”导入数据

导入向导可以帮助您利用源文件创建一个新表。向导提出一系列问题,并根据您回答的内容导入文件,而且允许您控制新表的结构。

若要使用“导入向导”导入文件

  1. 从“文件”菜单中选择“导入”命令。

  2. 从“导入”对话框中选择“导入向导”。

  3. 按照向导屏幕上的提示进行操作。

将数据导入新表

可以从表或电子表格中导入数据,并用源文件的结构定义新表。

若要向新表中导入数据

  1. 从“文件”菜单中选择“导入”命令。

    “导入”对话框

  2. 在“类型”框中,输入要导入文件的格式

  3. 在“来源于”框内,输入源文件名。

  4. 如果在“类型”框内选定了电子表格,则在新显示的“工作表”框内输入工作表号。

  5. 选择“确定”。

    Visual FoxPro 用源文件创建新表。

如果不使用导入向导直接从文本文件导入到新表,则需先创建新表,使其字段与文本文件中字段的顺序、数据类型和宽度相匹配,再将该文件追加到新表中。

导入文件后,可将新表添加到选定的数据库中。有关详细内容,请参阅第三章“将表加入数据库”。也可使用“表设计器”修改新表。有关详细内容,请参阅第二章“创建表和索引”

从 Lotus 1-2-3 导入

导入电子表格数据时,Visual FoxPro 使用 Lotus 1-2-3 电子表格的第一行确定新表字段的数据类型。如果第一行有每列的文字标题,则表中的所有字段都将是字符型字段,即使其他行含有数字数据也是如此。

若要确保字段具有正确的数据类型

Lotus 储存的数据中日期无负数,从 1900 年 1 月 1 日开始。如果新表中有不正确的数据类型,可以把 Lotus 日期字段转换成 Visual FoxPro 格式。

转换 Lotus 日期字段

如果输入的 Lotus 日期字段不正确,可将其转换,方法是在字段日期值中添加公历日期 1900 年 1 月 1 日(值为 2415019)。

若要转换 Lotus 日期字段

  1. 将电子表格导入 Visual FoxPro 表中。

  2. 使用“表设计器”修改表,然后向表添加新日期字段。

  3. 如果按数字值导入日期,要使用“REPLACE”命令和 CTOD( ) 函数将日期复制到新字段中。
    REPLACE ALL NewDateField ;
    WITH CTOD(SYS(10,OldDateField+2415019))
    

    – 或者 –

    如果按字符值导入日期,要使用下列命令将日期复制到新字段中:

    REPLACE ALL NewField ;
    WITH CTOD(SYS(10,VAL(OldField)+2415019))
    
  4. 从表中删除原来不正确的日期字段。

从 Microsoft Excel 导入

导入工作表数据时,Visual FoxPro 使用 Microsoft Excel 工作表的第一行确定新表字段的数据类型。如果第一行有每列的文字标题,则表中的所有字段都将是字符型字段,即使其他行含有数字数据也是如此。

若要确保字段具有正确的数据类型

追加数据

可以把文本、电子表格或者表中的数据添加到一个已有的 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 命令”

使用“导入向导”追加数据

导入向导提出一系列问题,并且根据回答内容从源文件导入数据。使用向导,可以通过更改列数来选择将源字段映射到目标字段。

若要使用“导入向导”导入文件

  1. 从“文件”菜单中选择“导入”命令。

  2. 从“导入”对话框中选择“导入向导”。

  3. 按照向导屏幕上的提示进行操作。

把数据追加到已有表

可以从其他文件向活动表中添加记录。默认情况下,Visual FoxPro 将所有记录和字段添加到表中。使用“追加来源”选项,可以选定字段或者选定记录。有关选定字段和记录的详细内容,请参阅本章稍后的“选择追加字段”“选择追加记录”部分。

若要追加数据

  1. 浏览目标表。

  2. 从“表”菜单中选择“追加记录”。

    “追加来源”对话框

  3. 在“类型”框内输入源文件的格式。

  4. 在“来源于”框中输入源文件名。

  5. 在“到”框中,确保表名的正确性。

    提示 如果表名不正确,应选择“取消”,然后打开正确的目标表。当选定“追加来源”命令时,“到”框中显示的表是活动的。

  6. 如果想指定追加字段或有选择地追加记录,请选择“选项”按钮并在“追加来源选项”对话框中填入适当的内容。

  7. 选择“确定”。

    Visual FoxPro 将记录添加到表中。

选择追加字段

若希望仅从源文件中追加某些字段,可以选择这些字段,使之包含于“追加来源”过程中。

若要选择追加字段

  1. 从“表”菜单中选择“追加记录”。

  2. 在“追加来源”对话框中,输入源文件类型和文件名,然后选择“选项”。

    “追加来源选项”对话框

  3. 在“追加来源选项”对话框中,选择“字段”。“字段选择器”对话框显示了目标表中的字段。

    “字段选择器”对话框

  4. 选择与从源文件中追加的字段相符的字段,并选择“添加”,然后选择“确定”。

    所选的字段出现在“选定字段”框中。

  5. 选择“确定”。

选择追加记录

如果希望仅追加某些记录,则可以使用“FOR”表达式。Visual FoxPro 使用该表达式查找整个文件,以追加那些仅与您所提供的表达式相符的记录。“FOR”表达式中指定的字段必须同时存在于源文件和目标文件中。

若要选择追加记录

  1. “浏览”目标表,然后从“表”菜单中选择“追加记录”。

  2. 输入源文件类型和名称,然后选择“选项”。

  3. 选择“For”,在“表达式生成器”对话框中构造表达式。

    注释 不必输入“FOR”命令,因为它是隐含的。例如,键入 customer.country = "Canada"时,系统将仅追加有关加拿大的信息。

  4. 选择“确定”。

追加文本文件

如果从文本文件追加字段,Visual FoxPro 假定字段用逗号分隔,并且每个字符字段用引号括起。如果将小数点字符显示为逗号,数字和货币数据可能会被分为多个字段。

追加数值或货币文本

如果将 Visual FoxPro 小数点字符改为逗号,则在追加或导出数据时,数值和货币可能被分为多个字段。例如,Visual FoxPro 将把 100,00 转换成两个字段,因为它用逗号作为分隔符。任选下列一种方法,确保正确地转换逗号:

若要从文本文件追加,可将字段分隔符改为制表符,再使用带有关键字 DELIMITED WITH TAB 的 APPEND FROM 命令。

若在追加文本文件之前已经将小数点字符改为句点,则在追加文件后应改回逗号。

若要改变小数点字符

  1. 在“命令”窗口中键入下列命令。
    SET POINT TO
    
  2. 使用关键词 DELIMITED 导入文件。

  3. 在“命令”窗口中键入下列命令,将小数点字符重新设为逗号。
    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 表复制到新文件中,也可以仅复制选定的字段和记录。

若要导出数据

  1. 从“文件”菜单中选择“导出”。

    “导出”对话框

  2. 在“类型”框中输入目标文件类型。

  3. 在“到”框中,输入目标文件名。

  4. 在“来源于”框中,输入源文件名。

  5. 如果想挑选导出的字段或记录,应选择“选项”并在“导出选项”对话框填入相应的内容。

  6. 选择“确定”。

选择导出字段

默认情况下,Visual FoxPro 将源表中所有字段导出到目标文件中。使用“导出选项”对话框,可以选择要导出哪些字段。

若要选择导出字段

  1. 从“文件”菜单中选择“导出”。

    “导出”对话框

  2. 在“导出”对话框中,输入目标文件的类型和名称。

  3. 在“来源于”框中,输入源文件名。

  4. 选择“选项”。

    “导出选项”对话框

  5. 选择“字段”并从“字段选择器”对话框中选择字段。

  6. 选择“确定”。

选择导出记录

在导出数据时,可能需要通过提供选择条件来限制复制到新文件中的记录数目。您可以:

可以使用上述选项的任意组合。WHILE 表达式将覆盖其他条件。

导出一定数量或范围的记录

限制记录数目的方法之一是指定一定数量或范围的记录。使用“作用范围”选项,可以导出一条记录或者在文件中连续放置的一组记录。

注释 活动索引和当前记录指针会影响作用范围选项中“后续”和“其余”的结果。例如,按“姓”索引的表的下一条记录可能不同于按“州”索引的表的下一条记录,但不影响“记录号”选项,因为表被索引时记录的序号并不改变。

若要导出有限数目的记录

  1. 从“文件”菜单中选择“导出”。

  2. 输入源表和目标文件信息。

  3. 选择“选项”。

    “导出选项”对话框

  4. 选择“作用范围”。

    “作用范围”对话框

  5. 在“作用范围”对话框中选择适当的范围选项。
    若要导出 请选择
    源文件中的每一条记录 全部
    从当前记录开始的一系列记录 后续
    一个指定记录号的记录 记录号
    从当前记录直到文件尾的记录 其余

  6. 选择“确定”。

  7. Visual FoxPro 将导出所选范围内的记录。

导出符合某一条件的记录

如果希望导出的记录在表内是不连续的,则您可以构造一个逻辑表达式以指定导出记录必须满足的条件。例如,可以选择导出其中某一字段具有特定值的所有记录。

若要输入导出记录的条件

  1. 从“文件”菜单中选择“导出”。

  2. 输入源表和目标文件信息。

  3. 选择“选项”。

  4. 选择“For”,在“表达式生成器”对话框中构造表达式。

    注释 不需要在表达式中加入“FOR”命令。例如,键入 customer.country = "Canada"时,系统将仅导出有关加拿大的数据。

  5. 选择“确定”。

    Visual FoxPro 将计算所有的记录,并导出那些匹配表达式中条件的记录。

控制记录的导出过程

在导出时,可以指定一个必须满足才能继续计算和选择记录的条件,用“WHILE”表达式可以输入这个条件。

只要 WHILE 表达式为真,Visual FoxPro 就处理源表。当发现一个不满足条件的记录时,Visual FoxPro 将结束计算过程然后导出选定记录。这个选项允许您根据字段以外的信息导出记录。

提示 如果在未索引过的文件中使用 WHILE 表达式,还没能计算所有合适的记录可能就结束了导出过程。在实施导出过程之前,应确保源表对所需的 WHILE 表达式有适当的活动索引。

若要输入结束记录导出的条件

  1. 从“文件”菜单中选择“导出”。

  2. 输入源表和目标文件信息。

  3. 选择“While”,在“表达式生成器”对话框中构造表达式。

    注释 不需要在语句中加入 WHILE 命令。例如,键入 sales > 1000 时,系统将只查看销售额高于 1,000 美元的记录。

  4. 选择“确定”。

    当表达式为真时,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命令

若在导出文本文件之前已经将小数点字符变为句号,则在导出文件后应该改回。

若要改变小数点字符

  1. 在“命令”窗口中键入下列命令。
    SET POINT TO
    
  2. 使用关键词 DELIMITED 导出文件。

  3. 在“命令”窗口中键入下列命令,将小数点字符重新设为逗号。
    SET POINT TO ','