| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1635 人关注过本帖
标题:二张表各有一个身份证号字段的值是一样的,就是不匹配.
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9781
专家分:26837
注 册:2012-2-5
收藏
得分:0 
如果A表的身份证号码是正确的,那么先找出B表不正确的身份证号码,最后再导入数据。

坚守VFP最后的阵地
2014-02-15 18:23
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
回复 11楼 sdta
谢谢!
B表身份证号码也是正确的,
2014-02-15 18:45
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9781
专家分:26837
注 册:2012-2-5
收藏
得分:0 
以下是引用tjdeming在2014-2-15 18:45:51的发言:

谢谢!
B表身份证号码也是正确的,
既然两表身份证号码匹配,说明你的代码有问题,自查吧

坚守VFP最后的阵地
2014-02-15 18:56
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
回复 13楼 sdta
代码无问题
2014-02-15 18:59
qjbzjp
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:尧的故乡
等 级:贵宾
威 望:48
帖 子:1914
专家分:4397
注 册:2007-3-14
收藏
得分:2 
以下是引用tjdeming在2014-2-15 16:49:08的发言:

谢谢你!
A表是手工输入的,B表的系统导出的.看起来是一样的,我在替换时,身份证号作关键字段,A表的其他数据无法导入B表.
说明:二个表字段类型均为C,且长度均18。A表是手工输入的,是一张母表,肯定没有其他多余的字符,数据是具有唯一性,是正确的。
我用了以下命令
1.Repl  All 身份证号 With Chrtran(身份证号," ","") 取掉身份证号中的空格替换单个字符
2.repl all 身份证号 WITH CHRTRANC(ALLTRIM(身份证号),[ ],[])  取消全角字符
3.Repl  All 身份证号 With Alltrim(身份证号)        去前后空格  
4.Repl All 身份证号 With STRTRAN(身份证号,CHR(9),[])  &&替换字符串 CHR(9)是水平
来删除多余字段,然后用Set Relation To身份证号Into B 命令来连接替换
结果是A表相关数据未导入B表的某个字段。(是一个数据也没有导入,且没有任命提示)

上面只是将两表关联好了,但不见替换命令啊,把你的替换命令贴上来看看。

相互学习,互相交流,共同提高。
2014-02-15 19:09
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
close all
sele 2
use  a
inde on sfzh to d
sele 1
use b
inde on sfzh to k
Set Relation To sfzh Into B
repl all 编号 WITH A.编号 FOR SFZH=B.SFZH
2014-02-15 19:34
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用tjdeming在2014-2-15 19:34:50的发言:

close all
sele 2
use  a
inde on sfzh to d
sele 1
use b
inde on sfzh to k
Set Relation To sfzh Into B
repl all 编号 WITH A.编号 FOR SFZH=B.SFZH
Tj同学,如果两个表的身份证字段宽度都为18,且数据肯定无误,你就不需要用程序段来达到导入数据的目的,只用一条命令即可(A表数据导入B表):
UPDATE B FROM A SET B.字段1=A.字段1, B.字段2=A.字段2 WHERE B.身份证号=A.身份证号
比如:UPDATE B FROM A SET B.姓名=A.XM, B.籍贯=A.JG WHERE B.身份证号=A.SFZ
2014-02-15 20:24
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
再补充一点:
如果你喜欢用SET RELATION TO + REPLACE 的组合,应该是被填充数据的表作为父表,而辅助表作为子表,且子表必须在连接关键字上进行唯一索引。你在16楼的代码中,恰好颠倒了父子表的关系。你在16楼的代码还有一个问题:在SET RELATION TO建立关系前,你的当前表还是B表,也就是用SET RELATION TO命令把B表与自身建立了关系 ,应该是INTO A。对于父表B,可以不建立索引。

[ 本帖最后由 taifu945 于 2014-2-15 20:36 编辑 ]
2014-02-15 20:31
tjdeming
Rank: 2
等 级:论坛游民
帖 子:429
专家分:54
注 册:2013-3-4
收藏
得分:0 
回复 17楼 taifu945
你好,现在的结果是没有导入成功,等于这件事没做.
2014-02-15 20:35
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用tjdeming在2014-2-15 20:35:04的发言:

你好,现在的结果是没有导入成功,等于这件事没做.

要用包含FROM子句的UPDATE-SQL命令需FoxPro 9.0版本,以前的版本是不能用的。还有,用这条命令必须是填充字段,而不是增加字段。也就是说,B表必须有相应的字段名,只是这些字段里面没有值,需要填充。如果B表连字段都没有的,就不能用这条命令,可以有两个办法解决:1)用ALTER TABLE命令先增加字段名,再用UPDATE-SQL填充;2)用SELECT-SQL命令生成需要的数据表,然后删除B表,把SELECT-SQL新生成的表改名为B表。
2014-02-15 20:47
快速回复:二张表各有一个身份证号字段的值是一样的,就是不匹配.
数据加载中...
 
   



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

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