魏荣华山东省滨州市惠民县第二中学251700
摘要:利用程序对两个或多个数据表进行有条件合并、修改、交换数据,有多种方法,哪种方法效率最高呢?请看我们的分析。
关键词:表间操作两表合并两表对比VFP效率
前言:
在教学成绩分析、财务管理过程中,需要两个数据表对比操作、交换数据等。这些操作要求安全、可靠,不能漏掉信息,不能破坏原有数据等。
一、VFP数据库概述
VFP数据库以其强健的工具和面向对象的以数据为中心的语言,将客户、服务器和网络功能集成于现代化的、多链接的应用程序中,充分发挥了面向对象编程技术与事件驱动方式的优势。VFP6是目前世界流行的小型数据库管理系统中性能最好、功能最强的优秀软件之一。
二、不同操作的比较
电脑配置:CPU2.39GHz,1.94GB的内存。
实验1:
(1)我们可以用程序来实现两个数据表的操作,不需要建立主索引,特别是在教务工作中非常实用。
“家庭住址”表结构:
班级:字符型
姓名:字符型
性别、家庭住址、联系电话:字符型
期末成绩:数值型
“期末成绩”表结构:
班级:字符型
姓名:字符型
期末成绩:数值型
操作内容:把“期末成绩表”中的“成绩”合到“家庭住址表”中的“期末成绩”中,要求成绩与学生姓名一一对应。两个表各有1000条记录,有500条记录共有。两表排序是杂乱的。
程序思想:在“期末成绩表”中查找与“家庭住址表”的第一条记录具有相同姓名和班级的记录,找到时执行数据拷贝,并停止搜索。以同样的方式处理“家庭住址表”中的第二条记录,直到处理完“家庭住址表”所有记录。每次查找“期末成绩表”数据,都是从第一条记录开始,防漏掉数据。可以灵活处理两个表或多个表。
程序代码:程序2-1.prg
select1
USE家庭住址.dbf&&可以修改表名,对新表进行操作
select2
USE期末成绩.dbf&&可以修改表名,对新表进行操作
i=0&&记录两个表相同条件的个数
beginner=Seconds()&&自启始以来经历的秒数,对两表操作开始
select1
dowhilenoteof()
select2
go1
dowhilenoteof()
ifalltrim(期末成绩.班级)==alltrim(家庭住址.班级)andalltrim(期末成绩.姓名)==alltrim(家庭住址.姓名)then
replace家庭住址.期末成绩with期末成绩.成绩
i=i+1
exit()
endif
skip
enddo
select1
skip
enddo
?'找到的记录个数:',i
ender=Seconds()
?ender-beginner&&显示程序经历的时间
实验1结果:程序2-1.prg经过运行,把500个成绩赋值到“家庭住址”表中,所需要时间为61.323秒。
(2)既然两个表中的记录没有次序,每次查找、匹配都有可能在最坏条件下进行,这样耗费了很多时间。可以先处理这两个数据表,按照一定条件排序(用姓名升序)。程序2-1.prg经过运行,把500个成绩赋值到“家庭住址”表中,所需要时间为53.125秒。
经过排序,程序运行时间比实验1运行时间减少了8.198秒,效率提高了13%。如果两个表共有数据增多,效率还会提高。假如两个表中姓名、班级一一对应,程序2-1.prg运行时间为34.323秒,比实验1时间缩短了44%。
实验2:
还是“家庭住址”和“期末成绩”两个数据表,我们把两个数据表文件横向连接起来,生成一个新的数据表文件,实现数据的交换。
程序思想:执行该命令时,先将当前表的记录指针指向首记录,然后在别名表中依据指定条件搜索,凡满足条件的别名表的记录都各自与当前表的首记录组成一个新记录,并记入新文件中.随后将当前表的指针移向下一条记录,重复上面的搜索并组成新记录记入新表中,直到最后完成。
程序代码:程序2-2.prg
select1
USE期末成绩.dbfaliasbb&&期末成绩表的别名是bb
select2
USE家庭住址.dbf
beginner=Seconds()
JOINWITHbbtohefields班级,姓名,bb.成绩foralltrim(姓名)==alltrim(bb.姓名)andalltrim(班级)==alltrim(bb.班级)
ender=Seconds()
?"运行时间:",ender-beginner&&显示程序经历的时间
实验2结果:程序2-2.prg运行时间是0.337秒。程序运行效率是很高的,可是合并的数据都是符合条件的,不符合条件的数据是不会出现在新的数据表中的。
实验3:
执行UPDATE命令来实现用一个数据表中的数据来批量更新当前数据表中的有关数据。
数据表之间更新数据的具体操作过程为:先处理别名表中的第一条记录,即在主表中快速查找与该条记录具有相同关键字段值得记录,找到时即执行规定的数据替换工作。然后以同样的方式处理别名表中的第二条记录,直至处理完毕别名表的所有记录。
程序代码:程序2-3.prg
selecta
USE家庭住址.dbf
indexon学号tagbh
selectb
USE期末成绩.dbf
indexon学号tozz
selecta
b=Seconds()
updateon学号frombreplace期末成绩with期末成绩.成绩
c=Seconds()
?c-b
实验3结果:程序2-3.prg运行时间为0.002秒。要求两个表具有相同的关键字段。
三、结束语
通过对不同表间的操作比较,我们已经看出程序执行效率的高低。我们在实际应用过程中,可以灵活运用,方便、准确地完成任务。