vfp怎么删除表中重复行
2个回答
展开全部
* ------------------------------------------------------------------------------------
* 系统平台: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
* ------------------------------------------------------------------------------------
* 系统平台: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 · 互联网+时代高效组织信息化平台
关注
展开全部
编程
思路,生成一个新的数据库,从旧的数据库中提取数据,如果记录在新数据库中存在,就不复制,如果不存在,就将记录复制到新数据库中!这样的话就没重复的数据了
假定原数据是保存在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 &&删除临时文件
再重新打开原数据库后,你会发现已经没重复的记录了
思路,生成一个新的数据库,从旧的数据库中提取数据,如果记录在新数据库中存在,就不复制,如果不存在,就将记录复制到新数据库中!这样的话就没重复的数据了
假定原数据是保存在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 &&删除临时文件
再重新打开原数据库后,你会发现已经没重复的记录了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询