使用vba调用sql速度快吗?数据量大,直接把数据写在shtr里面调用速度好慢,请问有没有啥办法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用vba调用sql速度快吗?数据量大,直接把数据写在shtr里面调用速度好慢,请问有没有啥办法相关的知识,希望对你有一定的参考价值。
使用vba调用sql速度快吗?数据量大,直接把数据写在shtr里面调用速度好慢,请问有没有什么办法在调用能快速调用数据库里面的数据到vba里面来进行处理?
VBE 工具 引用,选中 Microsoft ActiveX Data Object 2.8 Library我不清楚是不是UFDATA_013_2008表的VENDOR列的数据,如果不是,你自己改一下SQL语句吧,sql = "select VENDOR from UFDATA_013_2008"
Sub SQL数据导入()
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim str As String
Dim sql As String
Dim i As Integer
str = "Provider=SQLOLEDB;Data Source=SQLSERVER服务器名或IP;DATABASE=数据库;UID=用户名;PWD=密码"
cn.Open str
Set rs = New ADODB.Recordset
sql = "select VENDOR from UFDATA_013_2008"
rs.Open sql, cn, adOpenStatic, adLockOptimistic
If Not rs.EOF Then
For i = 1 To rs.RecordCount
Sheet2.Cells(i, 1).Value = rs.Fields(0).Value
Next i
rs.MoveNext
End If
rs.Close
cn.Close
End Sub 参考技术A 把文件及具体要求发给我 要写代码最低10元追问
这是VBA瓶颈的事!不是钱的事!
追答哈哈,这方面我经验也不足。大数据量的,要试了以后才知道。
我只知道用字典比数组快10多倍。这个我试过。
VBA研究用SQL语句读取EXCEL数据例程
作者:iamlaosong
Excel工作表中的数据,可以直接处理,不过如果想快的话最好读入到数组处理。前面说过读入数组可以循环读取,也可以直接给数组赋值读取。虽然这个方式速度快,但只适合读取连续的列,对于分开的列,这种方法不可行,不过可以用SQL语句读取到记录集中,然后对记录集进行处理,看下面例程:
Sub tt()
Dim cnn2, rst2, cmd As Object
Dim sqls, sql1, stName As String
Set cnn2 = CreateObject("ADODB.Connection")
Set rst2 = CreateObject("ADODB.Recordset")
'Set cmd = CreateObject("ADODB.Command")
datfile = "身份证邮件名址1.xls" '文件名称
datFullName = ThisWorkbook.Path & "\\" & datfile
'cnnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=;Extended properties=Excel 8.0;Data Source=" & datFullName
cnnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Extended properties=Excel 8.0;Data Source=" & datFullName
cnn2.Open cnnstr
Windows(datfile).Activate
stName = ActiveSheet.Name
sqls = "SELECT 邮件号,收件人姓名 FROM [" & stName & "$]"
Debug.Print sqls
Set rst2 = cnn2.Execute(sqls)
While Not rst2.EOF
Debug.Print rst2(0) & rst2(1)
rst2.movenext
Wend
End Sub
几点说明:
1、本例程中被读取的数据文件“身份证邮件名址1.xls”是打开的,主要是为了取工作表名称。就读取数据本身而言,并不需要打开Excel文件,如果工作表名称是确定的,就可以不用打开;
2、默认工作表第一行是字段名,SQL语句中就是用这些字段名定位的,如程序中的“邮件号”、“收件人姓名”等。如果没有字段名,连接参数中需要增加HDR=NO;
3、连接参数中的“Extended properties=Excel 8.0;”也可以写成“Extended properties=Excel 5.0;”,其它上午数字都不行,这个是Excel的版本号,对应Excel97,对于Excel 97以上版本都用Excel 8.0 。这个扩展属性和前面的Provider配合使用,不同的版本对应不同的Provider。我的环境是Excel2007版,版本号是12.0,如果直接改成12.0会报错,提示:找不到可安装的ISAM,正确的写法是:
cnnstr = "Provider=Microsoft.Ace.OLEDB.12.0;Extended properties=Excel 12.0;Data Source=" & datFullName
Jet和Ace是两种不同的数据库驱动引擎,前者是早期版本使用的,现在都用Ace.
4、还有其他一些参数,如下:
参数HDR的值:
HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES
IMEX ( IMport EXport mode )设置:
IMEX 有三种模式:
0 is Export mode
1 is Import mode
2 is Linked mode (full update capabilities)
我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:
当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
意义如下:
0 ---输出模式;
1---输入模式;
2----链接模式(完全更新能力)
5、如果同时需要连接另一个Excel文件,如连接另一个文件中的表:
ryFullName = ThisWorkbook.Path & "\\" & ryfile
sql = "select a.org,b.code,b.name,b.type from [Sheet1$] a "
sql = sql + " left join [Excel 12.0;Database=" & ryfullName & ";].[Sheet1$] b on a.org=b.org "
Set rst = cnn.Execute(sql)
以上是关于使用vba调用sql速度快吗?数据量大,直接把数据写在shtr里面调用速度好慢,请问有没有啥办法的主要内容,如果未能解决你的问题,请参考以下文章