vfp怎么删除表中重复行

 我来答
百度网友cb6c9bc
2017-05-13 · TA获得超过1.2万个赞
知道大有可为答主
回答量:7158
采纳率:40%
帮助的人:5610万
展开全部
* ------------------------------------------------------------------------------------
* 系统平台: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
* ------------------------------------------------------------------------------------
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
深圳市励拓软件有限公司
2017-05-12 · 互联网+时代高效组织信息化平台
深圳市励拓软件有限公司
汇讯WiseUC企业即时通讯软件是一款以组织内沟通交流为基础,即时通讯为核心,融合办公协同、IT系统集成,帮助企业降低运营成本、提升组织效率的企业级沟通协同平台。
向TA提问
展开全部
编程
思路,生成一个新的数据库,从旧的数据库中提取数据,如果记录在新数据库中存在,就不复制,如果不存在,就将记录复制到新数据库中!这样的话就没重复的数据了
假定原数据是保存在sj.dbf中,则程序如下:
use sj
copy to temp &&将原数据库内容复制到临时数据库中
zap &&清空原数据库
use temp
jlh=1
stro recc() to jls &&将原记录条数保存到变量中
do whil jlh<=jls &&依次判断在新表中是否存在重复记录
go jlh
stor code to lsbl &&将code字段的值保存在变量中
use sj
loca for code=lsbl
if found()
else
clos data
use temp
copy to lswj for recn()=jlh &&将没有找到的记录可在在临时文件中
use sj
appe from lswj &&从临时文件中追加记录
clos data
dele file lswj.dbf &&删除产生的临时文件
endi
jlh=jlh+1
use tmep
endd
clos data
dele file temp.dbf &&删除临时文件

再重新打开原数据库后,你会发现已经没重复的记录了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式