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
❷ vba sql查询
sql一般用在多条件查询,对数据库读写等。
1. VBA如何建立sql连接
A.在VBA Project 窗口中,“工具—引用—Microsoft ActiveX Data Objects 2.0 Library”,如下图所示
B. VBA语句
Private Sub CommandButton1_Click()
Dim cnn As ADODB.Connection’定义变量
Dim sql$, Stext$, i As Integer
Worksheets(3).Cells.Clear
Stext = IIf(TextBox1.Value = "", "*", TextBox1.Value)
Set cnn = CreateObject("adodb.connection")’生成对象
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName’打开数据库
If TextBox1 = "" Then
sql = "select * from [sheet2$]"’sql语句
Else
sql = "select * from [sheet2$] where 姓名 like '" & TextBox1.Value & "'"
End If
Worksheets(3).[a1].CopyFromRecordset cnn.Execute(sql)’执行sql语句
cnn.Close
Set cnn = Nothing
End Sub
2. sub text()
Dim cnn As ADODB.Connection’定义变量
Dim rs as adodb.recordset
Set cnn = CreateObject("adodb.connection")’生成对象,若定义变量时为Dim cnn As New ADODB.Connection,此句可省略
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullName’打开数据库
sql = "select * from [sheet2$] where 姓名 like '" & TextBox1.Value & "'"
rs.open sql,cnn,adOpenKeyset.adLockOptimistic’生成查询记录,为后面出书数据准备
Worksheets(3).[a1].CopyFromRecordset rs
end sub
________________________________________________________________________
以下根据网络整理
2 Select SQL语句
SELECT * FROM table_name WHERE column1 = xxx [AND column2 > yyy] [OR column3 <> zzz]
'*'表示全部的栏位都列出来,如果不全部列出,则可以写字段名称如 学号,姓名……;WHERE 之后是接条件式,把符合条件的资料列出来,table_name如果为工作表名称,书写格式[工作表名$],下同。
SELECT column1,AVG(column2) FROM table_name GROUP BY column1 HAVING AVG(column2) > xxx
说明: 1.GROUP BY: 以column1 为一组计算 column2 的平均值必须和 AVG、SUM等整合性查询的关键字一起使用。2.HAVING : 必须和 GROUP BY 一起使用作为整合性的限制。
复合性的查询:SELECT * FROM table_name1 WHERE EXISTS (SELECT * FROM table_name2 WHERE conditions )
说明:1.WHERE 的 conditions 可以是另外一个的 query。2. 在此是指存在与否。
SELECT column1,columns2,...FROM table_name
说明:把table_name 的特定栏位资料全部列出来
SELECT COUNT (*) FROM table_name WHERE column_name = xxx
说明:查询符合条件的资料共有几笔。
1.计算出总和,所选的栏位必须是可数的数字形态。2.除此以外还有 AVG() 是计算
SELECT SUM(column1) FROM table_name
说明:平均、MAX()、MIN()计算最大最小值的整合
SELECT * FROM table_name1 WHERE column1 BETWEEN xx AND yy
说明:BETWEEN 表示 column1 的值介于 xx 和 yy 之间。
3. update SQL语句
UPDATE table_name SET column1='xxx' WHERE conditoins
说明:1.更改某个栏位设定其值为'xxx'。
2.conditions 是所要符合的条件、若没有 WHERE 则整个 table 的那个栏位都会全部被更改。
4. deletesql语句
删除资料: DELETE FROM table_name WHERE conditions
说明:删除符合条件的资料。
说明:关于WHERE条件后面如果包含有日期的比较,不同数据库有不同的表达式
5.SQL中通配符用
• "%" 表示零个或多个,
• "_"表示任何单一字符
• [charlist] 字符列中的任何单一字符
• [^charlist] [!charlist] 不在字符列中的任何单一字符
• select * from databasename where fieldname like '%XX%'
• SELECT * FROM Persons WHERE City LIKE '[AOF]%'
• 从上面的 "Persons" 表中选取居住的城市以 "A" 或 "O" 或 "F" 开头的人
• SELECT * FROM Persons WHERE City LIKE '[!AOF]%'
• 从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "O" 或 "F" 开头的人
❸ 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
❹ ACCESS中VBA调用SQL语句的问题
ID不要打上单引号:
rsql = "UPDATE 员工表 set 备注 ='" & 员工备注.Value & "' WHERE ID =" & 员工选择框.ListIndex
如果还是不行,就再加上VAL转化一下试试:
rsql = "UPDATE 员工表 set 备注 ='" & 员工备注.Value & "' WHERE ID =" & Val(员工选择框.ListIndex)
❺ 用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”
然后就就可以正常运行了。
❻ 如何在VBA中执行SQL语句
Set cnn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
'cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Extended Properties=Excel 8.0;" _
& "Data Source=" & ThisWorkbook.FullName
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Extended Properties=Excel 8.0;" _
& "Data Source=" & ThisWorkbook.FullName
Debug.Print ThisWorkbook.FullName
str1 = ActiveSheet.Range("A2")
'strSql = "Select * FROM [数据库$] Where 商品名称 like '%" & str1 & "%'"
❼ 如何在access的VBA中,执行查询类的sql命令
在组合框的change事件里写类似如下代码:
以下代码的意思是:combo是显示供应商的一个组合框,通过选择供应商,在Text4里面显示该供应商的总订单数。
PrivateSubCombo0_Change()
Dim供应商ID
供应商ID=Combo0.Value
DimsqlAsString,rsAsRecordset
sql="selectcount(*)ascntfrom[采购订单]where[供应商ID]="&供应商ID'查询的SQL语句。
Setrs=CurrentDb.OpenRecordset(sql)
Text4.SetFocus
Text4.Text=rs.Fields(0)
EndSub
❽ Excel VBA 执行操作SQL
类似这样
'建立连接
Set cnn = New ADODB.Connection
With cnn
.Provider ="Microsoft.ACE.OLEDB.12.0;Extended Properties=excel 12.0"
.Open "你的工作簿路径" &"\你的工作簿名称.xls"
End With
sqls = "select * from [sheet1$]" ' SQL语句
Set rst = cnn.Execute(sqls)
Sheets("sheet3").Range("A1").CopyFromRecordsetrst
❾ 如何在Excel,VBA中执行SQL语句
sub test()
Dim Conn As New ADODB.Connection
Dim strConn As String
Dim strSQL As String
Dim rs As New ADODB.Recordset
strConn = "Provider=sqloledb;Server=192.168.1.111;Database=db2014;Uid=用户名;Pwd=密码;"
Conn.Open strConn
Max_row = Range("A1").CurrentRegion.Rows.Count
for i=1 to Max_row
strSQL = "select name from sales2014 where id='" & range("A" & i).value & "'"
Conn.Execute strSQL
rs.Open strSQL, Conn, 1, 1
range("B" & i).value= rs(0)
rs.Close
Set rs = Nothing
next i
'关闭数据库
Conn.Close
end sub
❿ VBA可以执行SQL文件么,求解
VBA可以执行SQL文件
Set rsRead = New ADODB.Recordset
sqlstr = 你所读到的文本文件内容
rsRead.Open sqlstr, cnn, adOpenKeyset, adLockOptimistic
rsRead.MoveFirst