标题:现有多个表,有的是有记录,有的没有记录,在不打开表时如何删除哪些没有记 ...
只看楼主
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
结帖率:79.3%
已结贴  问题点数:20 回复次数:26 
现有多个表,有的是有记录,有的没有记录,在不打开表时如何删除哪些没有记录的表
delete file 文件名,用于删除表的命令,它后面能否加条件?
现有多个表,有的是有记录,有的没有记录,当不开表时如何删除哪些没有记录的表,也就是说在delete file 文件名后面能否加条件?
搜索更多相关主题的帖子: 记录 如何 file 
2015-12-11 13:21
wzxc
Rank: 9Rank: 9Rank: 9
来 自:齐鲁大地
等 级:贵宾
威 望:39
帖 子:985
专家分:1296
注 册:2006-4-25
得分:0 
DELETE FILE 命令是从磁盘上删除文件。

依你的要求,应该用delete命令。
DELETE [Scope] [FOR lExpression1] [WHILE lExpression2]
   [IN nWorkArea | cTableAlias] [NOOPTIMIZE]
假如有个表a.dbf,
SELECT  0
use a exclusive
delete for empty(字段名) &&逻辑删除
pack     &&物理删除
browse
use

认真看书学习,弄通Fox主义。
2015-12-11 13:47
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
我的意思是把表删除,不是表中的记录。
程序运行中产生了没有记录的表,我想批量删除哪些没有记录的表,保留有记录的表,不是表中的记录。
用DELETE FILE 命令是从磁盘上删除哪些没有记录的文件。


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

2015-12-11 14:16
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
得分:0 
你的 144 不打开 DBF 的情况下
删除记录数为 0 的 DBF 文件
是这个 14 不

应该可以的
我试试看
但直接用DELETE FILE 命令是不行的

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


民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2015-12-11 14:37
wzxc
Rank: 9Rank: 9Rank: 9
来 自:齐鲁大地
等 级:贵宾
威 望:39
帖 子:985
专家分:1296
注 册:2006-4-25
得分:15 
用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) &&宏替换用数组我没试过,如不行换一种方式。
  else
   use
  endif
ENDFOR
大体这个思路。如有语法错误,请自己调试(我要走了,没时间调试了)。

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


认真看书学习,弄通Fox主义。
2015-12-11 14:44
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:0 
DELETE FILE [FileName | ?] [RECYCLE]
 

参数
FileName
指定要删除的文件。提示:
FileName 可以包含通配符,比如 * 和 ?。例如,要删除当前目录中扩展名为 .bak 的备份文件,可以使用 DELETE FILE *.BAK。如果 FileName 包含空格,应使用引号("")括住整个文件名。
 

? 
显示删除对话框,可以选择要删除的文件。
RECYCLE
指定文件不是直接从磁盘上删除,而是放在 Windows 回收站中。警告:
使用此命令删除的任何文件都不能恢复。即使 SET SAFETY 命令设置为 ON,在删除文件前也不会得到警告信息。
 

说明
当发出 DELETE FILE 命令时,要删除的文件不能是打开的。如果文件所在驱动器、卷标或路径与默认的不同,则文件名必须包含路径。必须包含文件扩展名。

如果想要删除一个数据表,在删除文件之前,需要从数据库中移出表。在使用 DELETE FILE 命令之前,可以使用 REMOVE TABLE 命令。如果要删除一个带有 .FPT 备注文件的表,应确保删除此备注文件。

即使指定的文件不存在,此命令也不会产生一条错误。

DELETE FILE 命令与 ERASE 命令作用相同。

示例
在下例中,Customer.dbf 的结构和所有 country 字段为 USA 的记录都复制到名为 backup 的表。然后将 backup 中的数据复制到一个文本文件 temp 中,打开此文件,然后在关闭之后删除它。

  复制代码
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE customer  && 打开 Customer 表

COPY STRUCTURE TO backup
USE backup
APPEND FROM customer FOR country = 'USA'
COPY TO temp TYPE DELIMITED

WAIT WINDOW '按 Esc 关闭并删除 temp.txt' NOWAIT
MODIFY FILE temp.txt NOEDIT
DELETE FILE temp.txt
? IIF(FILE('temp.txt'),'文件没有被删除','文件被删除')
USE
DELETE FILE backup.dbf
2015-12-11 15:05
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
以下是引用wzxc在2015-12-11 14:44:53的发言:

用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) &&宏替换用数组我没试过,如不行换一种方式。
  else
   use
  endif
ENDFOR
大体这个思路。如有语法错误,请自己调试(我要走了,没时间调试了)。
基本成功,如果删除同名的DBF同时删除同名的XLS哪要怎么搞?请指教!
2015-12-11 15:08
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
不打开是不可能的

坚守VFP最后的阵地
2015-12-11 15:17
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
得分:0 
Create Table T1 (F1 C(10), F2 C(10), F3 C(10))
Insert Into T1 Values ('1','2','3')
Insert Into T1 Values ('1','B','D')
Insert Into T1 Values ('A','B','D')
Insert Into T1 Values ('A','B','3')
Close Databases

Clear
lcStr = Filetostr("T1.Dbf")
* 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
? Iif(nRecords > 0, "有记录数 : " + Transform(nRecords) + ",不要删除。", "无记录数,可以删除!")

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

用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) &&宏替换用数组我没试过,如不行换一种方式。
  else
   use
  endif
ENDFOR
大体这个思路。如有语法错误,请自己调试(我要走了,没时间调试了)。
这个可行!

学习交流VFP,QQ:248561326。
2015-12-11 15:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-460113-1-1.html




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

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