| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2640 人关注过本帖
标题:现有多个表,有的是有记录,有的没有记录,在不打开表时如何删除哪些没有记 ...
只看楼主 加入收藏
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:0 
DELETE - SQL 命令
先打开文件,再进行删除标记操作

坚守VFP最后的阵地
2015-12-11 16:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这就是无理、无必要需求的典型示范之一。

授人以渔,不授人以鱼。
2015-12-11 17:50
kinvanhon
Rank: 5Rank: 5
来 自:战争学院
等 级:贵宾
威 望:16
帖 子:99
专家分:258
注 册:2014-10-7
收藏
得分:5 
回复 7楼 sylknb
使用forceext()函数,什么作用怎么用看帮助吧
2015-12-11 18:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用sylknb在2015-12-11 13:21:44的发言:

delete file 文件名,用于删除表的命令,它后面能否加条件?
现有多个表,有的是有记录,有的没有记录,当不开表时如何删除哪些没有记录的,也就是说在delete file 文件名后面能否加条件?


思考一下自己的问题,好过问人怎么解决。

描红是文字表明,你要删除表,不是删除表中的记录,目标是从磁盘上删除一个表文档,那么已经注定要独占这个文档,不存在别人正在访问的可能(若是那样你也没办法删除得了,多用户进程没有权力和理由去强制其他用户关闭正在使用的资源),这么一来,是否打开表根本就不是问题,打开一下,检查“空”條件是否满足,若满足,就马上关掉,然后删除即可。即开即关,碍你什么事了,也不占资源,非得绕大大一个圈子不打开去删不可?

一个表有没有记录,判断条件是什么?完全没有任何记录,还是所有记录都已被打上deleted标志?这个“空”的标准,考虑过没有?

要删除一个表,事实上也没那么简单。表可以是数据库表,也可以是自由表,对前者,不是删除磁盘文档就可以的,你还先得在数据库dbc中把这个表注销掉,然后才能从物理上把磁盘文档删去。

没考虑到这些问题,都是平时学习不注意积累基础的表现。别人简单地给你一个方案,难道真的可以用起来???

要写一条删除表文档的指令,后面带條件参数,又有何不过,无非是编写一个接受参数的过程(或函数)做对应的动作而已,调用时就真的是一条指令。我不明白那么多新手总是求什么一句指令是什么意思,好像写程序完全不需要自己实现细节似的,什么功能都可以有现成的指令,那还用得着你学写程序么。

[此贴子已经被作者于2015-12-11 19:46编辑过]


授人以渔,不授人以鱼。
2015-12-11 19:40
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
虽然有可能不用USE打开也能知道这个是否空记录的DBF文件,但这只是相对USE来说是“不打开”。
不打开文件又怎知道文件里有些什么内容(是否空记录)?
2015-12-11 20:23
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用kinvanhon在2015-12-11 18:21:33的发言:

使用forceext()函数,什么作用怎么用看帮助吧
用了此forceext()函数介决了问题 既可删除.dbf又可删除同名的.xls,谢谢!
用ADIR( ) 函数将dbf表文件信息存放到数组中,
gnDbfnumber = ADIR(gatables, '*.DBf')  && 创建一个数组
FOR nCount = 1 TO gnDbfnumber  && 遍历表
SELECT  0
use  &gatables(nCount,1)   &&宏替换用数组我没试过,如不行换一种方式。
  if reccount()=0
   use
   DELETE FILE &gatables(nCount,1) &&删除.dbf
  DELETE file FORCEEXT('&gatables(nCount,1)','.xls')&&删除同名的.xls
else
   use
  endif
ENDFOR

[此贴子已经被作者于2015-12-11 21:16编辑过]

2015-12-11 21:13
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
Clear
gnDbfnumber = Adir(gatables, '*.DBf')  && 创建一个数组
For nCount = 1 To gnDbfnumber  && 遍历表
    lcStr = Filetostr(gatables(nCount, 1))
    * 4 - 7 --> Number of records in file
    * Calculate the number of records (bytes 5,6,7 and 8)
    nRecords = Asc(Substr(lcStr, 5, 1)) + Asc(Substr(lcStr, 6, 1))*256 + ;
        Asc(Substr(lcStr, 7, 1))*256^2 + Asc(Substr(lcStr, 8, 1))*256^3
    If nRecords > 0
        ? gatables(nCount, 1) + " 有记录数 : " + Transform(nRecords) + ",不要删除。"
    Else
        ? gatables(nCount, 1) + " 无记录数 : " + Transform(nRecords) + ",已经删除!"
        Delete File &gatables(nCount, 1)  && 删除.dbf
    Endif
Endfor

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2015-12-11 21:52
cxzbzgz
Rank: 8Rank: 8
来 自:云南楚雄
等 级:贵宾
威 望:24
帖 子:298
专家分:808
注 册:2012-6-15
收藏
得分:0 
以下是引用sylknb在2015-12-11 15:08:46的发言:

基本成功,如果删除同名的DBF同时删除同名的XLS哪要怎么搞?请指教!
再修改一下程序就可以解决问题了。

学习交流VFP,QQ:248561326。
2015-12-15 17:09
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用sylknb在2015-12-11 21:13:49的发言:

用了此forceext()函数介决了问题 既可删除.dbf又可删除同名的.xls,谢谢!
用ADIR( ) 函数将dbf表文件信息存放到数组中,
gnDbfnumber = ADIR(gatables, '*.DBf')  && 创建一个数组
FOR nCount = 1 TO gnDbfnumber  && 遍历表
SELECT  0
use  &gatables(nCount,1)   &&宏替换用数组我没试过,如不行换一种方式。
  if reccount()=0
   use
   DELETE FILE &gatables(nCount,1) &&删除.dbf
  DELETE file FORCEEXT('&gatables(nCount,1)','.xls')&&删除同名的.xls
 else
   use
  endif
ENDFOR

我想知道标注红色命令的地方是否与你在一楼提出的问题初衷已经背离了?
2015-12-16 07:34
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用taifu945在2015-12-16 07:34:48的发言:


我想知道标注红色命令的地方是否与你在一楼提出的问题初衷已经背离了?
没有背离初衷
2015-12-16 09:15
快速回复:现有多个表,有的是有记录,有的没有记录,在不打开表时如何删除哪些没 ...
数据加载中...
 
   



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

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