Foxtable(狐表)用户栏目专家坐堂 → [讨论]关于FOXTABLE的保存。被 “保存机制” 杀掉 近24小时!!


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

主题:[讨论]关于FOXTABLE的保存。被 “保存机制” 杀掉 近24小时!!

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


加好友 发短信
等级:三尾狐 帖子:682 积分:5263 威望:0 精华:0 注册:2012/6/6 14:37:00
[讨论]关于FOXTABLE的保存。被 “保存机制” 杀掉 近24小时!!  发帖心情 Post By:2013/10/13 8:38:00 [只看该作者]

[讨论]关于FOXTABLE的保存,被 “保存机制” 杀掉 近24小时!!

 

前几天做了一个小软件!用到了一条SQL UPDATE 语句,问题来了,客户说有时有些数据找不到!

 

于是我从昨天查,一直检查到今天早上!被   “保存机制” 杀掉 近24小时!!

 

先谈 大家习惯的保存经验【不管内部还是外部数据表】:

 

   Datatable 的 save  应该保存的是 datatable 里面 加载的 所有数据,不管修改不修改。

 

   table  的save  应该保存的是 table 里面 filter 所有数据,不管是否修改。【table的save帮助里没有】

 

   datarow的save  应该保存的的行的数据,不管是否修改。

 

   如果开发者 全部保存 考虑效率问题,狐表提供了行的状态判断 RowState ,

 

  可以根据行的状态利用循环语句提高效率!!

 

  看到这里,您会说,没错啊!!!那你会和我一样被杀!! 

 

看看我的遭遇,我用的SQL数据表,我中间用到了一句SQLcommand 的 update 直接更新了后台数据 列名:编辑人。

 

     然后,保存!!【举个例子】

 

If e.OldRange.RowSel <> e.NewRange.RowSel '如果选择的是不同的行
    If e.OldRange.RowSel >= 0 AndAlso e.OldRange.Rowsel < e.Table.Rows.Count Then '而且原来选择的是一个有效的数据行
        Dim r As Row = e.Table.Rows(e.OldRange.Rowsel) '获得原来选择的行
        r("编辑人")=""
        r.Save() '保存之
    End If
End If
    

 

   

    问题来了,   r("编辑人")=""   没保存!!

 

  于是记录就被锁死了!!!

 

一直找问题!!查了很多的东西和例程!终于翻看到帮助里有这句活!!

 

    这里涉及到Foxtable的保存机制:在保存某行之前,系统会进行一个判断,如果此行所有列内容和最初完全相同,则跳过此行,以提高保存效率。

 

不知狐爸怎么想的,上面我也提到了

 

如果开发者 全部保存 考虑效率问题,狐表提供了行的状态判断 RowState ,

可以根据行的状态利用循环语句提高效率!!

 

 

我们从帮助开始学习,已经习惯了正常的保存机制,狐爸突然来这一手!有用吗??还是多余??

 

说句笑话:有点被杀的感觉。

 

写出来是告诉狐友,小心了,不规范的帮助里的每一句话,要小心看!

 

 

 

 

 

[此贴子已经被作者于2013-10-13 8:41:21编辑过]

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


加好友 发短信
等级:狐精 帖子:3360 积分:24792 威望:0 精华:0 注册:2012/3/26 21:47:00
  发帖心情 Post By:2013/10/13 9:15:00 [只看该作者]

这个问题我也遇到过  之前也发过帖子问过保存原理 没人解答 row的save基本没用的  现在为了保险 只能datarow save 然后再 datatable save

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2013/10/13 9:43:00 [只看该作者]

保存,只保存修改过的数据,不管是理论上还是实际应用都没有错,现在的关键是dr.load(true)失效。类似save()可能也有问题,过去一直可以的。

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/10/13 15:39:00 [只看该作者]

这句话一直存在的吧。这样机制挺好的,就是在一口气保存超大数据会卡死。

还有没看懂你这个是如何锁死的?数据本身没改变,你保存没保存都不会影响后台,这个有什么问题嘛?

 


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


加好友 发短信
等级:三尾狐 帖子:682 积分:5263 威望:0 精华:0 注册:2012/6/6 14:37:00
  发帖心情 Post By:2013/10/13 17:36:00 [只看该作者]

SQL 的update 直接修改后台,并不影响 行的状态 !  明白了吧


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


加好友 发短信
等级:三尾狐 帖子:682 积分:5263 威望:0 精华:0 注册:2012/6/6 14:37:00
  发帖心情 Post By:2013/10/13 17:37:00 [只看该作者]

以下是引用程兴刚在2013-10-13 9:43:00的发言:
保存,只保存修改过的数据,不管是理论上还是实际应用都没有错,现在的关键是dr.load(true)失效。类似save()可能也有问题,过去一直可以的。

save,如果就是经典保存【就是不管修不修改,都存】,用户自己决定保存修改过的数据
save,狐爸处理为“只保存修改过的数据!”   SQL 的update 就要用户自己编程处理

这两种情况都要取舍!狐爸为什么选择其后???

[此贴子已经被作者于2013-10-13 17:44:07编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1732 积分:11266 威望:0 精华:0 注册:2011/12/15 22:06:00
  发帖心情 Post By:2013/10/13 17:54:00 [只看该作者]

以下是引用gsnake在2013-10-13 17:36:00的发言:
SQL 的update 直接修改后台,并不影响 行的状态 !  明白了吧

你搞错了狐表的运行机制,狐表的绝大部分操作是对于已经加载的表,没有加载的数据是无能为力的。你后台更新了一句,那么你为什么不选择同样的update语句那?这样就不会出现问题

 

不过狐爸应该提供一个无条件保存的方法供选择。

一旦你使用了后,那么你会发现为什么狐爸会选择现在这个方案。


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


加好友 发短信
等级:四尾狐 帖子:953 积分:7252 威望:0 精华:0 注册:2011/9/6 13:36:00
  发帖心情 Post By:2013/10/13 19:48:00 [只看该作者]

以下是引用rjh4078在2013-10-13 9:15:00的发言:
这个问题我也遇到过  之前也发过帖子问过保存原理 没人解答 row的save基本没用的  现在为了保险 只能datarow save 然后再 datatable save
认真看帮助,row.save 是row.datarow.save的简写,FT编译时会自动转为row.datarow.save


 回到顶部