关于一个删除记录的问题,紧急

maxnow 2003-06-12 11:05:39
在一个输入基本资料的表单里,使用了一个删除按钮(还有上一个下一个等),其代码如下:
delete
pack
thisform.Refresh

但执行到 pack 时总是提示:
"对于临时表处于表缓冲方式下的表不能使用此命令"

没有pack则只能从逻辑上删除,查看表中只是加上了删除标记,仍然存在。
此种情况下添加一条新记录,若索引与以删除的索引同,则会出现“索引不唯一”的错误。
怎样才能正确地将一条记录从物理上删除呢? 谢谢关注
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
maxnow 2003-06-13
  • 打赏
  • 举报
回复
谢谢回复。

上面的B方法,可以实现从物理上删除记录。

但是使用了set dele on之后,刚刚删除的记录,在退出之前添加同样的记录,还是会出错,“更新表失败:不是唯一索引”,不知是何原因。我用的是系统提供的 txtbtns 控件组。
ljleager 2003-06-13
  • 打赏
  • 举报
回复
A。用SET DELE ON,大多数命令忽略“打上删除符号的记录”,新增记录不会引起“索引不唯一”的错误。
B。像PACK/ZAP等需重写表的操作命令,必须是独占方式打开。表单方式如何物理删除?很多初学者往往是在用户打上删除符号的同时立即执行PACK,这样就会出现你提到的错误。解决办法:在表单“数据环境”的“AFTERCLOSETABLE”事件中加入“USE 表名 excl/pack/use”
bluemliu 2003-06-13
  • 打赏
  • 举报
回复
1. 你用set delete on使得已经删除的记录不再被选中。
2. 物理删除记录,对应的表必须时独占打开的,use table excl, cursor or remote view均无法物理删除记录。
sunjian514 2003-06-13
  • 打赏
  • 举报
回复
你要是这么喜欢用pack(我个人认为不到万不得已不要用,因为它需要表在独占方式下运行)最好在表单的数据环境中设那个表的buffermodeoverride属性设置为0不要缓冲了,exclusive属性设施为.t.以独占方式打开。但是这样你以前打开的索引文件就报废了,需要reindex重新建立索引,然后再用set order to 打开。
我都快被缓冲烦死了!!所以建议你若对表的更新较频繁有没有把握准确的话就用“本地视图”吧,随便改,最后query()后才更新源表,安全,经的起折腾,用视图编辑器建又方便。
视图也可以加进数据环境。

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧