0

我在表单上的 vfp9 中有一个网格控件。我有一个按钮女巫删除(包)当前记录。删除记录后,网格找不到资源。它仍然只是一个空矩形。我做了这样的事情: DELETE ALL PACK GO TOP thisform.grid1.Refresh

,但没有效果。提前致谢。

4

3 回答 3

1

问题是您正在重新创建网格的 RecordSource 并且它不喜欢那样。如果不知道更多关于你在做什么,很难提供具体的建议。但是,在正常的应用程序活动中打包表格通常被认为是不好的形式。通常,PACK 保留给在非工作时间运行的管理代码,因为它需要对表的独占访问权。

你在这里的目标是什么?为什么要删除网格所基于的表中的所有记录?

添马舰

于 2012-05-25T20:33:05.853 回答
1

正如 Tamar 所提到的...... pack 在日常活动中真的很糟糕。但是,有一个“设置”可以通过所有正常操作为您“隐藏”记录,直到每晚处理的管理任务永久删除记录......

SET DELETED ON
SET DELETED OFF

通过打开“ON”(整个应用程序只需执行一次,除非您正在处理处理私有数据会话的表单,否则也需要在那里完成。SET DELETED ON 告诉 VFP 隐藏任何标记的记录删除,这样它们就不会弄乱屏幕。它也使它们对任何类型的 SQL 查询都隐藏起来,所以你不会得到标记为删除的记录。

通过 SET DELETED OFF,将关闭隐藏并允许您再次重新查看任何/所有已删除的记录。这以防您不小心将记录标记为删除并需要“撤回”它(取消删除)。

现在,说了这么多。如果您将记录标记为删除,例如在找到条件后设置过滤器,执行全部删除,打包,那很糟糕......

在按钮的点击事件中,您只需要

DELETE
Thisform.YourGridObject.Refresh()

并且记录应该从列表中直观地删除。当你发出一个 PACK 时,它实际上关闭了表,因此从网格中解除绑定,删除所有已删除的记录,然后通过清理版本重新打开自身,但不会自动将自身重新绑定到网格。

于 2012-05-26T12:12:13.257 回答
1

VFP 网格讨厌这样修改记录源。

您需要断开网格记录源(即,将其设置为“”),执行您的操作,然后重置记录源并刷新。

于 2012-05-27T22:58:25.083 回答