07
2009
05

多个DBF文件合并之蹊跷事件

  如果目录下所有DBF文件的结构都相同,那么如何合并它们?   这个比较简单,创建一个数组,然后偏历目录下所有扩展名为DBF的文件,之后以一个DBF文件为基础,追加其他DBF文件的记录即可。   相应表单按钮Click代码如下: [code]   IF MessageBox('确认合并目录下所有DBF文件?',4+32+256,'请确认')=7 &&用户回答"否"   nodefault &&表示不进行默认的行为模式   ElSE   gnDbcnumber = ADIR(gadbf,'*.dbf') && 创建一个数组   FOR nCount = 1 TO gnDbcnumber && 遍历所有文件中扩展名为.dbf的文件 IF nCount=1 USE (gadbf(nCount,1)) COPY TO MergeData USE MergeData ELSE APPEND FROM (gadbf(nCount,1)) ENDIF   ENDFOR   Close all   Messagebox('合并完毕!',0+64+0,'系统提示')   ENDIF [/code]   当这些DBF文件具有完全相同的结构(字段名称、类型、长度都一致)时,合并工作很顺利,可是如果各个DBF文件的每个字段长度和其他DBF文件相应字段长度都不一致呢?比如说目录下有D1.dbf、D2.dbf、D3.dbf三个文件,其均包含“品名”、“产地”、“数量”等三个文本型字段,其中D1.dbf文件三个字段的长度分别是10、20、15,D2.dbf文件三个字段的长度分别是8、30、20,D3.dbf文件三个字段的长度分别是15、10、10,如果合并的时候以其中的任何一个DBF文件为基础,那么追加其他两个文件的时候,就会出现部分记录部分字段内容不完整的情况。   而如何保证合并这三个DBF文件之后不出现任何记录字段内容不完整的情况呢?那就必须建立一个记录为空的样本DBF文件比如说Model.dbf,这个文件的三个字段的长度应该分别是三个DBF文件中“品名”、“产地”、“数量”等三个字段各自最长的长度,即为15、30、20。手工建立Model.dbf文件后,仍然采用上面的代码合并Model、D1、D2、D3这四个DBF文件,经多次试验,最后发现得到的Mergedata.dbf文件各字段长度并不一定和Model.dbf的一样,而是有可能和上述四个文件中某一个dbf文件的各字段长度一样。   那么这段代码是如何判定一个DBF文件作为样本DBF文件然后追加其他DBF文件的记录呢?这是一个很有意思的问题。   是根据文件创建时间?修改时间?还是文件名?都不是!   在多次尝试和验证后,我终于把这个问题搞清楚了。原来判定的依据是DBF文件在这个文件夹内依次出现的次序,第一个出现(不是创建)在这个文件夹内的DBF文件将自动成为样本DBF文件。如果你搞不清楚哪个文件是第一个出现在文件夹内的,那么你可以把除了想作为样本的DBF文件(比如说Model)之外的那些DBF文件(比如说D1、D2、D3)从文件夹内剪切到文件夹外,然后再剪切进来,这样的话Model.dbf就是第一个出现在文件夹内了。   这是一个很有意思的现象,但作为一个VFP菜鸟,我一直搞不懂原因是什么。感兴趣的朋友可以试试,知道原因的朋友请不吝赐教!
« 上一篇下一篇 »

相关文章:

如何避免表单重复打开?  (2007-8-11 23:26:50)

药品数据分析系统截图  (2007-4-16 13:18:56)

一些很有用的VFP代码  (2007-2-11 10:48:51)

对比程序的最后测试  (2006-5-2 10:7:11)

终于结束了,我的数据库!  (2006-4-27 23:39:33)

求助是一条捷径  (2006-4-12 12:44:0)

重拾遗忘的编程  (2006-4-2 22:22:30)

郁闷的人到深夜  (2005-11-11 20:48:5)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。