Foxtable(狐表)用户栏目专家坐堂 → [求助]第三方开发接口涉及的_SortKey问题


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

主题:[求助]第三方开发接口涉及的_SortKey问题

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]第三方开发接口涉及的_SortKey问题  发帖心情 Post By:2016/10/12 9:29:00 [只看该作者]

1、使用外部数据表(ACCESS)
2、多个账套(就是多家店的管理)

表A各列:店名、时间、货名、数量、单价、金额

例如在命令窗口执行操作之后(当然是用其它的方式增加数据,说在命令窗口执行,只是为了思路),能在界面上直接将各店数据分别放到各店名下面(不是用排序,因为还有其它的用途)
dim r as row = tables("A").addnew
r("店名") = “店A”
r("时间") = date.now
…………

systemready = false
tables("A").sort = "店名,时间 DESC“
for each r as row in tables("A").rows
r.datarow.baserow("_SortKey") = r.index
next
tables("A").sort = "“
systemready = true


但这样可能会有问题,多人同时在各自的电脑上输入数据后,表A的_sortKey可能会相互影响(_Sortkey的值应当是不能重复的)

要如何做才好呢?

如果用帮助里的“第三方开发接口”的方法,就可能得这么干了

Dim drs As List(of DataRow) = DataTables("A").Select("","店名,时间 DESC")
For
i As Integer = 0 To drs.Count - 1
   
drs(i).BaseRow("_SortKey") = i
Next

但在表A数据量很大的时候(比如上万、十万行),如果每一次增加行,都这样执行,会不会有效率问题?尤其是并发数大的时候
当然,时间不用降序,用升序也行。
-----补充,用本地数据库测试,20000行数据,第三方开发接口方法用时2秒,还算可以接受,不知道到了十万级的数据会怎么样
[此贴子已经被作者于2016/10/12 10:02:35编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/12 10:07:00 [只看该作者]

"_SortKey"排序的目的是为了什么?

每增加一行数据都重头排序,肯定有问题的。还不如就使用店名,时间动态排序好了



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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 10:13:00 [只看该作者]

主要是2个方面
1、这个表本身需要插入功能(但是在排序条件下没法插入,如果在插入之前取消排序,插入行后再加入排序,这样只是实现了功能,但是在插入的时候,新插入的行会跳到第一行,感觉不好),而且在输入店名的时候,新插入的行会改变position,在输了日期之后,这一行的position又会变一次,界面肯定会闪的。——————甚至是插入店名(因为店号并不是直接连续,可以有预留店编号备用,比如市里有5个区,现在还没有开发第3个区的业务,会把3开头的空出来)
2、这个表需要在其它的地方引用(这个倒还好办,在引用的界面上做排序即可)

----如果实在是没办法,那就只有变个方式了。
插入的时候,弹出一个窗口,用户增加完之后,在界面上排序图片点击可在新窗口打开查看
是不是挺有点怪怪的。
[此贴子已经被作者于2016/10/12 10:40:45编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/12 10:46:00 [只看该作者]

插入行事件里直接给"_SortKey"赋值

找到插入位置原来行的 "_SortKey",新增行的"_SortKey"相应减小,"_SortKey"是高精度类型的,支持小数

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 10:59:00 [只看该作者]

这个恐怕不行吧?本身的排序规则是“店名,时间”,在插入行的时候,就算给_SortKey赋值,也没有意义呀。

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/12 11:07:00 [只看该作者]

那就在“店名,时间”变化的时候,找到大于“店名,时间”排序的最小_SortKey值相应减小

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 11:15:00 [只看该作者]

现实情况是这样的:
maintablechanged事件中,已经加了代码
maintable.sort = "店名,时间"

这时候,是不能插入行的,因为它本身在排序状态下。

如果要插入行,就要首先
currenttable.sort = ""    '这时候,整个表的顺序可能已经乱掉了,准备在哪里插入行都可能找不到了

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/12 11:31:00 [只看该作者]

这个没有办法。其实这种情况就没有必要插入行了,新增行的时候,没有填写店名,时间,不管做什么顺序都是不对的

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


加好友 发短信
等级:九尾狐 帖子:2239 积分:18446 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 11:35:00 [只看该作者]

晕,是要先插入行,再填写内容。
不是先确定内容,再确定要插入呀

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110558 积分:562680 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/10/12 12:02:00 [只看该作者]

所以说没有办法的。这就是为什么狐表限制了在排序的时候插入行,因为是没有意义的。没有内容又怎么排序呢。

不然就在窗口控件里编辑数据,等保存了再显示到表中

 回到顶部
总数 13 1 2 下一页