以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]大数据量的导入和保存 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=103365) |
||||
-- 作者:chnfo -- 发布时间:2017/7/6 15:42:00 -- [求助]大数据量的导入和保存 用外部access做数据库。 导入一个10万行,5列的Excel表。如用merger方法,合并数据用时35秒左右,但保存却要用232秒。 如果是1万行,合并2秒即完成,但保存要22秒。 是否可以用后台方法直接往数据库文件中合并数据,然后再load在前台界面上? 或者其它更好方法?
|
||||
-- 作者:有点甜 -- 发布时间:2017/7/6 15:58:00 -- 用这种方法保存
http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=98689&skin=0
|
||||
-- 作者:chnfo -- 发布时间: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编辑过]
|
||||
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2017/7/7 9:16:00 -- 不是这意思,在button事件中,列组合增加一列,例如把日期列加进去,就出错了。就是日期|产品编码|客户编码……,那儿 |
||||
-- 作者:有点甜 -- 发布时间:2017/7/7 9:18:00 -- 例子测试没问题。实例说明。 |
||||
-- 作者:chnfo -- 发布时间: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 -- 发布时间:2017/7/7 15:01:00 -- 而且,要提取的表名和后台表名也会一致。 一般情况下
|
||||
-- 作者:有点甜 -- 发布时间: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 -- 发布时间: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”的转换无效。 是不是表有关联的时候,就不能保存呀? 问题出在哪里呢?
|