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


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

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

帅哥,在线噢!
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2221 积分:18261 威望: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编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2221 积分:18261 威望: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编辑过]

 回到顶部
帅哥,在线噢!
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2221 积分:18261 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 10:59:00 [显示全部帖子]

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

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


加好友 发短信
等级:九尾狐 帖子:2221 积分:18261 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 11:15:00 [显示全部帖子]

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

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

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

 回到顶部
帅哥,在线噢!
chnfo
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2221 积分:18261 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 11:35:00 [显示全部帖子]

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

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


加好友 发短信
等级:九尾狐 帖子:2221 积分:18261 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 13:55:00 [显示全部帖子]

如果是数据大量的行,可以做导入,这样处理方便。
但是如果本身只有一行或几行数据,还要做窗口编辑,不太方便呀。而且如果排序条件是多个,那么从EXCEL里直接复制粘贴进来,会造成列数据错乱的情况。

而且,如果要导入的数据有很多行,那就存在要遍历,然后再find,再插入的问题,效率太低了。
[此贴子已经被作者于2016/10/12 13:56:09编辑过]

 回到顶部
帅哥,在线噢!
chnfo
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2221 积分:18261 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2016/10/12 14:27:00 [显示全部帖子]

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店排序的时候,就不会去更新B店的数据,这样是不是就没有问题了?
也就是说,表A中,_SortKey本身是可以重复的

就算是一个店的数据量不断在增加,还可以再加入年份的判断条件,那每一年的数据量总是不可能无限增长的。
[此贴子已经被作者于2016/10/12 14:38:34编辑过]

 回到顶部