当前位置:编程学习 > Foxpro >>

foxpro重复记录查找

我有一个.dbf库,foxpro的,里面“生产号”加“包号”为一条记录,生产号可重复,对应的包号不能重复,需要将有重复的“生产号”显示出来好删除,求这条命令,假设库文件为"u.dbf",结构为"生产号”,“包号”两项。 生产号 包号 011005 A01 011006 A01 011005 A02 011005 A01 011006 A02 希望将 011005 A01重复的一条记录找到后删除
追问:程序运行后进入死循环
答案:1.如果你想自动删除U.DBF表中“生产号”、“包号”两字段内容重复的记录,则执行
      SELECT * FROM FORCE U.DBF GROUP BY 生产号,包号 INTO DBF U_自动删除.DBF
  即可。对于“生产号”、“包号”两字段内容重复的记录,该语句将只保留其中最后一条记录,结果在“U_自动删除.DBF”表中,依次按“生产号”、“包号”字段内容升序排列。
2.如果你只是想将有重复的“生产号”标识显示出来以便手工删除,则执行:
    SELECT *,.F. AS 重复标识 FROM FORCE U.DBF ORDER BY 生产号,包号 INTO DBF U_自动标识.DBF
    A=生产号
    B=包号
    SCAN FOR RECNO()>1
     REPL 重复标识 WITH 生产号==A.AND.包号==B
     IF 重复标识
      SKIP -1
      REPL 重复标识 WITH .T.
      SKIP 1
     ENDIF
     A=生产号
     B=包号
    ENDSCAN
    BROW FOR  重复标识
  在显示的“U_自动标识.DBF”表中手工删除不需要的记录即可。
其他:use u
inde on 包号 to bh
tmp=allt(包号)
SKIP
do while not eof()
if tmp==allt(包号)
dele
else
tmp=allt(包号)
endif
SKIP
enddo
PACK
USE
RETURN CLEAR
ACCEPT"请输入文件名: " TO NAM
USE &NAM
K=RECCOUNT()-1
FOR I=1 TO K
  SCATTER MEMO TO X
  IF .NOT.EOF()
     SCAN FOR 生产号=X(1) .AND.包号=X(2)
     DELETE
     ENDSCAN
  ENDIF
  LOCATE FOR 生产号=X(1).AND.包号=X(2)
  RECALL
  PACK
ENDFOR
USE
RETURN

上一个:foxpro对某一字段分组后,在各组内排序取前10个,如何操作?
下一个:visual foxpro可以用来学习C#么??????

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,