Foxtable(狐表)用户栏目专家坐堂 → [讨论] 外部表自动编号的问题


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

主题:[讨论] 外部表自动编号的问题

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


加好友 发短信
等级:幼狐 帖子:89 积分:947 威望:0 精华:0 注册:2017/8/7 14:36:00
[讨论] 外部表自动编号的问题  发帖心情 Post By:2018/6/6 22:44:00 [只看该作者]

由于数据可以从其他系统导入,所以把自动编号功能做成内部函数,用菜单执行编号的内部函数,将表中未编号的所有记录一次性编号。用的SQL的Select语句,感觉执行效率很低,明显的停顿,是否有更高效的方法?



图片点击可在新窗口打开查看此主题相关图片如下:autoid.png
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:编号.rar




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


加好友 发短信
等级:幼狐 帖子:89 积分:947 威望:0 精华:0 注册:2017/8/7 14:36:00
  发帖心情 Post By:2018/6/6 22:48:00 [只看该作者]

问题应该出在保存数据的那条语句上,但是如果不保存, Select又无法查询到最大编号值。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/6 22:53:00 [只看该作者]

每一次执行sql语句都至少耗时0.5秒的,如果你数据越多,耗时自然越多。

 

如果确实想快,就获取最大值,然后直接累加1编号(多人同时编号的时候,有可能导致重复)。这个时候,就必须要求别的客户端在这个时候不能编号,比如编号之前先判断有没有在编号,没有才能编(查找一个表格数据,判断是否有人编号,比如,如果有人编号,标记为1)

 


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


加好友 发短信
等级:幼狐 帖子:89 积分:947 威望:0 精华:0 注册:2017/8/7 14:36:00
  发帖心情 Post By:2018/6/6 23:05:00 [只看该作者]

上面的代码,如果把最后一句 DataTables("Orders").save() 注释掉,能看到赋值明显快很多,所以似乎效率最低的应该不是SQL语句而是Save()

但是如果赋值没有保存到外部数据库,所以下次查询不到最大值,结果所有的编号都是一样的。

有没有方法加快或者绕开Save()就能取得最大值? 

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/6 23:05:00 [只看该作者]

或者换一种方式处理

 

http://www.foxtable.com/webhelp/scr/3008.htm

 


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


加好友 发短信
等级:幼狐 帖子:89 积分:947 威望:0 精华:0 注册:2017/8/7 14:36:00
  发帖心情 Post By:2018/6/6 23:13:00 [只看该作者]

还没开始尝试服务器端和客户端的应用,所以没看这个帮助。 我试试看吧,多谢甜版!



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/7 8:56:00 [只看该作者]

以下是引用Mikee在2018/6/6 23:05:00的发言:
上面的代码,如果把最后一句 DataTables("Orders").save() 注释掉,能看到赋值明显快很多,所以似乎效率最低的应该不是SQL语句而是Save()

但是如果赋值没有保存到外部数据库,所以下次查询不到最大值,结果所有的编号都是一样的。

有没有方法加快或者绕开Save()就能取得最大值? 

 

如果要save,试试用sql语句

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=103365&skin=0

 


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


加好友 发短信
等级:幼狐 帖子:89 积分:947 威望:0 精华:0 注册:2017/8/7 14:36:00
  发帖心情 Post By:2018/6/8 12:11:00 [只看该作者]

谢谢甜版!

本实例是对批量导入的数据进行自动编号,可以理解为操作时不同项目类型的编号的最大值已经存在了,所以编号前直接查找最大值存储在临时表中,然后具体的记录根据该最大值编号,最后一次性保存, 对比下来速度会提高很多。没有测试大批量数据,有机会再试试更进一步优化。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:编号1.rar



另外可以考虑加上限制,批量编号的时候锁定表,以避免多人操作重复编号。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/8 12:33:00 [只看该作者]

回复8楼,谢谢分享。

 回到顶部