以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]行锁定  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=54928)

--  作者:lesliecheung912
--  发布时间:2014/8/7 15:05:00
--  [求助]行锁定
在窗口中录入出库明细,录完一条明细后点保存按钮,代码为:
with tables("出库表")
   .Current.Locked = True
            .Current.Save
end with
这样的话当前行就会锁定,但是关闭窗口以后,刚才锁定的行会自动解锁,
窗口的AfterClose事件为:
DataTables("出库表").LoadFilter = "_Identify Is NULL"
DataTables("出库表").Load
DataTables("出库表").AllowEdit = False

BeforeClose事件为:
Dim hasSave As Boolean = True
For Each r As Row In Tables("出库表").Rows
    If r.DataRow.RowState <> DataRowState.Unchanged Then
        hasSave = False
    End If
Next
If  not hasSave Then
    MessageBox.Show("请保存出库明细!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Question)
    e.cancel  =True
End If
 
这些代码我测试过,都不会影响行锁定,另外表的表事件中也无与行锁定相关代码
请问各位大神,还可能什么地方对于行锁定有影响呢?
[此贴子已经被作者于2014-8-7 15:05:27编辑过]

--  作者:Bin
--  发布时间:2014/8/7 15:09:00
--  
例子发出来看看.
--  作者:lesliecheung912
--  发布时间:2014/8/7 15:12:00
--  
外部数据源,不方便发
--  作者:Bin
--  发布时间:2014/8/7 15:13:00
--  
做个内部数据源的例子
--  作者:lesliecheung912
--  发布时间:2014/8/7 15:15:00
--  
稍等哈
--  作者:lesliecheung912
--  发布时间:2014/8/7 17:33:00
--  
我查出原因了,就是在执行了DataTables("库存表").Load以后行锁定自动取消的
--  作者:有点甜
--  发布时间:2014/8/7 17:37:00
--  
以下是引用lesliecheung912在2014-8-7 17:33:00的发言:
我查出原因了,就是在执行了DataTables("库存表").Load以后行锁定自动取消的

 

锁定不应该自动取消吧?因为锁了以后,数据是保存到数据库连去的,即便重新加载,也是锁定的。

 

 


--  作者:lesliecheung912
--  发布时间:2014/8/8 8:56:00
--  
现在就是因为重新Load以后出的问题,做了内部数据源例子无法再现...
所以不知为何是这样,重新加载跟取消行锁定按说一点关系都没有啊

--  作者:有点甜
--  发布时间:2014/8/8 9:30:00
--  
以下是引用lesliecheung912在2014-8-8 8:56:00的发言:
现在就是因为重新Load以后出的问题,做了内部数据源例子无法再现...
所以不知为何是这样,重新加载跟取消行锁定按说一点关系都没有啊

 

你去看看你的数据库,执行了 r.Locked = True 和 r.Save 以后,你看看你的数据库对应的列_Locked是否为True了

 

如果不是True,你就看一下你是否在BeforeSaveDataRow事件写了取消等代码。


--  作者:lesliecheung912
--  发布时间:2014/8/8 10:08:00
--  
保存以后,_locked变为True,但如果点了查询或者关闭窗口(查询按钮和窗口的AfterClose事件都有datatables("出库表").load的代码),
在执行完load以后,_locked就变为了False。
全局表事件BeforeSaveDataRow中无代码