如何查找两个相同结构的DBF表中不相同的记录?
有两个结构一样的表,有个别记录不同,需要把不同的记录提取出来。
如A表
idxmxb
01A011
02A021
03A031
04A042
05A052
06A062
07A071
08A081
09A091
10A102
B表
idxmxb
01A111
02A021
03A032
04A041
05A052
06A062
07A071
08A081
09A091
10A102
对比A表和B表后到不相同记录的C表
id zd btz1 btz2
01 xm A01 A11
03 xb 1 2
04 xd 2 1
[解决办法]
zd="XM"
adbf ="X:\个人数据\VF\111\表a.DBF"
bdbf ="X:\个人数据\VF\111\表b.DBF"
TF=0
CLOSE DATABASES
use
DELETE FILE dbjg.DBF
DELETE FILE ta1.DBF
DELETE FILE ta2.DBF
DELETE FILE tb1.DBF
DELETE FILE tb2.DBF
USE &adbf IN 1
zdshu=AFIELDS(Stru1,1)
DIMENSION zdmsz(zdshu)
USE &bdbf IN 2
zdshu2=AFIELDS(Stru2,2)
CLOSE DATABASES
IF zdshu!=zdshu2
MESSAGEBOX("结构不相同!",64,'信息提示')
TF=1
ELSE
FOR tc=1 TO zdshu
zdmsz(tc)=Stru1(tc,1)
IF zdmsz(tc)==zd THEN
zdh=tc
ENDIF
FOR tr=1 TO 15
IF Stru1(tc,tr)==Stru2(tc,tr)
ELSE
MESSAGEBOX("结构不相同!",64,'信息提示')
TF=1
EXIT
ENDIF
ENDFOR
IF TF=1
EXIT
ENDIF
ENDFOR
ENDIF
IF TF=0 THEN
SELECT * FROM &adbf WHERE &zd NOT IN(SELECT &zd FROM &bdbf) INTO TABLE ta1
COPY STRUCTURE TO dbjg FIELDS &zd
USE dbjg
ALTER TABLE dbjg ADD zdm C(20)
ALTER TABLE dbjg ADD dbz C(100)
DELETE FILE dbjg.BAK
SELECT * FROM &bdbf WHERE &zd NOT IN(SELECT &zd FROM &adbf) INTO TABLE tb1
CLOSE DATABASES
USE dbjg.DBF
APPEND FROM ta1.DBF
REPLACE ALL dbz WITH "B表不包含"
APPEND FROM tb1.DBF
REPLACE ALL dbz WITH "A表不包含" FOR dbz=" "
REPLACE ALL zdm WITH zd
DELETE FILE ta1.DBF
DELETE FILE tb1.DBF
SELECT * FROM &adbf WHERE &zd IN(SELECT &zd FROM &bdbf) INTO TABLE ta2
SORT TO ta1 ON &zd
SELECT * FROM &bdbf WHERE &zd IN(SELECT &zd FROM &adbf) INTO TABLE tb2
SORT TO tb1 ON &zd
CLOSE DATABASES
USE ta1
jj=&zd
DIMENSION btjl(3)
FOR i=1 TO RECCOUNT()
SKIP 1
IF jj==&zd THEN
btjl(1)=&zd
btjl(2)=zd
btjl(3)="A表记录重复"
DELETE
INSERT INTO dbjg FROM ARRAY btjl
ELSE
jj=&zd
ENDIF
ENDFOR
PACK
jlshu=RECCOUNT()
DIMENSION sja(jlshu,zdshu)
COPY TO ARRAY sja REST
CLOSE DATABASES
USE tb1
jj=&zd
DIMENSION btjl(3)
FOR i=1 TO RECCOUNT()
SKIP 1
IF jj==&zd THEN
btjl(1)=&zd
btjl(2)=zd
btjl(3)="B表记录重复"
DELETE
INSERT INTO dbjg FROM ARRAY btjl
ELSE
jj=&zd
ENDIF
ENDFOR
PACK
DIMENSION sjb(jlshu,zdshu)
COPY TO ARRAY sjb REST
CLOSE DATABASES
DELETE FILE ta1.DBF
DELETE FILE ta2.DBF
DELETE FILE tb1.DBF
DELETE FILE tb2.DBF
USE dbjg
DIMENSION btjl(3)
FOR tr=1 TO jlshu
FOR tc=1 TO zdshu
IF sja(tr,tc)!=sjb(tr,tc) THEN
btjl(1)=sja(tr,zdh)
btjl(2)=zdmsz(tc)
btjl(3)="A表和B表值不同"
mtype=VARTYPE(sja(tr,tc))
DO CASE
CASE mtype$"CM"
btjl(3)="A:"+sja(tr,tc)+" B:"+sjb(tr,tc)
CASE mtype$"NY"
btjl(3)="A:"+STR(sja(tr,tc),15,3)+" B:"+STR(sjb(tr,tc),15,3)
CASE mtype$"DT"
btjl(3)="A:"+TTOC(sja(tr,tc))+" B:"+TTOC(sjb(tr,tc))
ENDCASE
INSERT INTO dbjg FROM ARRAY btjl
ENDIF
NEXT
NEXT
ENDIF
USE dbjg
BROWSE