以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]第三方开发接口涉及的_SortKey问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=91492) |
-- 作者:chnfo -- 发布时间:2016/10/12 9:29:00 -- [求助]第三方开发接口涉及的_SortKey问题 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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/12 10:07:00 -- "_SortKey"排序的目的是为了什么? 每增加一行数据都重头排序,肯定有问题的。还不如就使用店名,时间动态排序好了 |
-- 作者:chnfo -- 发布时间:2016/10/12 10:13:00 -- 主要是2个方面 1、这个表本身需要插入功能(但是在排序条件下没法插入,如果在插入之前取消排序,插入行后再加入排序,这样只是实现了功能,但是在插入的时候,新插入的行会跳到第一行,感觉不好),而且在输入店名的时候,新插入的行会改变position,在输了日期之后,这一行的position又会变一次,界面肯定会闪的。——————甚至是插入店名(因为店号并不是直接连续,可以有预留店编号备用,比如市里有5个区,现在还没有开发第3个区的业务,会把3开头的空出来) 2、这个表需要在其它的地方引用(这个倒还好办,在引用的界面上做排序即可) ----如果实在是没办法,那就只有变个方式了。 插入的时候,弹出一个窗口,用户增加完之后,在界面上排序 是不是挺有点怪怪的。
[此贴子已经被作者于2016/10/12 10:40:45编辑过]
|
-- 作者:有点蓝 -- 发布时间:2016/10/12 10:46:00 -- 插入行事件里直接给"_SortKey"赋值 找到插入位置原来行的 "_SortKey",新增行的"_SortKey"相应减小,"_SortKey"是高精度类型的,支持小数
|
-- 作者:chnfo -- 发布时间:2016/10/12 10:59:00 -- 这个恐怕不行吧?本身的排序规则是“店名,时间”,在插入行的时候,就算给_SortKey赋值,也没有意义呀。 |
-- 作者:有点蓝 -- 发布时间:2016/10/12 11:07:00 -- 那就在“店名,时间”变化的时候,找到大于“店名,时间”排序的最小_SortKey值相应减小 |
-- 作者:chnfo -- 发布时间:2016/10/12 11:15:00 -- 现实情况是这样的: maintablechanged事件中,已经加了代码 maintable.sort = "店名,时间" 这时候,是不能插入行的,因为它本身在排序状态下。 如果要插入行,就要首先 currenttable.sort = "" \'这时候,整个表的顺序可能已经乱掉了,准备在哪里插入行都可能找不到了
|
-- 作者:有点蓝 -- 发布时间:2016/10/12 11:31:00 -- 这个没有办法。其实这种情况就没有必要插入行了,新增行的时候,没有填写店名,时间,不管做什么顺序都是不对的 |
-- 作者:chnfo -- 发布时间:2016/10/12 11:35:00 -- 晕,是要先插入行,再填写内容。 不是先确定内容,再确定要插入呀
|
-- 作者:有点蓝 -- 发布时间:2016/10/12 12:02:00 -- 所以说没有办法的。这就是为什么狐表限制了在排序的时候插入行,因为是没有意义的。没有内容又怎么排序呢。 不然就在窗口控件里编辑数据,等保存了再显示到表中
|