以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  怎样防止数据被修改  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=22030)

--  作者:zhangc2000
--  发布时间:2012/7/31 16:09:00
--  怎样防止数据被修改

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

 

谢谢


--  作者:lihe60
--  发布时间: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
--  发布时间:2012/7/31 16:40:00
--  

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

 

谢谢


--  作者:狐狸爸爸
--  发布时间:2012/7/31 17:19:00
--  

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

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

e.Cancel = true

 

参考:

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