一个excel+SQL方法实例详细注释

来源:互联网 发布:linux中安装telnet 编辑:程序博客网 时间:2024/04/29 23:08

我要在工作薄“SHEET1”中,汇总另一工作薄(此工作薄不需要打开):“SHEET1(A1:A100)中的数据,并显示出来,这段代码如何写?  

 用excel+SQL方法

Private Sub CommandButton1_Click()
Set conn = CreateObject("ADODB.Connection")  

'conn是建立的连接对象,用open打开

' 通过 CreateObject("ADODB.Connection")  这一句建立了一个数据库连接对象conn

' 在工程中就不再需要引用“Microsot ActiveX Data Objects 2.0 Library“ 对象

'设置对象 conn 为一个新的 ADO 链接实例,也可以用 set conn = New ADODB.Connection。
conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "/001.xls"
Sql = "select sum(分数) from [sheet1$]"
Sheets(1).[a2].CopyFromRecordset conn.Execute(Sql) 

' Execute是执行SQL查询语句的意思
conn.Close: Set conn = Nothing           ' conn.Close表示关闭conn连接

' Set conn = Nothing  是把连接对象conn置空,不然你退出了文件,但数据库还没有关闭


End Sub

请把这段代码的实现原理分析一下好吗?

conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "/001.xls"能把这段含义具体解释一下吗?
这里的dbq的作用? 

dsn是缩写,data source name数据库名 是 excel file

dbq 也是缩写,data base query 意思是数据库查询,后接源库文件名  001.xls

代码中长单词怎么记住的?

比如copyfromrecordset可以拆开记忆,copy、from、recordset 这三个单词意思知道吧,就是”复制、从、记录集“

Sql = "select sum(分数) from [sheet1$]"这里加"分数"两字什么作用?

SQL一般结构是select 字段 from 表,意思是从指定的表中查询字段,字段的理解可以是:表 中的列名

分数 是001.xls文件的sheet1第一行A列的字段名,SQL一般以字段来识别每列数据

为什么要用复制的对象引用过来计算呢?

因为Sql语句只是对源数据库的字段找到了符合条件的的数据,但不会自动复制到汇总表来,所以需要复制copy

注意 这里的 [sheet1$]"   ,001文件的数据存放地上sheet1表,应当用方括号并加上$

如果源数据文件001不是excel,而是Access,则引用表时,不需要加方括号,也不要$

Sheets(1).[a2].CopyFromRecordset conn.Execute(Sql)如果我把A2换成B5或其它,那就是说显示在B5单元格的汇总数,对吗?还有,这里Execute表示什么作用?

**************************************************************************

我想把A2:B5数据汇总可以实现吗?公式做怎样的修改?

请测试一下,只统计A1:A5之和

Set conn = CreateObject("ADODB.Connection")
conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "/001.xls"
Sql = "select sum(分数) from [sheet1$a1:a5]"
Sheets(1).[c2].CopyFromRecordset conn.Execute(Sql)
conn.Close: Set conn = Nothing

如果不要字段也可以,那么在打开语句中加上:hdr=no

这样没有分数字段也可实现

************************************************************************************

没有字段的例子,注意我这里已经001文件改为002.xls ,而且把分数字段删除了

Private Sub CommandButton3_Click()
Set conn = CreateObject("ADODB.Connection")
conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no;';data source=" & ThisWorkbook.Path & "/002.xls"
Sql = "select sum(f1) from [sheet1$a1:a10]"
Sheets(1).[e1].CopyFromRecordset conn.Execute(Sql)
conn.Close: Set conn = Nothing

End Sub

SQL语句我换了形式,而且加上了hdr=no,即无需字段,而且我在SQL中用了sum(f1),f1表示第一列数据

[sheet1$a1:a10]"是只求a1:a10区域的和

*************************************************************************

用msgbox显示查询结果

Private Sub CommandButton2_Click()
Set conn = CreateObject("ADODB.Connection")
Set rr = CreateObject("ADODB.recordset")
conn.Open "dsn=excel files;dbq=" & ThisWorkbook.Path & "/001.xls"
Sql = "select sum(分数) from [sheet1$a1:a5]"
Sheets(1).[d2].CopyFromRecordset conn.Execute(Sql)
rr.Open Sql, conn, 3, 1, 1
MsgBox rr.fields(0)
conn.Close: Set conn = Nothing
End Sub

原创粉丝点击