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


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

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

帅哥哟,离线,有人找我吗?
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在前台界面上?

或者其它更好方法?

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


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


 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


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

以下是引用chnfo在2017/7/6 22:51:00的发言:
 
自定义函数中,要求每一列都需要有值。但有时候,并不是每个单元格里都有值的。就比如方说,有些时候采购的商品有赠品,在入账的时候,有商品ID、数量,但并不一定有单价。当有的单元格里有空值时,会报出错误。

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

 

不应该有你这种问题。当值为空值的时候,合成的sql语句是null,没问题的。

 

你使用表数据的时候出错?判断dbnull这样写 If dr("字段") = dbnull.value Then


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


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

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

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


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

 例子测试没问题。实例说明。

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


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

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

一般情况下

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


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

以下是引用chnfo在2017/7/7 15:00:00的发言:

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

 

直接赋值即可,如

 

Dim tbid As String = Args(2)     '表格中的主键字段名
Dim kid As String = tbid      '后台表格的主键字段名
Dim bgzd As String = Args(3)     '表格中的字段,用|分割
Dim kbgzd As String = bgzd    '对应的后台表中的字段,用|分割
 
调用的时候,对应传递参数。

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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



 回到顶部
总数 29 1 2 3 下一页