如果你只有11个字段的比对,则用SQL比较简单:
CLOSE ALL
CLEAR ALL
SET SAFETY OFF
USE 表8
IF RECCOUNT()=0
RETURN
ENDIF
GO BOTTOM
SCATTER FIELDS z59,z60,z61,z62,z63,z64,z65,z66,z67,z68,z69 TO Arr5969
USE
SELECT H1,H2,H3,Z59,Z60,Z61,Z62,Z63,Z64,Z65,Z66,Z67,Z68,Z69 ;
FROM 表9.dbf ;
WHERE ASCAN(Arr5969,Z59)=0 AND ASCAN(Arr5969,Z60)=0 ;
AND ASCAN(Arr5969,Z61)=0 AND ASCAN(Arr5969,Z62)=0 ;
AND ASCAN(Arr5969,Z63)=0 AND ASCAN(Arr5969,Z64)=0 ;
AND ASCAN(Arr5969,Z65)=0 AND ASCAN(Arr5969,Z66)=0 ;
AND ASCAN(Arr5969,Z67)=0 AND ASCAN(Arr5969,Z68)=0 ;
AND ASCAN(Arr5969,Z69)=0 ;
INTO TABLE 表10.dbf
USE 表10
BROWSE
我统计出来有418行,不知道是不是你要的答案。不过,你上面对问题的表述和你提供的程序代码的意思不是太吻合。我只是从你的代码中感觉到你需要的答案。
但如果你有102个字段,则最好用循环了。程序就要作如下修改:
CLOSE ALL
CLEAR ALL
SET SAFETY OFF
USE 表8
IF RECCOUNT()=0
RETURN
ENDIF
GO BOTTOM
SCATTER FIELDS z59,z60,z61,z62,z63,z64,z65,z66,z67,z68,z69 TO Arr5969 &&如果有102个字段,可以使用循环构造子句
USE
SELECT 0
USE 表9 ALIAS T9
SELECT 0
USE 表10 ALIAS T10
ZAP
SELECT T9
SCAN
isExist = .F.
FOR i=59 TO 69 &&如果有102个字段,此处换一下初始值和结束值就可以了
cFieldName = 'Z' +LTRIM(STR(i))
IF ASCAN(Arr5969,&cFieldName)<>0
isExist = .T.
EXIT
ENDIF
NEXT
IF !isExist
SCATTER MEMVAR
SELECT T10
APPEND BLANK
GATHER MEMVAR
ENDIF
SELECT T9
ENDSCAN
SELECT T9
USE
SELECT T10
BROWSE
[此贴子已经被作者于2020-5-2 19:06编辑过]