以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  超出当前范围。 (异常来自 HRESULT:0x8002000A (DISP_E_OVERFLOW))  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=89164)

--  作者:sf020cf
--  发布时间:2016/8/16 15:28:00
--  超出当前范围。 (异常来自 HRESULT:0x8002000A (DISP_E_OVERFLOW))

导入数据时提示:


图片点击可在新窗口打开查看此主题相关图片如下:2016-08-16_152630.jpg
图片点击可在新窗口打开查看
是什么原因引起的?

 


--  作者:大红袍
--  发布时间:2016/8/16 15:31:00
--  

 1、你导入的代码怎么写?

 

 2、数据量是不是过大?


--  作者:sf020cf
--  发布时间:2016/8/16 15:35:00
--  

Dim dlg As new OpenFileDialog
If dlg.ShowDialog = DialogResult.OK Then
    Dim App As New MSExcel.Application
    try
        Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
        Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets("计划表")
        wb.saved = True
        Dim Rg As MSExcel.Range = Ws.UsedRange
        Dim ary = rg.value
       
        Tables("订单").ResumeRedraw()
        Tables("订单").StopRedraw()
        Dim nms() As  String = {"甲方客户","项目","下单日期","MK号","DO号","城市","客户","送货地址","物料代码","数量","体积","重量","承运商","司机","车牌","车数","车型","出车日期","车辆属性","备注","特殊要求","司机搬运费","跟车搬运","人数","订单编号"}
        Dim count As Integer = 0
        Dim ls As new List(of Integer)
        Dim dic As new Dictionary (Of DataRow, Integer)
        systemready = False
        For i As Integer = 2 To Rg.Rows.count
            If ary(i, 25) > "" Then
                Dim Filter = "[订单编号] = \'" & ary(i,25) & "\'"
                Dim dr As DataRow = DataTables("订单").sqlFind(filter)
                If dr Is Nothing Then
                    ls.Add(i)
                    count += 1
                Else
                    dic.add(dr, i)
                End If
            End If
        Next
       
        For Each n As Integer In ls
           
            Dim r As  Row = Tables("订单").AddNew()
            For  m As  Integer = 0 To nms.Length - 1
                If ary(n,m+1) = Nothing Then
                    r(nms(m)) = Nothing
                Else
                    If Tables("订单").Cols(nms(m)).IsDate Then
    Dim d As Date
    If Date.TryParse(ary(n,m+1), d)
        r(nms(m)) = d
    End If
ElseIf Tables("订单").Cols(nms(m)).IsNumeric Then
    r(nms(m)) = val(ary(n,m+1))
Else
    r(nms(m)) = ary(n,m+1)
End If

 

                End If
               
            Next
           
        Next
        systemready = True
       
        Tables("订单").ResumeRedraw()
        msgbox("共有 "& count &" 条数据导入" )
        Tables("订单").Save
    catch ex As exception
        msgbox(ex.message)
    finally
        app.quit
    End try
End If

 

系统用了快一年,数据多了,现在导入好慢,要改代码吗?

 


--  作者:sf020cf
--  发布时间:2016/8/16 15:36:00
--  

一次导入量在1000条到6000条左右

 

 


--  作者:大红袍
--  发布时间:2016/8/16 15:41:00
--  

1、慢,是因为你用了 sqlFind ,这个方法要少用啊。

 

2、报错的话,上传实例测试一下。


--  作者:sf020cf
--  发布时间:2016/8/16 17:14:00
--  

1.不用sqlfind,只查找前台数据,不同的人导入数据(存在相同数据)假如一订单号在后台数据库,未在前台显示,另外一个人导入这一订单号订单怎样最快做到筛查?

2.针对超出当前范围的问题,是否因为数据存在外部引用连接,我把计算结果替换单一公式,得到纯粹的数据,导入无问题.

 


--  作者:大红袍
--  发布时间:2016/8/16 17:24:00
--  

1、把所有数据一次性加载出来也比你直接用sqlFind要快;

 

2、如果还有问题,做个实例上来看看。