| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1390 人关注过本帖
标题:求作业!如何在VFP中删去重复字段?
只看楼主 加入收藏
wendao6dh
Rank: 2
来 自:天津
等 级:论坛游民
帖 子:31
专家分:74
注 册:2011-5-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
求作业!如何在VFP中删去重复字段?
各位前辈,能帮我看看这个题吗?
是我们VFP教材上的一个作业,把程序补充完整~
话说我最讨厌这种题了,我宁愿自己编一个程序也不愿干这种事……关键是不会啊!看不懂它的思路……
汗……

不过其实应该是很初级很简单的题目:
设有“学生.dbf”表,并以“学号”字段为关键字进行了索引。假定数据库和索引已经打开,“学号”字段为主索引,下面程序字段把学号重复的记录从物理上删除:
do while   ___(1)______
 xh=学号
 skip
 if ___(2)______  
   delete
 endif
enddo
 ______(3)_____

我的看法是,(1)大概是填“.not. eof()”之类,(3)估计是关表填“use”之类(果然很简单很弱智吧?)关键是(2)不会,if endif 程序应该表达“如果学号重复就删去这条记录”的意思吧,可是怎么把“学号重复”这个用VFP语言给翻译过来呢?作为菜鸟外加小白的我就知道一个distinct,可是 distinct自己就把重复记录消除了,和后面的delete 完全不搭啊!
跪求高手!求解答!
谢谢啦!


[ 本帖最后由 wendao6dh 于 2011-5-7 18:33 编辑 ]
搜索更多相关主题的帖子: 数据库 关键字 
2011-05-07 18:32
wzxc
Rank: 9Rank: 9Rank: 9
来 自:齐鲁大地
等 级:贵宾
威 望:39
帖 子:985
专家分:1296
注 册:2006-4-25
收藏
得分:15 
if 学号=xh

这题有问题。既然以“学号”字段为主索引,是不能存入重复值的,如果是普通索引,倒是可以的。

[ 本帖最后由 wzxc 于 2011-5-7 19:49 编辑 ]

认真看书学习,弄通Fox主义。
2011-05-07 19:00
wendao6dh
Rank: 2
来 自:天津
等 级:论坛游民
帖 子:31
专家分:74
注 册:2011-5-6
收藏
得分:0 
回复 2楼 wzxc
谢谢这位前辈啦!
我调试了一下,是对的~
不过能给我详细解说一下吗啊?
我的个人理解是:
“xh=学号”是把学号赋值给了xh,这里的“=”是赋值的意思
而 “if 学号=xh”中的“=”是等于的意思,是说“如果xh(已经被赋值为特定学号)如果和学号(这个应该是所有的学号)重复的话,就删除它”
是这样吗?
那个索引有必要吗?
我在vfp里试了一下,不建立索引貌似也能达到这样的效果啊!

谢谢啦!

我相信满树的花朵只源于冰雪下的一颗种子。
2011-05-07 20:09
wzxc
Rank: 9Rank: 9Rank: 9
来 自:齐鲁大地
等 级:贵宾
威 望:39
帖 子:985
专家分:1296
注 册:2006-4-25
收藏
得分:5 
假设学号是有序存储的,是可以达到同样效果的,否则,是删除不了重复值的,因为他们不是紧挨的。

是学生吧,加油哟!!!
收到的鲜花
  • wendao6dh2011-05-07 22:14 送鲜花  3朵   附言:是啊,大一的菜鸟+小白~! 受教了! 谢谢 ...

认真看书学习,弄通Fox主义。
2011-05-07 20:56
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:0 
最好用sql语句select
用循环也可以:
use 表
x=1
do while.not.eof()
   IF x>=RECCOUNT()
     EXIT
     else
     go x
   endif
   xh=学号
   skip
   dele rest  for xh=学号
   pack
   x=x+1
enddo
收到的鲜花
  • wendao6dh2011-05-08 19:20 送鲜花  1朵   附言:谢谢啦!不过貌似这个只能删除和第一条相同 ...
2011-05-07 22:39
wendao6dh
Rank: 2
来 自:天津
等 级:论坛游民
帖 子:31
专家分:74
注 册:2011-5-6
收藏
得分:0 
回复 5楼
咦,评价怎么看不到完整版的啊?我晕啊~
我再发一遍好了~

谢谢5楼的热心解答~不过貌似只能删除和第一条重复的记录啊~
恩恩,我觉得问题应该是出现在rest这里,因为:
go 1
xh=学号
skip
dele rest for 学号=xh
?eof()
输出结果是.T.
这样,马上就结束循环了~没法判断是不是还有和余下的第2条第3条第4条……记录重复~
所以我小小地修改了一下:
use h:\计算机\xs.dbf
i=0
do while.not.eof()
   xh=学号
   skip
   dele rest  for xh=学号
   pack
   go top
   i=i+1
   skip i
enddo
list
因为x>=reccount()等价于eof()为.T.所以我就给删除了~
您看成吗?

恩恩,不管怎么样谢谢您的指教啊~作为一个VFP菜鸟加小白,我可能还有许多问题要向您请教呢!

我相信满树的花朵只源于冰雪下的一颗种子。
2011-05-08 19:31
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:0 
你测试的是正确的
use h:\计算机\xs.dbf
i=0
do while.not.eof()
   xh=学号
   skip
   dele rest  for xh=学号
   pack
   go top
   i=i+1
   skip i
enddo
你的这个更简炼了,好.

[ 本帖最后由 muyubo 于 2011-5-8 21:37 编辑 ]
2011-05-08 21:22
jlp7277
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-6-6
收藏
得分:0 
现在还有学校教foxbase啊!
2011-05-16 09:25
快速回复:求作业!如何在VFP中删去重复字段?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046929 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved