王亚军,王传安,宋雪亚,贺文娟
(安徽科技学院 计算机公共教学部,安徽 凤阳 233100)
VFP二维数组在异构表数据复制中的应用
王亚军,王传安,宋雪亚,贺文娟
(安徽科技学院 计算机公共教学部,安徽 凤阳 233100)
数组在VFP数据表之间进行信息传递有着广泛的应用,数组和数据表之间可实现数据横向传递,这给结构相同或相近的表之间进行数据的复制提供了极大的方便.然而,通过二维数组在两个异构表中进行数据的复制无法直接实现,为了解决异构表之间的数据传递的问题,文章通过对异构表之间数据传递关系的分析,提出了一种利用两个二维数组迂回比较来解决异构表之间数据传输的方法,希望为用户处理类似问题提供帮助和参考.
VFP;异构表;二维数组;数据复制
在VFP中,数组就是变量名相同而下标不同的一组变量,它由一系列元素组成,每个数组元素可通过数组名及相应的下标来访问[1].数组在VFP中有着广泛的应用,例如用它来存储和显示数据表的记录、快速定义变量等场合[2].数组的引入,不仅可以大大提高运算速度,而且使许多复杂的编程问题变得非常简单,且比较方便灵活.VFP支持一维和二维数组,允许数组元素具有不同的数据类型[3].
数组和数据表之间可相互传递,即数据表中数据可以传递给数组,反过来,数组中的数据也可以添加到数据表中.二维数组与数据表记录之间的数据交换可以通过COPY TO ARRAY和APPEND FROM ARRAY命令来完成[4],其中COPY TO ARRAY命令用于将当前表的若干条记录复制到指定的二维数组中,APPEND FROM ARRAY则实现把二维数组中的值添加的数据表的末尾[5].用APPEND FROM ARRAY命令把数组元素中的值添加到数据表的末尾时,只能实现横向添加,若要实现把二维数组某列元素的值添加到数据表某行的多个字段中,还没有现成的方法,要实现这样的功能还必须得借助二维数组在两个表之间进行迂回方可实现.下面就通过一个例子来说明:
有一个数据表student(姓名C(9),学院C(20),寄发单位地C(4)),如图1所示,现在要求把student表中学院和寄发单位地相同的记录以每行3人填充到qq表中.qq表中的数据如图2所示.可以看出,用COPY TO ARRAY和APPEND FROM ARRAY命令则无法实现这两个异构表之间的数据传递.若要实现要求的功能,总体思路是:首先必须按学院和寄发单位进行排序,把学院和寄发单位地相同的记录排列在一起;其次,把排序后的记录复制到两个二维数组中;然后,通过比较数组元素中各个记录的学院和寄发单位地的值,把姓名字段的值赋给其中的一个数组的部分元素;最后,把数组中处理好的数据添加到qq表中.
根据上述的总体思路,问题的解决应采用如下详细步骤来处理:
(1)修改student表的结构,把该表的姓名字段名称改名为姓名1,添加两个和姓名1字段具有相同宽度和类型的字段“姓名2”和“姓名3”.修改后的student表如图3所示.
(2)对student表按“学院”和“寄发单位地”两个字段的升序排序生成新表www,用copy to array命令把www表中的所有记录分别复制到数组aa和uu中临时存储起来.其中数组aa用来保存最终处理的结果,数据处理完毕,还要把数组aa中的值添加到qq表中.
(3)清空数组aa中每一行前三列元素的值,即每一条记录的姓名1,姓名2,姓名3的值都为空.
(4)复制www表的结构到qq表,删除www.dbf文件,打开qq表.
(5)把学院和寄发单位地相同的记录的姓名1字段的值赋给数组aa的每一行的前三个元素:从数组uu的第i行(i=1)开始,依次用第4列和第5列的值分别与后继的各行(第j行,j=2)的第4列和第5列的值进行比较,若发现两行的第4列和第5列相等,则把第j行第1列中的值依次赋给数组 aa(i,k),(其中 k=1,2,3),k>3 时,i的值增加 1,k 的值变为1;反之,则让j的值赋给i,再重复上述的比较工作.
图1 student表及其中的数据
图2 qq表及其中的数据
图3 修改结构后的student表
(6)把数组aa中的各行元素的值用append from array命令添加到数据表qq中,然后删除数组aa、uu及qq表中姓名1,姓名2,姓名3都为空的记录.
具体的源程序如下:
文章从分析二维数组和数据表之间数据传递的特点出发,发现二维在处理异构表之间数据的传递时没有直接的方法.为解决异构表之间数据的快速复制的难题,本人通过寻找两个异构表表结构之间的关系,用二维数组迂回比较的方法,实现了把一个表中多条记录的某个字段的值复制到另一个表的多个字段,从而为处理类似问题提供了方便和参考.
〔1〕李雁翎.VisualFoxPro应用基础与面向对象程序设计教程[M].北京:高等教育出版社,2008.
〔2〕王志强.定义和使用Visual FoxPro数组应注意的几个问题.甘肃科技纵横,2010(1):31-32.
〔3〕翁正科.VisualFoxPro6.0 数据库开发教程[M].北京:清华大学出版社,2000.
〔4〕郝锋.Visual FoxPro 6.0/7.0 命令函数大全[M].北京:电子工业出版社,2002.
〔5〕李作主.巧用数组实现多表数据的更新[J].科技信息(学术研究),2008(36):111.
TP392
A
1673-260X(2012)11-0030-02
安徽科技学院教研课题(X201014)