VFP中如何给表批量加删除标记

VFP中如何给表批量加删除标记,第1张

1.所有记录全部一次性删除,可以使用pack命令。

2.满足某些条件的记录删除,有两种方法,用sql命令或vf命令,如删除学生表中所有性别为男的记录,可以用:

1)sql命令

delete

from

学表

where

性别="男"

pack

2)vf命令

delete

for

性别="男"

pack

给要删除的记录做标记

DELETE

FROM

[DatabaseName!]TableName

[WHERE

FilterCondition1

[AND

|

OR

FilterCondition2

...]]

参数

FROM

[DatabaseName!]TableName

指定要给其中的记录加删除标记的表。

DatabaseName!

指定包含该表的非当前数据库名。如果数据库不是当前的数据库,必须加上包含有该表的数据库名。在数据库名的后面、表名的前面包含感叹号

(!)

分隔符。

WHERE

FilterCondition1

[AND

|

OR

FilterCondition2

...]

指定

Visual

FoxPro

只给某些记录做删除标记。

FilterCondition

指定要做删除标记的记录必须满足的条件。可以包含许多筛选条件,它们用

AND

OR

*** 作符连接。也可以使用

NOT

*** 作符给一个逻辑表达式的值取反,或使用

EMPTY(

)

检查一个空的字段。

备注

带有删除标记的记录在执行

PACK

前并不从表中做物理删除。可以用

RECALL

命令恢复(清除标记)带有删除标记的记录。

如果

SET

DELETED

设置为

ON,则所有命令都忽略带有删除标记的记录。

你可以在运行

DELETE

-

SQL

命令后立即检查

_tally

系统内存变量的值来确定被命令标记为删除的记录的个数。

DELETE

不同,DELETE-SQL

在为以共享方式打开的表中的多个记录做删除标记时,会使用记录锁定技术。这会在多用户的情况下减少对记录的竞争,但可能会降低性能。要获得最佳性能,可以独占方式打开表,或使用

FLOCK(

)

锁定该表。

示例

下面的示例打开

testdata

数据库中的

customer

表。delete-sql

为字段

country

内容为

usa

的所有记录做删除标记。所有带有删除标记的记录都显示出来。recall

all

用来清除所有删除标记。

CLOSE

DATABASES

CLEAR

OPEN

DATABASE

HOME(2)+"Data\testdata"

USE

customer

&&

打开

customer

DELETE

FROM

customer

WHERE

country

=

"USA"

&&

删除标记

CLEAR

LIST

FIELDS

company,

country

FOR

DELETED()

&&

列出标记了的记录

*

如果文件在此时被

pack

记录将被删除

WAIT

WINDOW

"当前被标记为删除的记录"+CHR(13)

+

"按一键恢复..."

*

去掉记录的删除标记

RECALL

ALL

CLEAR

*

检查恢复的记录

COUNT

FOR

DELETED()=.T.

TO

nDeleted

*

转换

nDeleted

到一个字符串并显示信息

WAIT

WINDOW

ALLTRIM(STR(nDeleted))

+

"

记录标记为删除。"

DELETE 命令请参阅

DELETE - SQL | DELETED() | PACK | RECALL | SET DELETED

[该主题是 beta 版的一部分并将在今后的版本中修改. 空的主题包含了一个占位符.]

发送该主题的返馈到微软

给要删除的记录做标记。

DELETE [Scope] [FOR lExpression1] [WHILE lExpression2]

[IN nWorkArea | cTableAlias] [NOOPTIMIZE]

参数

Scope

指定要做删除标记的记录范围,Scope 子句有:ALL、NEXT nRecords、RECORD nRecordNumber 和 REST。

有关 Scope 子句的详细内容,请参阅 scope(作用域)子句 和 语言概述。

DELETE 的默认范围是当前记录 (NEXT 1)。

FOR lExpression1

指定一个条件,仅给满足逻辑条件 lExpression1 的记录做删除标记。

如果 lExpression1 是一个可优化表达式,且表在 DELETED( ) 上建立索引时,可以用 Rushmore 优化 DELETE ... FOR 创建的查询。要得到最佳性能,可在 FOR 子句中使用一个可优化表达式。

有关 Rushmore 可优化表达式的内容,请参阅 SET OPTIMIZE 和 优化应用程序 中的 用 Rushmore 查询优化数据访问速度。

WHILE lExpression2

指定一个条件。只要 lExpression2 计算为“真”(.T.),就给这些记录做删除标记。

IN nWorkArea

指定要添加记录删除标记的表所在的工作区。

IN cTableAlias

指定要添加记录删除标记的表的别名。

如果省略 nWorkArea 和 cTableAlias,就给当前选定工作区中的表记录做删除标记。

NOOPTIMIZE

关闭 DELETE 的 Rushmore 优化。

备注

标有删除标记的记录在使用 PACK 前并不从表上做物理删除。标有删除标记的记录可以用 RECALL 恢复(清除标记)。

示例

下面的示例打开 testdata 数据库中的 customer 表,delete 标识字段 country 中包含 usa 的所有要删除的记录。所有做了删除标记的记录都显示出来。recall all 用来清除所有删除标记。

CLOSE DATABASES

OPEN DATABASE (HOME(2) + 'Data\testdata')

USE customer &&打开 Customer 表

DELETE FOR country = 'USA' &&删除标记

CLEAR

LIST FIELDS company, country FOR DELETED() &&List marked records

RECALL ALL &&Unmark all records marked for deletion

请参阅

DELETE - SQL | DELETED() | PACK | RECALL | SET DELETED


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11625793.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存