Foxtable(狐表)用户栏目专家坐堂 → [求助]大数据量的导入和保存


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

主题:[求助]大数据量的导入和保存

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]大数据量的导入和保存  发帖心情 Post By:2017/7/6 15:42:00 [显示全部帖子]

用外部access做数据库。
导入一个10万行,5列的Excel表。如用merger方法,合并数据用时35秒左右,但保存却要用232秒。
如果是1万行,合并2秒即完成,但保存要22秒。

是否可以用后台方法直接往数据库文件中合并数据,然后再load在前台界面上?

或者其它更好方法?

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2017/7/6 22:51:00 [显示全部帖子]

方法挺好,效率比直接写datatables("A").save()快了N多倍,2万行数据包括导入到保存也就是17秒的样子。
但这个有一个小问题。
自定义函数中,要求每一列都需要有值。但有时候,并不是每个单元格里都有值的。就比如方说,有些时候采购的商品有赠品,在入账的时候,有商品ID、数量,但并不一定有单价。当有的单元格里有空值时,会报出错误。

.NET Framework 版本:2.0.50727.8745
Foxtable 版本:2017.6.12.1
错误所在事件:自定义函数ABC(这是我自己取的名字)
详细错误信息:
调用的目标发生了异常。
从类型“DBNull”到类型“String”的转换无效。

如何解决这个问题呢?

[此贴子已经被作者于2017/7/6 22:52:09编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2017/7/7 9:16:00 [显示全部帖子]

不是这意思,在button事件中,列组合增加一列,例如把日期列加进去,就出错了。就是日期|产品编码|客户编码……,那儿

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


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

是我的错,把表达式列进去了。
不过,感觉那个自定义函数:SQL提取是不是有点考虑过多了?因为如果用外部数据源的话,一般情况下,表的名称和列字段名都是一样的,那么
Dim tbid As String = Args(2)     '表格中的主键字段名
Dim kid As String = Args(3)      '后台表格的主键字段名
Dim bgzd As String = Args(4)     '表格中的字段,用|分割
Dim kbgzd As String = Args(5)    '对应的后台表中的字段,用|分割
这里面的tbid和Kid、bgzd和kbgzd应当是一致的。
如果是这样的话,函数应当简洁得多。

如果我的假设成立,那么这个自定义函数应当咋改一下?

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


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

而且,要提取的表名和后台表名也会一致。

一般情况下

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2017/7/11 17:46:00 [显示全部帖子]



选中TbWBS表的第8行,然后修改从表中任一行的A值,此时,TbWBS表的第8行的V值会发生变化。

这时候,执行窗口中的button1事件(也就是准备保存TBWL表时),会报出错误。

.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.6.12.1
错误所在事件:自定义函数SQLCatch
详细错误信息:
调用的目标发生了异常。
找不到父关系“PL2WL”。

执行button2事件(也就是准备保存TBWBS时),也报出错误
.NET Framework 版本:2.0.50727.8669
Foxtable 版本:2017.6.12.1
错误所在事件:自定义函数SQLCatch
详细错误信息:
调用的目标发生了异常。
从类型“DBNull”到类型“String”的转换无效。

是不是表有关联的时候,就不能保存呀?
问题出在哪里呢?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:保存关联表的时候报错.rar



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


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

那这个大数据量的保存几乎就没有意义了。
因为随便哪个系统,都不可能是单一个表的。绝大多数的表之间都存在关联关系,去掉关联,那就无法成为一个系统了。
只能回到软件本身提供的
datatables.save了
唉,白搞好几天。
[此贴子已经被作者于2017/7/11 21:59:29编辑过]

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


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

@有点蓝 如果都用模拟,那开发工作量几乎是几何级数的,表少可以,表多了会累死的。而且维护极不方便。
@有点甜  代码大改可以接受,但还是要做成统一的方法才行。而且,一个表的数据行数多(比如1W行),列数也不少(随便都有五六列了),遍历的话,效率可能甚至还不如datatables.save呢。

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


加好友 发短信
等级:九尾狐 帖子:2247 积分:18514 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2017/7/12 17:24:00 [显示全部帖子]

@有点甜  获取新增的行和修改的行是可以,有个问题:删除的行怎么办?因为RowState 没有deleted状态。


[此贴子已经被作者于2017/7/12 17:30:54编辑过]

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


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

啊,帮助里为什么没写?
帮助里总共只有4种:Added、Modified、Unchanged、Detached

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