动态增删数据的问题!急!

ikumei 2002-11-17 03:53:32
我的程序是这样的:
在一个form上放了个表格控件
这个表格连到一个数据表
另有两个按钮cmd1 cmd2。当单击cmd1时,执行的操作是:
dele
pack

据我的测试检查,这些语句运行后确实达到了我的目的,语句本身没任何问题。
可是在程序中一旦单击了cmd1后,整个表格控件变成一片白色,再也不能显示数据(仅不能显示,后台表中的数据是正确的),也不能对这个表格控件进行任何操作了,在cmd1中加入 thisform.refresh也无用。
根据我的测试,不论是dele还是appe一旦pack就完了,
请解释一下,并提供替代方案,十分感谢。
...全文
20 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ikumei 2002-11-20
  • 打赏
  • 举报
回复
请 zengzhe() 在找到标题后进去拿分,这里的分数不多
就先分给大家了
ikumei 2002-11-20
  • 打赏
  • 举报
回复
的确
第一位回答是最好的
我确实不打算去买vfp的书,我是搞delphi与bcb的
学校有个毕业设计指定要用vfp(任课老师擅长这个?),所以就来讨教了
问题已经解决了
playfox 2002-11-20
  • 打赏
  • 举报
回复
第一位回复是最好的
newfang 2002-11-20
  • 打赏
  • 举报
回复
兄弟,你手上一本书都没有啊!
set delete on 就是在对dbf进行操作时,忽略带有删除标记的记录,在这里是为了当你点了删除按纽后,表格中不再显示你刚删除的记录…………
you know???
ikumei 2002-11-20
  • 打赏
  • 举报
回复
大家继续
分数不是问题,我可以再加100
只要能解决问题
ikumei 2002-11-20
  • 打赏
  • 举报
回复
请问
set dele on是什么意思?
newfang 2002-11-18
  • 打赏
  • 举报
回复
在表单的load事件里加上set dele on,unlaod事件里写上pack 和 set delete off 即可!
zhjame 2002-11-18
  • 打赏
  • 举报
回复
我认为那面那位不错,不要在表格控件里用PACK,SET FILTER TO 就行了,数据整理可以专门做一个例程。
mucel 2002-11-18
  • 打赏
  • 举报
回复
THISFORM.LOCKSCREEN = .T.
select 表名
delete
pack
......
THISFORM.LOCKSCREEN = .f.
你说的问题解决啦!
zsycn 2002-11-18
  • 打赏
  • 举报
回复
我也曾遇到过这样的问题。。我是这样做的:
在cmd1中假如dele 和pack命令后。。将将网格的recordsource设置为
recordsource=""
然后再设置为recordsource="开始加入的表"
philozz 2002-11-17
  • 打赏
  • 举报
回复
请参考:
1、pack命令是将源表过滤掉删除录后生成一个新的表,然后将源表删除,
2、网格变空白的发生时间就在pack关闭源表删除源表时,因源表被关,所以网格联结的数据源不可用,因此网格会变成一片空白。
3、解决方案有两种:
1)不在按钮上使用pack命令,将set delete设置为on,再在按钮中添加刷新网格的命令方法refresh,在关闭表单后再对表执行pack命令
2)可以使用pack命令,但需的执行后将网格的recordsource再同样的设置一遍,不过这样会造成网格的显示格式与你在设计时所期望的不一致,
为保持原格式显示,你最好用程序设置显示格式,将这段程序放入表单的一个新的方法中,并在网格的init事件中调用此方法,以后在pack命令后也加入对此方法的调用。代码如下请参考:
1、定义新属性D_QueryGrid[50,4]
2、用数组D_QueryGrid[50,4]记忆表格属性
LOCAL m.oQueryObject
m.oQueryObject=thisform.grid1
LOCAL m.nQueryNum
m.nQueryNum=m.oQueryObject.ColumnCount

wait wind "正在记忆表格属性..." nowait
DIME THISFORM.D_QueryGrid[m.oQueryObject.ColumnCount,4]
FOR m_i = 1 TO m.nQueryNum
THISFORM.D_QueryGrid[m_i,1]=m.oQueryObject.Columns[m_i].controlsource
THISFORM.D_QueryGrid[m_i,2]=m.oQueryObject.Columns[m_i].width
THISFORM.D_QueryGrid[m_i,3]=m.oQueryObject.Columns[m_i].header1.caption
THISFORM.D_QueryGrid[m_i,4]=m.oQueryObject.Columns[m_i].name
ENDFOR
FOR M_I=ALEN(THISFORM.D_QueryGrid,1) TO 1 STEP -1
IF EMPTY(THISFORM.D_QueryGrid[M_I,1])
DIME THISFORM.D_QueryGrid[M_I,4]
ELSE
EXIT
ENDIF
ENDFOR
3、更新grid1数据源
THISFORM.grid1.RECORDSOURCE=P_SELEDBF
4、恢复grid1的属性
LOCAL m.oQueryObject
m.oQueryObject=thisform.grid1

THISFORM.LOCKSCREEN=.T.
FOR m_i = 1 TO ALEN(THISFORM.D_QUERYGRID,1)
m_chrnum=ALLTRIM(STR(m_i))
LOCAL m_queryname,m_controlsource
m_queryname=p_seledbf
IF NOT EMPTY(THISFORM.D_QueryGrid[m_i,4])
m_controlsource=M_QUERYNAME+'.'+THISFORM.D_QueryGrid[m_i,4]
thisform.grid1.Columns[m_i].controlsource=THISFORM.D_QueryGrid[m_i,4]
thisform.grid1.Columns[m_i].width=THISFORM.D_QueryGrid[m_i,2]
thisform.grid1.Columns[m_i].header1.caption=THISFORM.D_QueryGrid[m_i,3]
thisform.grid1.Columns[m_i].name=THISFORM.D_QueryGrid[m_i,4]
ENDIF
ENDFOR
THISFORM.LOCKSCREEN=.T.

2,740

社区成员

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

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