求助,EXCEL通过VBA *** 作SQL数据库

求助,EXCEL通过VBA *** 作SQL数据库,第1张

Sub 按钮1_Click()

Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量;sht 为excel工作表对象变量,指向某一工作表

'Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用

'Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表

‘工具 ---〉引用 ---〉Microsoft ActiveX data objects ....

'下面两句就不需要增加引用ADO

Set cn = CreateObject("Adodb.Connection")

Set rs = CreateObject("Adodb.Recordset")

Dim strCn As String, strSQL As String '字符串变量

Dim strCond As String

strCn = "Provider=sqloledbServer=R9HDET7Database=dbnameUid=usernamePwd=password" '定义数据库链接字符串

'下面的语句将读取数据表数据,并将它保存到excel工作表中:工作表为一张两维表,记录集也是一张两维表

strSQL = "select CUSTOMER_NAME from VSC_BI_CUSTOMER " '定义SQL查询命令字符串

cn.Open strCn '与数据库建立连接,如果成功,返回连接对象cn

rs.Open strSQL, cn '执行strSQL所含的SQL命令,结果保存在rs记录集对象中

i = 2

Set sht = ThisWorkbook.Worksheets("Test") '把sht指向当前工作簿的Test工作表

Do While Not rs.EOF '当数据指针未移到记录集末尾时,循环下列 *** 作

sht.Cells(i, 1) = rs("CUSTOMER_NAME") '把当前记录的字段1的值保存到sheet1工作表的第i行第1列

rs.MoveNext '把指针移向下一条记录

i = i + 1 'i加1,准备把下一记录相关字段的值保存到工作表的下一行

Loop '循环

rs.Close '关闭记录集,至此,程序将把某数据表的字段1保存在excel工作表sheet1的第1列,行数等于数据表的记录数

cn.Close '关闭数据库链接,释放资源

End Sub

VBA

连接

SQL

SERVER

数据库

实例:

Dim

strConn

As

String,

strSQL

As

String

Dim

conn

As

ADODB.Connection

Dim

ds

As

ADODB.Recordset

Dim

col

As

Integer

'连接数据库的字符串

strConn

=

"Provider=SQLOLEDB.1Persist

Security

Info=TrueUser

ID=[user]Password=[password]Initial

Catalog=[database]Data

Source=[数据库IP地址或数据库服务器名称]Connect

Timeout=720

"

'查询语句,如果sql语句很长可以用strSQL=strSQL+来连接分成多段的语句,如果语句很短可以只写在一行上。

strSQL

=

"select

*

from

Hy_KPI_Shop_Dept_WeekRpt

"

strSQL

=

strSQL+"where

sdate='2014-01-01'

order

by

sdate,shopid

"

Set

conn

=

New

ADODB.Connection

Set

ds

=

New

ADODB.Recordset

'打开数据库连接

conn.Open

strConn

'该句和数据库连接字符串处的Connect

Timeout=720,表示说如果语句运行时间很长,这两句可以延长vba的等待时间,没有这两句,vba往往会报查询超时。

conn.CommandTimeout

=

720

With

ds

'根据查询语句获得数据

.Open

strSQL,

conn

'自动控制加入所有列标题

For

col

=

0

To

ds.Fields.Count

-

1

'请注意Offset(0,

col)中的参数一定要正确,该句表示标题将会写在第一行,从A1单元格开始,如果不想写入标题行,可将下面这句注释掉。

Worksheets("门店各课KPI周报").Range("A1").Offset(0,

col).Value

=

ds.Fields(col).Name

Next

'加入所有行数据,该句表示查询结果将会写在第一行,从A1单元格开始,但是由于标题行写在第一行了,所以实际这一行从标题下的一行写入。

Worksheets("sheet1").Range("A1").Offset(1,

0).CopyFromRecordset

ds

End

With

'关闭数据库连接和清空资源

Set

ds

=

Nothing

conn.Close

Set

conn

=

Nothing


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6831445.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存