vfp怎么删除表中重复行(重复的只留一行)
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/14 14:53:30
vfp怎么删除表中重复行(重复的只留一行)
vfp怎么删除表中重复行(重复的只留一行)
vfp怎么删除表中重复行(重复的只留一行)
* ------------------------------------------------------------------------------------
* 系统平台:VFP6.0
* 类 型:自定义函数
* 功 能:将源DBF文件中重复记录剔除,结果存到新DBF中.
* 思 路:利用SQL...Group By全部字段,来读取唯一记录.
* 参 数:SurDBF源文件,ObjDBF目标文件
* 返回参数FT
* 注意事项:使用【完整的文件名】--仅基本检测,无自动判断
* 确保【目标文件安全】--以免误盖,目标后缀可略
* 确保源文件能打开,目标文件能写入
* 调用方法:、=、do with、表达式套用
* 后 遗 症:SQL打开的文件未关闭.
* 程序编写:hanhezhai 2014.01.14
* ------------------------------------------------------------------------------------
Parameters SurDBF,ObjDBF && 设定参数
if type('SurDBF')#'C'.or.type('ObjDBF')#'C'&& 非字符型不接受
=messagebox('参数类型错误!',0,'提示')
return .f.
endif
if !file(SurDBF) && 判断源文件存在
=messagebox('源文件不存在!',0,'提示')
return .f.
endif
mSele = 'Select ' + str(select()) && 保存当前工作区
Use (SurDBF) in 0 again alia tmp001 && 如果之前已经打开,这个again就看出效果了
mFileds=FCOUNT('tmp001') && 提取字段个数
use in tmp001 && 关闭,操作不留痕
mlist='1' && 生成SQL表达式
for aa=2 to mfileds
mlist=mlist + ',' + str(aa,3)
endfor
mSQL='Select * from ' + SurDBF + ' Group by ' + mlist + ' into DBF '+ ObjDBF
&mSQL && 宏.执行SQL表达式
&mSele && 宏.回到原工作区
return .t.
* ------------------------------------------------------------------------------------
* 如果上面觉得烦!那么用下面这个简洁的:
* ------------------------------------------------------------------------------------
Parameters SurDBF,ObjDBF && 设定参数
clos all
Sele 0
Use (SurDBF) && 打开表
mFileds=FCOUNT() && 提取字段个数
mlist='1' && 生成SQL表达式
for aa=2 to mfileds
mlist=mlist + ',' + str(aa,3)
endfor
mSQL='Select * from '+SurDBF+' Group by '+mlist+' into DBF '+ObjDBF
&mSQL && 宏.执行SQL表达式
return
* ------------------------------------------------------------------------------------
SELECT DISTINCT * FROM TABLENAME INTO TABLE TABLE1.DBF