1. VBA 调用sql 的语句
缺少引用。
工具-->引用
然后把 Microsoft ActiveX Data Objects 2.x Library 勾选上。
2. access2013 VBA中怎样运行sql语句
sql在vba里的运用比较专业需要认真的学习研究一下,给你详细一点的资料和一个实例
你自己学着模拟练习一下
一、简单的查询
1、建立查询
数据选项卡—现有连接—浏览更多或者按快捷键Alt+D+D+D
选择要查询的Excel文件和文件中的的工作表,就可以将相应工作表的数据取过来。表现形式可以是表,也可以是数据透视表等。
2、SQL查询语句
如果是挑选部分列数据,就需要用SQL语句(取所有数据也可以用SQL语句)。
建立查询时,选择工作表后不要点击“确定”按钮,而是先点击“属性”按钮,弹出窗口中选择“定义”选项卡,在命令文本框中输入SQL查询语句(原来的工作表名称,表示所有数据,可以认为是取所有数据的SQL的一种特殊写法):
Select字段列表from[工作表名$]
--其中字段列表就是需要选择的字段,数据源用工作表名称加“$“再用中括号括起来,例如:
selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$]
select*from[Sheet1$]--取所有数据
偶然发现,字段名不能用no,估计是保留字,如需要,用中括号括起来,例如:
select[no],prov_name,city_name,xs_mc,xs_codefrom[Sheet1$]
字段名中含有特殊字符的也要用中括号括起来,如/?空格等
Excel查询没有伪表概念,对于表达式的计算直接用select既可,例如
Select23+45--返回68
Selectdate()--返回当前日期
3、修改查询语句
方法:点击右键—弹出菜单—表格—编辑查询
通过修改SQL语句可以变更所取的数据,也可以将建立查询时的简单SQL语句改成复杂的SQL语句。
字段名更换:如果想换个字段名,用“as新字段名”既可,例如:
selectprov_nameas省,city_nameas城市,xs_mcas县市,xs_codeas编码from[Sheet1$]
非正常表格:数据区域(含字段名)不在第一行
需要在工作表名称后面指定数据范围,例如:
selectprov_name,city_name,xs_mc,xs_codefrom[Sheet1$B2:G2000]
或者,将数据块定义为一个名称,假设定义为mydata,SQL语句如下:
selectprov_name,city_name,xs_mc,xs_codefrommydata
注意:使用名称时没有$符号,也没有方括号了。
数据更新:数据源发生变化,需要更新数据,方法:点击右键—弹出菜单—刷新
意外:如果打开Excel文件后弹出不是选择工作表的窗口而是一个“数据连接属性”窗口,可以关闭这个窗口,然后将Excel应用极小化再极大化方式消除,或者在弹出选择文件的窗口时,退回上一级文件夹,删除那个Queries文件夹,就行了。
二、复杂的查询
1、多表联合
相同结构的多个表合并到一起,用union连接SQL语句,例如:
Select*from[财务部$]unionallSelect*from[市场部$]
Union是去重复的,即相同的记录保留一个(类似distinct),Unionall则是直接相加两个结果,不去重复。
增加一个部门字段可以将查询结果中的区分开来,以便知道数据来自哪个表。Union的三个一致,即:字段的数量、类型和顺序。例如:
Select“财务部”as部门,*from[财务部$]unionallSelect“市场部”as部门,*from[市场部$]
多表联合查询
Select*from[部门$]bm,[员工$]ygwherebm.部门编码=yg.部门编码跨工作簿查询果数据不仅来自不同的工作表,还来自不同的文件,一样可以用union联合,例如:
Select“分公司1”as公司,“财务部”as部门,*from[F:SQL之Excel应用分公司1.xlsx].[财务部$]unionall
Select“分公司1”as公司,“市场部”as部门,*from[F:SQL之Excel应用分公司1.xlsx].[市场部$]unionall
Select“分公司2”as公司,“财务部”as部门,*from[F:SQL之Excel应用分公司2.xlsx].[财务部$]unionall
Select“分公司2”as公司,“市场部”as部门,*from[F:SQL之Excel应用分公司2.xlsx].[市场部$]
因为SQL中已经指定了文件名和表名,所以建立连接时连接谁并不重要,这种情况下,建立连接的时候就连接自己,然后再改写SQL语句。
SubUsingSQL()
DimSqlAsString
DimjAsInteger
DimrAsInteger
DimCnnAsADODB.Connection
DimrsAsADODB.Recordset
WithSheet1
.Cells.Clear
SetCnn=NewADODB.Connection
WithCnn
.Provider="Microsoft.ACE.OLEDB.12.0"
.ConnectionString="ExtendedProperties=Excel12.0;"_
&"DataSource="&ThisWorkbook.Path&"数据.xlsx"
.Open
EndWith
Setrs=NewADODB.Recordset
Sql="Select*From[Sheet1$]"
rs.OpenSql,Cnn,adOpenKeyset,adLockOptimistic
Forj=0Tors.Fields.Count-1
.Cells(1,j+1)=rs.Fields(j).Name
Next
r=.Cells(.Rows.Count,1).End(xlUp).Row
.Range("A"&r+1).CopyFromRecordsetrs
EndWith
rs.Close
Cnn.Close
Setrs=Nothing
SetCnn=Nothing
EndSub
3. excel vba 怎么同时执行多条语句,并且其中一条语句需要返回结果,如update sysda
1)VBA中,写在同一行之内的多条语句,可以用冒号:分开。这是你所说的同时执行多条语句的意思么?
2)你写的是sql语句,更新查询。UPDATE语句可以同时更新多个字段多条记录,或者这才是你所说的同时执行多条语句的意思?如:
update sysdata set s1=-1, S2=0 where ID<11
执行的效果是将表中ID从1到10的记录的s1字段值更新为-1,s2字段值更新为0
4. 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
5. 用vb连接access数据库以后,如何一次性执行多条sql语句
使用ACCESS查询对象是无法一次运行多个
SQL语句
的,但是通过ACCESS
VBA代码可以实现一次运行多个SQL语句。下面是具体实现方案;
1)新建一个ACCESS窗体,窗体添加一个命令按钮;
2)编写按钮单击事件过程
Private
Sub
Command1_Click()Dim
strSql
as
stringstrSQL="Update
Policy
SET
LatestDueDate=Year(Date())
&
'-'
&
Format(PolicyDate,'mm-dd')"
DoCmd.RunSql
strSQL
'运行第一个更新语句strSQL="UPDATE
Policy
SET
LatestDueDate=
DateAdd('yyyy',1,LatestDueDate)
WHERE
(((Month(Date())-Month(LatestDueDate))
>
6)
and(PaymentMode='H'))"
DoCmd.RunSql
strSQL
'运行第二个更新语句
End
Sub
跟着点击该命令按钮就可以一次执行两条语句了。
6. VBA可以读取.sql文件来执行里面的多条语句吗
看你在什么环境下面用vba,
一般来说,将文本内容读出来,传递给给vba中设置sql语句的变量即可.
比如excel的例子:
set
rsread
=
new
adodb.recordset
sqlstr
=
你所读到的文本文件内容
rsread.open
sqlstr,
cnn,
adopenkeyset,
adlockoptimistic
rsread.movefirst
7. VBA SQL语句请教
就5个表,既然用SQL,就不用FOR EACH工作循环了吧,直接写结果,虽然看起来复杂,但是结果简单命令,机器执行也更快:
selectcasesType
case1
sExcel_select="(Select"&sTitle&"From[1序数据$]"&sWhere&")"_
&"unionall(Select"&sTitle&"From[2序数据$]"&sWhere&")"
case2
sExcel_select="(Select"&sTitle&"From[3序数据$]"&sWhere&")"
dselect
8. VBA 怎样执行多个SQL语句
Dim conn as New SqlConnection(连接字符串)
Dim cmd as new sqlcommand
cmd.CommandType = Text 或者SqlProcere
cmd.Connection = conn
cmd.TimeOut= 30
cmd.CommandText = "Update ........." 或者 "Select ..... "
'' 用来执行操作用这个
cmd.ExecuteNoQuery
'' 得到数据用这个
Dim table as new datatable
Dim ad as new DataAdapter (cmd)
ad.Fill(table)
控件.DataSource = table
如果是多条操作的话,需要用到SqlTransaction, 即事务操作。
Dim Tran as SqlTransaction = conn.BeginTransaction
...
....
'' 执行完毕后
Tran.Commit()
''如果执行有错误
Tran.Rollback()