设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1988|回复: 3
打印 上一主题 下一主题

[ADO/DAO] 从EXCEL中读数据进入ACCESS表,为什么在ACCESS中比在EXCEL 中慢 ?

[复制链接]
跳转到指定楼层
1#
发表于 2009-7-10 22:21:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 holywind 于 2009-7-11 01:39 编辑

有EXCEL表中的(部分)数据要导入ACCESS TABLE中,在EXCEL中用VBA 读取用了2 分钟,几乎同样的程序放在ACCESS VBA中要用 13分钟,哪位大侠给瞧瞧。 多谢!!

ACCESS 中的:



Option Compare Database
Option Explicit
Public Const PATH = "D:\HFH Doc\programing\PPA\update\VBA\06_29_2009"
Public Const USAGE = "USAGEFTR.xls"
Public Const CRUNCHDB = "CRUNCHDB.mdb"

Function DAOFromExcelIntoAccessTable()
Dim conn As DAO.Connection
Dim rsSub As DAO.Recordset
Dim rsContract As DAO.Recordset
Dim rsDataSOC As DAO.Recordset
Dim rsHardware As DAO.Recordset
Dim rsBilling As DAO.Recordset
Dim rsRoam As DAO.Recordset
Dim rsRevenue As DAO.Recordset
Dim iErrorHandle As Integer

    iErrorHandle = ReadInUsageTable(PATH, USAGE)
End Function

Function ReadInUsageTable(UsageFilePath As String, UsageFileName As String) As Integer
Dim rsUsage As DAO.Recordset
Dim iUsageSht_StartRow As Long
Dim iUsageSht_StopRow As Long
Dim iLast_Row As Long
Dim I As Long
Dim ExcelApp As Excel.Application
Dim xlWrkBk As Excel.Workbook
Dim xlsht As Excel.Worksheet
Set ExcelApp = CreateObject("Excel.Application")
Set xlWrkBk = GetObject(UsageFilePath & "\" & UsageFileName)
Set xlsht = xlWrkBk.Worksheets(1)
With xlWrkBk
    If xlsht.Range("B1").Value > 0 Then
        iLast_Row = xlsht.Range("B1").End(xlDown).Row
        iUsageSht_StopRow = iLast_Row - 1 + iUsageSht_StartRow - 1
    Else
        MsgBox "There seems to be a problem with the SUB.xls report.  Please check and make sure that it is as required", vbOKOnly, "SUB.xls"
        End
    End If
End With
   
DoCmd.RunSQL "delete * from Source_Usage"
    Set rsUsage = CurrentDb.OpenRecordset("Source_Usage_Advance", dbOpenDynaset)
    With xlsht
    For I = 2 To iLast_Row
        rsUsage.AddNew
        rsUsage!BAN = .Cells(I, 1).Value
        rsUsage!SUBSCRIBER_NO = .Cells(I, 2).Value
        rsUsage!BILL_YEAR = .Cells(I, 4).Value
        rsUsage!BILL_MONTH = .Cells(I, 5).Value
        rsUsage!BILL_CYCLE = .Cells(I, 6).Value
        rsUsage!PRICE_PLAN_CODE = .Cells(I, 7).Value
        rsUsage!SPECIAL_NUM_TYPE = .Cells(I, 8).Value
        rsUsage!AIRTIME_FEATURE_CD = .Cells(I, 9).Value
        rsUsage!ACTION_DIRECTION_CD = .Cells(I, 10).Value
        rsUsage!CALL_TYPE = .Cells(I, 14).Value
        rsUsage!PERIOD_LEVEL_CODE = .Cells(I, 16).Value
        rsUsage!CTN_MINS_LOCAL = .Cells(I, 19).Value
        rsUsage!NUM_CALLS_LOCAL = .Cells(I, 20).Value
        rsUsage!CHRG_AMT_LOCAL = .Cells(I, 21).Value
        rsUsage!CTN_MINS_FM = .Cells(I, 35).Value
        rsUsage.Update
    Next
    End With
   
    Set rsUsage = Nothing
    xlWrkBk.Close False
End Function

Private Sub ReadIn_CMD_Click()
Open "D:\HFH Doc\programing\PPA\update\VBA\06_29_2009\timeused.txt" For Append As #1
Print #1, Time
DAOFromExcelIntoAccessTable
Print #1, Time
Close #1
CurrentDb.Close
End Sub


原EXCEL 数据有10M 左右,不方便上传。请自己做个例表TEST,看看程序结构上有什么不妥。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-7-16 14:39:48 | 只看该作者
看不太懂,有说明没有啊!
3#
发表于 2009-7-16 16:39:39 | 只看该作者
可以用了,就是导入数据太慢了!
4#
发表于 2009-7-16 20:45:29 | 只看该作者
只接用获取外部数据-导入会不会快呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-12 03:00 , Processed in 0.078133 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表