主题:[请教] 用GETFLDSTATE()测试自由表是否编辑过是否好用?
北京惬意
[专家分:1330] 发布于 2010-01-31 18:18:00
本人以往都是在打开一个表的同时,赋一个全局变量,例“表1=.F.”,如果编辑过就“表1=.T.”,关表前根据这个值确定后面事宜,很费事的。
后来发现有GETFLDSTATE()这个函数,但还是没敢用,也不知道怎么用。
有请用过的高师介绍经验,谢谢!
回复列表 (共11个回复)
沙发
sywzs [专家分:5650] 发布于 2010-02-01 05:42:00
好像是只能测试当前记录是否被编辑。
板凳
北京惬意 [专家分:1330] 发布于 2010-02-01 09:20:00
谢谢楼上回复!
刚才又看了一阵子说明,越看越糊涂。哈哈!
3 楼
zjp001 [专家分:60] 发布于 2010-02-01 09:42:00
一般在表格中使用
当用户在任意一行任意一列修改记录后,函数起作用
对表设置表缓冲
代码如下:
暂没时间...
4 楼
zjp001 [专家分:60] 发布于 2010-02-02 10:10:00
今天有时间,接着写:
这个函数GETFLDSTATE()看似简单,在表格中用起来确实不太容易,以前看到有一个老师用如下办法实现:
lMov = .F.
IF ThisForm.nWhatRow # This.ActiveRow
ThisForm.nWhatRow = This.ActiveRow
nHold= RECNO()
GO ThisForm.nRecNum
cChange = GetFldState(-1,'表')
IF AT('2', cChange)>0
This.Refresh
lMov = .T.
IF MessageBox("确定要修改吗?",4)= 6
=TableUpdate(.T.)
ELSE
=TableRevert(.T.)
ENDIF
ENDIF
GO nHold
IF lMov
This.Refresh
lMov =.F.
ENDIF
ENDIF
太烦锁,并且需要在三个事件中写代码,
其实只要在表格的:Beforerowcolchange 事件写如下代码
就可以完成:
主要思路:
1.GetFldState('字段名')<>1 就知道表格已经修改了
2.达到上述目的就是通过列获取表名,再获取表的字段名,一旦知道字段名,问题就容易解决了
5 楼
北京惬意 [专家分:1330] 发布于 2010-02-02 10:24:00
谢谢楼上回复!
如果GETFLDSTATE()这个函数使用起来那么麻烦,我不如还用一个全局变量来记录了。
我想象中的GETFLDSTATE()在关闭表前或随时测一下,就可以知道打开后的表是否编辑过呢。看来是期望值太高。
6 楼
zjp001 [专家分:60] 发布于 2010-02-02 10:34:00
这个函数的目的是,用户对表格中任意一列作了修改,马上会得到信息
对单机版如不经意动了数据就会马上知道
对远程表特别有用,看得清清楚楚的修改!
7 楼
wzxc [专家分:9440] 发布于 2010-02-02 11:04:00
来模拟excel的退出效果
在表单的queryunload事件中:
Local lnAnswer,lcmodified
Thisform.lxiugai=.F.
Scan
lcmodified=Getfldstate(-1)
If '2'$lcmodified Or '3'$lcmodified Or '4'$lcmodified
Thisform.lxiugai=.T.
Exit
Endif
Endscan
If Thisform.lxiugai=.T.
lnAnswer=Messagebox('当前表数据已被修改,是否保存?',3+32+512,'系统提示')
Do Case
Case lnAnswer=6
=Tableupdate(.T.)
Thisform.Release
Case lnAnswer=7
=Tablerevert(.T.)
Thisform.Release
Case lnAnswer=2
Nodefault
Endcase
Else
Thisform.Release
=Tablerevert(.T.)
Endif
老哥,你是全局变量的浪费者!!!即使用你的方法,也根本用不到全局变量,一个表单自定义属性即可解决。
8 楼
zjp001 [专家分:60] 发布于 2010-02-02 11:39:00
受让了!
如果再加点内容,老弟你的就不行了
IF MessageBox("确定要修改吗?",4)= 6
IF TABLEUPDATE(.t.,.t.)=.t.
MESSAGEBOX("已完成数据库的修改","信息提示")
cFieldList="字段列表"
insert into 表1 (&cFieldList) select &cFieldList from curs WHERE 序号=xh
insert into 表1 (&cFieldList) select &cFieldList from cursbf WHERE 序号=xh
SELECT 表1
GO bott
REPLACE 备注 WITH "修改前",报表日期 WITH sj
SKIP -1
REPLACE 备注 WITH "修改后",报表日期 WITH sj
=TABLEUPDATE(.t.,.t.)
ELSE
MESSAGEBOX("数据保存失败","信息提示")
ENDIF
ELSE
=TableRevert(.T.)
ENDIF
这就是对每条记录修改后存档备查,如有前后道工艺流程,就能确认各环级的变化!
你的代码就做不到这一点,修改记录时间及内容!
9 楼
wzxc [专家分:9440] 发布于 2010-02-02 12:06:00
[quote]受让了!
如果再加点内容,老弟你的就不行了
[/quote]
说我吗?我是老弟?
10 楼
zjp001 [专家分:60] 发布于 2010-02-02 12:16:00
嘻嘻
我来回复