ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3215|回复: 7

[求助] 三种连接SQL数据库方法的速度为何天壤之别?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-3-1 19:45 | 显示全部楼层 |阅读模式
1:VBA+SQL 无源连接   返回数据总时间约7.4秒
2:VBA+SQL 有源连接   返回数据总时间不到7.3秒
3:VBA+Ms Query 有源连接  返回数据总时间不到1秒
4:VBA+SQL无源连接,分别建立连接,然后再返回数据,共3.4秒
请求路过朋友帮看看分析分析,为什么速度存在天壤之别?我想用VBA+SQL无源连接方式,可是速度太慢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-1 19:53 | 显示全部楼层
'方法1
Sub ConnectSQL()
    Dim StartTime
    StartTime = Timer
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim rsString As String
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    conn.ConnectionString = "Driver={sql server};server=peksapp04;uid=;pwd=;database=sanofi pasteur production;AutoTranslate=False"
    conn.Open
    rsString = "select No_ as Code,Name as Name_cn, [name 2] as Name_en from [Sanofi Pasteur$Vendor] where No_ like 'V-%' order by No_"
    rs.Open rsString, conn, 1, adLockReadOnly
    If rs.RecordCount > 0 Then
    '复制字段名
        For i = 1 To rs.Fields.Count
            Cells(1, i) = rs.Fields(i - 1).Name
        Next i
        
        '复制全部数据
        Range("A2").CopyFromRecordset rs
        '设置工作表格式
    End If
    '关闭记录集及数据库连接,并释放变量
    rs.Close
    conn.Close
    Set rs = Nothing
    Set cnn = Nothing
    MsgBox Timer - StartTime
End Sub

'方法2
Sub ConnectSQL2()'用此方法连接数据库前先需在在本机进行DSN数据源设置 此处设为"na”
    Dim StartTime
    StartTime = Timer
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim rsString As String
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    conn.ConnectionString = "DSN=na;uid=;pwd=;database=sanofi pasteur production;autotranslate=false"
    conn.Open
    rsString = "select No_ as Code,Name as Name_cn, [name 2] as Name_en from [Sanofi Pasteur$Vendor] where No_ like 'V-%' order by No_"
    rs.Open rsString, conn, 3, adLockReadOnly

    If rs.RecordCount > 0 Then
    '复制字段名
        For i = 1 To rs.Fields.Count
            Cells(1, i) = rs.Fields(i - 1).Name
        Next i
        
        '复制全部数据
        Range("A2").CopyFromRecordset rs
        '设置工作表格式
        
    End If
    '关闭记录集及数据库连接,并释放变量
    rs.Close
    conn.Close
    Set rs = Nothing
    Set cnn = Nothing
    MsgBox Timer - StartTime
End Sub

'方法3
Sub ConnectSQL3() '用此方法连接数据库前先需在在本机进行DSN数据源设置,然后在EXCEL中导入外部数据,选择设置好的数据源,然后进入MS QUERY中设置要返回的字段及条件。
    StartTime = Timer
    Dim rng As Range
    Set rng = Sheet4.Range("a4")
    rng.QueryTable.Refresh BackgroundQuery:=False
    Set rng = Nothing
    MsgBox Timer - StartTime
End Sub
'方法4
将方法1分拆二部分,先建立连接,再返回数据,将二次的时间相加得到总的返回数据时间

TA的精华主题

TA的得分主题

发表于 2012-3-1 20:08 | 显示全部楼层
自问,自答啊,不错,呵呵呵呵呵呵好

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-1 20:18 | 显示全部楼层
我是把代码放出来,让大家看看,为什么速度区别这么大?

谢谢大家了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-1 20:52 | 显示全部楼层
请见附件,大家快来帮我看看是为什么

三种连接SQL数据库方法的速度为何天壤之别?

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-1 20:53 | 显示全部楼层
见附件
三种连接SQL数据库方法的速度为何天壤之别?

SQL 远程无源代码连接.zip

22 Bytes, 下载次数: 71

附件

TA的精华主题

TA的得分主题

发表于 2013-12-18 17:14 | 显示全部楼层
额 怎么没有人回答呢?????我也想知道,最近做了一个特别慢,想要解决

TA的精华主题

TA的得分主题

发表于 2013-12-19 09:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
菜鸟路过。顶一下{:soso_e129:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 15:58 , Processed in 0.042447 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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