| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2541 人关注过本帖
标题:关于dbf文件中数据合并的问题
取消只看楼主 加入收藏
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:12 
关于dbf文件中数据合并的问题
我有2个dbf文件,分别命名为a.dbf和b.dbf,在a.dbf文件中有2000条记录,而b.dbf文件中只有1000条记录(该1000条记录是2000条记录中的一部分)。b.dbf文件中有一个xh字段在a.dbf中没有。现在要将b.dbf文件中的xh字段数据按照ksbh一一对应填入a.dbf文件中,而a.dbf文件中其他字段内容不变,总记录条数仍然是2000条而不是3000条。请问这个该如何实现?注:1.ksbh是两个表中共有的字段,具有同一性,而且在各自表中具有唯一性。2.b.dbf文件中的1000条记录是从a.dbf2000条数据中抽出来的,是不连续的数据。这个问题困扰我很长时间了,而且以后经常遇到,请各位不吝赐教!感谢!
搜索更多相关主题的帖子: 同一性 如何 
2013-01-31 00:19
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用sdta在2013-1-31 00:52:34的发言:

VFP6 代码
USE A AGAIN IN 0
ALTER TABLE A ADD XH C(5) &&5为B表中XH字段的宽度,暂定为字符型。
USE B AGAIN IN 0
SCAN
   UPDATE A SET XH=B.XH WHERE A.KSBH==B.KSBH
ENDSCAN

谢谢版主大力相助!可是总是在vfp6版本里显示‘嵌套错误’呢?

[ 本帖最后由 shyoow 于 2013-1-31 20:20 编辑 ]
2013-01-31 10:57
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用tlliqi在2013-1-31 00:56:01的发言:

SELECT 1
USE a
SELECT 2
USE b
FOR I=1 TO RECCOUNT()
    GO I
    SELECT a
    REPLACE xh WITH b.xh FOR ksbh=b.ksbh
    SELECT b
ENDFOR

谢谢!版主您的程序输入后也显示嵌套错误,不知道什么原因!
2013-01-31 11:00
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用cxzbzgz在2013-1-31 09:49:32的发言:

SELECT 1
 USE a
  INDEX ON ksbh TO ksbh
SELECT 2
 USE b
 GO TOP
 DO whil NOT EOF()
  mksbh=ksbh
  mxh=xh
  SELECT 1
   SEEK mksbh
   IF NOT EOF()
    REPLACE xh WITH mxh
   ENDIF
  SELECT 2
 SKIP
ENDDO

谢谢你的热心解答!可是显示'交互方式下不能使用此语句'
2013-01-31 11:01
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用tlliqi在2013-1-31 17:06:10的发言:

没问题的
看结果图

谢谢版主,不知道什么原因问题依旧。恕我数据不方便透漏!
2013-01-31 19:27
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用taifu945在2013-1-31 16:26:43的发言:

不知道楼主是否想达到以下效果?



只需用一条语句:SELECT T1.*, NVL(T2.Xh,"") AS Xh FROM T1 LEFT JOIN T2 ON T1.Ksbh=T2.Ksbh。其中,T1.DBF和T2.DBF分别相当于你案例中的A.DBF和B.DBF。这只是查询出一个中间表。如果你想把它弄到A.DBF(也就是我例子中的T1.DBF),可以在语句后面增加“INTO TABLE T3”子句,再删除T1.DBF,把T3.DBF改名为T1.DBF即可。

你的方法能够解决我的问题,就是事先T1表中不能有xh这个字段,否则T1中就会新增xh_a这个字段.
另外如果T3、T4。。。等表中分别有如A、B、C等字段数据需要加入T1中,你的给出的程序还需要做怎么样的修改呢?非常感谢!
2013-01-31 19:29
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用cxzbzgz在2013-1-31 11:31:55的发言:

请你把数据表的A和B修改为你的数据表名称,或者作数据表别名,否则在交互方式下肯定会出问题!
SELECT 1
USE a ALIAS 表A  &&这里改为你的表名,一般来说,数据表名不宜用A或者B、C这样单个字母做表名
  INDEX ON ksbh TO ksbh
SELECT 2
USE b ALIAS 表B  &&这里改为你的表名
GO TOP
DO whil NOT EOF()
  mksbh=ksbh
  mxh=xh
  SELECT 1
   SEEK mksbh
   IF NOT EOF()
    REPLACE xh WITH mxh
   ENDIF
  SELECT 2
SKIP
ENDDO

谢谢你的解答!我按照您的要求修改,但是问题仍在!
2013-01-31 19:30
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用sdta在2013-1-31 00:54:59的发言:

SQL-SELECT 代码
SELECT A.KSBH,A.字段1,A.字段1,NVL(B.XH,[]) FROM A FULL JOIN B ON A.KSBH==B.KSBH INTO CURSOR TEMP

SELECT A.KSBH,A.字段1,A.字段1,NVL(B.XH,[]) FROM A LEFT JOIN B ON A.KSBH==B.KSBH INTO CURSOR TEMP

请问版主,这个字段1指的是其他的任意字段吗?
2013-01-31 20:22
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用tlliqi在2013-1-31 20:27:17的发言:

你用的是vfp6 vfp9?

是vfp6
2013-01-31 20:40
shyoow
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2013-1-30
收藏
得分:0 
以下是引用taifu945在2013-1-31 20:26:02的发言:

你自己不是在顶楼说“b.dbf文件中有一个xh字段在a.dbf中没有”的吗?那我这条语句不是正好?你能否把两个数据表的情况和需要的结果表达清楚?

可能是我没有表达清楚.我在1楼的实际情况是a.dbf和b.dbf两个表中都有xh字段,只不过a.dbf表中xh数据为空,而b.dbf表中xh是有数据的。谢谢!
2013-01-31 20:44
快速回复:关于dbf文件中数据合并的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022654 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved