1、基本上所有的数据库都有对应的写法(有些数据库是要装连接驱动才能连),比如"Provider=Microsoft.Jet.OLEDB.4.0(用来连接access)或者provider =MSDASQL,而且每种数据库也可能会有多种连接方法(Provider意即数据库引擎),常见的有下面这些
Provider 代码 Provider
ADSDSOObject Active Directory Services
Microsoft.Jet.OLEDB.4.0 Microsoft Jet databases
MSDAIPP.DSO.1 Microsoft Internet Publishing
MSDAORA Oracle databases
MSDAOSP Simple text files
MSDASQL Microsoft OLE DB provider for ODBC
MSDataShape Microsoft Data Shape
MSPersist Locally saved files
SQLOLEDB Microsoft SQL Server
2、参见http://www.w3school.com.cn/ado/met_conn_open.asp#connectoptionenum
3、这样就可以对book1.xlsx中的数据使用sql语法进行操作
4、当你需要返回结果的,比如说你要查询数据库符合某个条件的有几条记录,或者说取出数据库中符合条件的一批记录的时候就要用数据集,单一的conn.execute只能执行操作,不能返回数据,必须配合结果集使用才可取回数据。
2. 求助,EXCEL通过VBA操作SQL数据库
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=sqloledb;Server=R9HDET7;Database=dbname;Uid=username;Pwd=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
3. vba连接SQL数据库方法
如下:自己改一下:
Subaa()
DimcnAsNewADODB.Connection
DimrsAsNewRecordset
Str1="select区域,内=SUM(casewhen新替换区内外='替换区内'then1else0end),外=SUM(casewhen新替换区内外='替换区外'then1else0end)from宏站groupby区域"
strcn="Provider=sqloledb;Database=test;Uid=sa;Pwd=30687724;datasource=127.0.0.1,1433;"
cn.Openstrcn
rs.OpenStr1,cn
Dimi
Fori=1Tors.Fields.Count
Cells(1,i)=rs.Fields(i-1).Name’FIELDS是从0开始的,所以这里要-1
Range("a2").CopyFromRecordsetrs
Nexti
4. 用vba如何连接网上的sql数据库
代码如下:有问题,发网络消息给我。
在Microsoft visual basic中,工具-引用 Microsoft ActiveX Data Objects 2...选一个高版本的
Dim conn As New ADODB.Connection
connStr = "Driver={SQL Server};DataBase=test;Server=(local);UID=sa;PWD=123"
conn.Open connStr '连接数据库
Dim rs As New Recordset
sql = "select * from a" '查看表a
rs.Open sql, conn, 3, 3
Do While Not rs.EOF '循环表a的内容
MsgBox (rs("field1")) '显示表中field1字段内容
rs.MoveNext
Loop
'connStr = "Driver={SQL Server};DataBase=test;Server=(local);UID=sa;PWD=123"
'test是数据库名
'(local)是服务器名或IP地址,可以:192.168.1.1,可以是:www.sina.com.cn
'sa是数据库用户
'123是数据库用户密码
5. Excel 求助,如何使用VBA实现远程访问SQL数据库
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.1;Persist
Security
Info=True;User
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
6. Excel VBA 连接SQL数据库后的操作。
呵呵,以前就帮人家解决过这个,请看下面的代码,有注释的!
Private Sub CommandButton5_Click()
Dim Conn As New ADODB.Connection '定义ADODB连接对象
Dim ConnStr As String '定义连接字符串
Dim xiao As String
xiao = ComData.Text
'对于SQL 2008,如果以IP方式访问服务器,必须要启动SQL Server Browser服务,如果是Express版本,要以“IP(计算机名)\实例名”方式访问
ConnStr = txtData.Text
Dim Records As New ADODB.Recordset '定义ADODB对象的记录集
Dim Sheet As Worksheet '定义工作表
Set Sheet = ThisWorkbook.Worksheets("Sheet2") '给变量Sheet赋值,注意:是工作簿中索引为1的那个表(通常一个新的工作簿Sheet1的索引为1)
'Sheet.Name = "Data" '把Sheet名称改为Data
Sheet.Cells.Clear '清空表中原有的数据
'连接状态是打开就不在进行Open操作
Conn.Open ConnStr
Dim SQLStr As String '要执行的SQL语句
SQLStr = "select * from Shift_Code where Club='" + xiao + "'" '可以执行更复杂的SQL语句
Records.Open SQLStr, Conn, adOpenStatic, adLockBatchOptimistic '读取SQL查询结果到Records记录集
'Records.Open
Dim i, j, TotalRows, TotalColumns As Integer
j = 0
TotalRows = Records.RecordCount
TotalColumns = Records.Fields.Count
'下面的循环把表头(即列名)写到Excel表的第一行
For i = 0 To TotalColumns - 1
Sheet2.Cells(1, i + 1) = Records.Fields(i).Name
Next
'下面的循环把查询结果写到Excel表中
Do While Not Records.EOF
For i = 0 To TotalColumns - 1
Sheet2.Cells(j + 2, i + 1) = Records.Fields(i).Value
Next
Records.MoveNext
j = j + 1
Loop
Records.Close '关闭记录集
Conn.Close '关闭连接
Set Records = Nothing '清空对象
Set Conn = Nothing '清空对象
End Sub
有什么不懂的话Hi我!
7. 用vba如何使用sql
一、界面设计
各控件名称属性分别为:label1 、text1 、label2、text2、commandok、cmdcancel
代码设计如下:
'首先添加一个模块,写上以下通用声明和Sub main():
Public conn As ADODB.Connection '通用(声明)
Sub main()
Set conn = New ADODB.Connection '通用(main)
conn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;" _
+ "User ID=sa;password=123;Initial Catalog=denglu;Data Source=127.0.0.1" '连接数据库代码
conn.Open
frmLogin.Show '首先显示登录界面。也可以在工程属性中设置启动对象为Sub main()或者frmlogin窗体
End Sub
'在Frmlogin 代码窗口,为cmdok控件写以下代码:
Private Sub cmdok_Click()
If text1.Text = "" Then
MsgBox "用户名不能为空!", vbOKOnly + vbInformation, "友情提示"
text1.SetFocus
Exit Sub '若用户名文本框内为空,则出现提示框
End If
If text2.Text = "" Then
MsgBox "密码不能为空!", vbOKOnly + vbInformation, "友情提示"
text2.SetFocus
Exit Sub '若输入密码文本框为空,也出现提示框
End If
Dim strSQl As String
strSQl = "select * from User1 where username='" & Trim$(text1.Text) & "' and pwd='" & Trim$(text2.Text) & "' "
'书写SQL代码,查询User1表中是否存在窗体中用户输入的信息。
Dim str As New ADODB.Recordset
Set str = New ADODB.Recordset
str.CursorLocation = adUseClient
str.Open strSQl, conn, adOpenStatic, adLockReadOnly
With str
If .State = adStateOpen Then .Close
.Open strSQl
If .EOF Then
Try_times = Try_times + 1
If Try_times >= 3 Then
MsgBox "您已连续三次输入错误,系统将自动关闭", vbOKOnly + vbCritical, "警告"
Unload Me '若用户连续输入3次错误密码,则系统关闭
Else
MsgBox "对不起,用户名不存在或密码错误 !", vbOKOnly + vbQuestion, "警告"
text1.SetFocus
text1.Text = ""
text2.Text = ""
End If
Else
Unload Me '若登录成功,则隐藏当前窗体
Form2.Show '然后显示Form窗体
End If
End With
End Sub
Private Sub cmdCancel_Click()
End '若单击Cmdcel按钮,则结束应用程序
End Sub
运行中存在的问题:
代码中有Dim conn As adodb.connection,运行时显示"用户定义类型未定义"
解决方法:点击“工程”--“引用”找到“Microsoft ActiveX Data Object 2.6”
然后就就可以正常运行了。
8. VBA 怎样调用sql的语句
Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据库信息;请先添加ADO引用
Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表
Dim strCn As String, strSQL As String '字符串变量
Dim i As Integer, j As Integer, sht As Worksheet
strCn = "Provider=SQLOLEDB.1;Password=psw;Persist Security Info=True;User ID=userid;Initial Catalog=hrlink ;Data Source=127.0.0.1"
strSQL = "select * from table"
cn.Open strCn
rs.Open strSQL, cn