Foxtable(狐表)用户栏目专家坐堂 → 怎样防止数据被修改


  共有9814人关注过本帖树形打印复制链接

主题:怎样防止数据被修改

帅哥哟,离线,有人找我吗?
zhangc2000
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1849 威望:0 精华:0 注册:2012/4/18 11:30:00
怎样防止数据被修改  发帖心情 Post By:2012/7/31 16:09:00 [只看该作者]

我在编程时,不知什么原因造成数据库的一些数据被修改,尽管我在数据库中的字段列设置了禁止输入(允许编辑=False),但还是出现过数据被莫名其妙的修改。那么,在设计时需要添加哪些语句才能保证数据不被修改?

 

谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6885 积分:43595 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By:2012/7/31 16:25:00 [只看该作者]

StartEdit

开始编辑的时候执行。

e参数属性:

Table:       准备编辑的表
Row:         准备编辑的行
Col:         准备编辑的列
IsFocusCell: 逻辑型,是否是焦点单元格
Cancel:      逻辑型,默认为False,设为True取消编辑。

StartEdit事件的使用方法和PrepareEdit事件完全一样,实际上大部分PrepareEdit能完成的工作,都可以用StartEdit完成。
但是两者有细微差别;PrepareEdit事件的代码,一进入单元格就会执行,为可能开始的编辑工作做准备,所以执行效率会差一些,因为并不是每次进入单元格都是需要编辑的;而StartEdit只是在真正开始编辑的时候执行,效率会稍微好一点;不过这种效率的差别,我们并不会明显感觉得到。
此外用于设置列表项目的代码,最好不要用在StartEdit事件中,否则你选择某一单元格的时候,可能不会出现下拉箭头按钮,因为此时StartEdit事件并没有执行,列表项目当然也就没有准备好。
千万不要在PrepareEdit事件显示Messagebox这样的对话框,因为每次进入单元格就会出现提示,这样会导致死循环的出现;在StartEdit事件中显示对话框就没有这个问题,因为此时只有用户真正做出编辑动作的时候,对话框才会显示。

示例

假定消费表中还有一个折扣列,我们希望只有经理级别的用户才能编辑该列的数据,如果其他用户试图编辑该列,则给出明确拒绝的提示,为此可在该表的StartEdit事件中输入代码:

If e.Col.Name = "折扣" AndAlso User.Group <> "经理" Then
    e.Cancel =
True '取消编辑
    Messagebox.Show(
"只有经理才能打折!","提示",MessageBoxButtons.OK, MessageBoxIcon.Information)
End
If

上面的代码如果设置在PrepareEdit事件中,非经理级用户一旦选择折扣列,将不停地出现提示窗口,使得你再也回不到正常的操作界面,你只能借助Foxtable提供的灾难恢复了。
而设置在StartEdit事件中,就不会有任何问题。


 回到顶部
帅哥哟,离线,有人找我吗?
zhangc2000
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:175 积分:1849 威望:0 精华:0 注册:2012/4/18 11:30:00
  发帖心情 Post By:2012/7/31 16:40:00 [只看该作者]

我并是想在程序中修改或编辑数据,我只是想任何人包括开发者在编码调试时都不要损坏数据,需要哪些办法?

 

谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2012/7/31 17:19:00 [只看该作者]

数据不会无缘无故被修改的。

你要任何时候都不能保存,何止每个表的BeforeSaveDataRow事件代码为:

e.Cancel = true

 

参考:

http://www.foxtable.com/help/topics/0628.htm


 回到顶部