回 帖 发 新 帖 刷新版面

主题:[请教] 用GETFLDSTATE()测试自由表是否编辑过是否好用?

本人以往都是在打开一个表的同时,赋一个全局变量,例“表1=.F.”,如果编辑过就“表1=.T.”,关表前根据这个值确定后面事宜,很费事的。
后来发现有GETFLDSTATE()这个函数,但还是没敢用,也不知道怎么用。
有请用过的高师介绍经验,谢谢!

回复列表 (共11个回复)

沙发

好像是只能测试当前记录是否被编辑。

板凳

谢谢楼上回复!
刚才又看了一阵子说明,越看越糊涂。哈哈!

3 楼

一般在表格中使用
当用户在任意一行任意一列修改记录后,函数起作用
对表设置表缓冲
代码如下:
暂没时间...

4 楼

今天有时间,接着写:

这个函数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 楼

谢谢楼上回复!
如果GETFLDSTATE()这个函数使用起来那么麻烦,我不如还用一个全局变量来记录了。
我想象中的GETFLDSTATE()在关闭表前或随时测一下,就可以知道打开后的表是否编辑过呢。看来是期望值太高。

6 楼

这个函数的目的是,用户对表格中任意一列作了修改,马上会得到信息
对单机版如不经意动了数据就会马上知道
对远程表特别有用,看得清清楚楚的修改!

7 楼

来模拟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 楼

受让了!
如果再加点内容,老弟你的就不行了

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 楼

[quote]受让了!
如果再加点内容,老弟你的就不行了

 [/quote]

说我吗?我是老弟?

10 楼

嘻嘻

我来回复

您尚未登录,请登录后再回复。点此登录或注册