我在表单上的 vfp9 中有一个网格控件。我有一个按钮女巫删除(包)当前记录。删除记录后,网格找不到资源。它仍然只是一个空矩形。我做了这样的事情:
DELETE ALL
PACK
GO TOP
thisform.grid1.Refresh
,但没有效果。提前致谢。
我在表单上的 vfp9 中有一个网格控件。我有一个按钮女巫删除(包)当前记录。删除记录后,网格找不到资源。它仍然只是一个空矩形。我做了这样的事情:
DELETE ALL
PACK
GO TOP
thisform.grid1.Refresh
,但没有效果。提前致谢。
问题是您正在重新创建网格的 RecordSource 并且它不喜欢那样。如果不知道更多关于你在做什么,很难提供具体的建议。但是,在正常的应用程序活动中打包表格通常被认为是不好的形式。通常,PACK 保留给在非工作时间运行的管理代码,因为它需要对表的独占访问权。
你在这里的目标是什么?为什么要删除网格所基于的表中的所有记录?
添马舰
正如 Tamar 所提到的...... pack 在日常活动中真的很糟糕。但是,有一个“设置”可以通过所有正常操作为您“隐藏”记录,直到每晚处理的管理任务永久删除记录......
SET DELETED ON
SET DELETED OFF
通过打开“ON”(整个应用程序只需执行一次,除非您正在处理处理私有数据会话的表单,否则也需要在那里完成。SET DELETED ON 告诉 VFP 隐藏任何标记的记录删除,这样它们就不会弄乱屏幕。它也使它们对任何类型的 SQL 查询都隐藏起来,所以你不会得到标记为删除的记录。
通过 SET DELETED OFF,将关闭隐藏并允许您再次重新查看任何/所有已删除的记录。这以防您不小心将记录标记为删除并需要“撤回”它(取消删除)。
现在,说了这么多。如果您将记录标记为删除,例如在找到条件后设置过滤器,执行全部删除,打包,那很糟糕......
在按钮的点击事件中,您只需要
DELETE
Thisform.YourGridObject.Refresh()
并且记录应该从列表中直观地删除。当你发出一个 PACK 时,它实际上关闭了表,因此从网格中解除绑定,删除所有已删除的记录,然后通过清理版本重新打开自身,但不会自动将自身重新绑定到网格。
VFP 网格讨厌这样修改记录源。
您需要断开网格记录源(即,将其设置为“”),执行您的操作,然后重置记录源并刷新。