2,749
社区成员
发帖
与我相关
我的任务
分享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
*-- VFP9.0
Create Table A表 (Id Varchar(10),xm Varchar(10),xb Varchar(10))
Insert Into A表 Values ('01','A01','1')
Insert Into A表 Values ('02','A02','1')
Insert Into A表 Values ('03','A03','1')
Insert Into A表 Values ('04','A04','2')
Insert Into A表 Values ('05','A05','2')
Insert Into A表 Values ('06','A06','2')
Insert Into A表 Values ('07','A07','1')
Insert Into A表 Values ('08','A08','1')
Insert Into A表 Values ('09','A09','1')
Insert Into A表 Values ('10','A10','2')
Create Table B表 (Id Varchar(10),xm Varchar(10),xb Varchar(10))
Insert Into B表 Values ('01','A11','1')
Insert Into B表 Values ('02','A02','1')
Insert Into B表 Values ('03','A03','2')
Insert Into B表 Values ('04','A04','1')
Insert Into B表 Values ('05','A05','2')
Insert Into B表 Values ('06','A06','2')
Insert Into B表 Values ('07','A07','1')
Insert Into B表 Values ('08','A08','1')
Insert Into B表 Values ('09','A09','1')
Insert Into B表 Values ('10','A10','2')
Create Table C表 (Id Varchar(10),zd Varchar(10),btz1 Varchar(10),btz2 Varchar(10))
CompareTable('A表','B表')
Select C表
Browse
Function CompareTable
Lparameters tcTable1,tcTable2
Use (tcTable1) Again In Select('_T1') Alias _T1
Use (tcTable2) Again In Select('_T2') Alias _T2
Select '_T2'
Scan
Select '_T1'
Execscript('Locate For _T1.'+Field(1,'_T1')+'=_T2.'+Field(1,'_T2'))
If Found()
For lnI=2 To Fcount('_T2')
If Evaluate('_T1.'+Field(lnI,'_T1'))<>Evaluate('_T2.'+Field(lnI,'_T2'))
Insert Into C表 Values (Transform(Evaluate('_T2.'+Field(1,'_T2'))),Field(lnI,'_T2'),Transform(Evaluate('_T1.'+Field(lnI,'_T1'))),Transform(Evaluate('_T2.'+Field(lnI,'_T2'))))
Endif
Endfor
Else
Insert Into C表 Values (Transform(Evaluate('_T2.'+Field(1,'_T2'))),Field(1,'_T2'),'',Transform(Evaluate('_T2.'+Field(1,'_T2'))))
Endif
Endscan
EndfuncCREATE CURSOR T (ID C(2),ZDM C(10),btz1 C(10),btz2 C(10)) &&保存不同记录的临时表
CREATE CURSOR TA (ID C(2),XM C(3),XB C(1))
CSTA=[01,A01,1;02,A02,1;03,A03,1;04,A04,2;05,A05,2;06,A06,2;07,A07,1;08,A08,1;09,A09,1;10,A10,2]
FOR I=1 TO ALINES(AA,CSTA,[;])
=ALINES(AAA,AA(I),[,])
INSERT INTO TA VALUES(AAA(1),AAA(2),AAA(3))
ENDFOR
CREATE CURSOR TB (ID1 C(2),XM C(3),XB C(1))
CSTB=[01,A11,1;02,A02,1;03,A03,2;04,A04,1;05,A05,2;06,A06,2;07,A07,1;08,A08,1;09,A09,1;10,A10,2]
FOR I=1 TO ALINES(BB,CSTB,[;])
=ALINES(BBB,BB(I),[,])
INSERT INTO TB VALUES(BBB(1),BBB(2),BBB(3))
ENDFOR
SELECT TA
SCAN
SCATTER TO AC
SELECT TB
SCAN FOR RECNO([TB])=RECNO([TA])
SCATTER TO AD
FOR I=2 TO ALEN(AC)
IF NOT (AD(I)==AC(I))
INSERT INTO T VALUES (TA.ID,FIELD(I,[TB]),AC(I),AD(I))
ENDIF
ENDFOR
ENDSCAN
ENDSCAN
SELECT T
BROWSE